diff --git a/.gitignore b/.gitignore index 4243b5e..5c8907c 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ test-results/ tools/ builds/ assets/ -tests/volumes \ No newline at end of file +tests/volumes +CLAUDE.md \ No newline at end of file diff --git a/.npmignore b/.npmignore index 28b6dae..74b69ae 100644 --- a/.npmignore +++ b/.npmignore @@ -4,4 +4,13 @@ src package-*.json scripts patches -webendpoint-cpp \ No newline at end of file +webendpoint-cpp +tests +**/__tests__ +**/__mocks__ +dist/assets +dist/bundle +dist/**/__tests__ +dist/**/__mocks__ +assets/*.js +assets/privmx-endpoint-web.js \ No newline at end of file diff --git a/drivers/privmx-webendpoint-drv-context/.gitignore b/drivers/privmx-webendpoint-drv-context/.gitignore deleted file mode 100644 index 641a355..0000000 --- a/drivers/privmx-webendpoint-drv-context/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -dist/ -node_modules/ -out/ -*.js \ No newline at end of file diff --git a/drivers/privmx-webendpoint-drv-context/LICENSE.md b/drivers/privmx-webendpoint-drv-context/LICENSE.md deleted file mode 100644 index a5659ac..0000000 --- a/drivers/privmx-webendpoint-drv-context/LICENSE.md +++ /dev/null @@ -1,76 +0,0 @@ - -# PrivMX Free License - -ver. 1.0, 18.10.2024 - -This document contains information about the legal rules of using PrivMX Software. It is a binding agreement, which means that as a User of PrivMX Software, you are obliged to comply with it. - -In this document, we use the term PrivMX Software – a general name describing a software system created by us, consisting of, among others, PrivMX Bridge and PrivMX Endpoint. PrivMX Bridge is a server-side component which is used together with PrivMX Endpoint - programming libraries and tools which are the client-side part of the PrivMX Software. - -The license document also uses the concept of PrivMX Solution, which is a PrivMX Bridge runtime structure, enabling one programming solution (e.g., one application) to use PrivMX Software functions. - -## The contract is concluded between us, that is: - -Simplito sp. z o.o. with its registered office in Toruń, Republic of Poland, address: Grudziądzka 1-3, 87-100 Toruń, entered into the Register of Entrepreneurs of the National Court Registry by the District Court in Toruń, VIIth Commercial Division of the National Court Registry under KRS number: 0000305883, - -and any User of PrivMX Software – you become one if you download, install, or use PrivMX Software. This includes, in particular, installing PrivMX Software within your own IT infrastructure in order to use it. You are also a User when you access source code of PrivMX Software or integrate it with other solutions. - -## Using PrivMX Software within an Organization - -If you perform any of these activities involving PrivMX Software, in connection with your activity in an Organization, then the User, and therefore a party to the license agreement, is that Organization. If we use the term Organization in this agreement, we mean any legal person, organized group of people, or organizational unit (whether in form of national government, local government, or private entity) – e.g., enterprise, company, governmental authority, foundation, religious association, nongovernmental organization, school, or scientific organization. - -In this case, by accepting the terms of this license agreement, you state that you are authorized to enter into this license agreement on behalf of your Organization. - -By activity within the Organization, we mean in particular the use of PrivMX Software in the creation or development of IT solutions used in the Organization, the creation of other commercial solutions utilizing PrivMX Software, testing PrivMX Software due to its potential use within the Organization, conducting research activities with PrivMX Software within the Organization. - -If in this agreement we use terms such as we, us, our, ours, it refers to Simplito sp. z o.o. - -If in this agreement we use terms such as you, your, yours, etc., it refers to the User who is a party to this license agreement – either an individual or an Organization. - -## What you can do with PrivMX Software - -As part of the license granted to you to use PrivMX Software, you may use it for your permissible personal use. This means that you have the right, acting as an individual, to use PrivMX Software for your own personal purposes, e.g. to create solutions aimed at contacting family or friends, or to test PrivMX Software functions in regards to your personal interests, knowledge development or individual research activities. - -You may modify PrivMX Software and its source code for your own needs. - -You can use multiple PrivMX Solutions under the terms of this license, however you are obliged to meet the requirements of the license in each case. - -## What you can’t do with PrivMX Software - -With the exception described below in the next paragraph, you may not use PrivMX Software for commercial purposes. We understand commercial purposes as any activities related to PrivMX Software that meet at least one of the following criteria: -* are aimed at making profit – e.g., creation of your own IT solutions using PrivMX Software and offering them to third parties, -* are used for the internal needs of the Organization – e.g., for communication within the Organization, communication with its customers or other people who interact with the Organization in any way, -* they are used to achieve other objectives of the Organization – e.g., development and research activities, including the creation of its own products or services. - -If you want to use PrivMX Software commercially, you are obliged to purchase a separate commercial license. Detailed information regarding this matter can be found at privmx.com. - -As the User of PrivMX Software, you may not rent, license, distribute, transfer to public repositories, copy for sale, or publish PrivMX Software, its source code and any related materials, derivative works, modified versions and rights. - -You may also not provide PrivMX Software hosting services to third parties. - -## Exception - -You or your Organization can use PrivMX Software in order to carry out research or development activities related to the creation of your original IT solutions at the stage of development and internal testing. You may do so only until making a given solution production-ready - public or available to customers, members of your own staff, or other end users and 3rd parties. - -## Copyright notice - -We have full copyright to PrivMX Software. We have the right to decide on its distribution, modification, development, or licensing. - -## Responsibility - -Unless otherwise required by applicable law or otherwise agreed upon in writing, PrivMX Software is provided on an "as is" basis. - -Other than as provided in this agreement, we make no other warranties, express or implied, and hereby disclaim all implied warranties, including the ones regarding the operation of PrivMX Software. - -You are solely responsible for evaluating whether your use of PrivMX Software is fit for your particular purposes. - -Our liability for damages resulting from the use of PrivMX Software is excluded to the maximum extent permitted by applicable law. Accordingly, we will not be liable to you under any circumstances for any damages, including actual damages or lost profits, that result from the use of PrivMX Software (including damages resulting from damage to the reputation of the company, errors of other computer programs, malfunction of IT systems), even if we have been advised of the possibility of such damages. - -## Other provisions - -The license indicated in this agreement is granted without territorial limitations, in a non-exclusive, free, and indefinite period. - -We have the right to conduct activities aimed at verifying that your use of PrivMX Software is in accordance with the content of the license granted to you. - -The license is governed by the laws of the Republic of Poland. The license is subject to the jurisdiction of Polish courts. Any disputes related to the license will be resolved by the common courts having jurisdiction over the registered office of our company, unless specific provisions of law say otherwise. - diff --git a/drivers/privmx-webendpoint-drv-context/README.md b/drivers/privmx-webendpoint-drv-context/README.md deleted file mode 100644 index 95aee10..0000000 --- a/drivers/privmx-webendpoint-drv-context/README.md +++ /dev/null @@ -1,2 +0,0 @@ -## PrivMX WebEndpoint Driver Context -Library used as the cryptographic API running in a web browser context for the calls from the PrivMX Endpoint WASM module. diff --git a/drivers/privmx-webendpoint-drv-context/package-lock.json b/drivers/privmx-webendpoint-drv-context/package-lock.json deleted file mode 100644 index bbe3e2c..0000000 --- a/drivers/privmx-webendpoint-drv-context/package-lock.json +++ /dev/null @@ -1,3503 +0,0 @@ -{ - "name": "privmx-driver-web-context", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "privmx-driver-web-context", - "version": "1.0.0", - "license": "PrivMX Free License", - "dependencies": { - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18", - "@types/node": "^22.7.9", - "browserify": "^17.0.0", - "buffer": "^6.0.3", - "buffer-browserify": "^0.2.5", - "crypto-browserify": "^3.12.0", - "stream-browserify": "^3.0.0", - "ts-loader": "^9.4.2", - "typescript": "^4.9.5", - "uglify-js": "^3.17.4", - "vm-browserify": "^1.1.2", - "webpack": "^5.76.3", - "webpack-cli": "^5.0.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://npmregistry.privmx.com/@discoveryjs%2fjson-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://npm.simplito.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://npm.simplito.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://npm.simplito.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://npm.simplito.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://npm.simplito.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://npm.simplito.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", - "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/elliptic": { - "version": "6.4.18", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.18.tgz", - "integrity": "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==", - "dev": true, - "dependencies": { - "@types/bn.js": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://npm.simplito.com/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://npm.simplito.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://npm.simplito.com/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://npm.simplito.com/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz", - "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://npm.simplito.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://npm.simplito.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/@webpack-cli%2fconfigtest/-/configtest-2.0.1.tgz", - "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/@webpack-cli%2finfo/-/info-2.0.1.tgz", - "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/@webpack-cli%2fserve/-/serve-2.0.1.tgz", - "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://npm.simplito.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://npm.simplito.com/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://npmregistry.privmx.com/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://npmregistry.privmx.com/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://npmregistry.privmx.com/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://npm.simplito.com/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://npm.simplito.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://npmregistry.privmx.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://npm.simplito.com/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://npmregistry.privmx.com/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://npmregistry.privmx.com/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://npm.simplito.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://npmregistry.privmx.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "0.0.8", - "resolved": "https://npmregistry.privmx.com/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://npm.simplito.com/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://npm.simplito.com/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://npmregistry.privmx.com/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-pack": { - "version": "6.1.0", - "resolved": "https://npmregistry.privmx.com/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dev": true, - "dependencies": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" - } - }, - "node_modules/browser-resolve": { - "version": "2.0.0", - "resolved": "https://npmregistry.privmx.com/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", - "dev": true, - "dependencies": { - "resolve": "^1.17.0" - } - }, - "node_modules/browserify": { - "version": "17.0.0", - "resolved": "https://npmregistry.privmx.com/browserify/-/browserify-17.0.0.tgz", - "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", - "dev": true, - "dependencies": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.1", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^3.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.2.1", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "^1.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum-object": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^3.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.12.0", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://npmregistry.privmx.com/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://npmregistry.privmx.com/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://npmregistry.privmx.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://npm.simplito.com/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/browserify-sign/node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://npm.simplito.com/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://npmregistry.privmx.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserify/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://npmregistry.privmx.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify/node_modules/buffer": { - "version": "5.2.1", - "resolved": "https://npmregistry.privmx.com/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://npm.simplito.com/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://npmregistry.privmx.com/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-browserify": { - "version": "0.2.5", - "resolved": "https://npmregistry.privmx.com/buffer-browserify/-/buffer-browserify-0.2.5.tgz", - "integrity": "sha512-3ko6TTBwXb15w2OgZuyAzLJwUFClBMvcKcmhF+iQ79G71K8Fc3RqKzroCN0a0DbZw2GM3q9lNoqfYYCTq6w7QA==", - "deprecated": "Package not maintained. Recent browserify uses https://github.com/feross/buffer", - "dev": true, - "dependencies": { - "base64-js": "0.0.8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://npmregistry.privmx.com/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://npmregistry.privmx.com/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/buffer/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://npmregistry.privmx.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://npmregistry.privmx.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "node_modules/cached-path-relative": { - "version": "1.1.0", - "resolved": "https://npmregistry.privmx.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://npm.simplito.com/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://npm.simplito.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://npm.simplito.com/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001678", - "resolved": "https://npm.simplito.com/caniuse-lite/-/caniuse-lite-1.0.30001678.tgz", - "integrity": "sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://npmregistry.privmx.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://npmregistry.privmx.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://npmregistry.privmx.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://npm.simplito.com/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://npmregistry.privmx.com/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://npmregistry.privmx.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://npmregistry.privmx.com/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/combine-source-map": { - "version": "0.8.0", - "resolved": "https://npmregistry.privmx.com/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dev": true, - "dependencies": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://npm.simplito.com/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://npmregistry.privmx.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://npmregistry.privmx.com/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://npmregistry.privmx.com/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://npmregistry.privmx.com/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://npmregistry.privmx.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://npmregistry.privmx.com/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://npmregistry.privmx.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://npmregistry.privmx.com/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://npmregistry.privmx.com/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://npm.simplito.com/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://npmregistry.privmx.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dash-ast": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://npm.simplito.com/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deps-sort": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", - "dev": true, - "dependencies": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://npmregistry.privmx.com/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://npmregistry.privmx.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://npmregistry.privmx.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://npmregistry.privmx.com/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://npm.simplito.com/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://npmregistry.privmx.com/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.52", - "resolved": "https://npm.simplito.com/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz", - "integrity": "sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://npm.simplito.com/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://npmregistry.privmx.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://npm.simplito.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://npmregistry.privmx.com/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://npm.simplito.com/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://npm.simplito.com/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://npm.simplito.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://npm.simplito.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://npm.simplito.com/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://npmregistry.privmx.com/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://npmregistry.privmx.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://npmregistry.privmx.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://npmregistry.privmx.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://npmregistry.privmx.com/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://npmregistry.privmx.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://npm.simplito.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://npm.simplito.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://npmregistry.privmx.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://npmregistry.privmx.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://npm.simplito.com/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://npmregistry.privmx.com/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://npm.simplito.com/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://npm.simplito.com/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://npmregistry.privmx.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://npm.simplito.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://npm.simplito.com/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://npmregistry.privmx.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://npm.simplito.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://npm.simplito.com/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://npmregistry.privmx.com/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://npmregistry.privmx.com/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://npmregistry.privmx.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://npm.simplito.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://npm.simplito.com/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://npm.simplito.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://npmregistry.privmx.com/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://npmregistry.privmx.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://npmregistry.privmx.com/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://npm.simplito.com/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/htmlescape": { - "version": "1.1.1", - "resolved": "https://npmregistry.privmx.com/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://npmregistry.privmx.com/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://npmregistry.privmx.com/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://npmregistry.privmx.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://npmregistry.privmx.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inline-source-map": { - "version": "0.6.2", - "resolved": "https://npmregistry.privmx.com/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "dependencies": { - "source-map": "~0.5.3" - } - }, - "node_modules/insert-module-globals": { - "version": "7.2.1", - "resolved": "https://npmregistry.privmx.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", - "dev": true, - "dependencies": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" - } - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://npmregistry.privmx.com/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://npmregistry.privmx.com/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://npmregistry.privmx.com/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://npm.simplito.com/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://npmregistry.privmx.com/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://npmregistry.privmx.com/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://npm.simplito.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://npmregistry.privmx.com/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://npm.simplito.com/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://npmregistry.privmx.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://npmregistry.privmx.com/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://npm.simplito.com/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://npmregistry.privmx.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://npm.simplito.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://npmregistry.privmx.com/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://npmregistry.privmx.com/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://npmregistry.privmx.com/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://npmregistry.privmx.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://npmregistry.privmx.com/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://npmregistry.privmx.com/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.memoize": { - "version": "3.0.4", - "resolved": "https://npmregistry.privmx.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://npm.simplito.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://npmregistry.privmx.com/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://npm.simplito.com/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://npm.simplito.com/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://npmregistry.privmx.com/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://npmregistry.privmx.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://npmregistry.privmx.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://npmregistry.privmx.com/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://npmregistry.privmx.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://npmregistry.privmx.com/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://npmregistry.privmx.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/module-deps": { - "version": "6.2.3", - "resolved": "https://npmregistry.privmx.com/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", - "dev": true, - "dependencies": { - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://npmregistry.privmx.com/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://npm.simplito.com/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://npmregistry.privmx.com/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://npmregistry.privmx.com/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://npmregistry.privmx.com/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://npmregistry.privmx.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://npmregistry.privmx.com/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://npmregistry.privmx.com/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://npmregistry.privmx.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parents": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "dependencies": { - "path-platform": "~0.11.15" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://npm.simplito.com/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", - "dev": true, - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-asn1/node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://npm.simplito.com/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://npmregistry.privmx.com/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://npmregistry.privmx.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://npmregistry.privmx.com/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-platform": { - "version": "0.11.15", - "resolved": "https://npmregistry.privmx.com/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.3", - "resolved": "https://npm.simplito.com/pbkdf2/-/pbkdf2-3.1.3.tgz", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "create-hash": "~1.1.3", - "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pbkdf2/node_modules/create-hash": { - "version": "1.1.3", - "resolved": "https://npm.simplito.com/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "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", - "resolved": "https://npm.simplito.com/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/pbkdf2/node_modules/ripemd160": { - "version": "2.0.1", - "resolved": "https://npm.simplito.com/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://npm.simplito.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://npmregistry.privmx.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://npmregistry.privmx.com/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://npm.simplito.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://npmregistry.privmx.com/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://npmregistry.privmx.com/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://npmregistry.privmx.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://npmregistry.privmx.com/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://npmregistry.privmx.com/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://npmregistry.privmx.com/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://npmregistry.privmx.com/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://npmregistry.privmx.com/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/read-only-stream": { - "version": "2.0.0", - "resolved": "https://npmregistry.privmx.com/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://npmregistry.privmx.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "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/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://npmregistry.privmx.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://npmregistry.privmx.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://npmregistry.privmx.com/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://npmregistry.privmx.com/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://npmregistry.privmx.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://npmregistry.privmx.com/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://npmregistry.privmx.com/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://npmregistry.privmx.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://npm.simplito.com/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://npm.simplito.com/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://npm.simplito.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://npm.simplito.com/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://npm.simplito.com/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "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/shallow-clone": { - "version": "3.0.1", - "resolved": "https://npmregistry.privmx.com/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shasum-object": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.7" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://npmregistry.privmx.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://npmregistry.privmx.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://npmregistry.privmx.com/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://npmregistry.privmx.com/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://npmregistry.privmx.com/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://npm.simplito.com/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://npm.simplito.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://npmregistry.privmx.com/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://npmregistry.privmx.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://npmregistry.privmx.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://npmregistry.privmx.com/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://npmregistry.privmx.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-splicer": { - "version": "2.0.1", - "resolved": "https://npmregistry.privmx.com/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://npmregistry.privmx.com/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "dependencies": { - "minimist": "^1.1.0" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://npm.simplito.com/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://npmregistry.privmx.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://npmregistry.privmx.com/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dev": true, - "dependencies": { - "acorn-node": "^1.2.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://npmregistry.privmx.com/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://npm.simplito.com/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://npm.simplito.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://npm.simplito.com/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://npmregistry.privmx.com/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://npmregistry.privmx.com/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timers-browserify": { - "version": "1.4.2", - "resolved": "https://npmregistry.privmx.com/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "dependencies": { - "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://npm.simplito.com/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-buffer/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://npm.simplito.com/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://npm.simplito.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-loader": { - "version": "9.4.2", - "resolved": "https://npmregistry.privmx.com/ts-loader/-/ts-loader-9.4.2.tgz", - "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://npmregistry.privmx.com/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://npm.simplito.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://npmregistry.privmx.com/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://npmregistry.privmx.com/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/umd": { - "version": "3.0.3", - "resolved": "https://npmregistry.privmx.com/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true, - "bin": { - "umd": "bin/cli.js" - } - }, - "node_modules/undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://npmregistry.privmx.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - }, - "bin": { - "undeclared-identifiers": "bin.js" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://npm.simplito.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://npm.simplito.com/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://npm.simplito.com/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://npmregistry.privmx.com/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://npmregistry.privmx.com/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://npmregistry.privmx.com/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://npmregistry.privmx.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://npmregistry.privmx.com/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://npm.simplito.com/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://npm.simplito.com/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.0.1", - "resolved": "https://npmregistry.privmx.com/webpack-cli/-/webpack-cli-5.0.1.tgz", - "integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.0.1", - "@webpack-cli/info": "^2.0.1", - "@webpack-cli/serve": "^2.0.1", - "colorette": "^2.0.14", - "commander": "^9.4.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://npmregistry.privmx.com/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://npmregistry.privmx.com/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://npmregistry.privmx.com/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://npm.simplito.com/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://npmregistry.privmx.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://npm.simplito.com/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://npmregistry.privmx.com/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://npmregistry.privmx.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://npmregistry.privmx.com/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - } - } -} diff --git a/drivers/privmx-webendpoint-drv-context/package.json b/drivers/privmx-webendpoint-drv-context/package.json deleted file mode 100644 index faff877..0000000 --- a/drivers/privmx-webendpoint-drv-context/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "privmx-driver-web-context", - "version": "1.0.0", - "description": "", - "private": true, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "npm run clean && ./node_modules/.bin/tsc && ./node_modules/.bin/browserify ./out/index.js | ./node_modules/.bin/uglifyjs -o ./dist/driver-web-context.js", - "build-no-min": "npm run clean && ./node_modules/.bin/tsc && ./node_modules/.bin/browserify ./out/index.js -o ./dist/driver-web-context.js", - "clean": "rm -rf ./dist && rm -rf ./out && mkdir -p ./dist" - }, - "author": "Simplito Sp. z o. o.", - "license": "PrivMX Free License", - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18", - "@types/node": "^22.7.9", - "browserify": "^17.0.0", - "buffer": "^6.0.3", - "buffer-browserify": "^0.2.5", - "crypto-browserify": "^3.12.0", - "stream-browserify": "^3.0.0", - "ts-loader": "^9.4.2", - "typescript": "^4.9.5", - "uglify-js": "^3.17.4", - "vm-browserify": "^1.1.2", - "webpack": "^5.76.3", - "webpack-cli": "^5.0.1" - }, - "dependencies": { - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "engines" : { - "node" : ">=20.0.0" - } -} diff --git a/drivers/privmx-webendpoint-drv-context/src/crypto/EmCrypto.ts b/drivers/privmx-webendpoint-drv-context/src/crypto/EmCrypto.ts deleted file mode 100644 index f223abe..0000000 --- a/drivers/privmx-webendpoint-drv-context/src/crypto/EmCrypto.ts +++ /dev/null @@ -1,494 +0,0 @@ -/*! -PrivMX Endpoint. -Copyright © 2024 Simplito sp. z o.o. - -This file is part of the PrivMX Platform (https://privmx.dev). -This software is Licensed under the PrivMX Free License. - -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import * as elliptic from "elliptic"; -import { assertIsNumber, assertIsUint8Array, assertArgsValid, assertIsString } from "../assert"; -import * as Types from "./Types"; -import * as Utils from "./Utils"; -import BN = require("bn.js"); -const EC = new elliptic.ec("secp256k1"); -const {subtle} = globalThis.crypto; -const crypto = require('crypto'); - -export class EmCrypto { - static HASH_ALGORITHM_MAP: {[name: string]: string} = { - sha1: "SHA-1", - sha256: "SHA-256", - sha512: "SHA-512", - SHA1: "SHA-1", - SHA256: "SHA-256", - SHA512: "SHA-512" - }; - - private methodsMap: { [K: string]: Function } = { - randomBytes: this.randomBytes, - hmac: this.hmac, - hmacSha1: this.hmacSha1, - hmacSha256: this.hmacSha256, - hmacSha512: this.hmacSha512, - sha1: this.sha1, - sha256: this.sha256, - sha512: this.sha512, - ripemd160: this.ripemd160, - hash160: this.hash160, - aes256EcbEncrypt: this.aes256EcbEncrypt, - aes256EcbDecrypt: this.aes256EcbDecrypt, - aes256CbcPkcs7Encrypt: this.aes256CbcPkcs7Encrypt, - aes256CbcPkcs7Decrypt: this.aes256CbcPkcs7Decrypt, - aes256CbcNoPadEncrypt: this.aes256CbcNoPadEncrypt, - aes256CbcNoPadDecrypt: this.aes256CbcNoPadDecrypt, - prf_tls12: this.prf_tls12, - kdf: this.kdf, - getKEM: this.getKEM, - aes256CbcHmac256Encrypt: this.aes256CbcHmac256Encrypt, - aes256CbcHmac256Decrypt: this.aes256CbcHmac256Decrypt, - pbkdf2: this.pbkdf2, - ecc_genPair: this.eccGenPair, - ecc_fromPublicKey: this.eccFromPublicKey, - ecc_fromPrivateKey: this.eccFromPrivateKey, - ecc_sign: this.eccSign, - ecc_verify: this.eccVerify, - ecc_verify2: this.eccVerify2, - ecc_derive: this.eccDerive, - ecc_getOrder: this.eccGetOrder, - ecc_getGenerator: this.eccGetGenerator, - bn_getBitsLength: this.bnGetBitsLength, - bn_umod: this.bnUmod, - bn_eq: this.bnEq, - point_encode: this.pointEncode, - point_mul: this.pointMul, - point_add: this.pointAdd, - fillWithZeroesTo32: this.fillWithZeroesTo32, - getRecoveryParam: this.getRecoveryParam - }; - - async methodCaller(name: string, params: any): Promise { - if (this.methodsMap[name]) { - return this.methodsMap[name](params); - } - throw new Error(`Method '${name}' is not implemented.`); - } - - private async randomBytes(params: Types.RANDOM_BYTES_PARAMS): Promise { - assertArgsValid(params, Types.RANDOM_BYTES_PARAMS); - assertIsNumber(params.length); - let buf = new Uint8Array(params.length); - return globalThis.crypto.getRandomValues(buf); - } - - private async hmac(params: Types.HMAC_PARAMS): Promise { - assertArgsValid(params, Types.HMAC_PARAMS); - assertIsString(params.engine); - assertIsUint8Array(params.key); - assertIsUint8Array(params.data); - if (params.engine === "sha1") { - return this.hmacSha1(params.key, params.data); - } - else if (params.engine === "sha256") { - return this.hmacSha256(params.key, params.data); - } - else if (params.engine === "sha512") { - return this.hmacSha512(params.key, params.data); - } - throw new Error("hmac: invalid engine arg"); - } - - - private async hmacSha1(key: ArrayBuffer, data: ArrayBuffer): Promise { - const importedKey = await subtle.importKey("raw", new Uint8Array(key), { - name: "HMAC", - hash: "SHA-1" - }, false, ["sign"]); - return await subtle.sign("HMAC", importedKey, new Uint8Array(data)); - } - - private async hmacSha256(key: ArrayBuffer, data: ArrayBuffer): Promise { - const importedKey = await subtle.importKey("raw", new Uint8Array(key), { - name: "HMAC", - hash: "SHA-256" - }, false, ["sign"]); - return subtle.sign("HMAC", importedKey, new Uint8Array(data)); - } - - private async hmacSha512(key: ArrayBuffer, data: ArrayBuffer): Promise { - const importedKey = await subtle.importKey("raw", new Uint8Array(key), { - name: "HMAC", - hash: "SHA-512" - }, false, ["sign"]); - return subtle.sign("HMAC", importedKey, new Uint8Array(data)); - } - - private async sha1(params: Types.SHA_PARAMS): Promise { - assertArgsValid(params, Types.SHA_PARAMS); - assertIsUint8Array(params.data); - return subtle.digest("SHA-1", new Uint8Array(params.data)); - } - - private async sha256(params: Types.SHA_PARAMS): Promise { - assertArgsValid(params, Types.SHA_PARAMS); - assertIsUint8Array(params.data); - return subtle.digest("SHA-256", new Uint8Array(params.data)); - } - - private async sha512(params: Types.SHA_PARAMS): Promise { - assertArgsValid(params, Types.SHA_PARAMS); - assertIsUint8Array(params.data); - return subtle.digest("SHA-512", new Uint8Array(params.data)); - } - - private async ripemd160(params: Types.RIPEMD160_PARAMS): Promise { - assertArgsValid(params, Types.RIPEMD160_PARAMS); - assertIsUint8Array(params.data); - return crypto.createHash("ripemd160").update(Buffer.from(params.data)).digest(); - } - - private async aes256EcbEncrypt(params: Types.AES256ECB_PARAMS): Promise { - assertArgsValid(params, Types.AES256ECB_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - const cipher = crypto.createCipheriv("aes-256-ecb", new Uint8Array(params.key), ''); - cipher.setAutoPadding(false); - return Utils.toArrayBuffer(Buffer.concat([cipher.update(new Uint8Array(params.data)), cipher.final()])); - } - - private async aes256EcbDecrypt(params: Types.AES256ECB_PARAMS): Promise { - assertArgsValid(params, Types.AES256ECB_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - const cipher = crypto.createDecipheriv("aes-256-ecb", new Uint8Array(params.key), ''); - cipher.setAutoPadding(false); - return Utils.toArrayBuffer(Buffer.concat([cipher.update(new Uint8Array(params.data)), cipher.final()])); - } - - private async aes256CbcPkcs7Encrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { - assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - assertIsUint8Array(params.iv); - const key = await subtle.importKey("raw", new Uint8Array(params.key), "AES-CBC", true, ["encrypt"]); - return subtle.encrypt({name: "AES-CBC", iv: new Uint8Array(params.iv)}, key, new Uint8Array(params.data)); - } - - private async aes256CbcPkcs7Decrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { - assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - assertIsUint8Array(params.iv); - const key = await subtle.importKey("raw", new Uint8Array(params.key), "AES-CBC", true, ["decrypt"]); - return subtle.decrypt({name: "AES-CBC", iv: new Uint8Array(params.iv)}, key, new Uint8Array(params.data)); - } - - private async aes256CbcNoPadEncrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { - assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - assertIsUint8Array(params.iv); - const cipher = crypto.createCipheriv("aes-256-cbc", params.key, params.iv); - cipher.setAutoPadding(false); - return Utils.toArrayBuffer(Buffer.concat([cipher.update(params.data), cipher.final()])); - } - - private async aes256CbcNoPadDecrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { - assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - assertIsUint8Array(params.iv); - const cipher = crypto.createDecipheriv("aes-256-cbc", params.key, params.iv); - return Utils.toArrayBuffer(Buffer.concat([cipher.update(params.data), cipher.final()])); - } - - private async prf_tls12(params: Types.Prf_tls12_PARAMS): Promise { - assertArgsValid(params, Types.Prf_tls12_PARAMS); - assertIsUint8Array(params.key); - assertIsUint8Array(params.seed); - assertIsNumber(params.length); - let result = Buffer.alloc(0); - let a = new Uint8Array(params.seed); - while (result.length < params.length) { - a = new Uint8Array(await this.hmacSha256(new Uint8Array(params.key), a)); - result = Buffer.concat([result, Buffer.from(await this.hmacSha256(new Uint8Array(params.key), Buffer.concat([a, new Uint8Array(params.seed)])))]); - } - return Utils.toArrayBuffer(result.slice(0, params.length)); - } - - private async kdf(algo: string, length: number, key: Buffer, labelStr: string): Promise { - const label = Buffer.from(labelStr); - const context = Buffer.alloc(0); - let seed = Buffer.alloc(label.length + context.length + 5); - label.copy(seed); - seed.writeUInt8(0, label.length); - context.copy(seed, label.length + 1); - seed.writeUInt32BE(length, label.length + context.length + 1); - let k = Buffer.alloc(0); - let result = Buffer.alloc(0); - let i = 1; - while (result.length < length) { - let input = Buffer.alloc(0); - input = k; - const count = Buffer.alloc(4); - count.writeUInt32BE(i++, 0); - input = Buffer.concat([input, count]); - input = Buffer.concat([input, seed]); - const hmac = await this.hmac({engine: algo, key, data: input}); - k = Buffer.from(hmac); - result = Buffer.concat([result, k]); - } - return result; - } - - private async getKEM(algo: string, key: Buffer, keLen?: number, kmLen?: number) { - if (!keLen && keLen !== 0) { - keLen = 32; - } - if (!kmLen && kmLen !== 0) { - kmLen = 32; - } - const kEM = await this.kdf(algo, keLen + kmLen, key, "key expansion"); - return { - kE: kEM.slice(0, keLen), - kM: kEM.slice(keLen) - } - } - - private async aes256CbcHmac256Encrypt(params: Types.Aes256CbcPkcs7Encrypt_PARAMS): Promise { - assertArgsValid(params, Types.Aes256CbcPkcs7Encrypt_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - assertIsUint8Array(params.iv); - assertIsNumber(params.taglen); - const kem = await this.getKEM("sha256", Buffer.from(params.key)); - const iv = Buffer.from(params.iv).slice(0, 16); - const prefix = Buffer.alloc(16); - prefix.fill(0); - const data = Buffer.concat([prefix, Buffer.from(params.data)]); - const cipher = await this.aes256CbcPkcs7Encrypt({data, key: kem.kE, iv}); - const tag = await this.hmacSha256(kem.kM, cipher); - return Utils.toArrayBuffer(Buffer.concat([Buffer.from(cipher), Buffer.from(tag).slice(0, params.taglen)])); - } - - private async aes256CbcHmac256Decrypt(params: Types.Aes256CbcPkcs7Decrypt_PARAMS): Promise { - assertArgsValid(params, Types.Aes256CbcPkcs7Decrypt_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.key); - - assertIsNumber(params.taglen); - const kem = await this.getKEM("sha256", Buffer.from(params.key)); - let data = Buffer.from(params.data); - const tag = data.slice(data.length - params.taglen); - data = data.slice(0, data.length - params.taglen); - const rTag = Buffer.from(await this.hmacSha256(kem.kM, data)).slice(0, params.taglen); - if (!tag.equals(rTag)) { - throw new Error("Wrong message security tag"); - } - const iv = data.slice(0, 16); - data = data.slice(16); - return this.aes256CbcPkcs7Decrypt({data, key: kem.kE, iv}); - } - - private async pbkdf2(params: Types.PBKDF2_PARAMS): Promise { - assertArgsValid(params, Types.PBKDF2_PARAMS); - assertIsString(params.password); - assertIsString(params.salt); - assertIsNumber(params.rounds); - assertIsNumber(params.length); - assertIsString(params.hash); - const key = await subtle.importKey("raw", new Uint8Array(Buffer.from(params.password, "utf-8")), "PBKDF2", false, ["deriveBits"]); - return subtle.deriveBits({ - name: "PBKDF2", - salt: Buffer.from(params.salt, "utf-8"), - iterations: params.rounds, - hash: { name: EmCrypto.HASH_ALGORITHM_MAP[params.hash] } - }, key, params.length * 8); - } - - private async hash160(params: Types.HASH160_PARAMS): Promise { - assertArgsValid(params, Types.HASH160_PARAMS); - assertIsUint8Array(params.data); - const sha256 = await subtle.digest("SHA-256", new Uint8Array(params.data)); - return crypto.createHash("ripemd160").update(Buffer.from(sha256)).digest(); - } - - - - private fillWithZeroesTo32(buffer: Buffer) { - return buffer.length < 32 ? Buffer.concat([Buffer.alloc(32 - buffer.length).fill(0), buffer]) : buffer; - } - - private async eccGenPair() { - const keyPair = EC.genKeyPair(); - const privateKey = this.fillWithZeroesTo32(Buffer.from(keyPair.getPrivate("hex"), "hex")); - const publicKey = Buffer.from(keyPair.getPublic().encodeCompressed()); - return { - privateKey: privateKey, - publicKey: publicKey - }; - } - - private async eccFromPublicKey(params: Types.FromPublicOrPrivateKey_PARAMS) { - assertArgsValid(params, Types.FromPublicOrPrivateKey_PARAMS); - assertIsUint8Array(params.key); - const keyPairPub = EC.keyFromPublic(Buffer.from(params.key)); - const serializedPub = Buffer.from(keyPairPub.getPublic().encodeCompressed()); - return { - publicKey: Utils.toArrayBuffer(serializedPub) - }; - } - - private async eccFromPrivateKey(params: Types.FromPublicOrPrivateKey_PARAMS) { - assertArgsValid(params, Types.FromPublicOrPrivateKey_PARAMS); - assertIsUint8Array(params.key); - const keyPair = EC.keyFromPrivate(Buffer.from(params.key)); - const privateKey = Utils.toArrayBuffer(this.fillWithZeroesTo32(Buffer.from(keyPair.getPrivate("hex"), "hex"))); - const publicKey = Utils.toArrayBuffer(Buffer.from(keyPair.getPublic().encodeCompressed())); - return { - privateKey: new Uint8Array(privateKey), - publicKey: new Uint8Array(publicKey), - } - } - - private async eccSign(params: Types.Sign_PARAMS) { - assertArgsValid(params, Types.Sign_PARAMS); - assertIsUint8Array(params.privateKey); - assertIsUint8Array(params.data); - const keyPair = EC.keyFromPrivate(Buffer.from(params.privateKey)); - const s = keyPair.sign(Buffer.from(params.data)); - const compact = 27 + s.recoveryParam; - const buffer = Buffer.alloc(65); - buffer.writeUInt8(compact, 0); - Buffer.from(s.r.toArray("be", 32)).copy(buffer, 1); - Buffer.from(s.s.toArray("be", 32)).copy(buffer, 33); - return Utils.toArrayBuffer(buffer); - } - - private getRecoveryParam(value: number) { - if (value >= 27 && value <= 30) { - return value - 27; - } - if (value >= 31 && value <= 34) { - return value - 31; - } - if (value >= 35 && value <= 38) { - return value - 35; - } - if (value >= 39 && value <= 42) { - return value - 39; - } - throw new Error("Invalid recovery param value"); - } - - private async eccVerify(params: Types.Verify_PARAMS) { - assertArgsValid(params, Types.Verify_PARAMS); - assertIsUint8Array(params.publicKey); - assertIsUint8Array(params.data); - assertIsUint8Array(params.signature); - const signature = Buffer.from(params.signature); - const keyPairPub = EC.keyFromPublic(Buffer.from(params.publicKey)); - const recoveryParam = this.getRecoveryParam(signature.readUInt8(0)); - const r = new BN(signature.slice(1, 33).toString("hex"), 16); - const s = new BN(signature.slice(33).toString("hex"), 16); - const sig = { - r: r, - s: s, - recoveryParam: recoveryParam - }; - return keyPairPub.verify(Buffer.from(params.data), sig); - } - - private async eccVerify2(params: Types.Verify2_PARAMS) { - assertArgsValid(params, Types.Verify2_PARAMS); - assertIsUint8Array(params.data); - assertIsUint8Array(params.r); - assertIsUint8Array(params.s); - const buffer = Buffer.alloc(65); - buffer.writeUInt8(27, 0); - Buffer.from(params.r).copy(buffer, 1); - Buffer.from(params.s).copy(buffer, 33); - return this.eccVerify({publicKey: params.publicKey, data: buffer, signature: params.data}); - } - - private async eccDerive(params: Types.Derive_PARAMS) { - assertArgsValid(params, Types.Derive_PARAMS); - assertIsUint8Array(params.privateKey); - assertIsUint8Array(params.publicKey); - const keyPairPub = EC.keyFromPublic(Buffer.from(params.publicKey)); - const keyPairPriv = EC.keyFromPrivate(Buffer.from(params.privateKey)); - const val = keyPairPriv.derive(keyPairPub.getPublic()); - const keyPair = EC.keyFromPrivate(val.toArray()); - return Utils.toArrayBuffer(this.fillWithZeroesTo32(Buffer.from(keyPair.getPrivate("hex"), "hex"))); - } - - private async eccGetOrder(params: undefined) { - const n = EC.curve.n; - return Uint8Array.from(n.toArray()); - } - - private async eccGetGenerator(params: undefined) { - const g = EC.g; - return Uint8Array.from(g.encodeCompressed() as any as number[]); - } - - private async bnGetBitsLength(params: Types.GetBitsLength_PARAMS) { - assertArgsValid(params, Types.GetBitsLength_PARAMS); - assertIsUint8Array(params.bn); - const bn = new BN(Buffer.from(params.bn)); - return bn.bitLength(); - } - - private async bnUmod(params: Types.BNumod_PARAMS) { - assertArgsValid(params, Types.BNumod_PARAMS); - assertIsUint8Array(params.bn); - assertIsUint8Array(params.bn2); - const bn = new BN(Buffer.from(params.bn)); - const bn2 = new BN(Buffer.from(params.bn2)); - return Uint8Array.from(bn.umod(bn2).toArray()); - } - - private async bnEq(params: Types.BNeq_PARAMS) { - assertArgsValid(params, Types.BNeq_PARAMS); - assertIsUint8Array(params.bn); - assertIsUint8Array(params.bn2); - const bn = new BN(Buffer.from(params.bn)); - const bn2 = new BN(Buffer.from(params.bn2)); - return bn.eq(bn2); - } - - private async pointEncode(params: Types.PointEncode_PARAMS) { - assertArgsValid(params, Types.PointEncode_PARAMS); - assertIsUint8Array(params.point); - const point = EC.curve.decodePoint(Buffer.from(params.point)); - if (params.compact) { - return Uint8Array.from(point.encodeCompressed() as any as number[]); - } else { - return Utils.toArrayBuffer(Buffer.from(point.encode())); - } - } - - private async pointMul(params: Types.PointMul_PARAMS) { - assertArgsValid(params, Types.PointMul_PARAMS); - assertIsUint8Array(params.point); - assertIsUint8Array(params.bn); - const point = EC.curve.decodePoint(Buffer.from(params.point)); - const bn = new BN(Buffer.from(params.bn)); - const result = point.mul(bn); - return Uint8Array.from(result.encodeCompressed() as any as number[]); - } - - private async pointAdd(params: Types.PointAdd_PARAMS) { - assertArgsValid(params, Types.PointAdd_PARAMS); - assertIsUint8Array(params.point); - assertIsUint8Array(params.point2); - const point = EC.curve.decodePoint(Buffer.from(params.point)); - const point2 = EC.curve.decodePoint(Buffer.from(params.point2)); - const result = point.add(point2); - return Uint8Array.from(result.encodeCompressed() as any as number[]); - } - -} diff --git a/drivers/privmx-webendpoint-drv-context/src/crypto/Types.ts b/drivers/privmx-webendpoint-drv-context/src/crypto/Types.ts deleted file mode 100644 index ef31ad8..0000000 --- a/drivers/privmx-webendpoint-drv-context/src/crypto/Types.ts +++ /dev/null @@ -1,137 +0,0 @@ -/*! -PrivMX Endpoint. -Copyright © 2024 Simplito sp. z o.o. - -This file is part of the PrivMX Platform (https://privmx.dev). -This software is Licensed under the PrivMX Free License. - -See the License for the specific language governing permissions and -limitations under the License. -*/ - -export class RANDOM_BYTES_PARAMS { - length: number = 0; -}; - -export class HMAC_PARAMS { - engine: string; - key: Uint8Array; - data: Uint8Array; -}; - -export class SHA_PARAMS { - data: Uint8Array; -}; - -export class RIPEMD160_PARAMS { - data: Uint8Array; -} - -export class HASH160_PARAMS { - data: Uint8Array; -} - -export class AES256ECB_PARAMS { - data: Uint8Array; - key: Uint8Array; -} - -export class Aes256CbcPkcs7_PARAMS { - data: Uint8Array; - key: Uint8Array; - iv: Uint8Array; -} - -export class Prf_tls12_PARAMS { - key: Uint8Array; - seed: Uint8Array; - length: number = 0; -} - -export class Kdf_PARAMS { - length: number = 0; - key: Uint8Array; - label: string; -} - -export class GenerateIv_PARAMS { - key: Uint8Array; - idx: number = 0; -} - -export class Aes256CbcPkcs7Encrypt_PARAMS { - data: Uint8Array; - key: Uint8Array; - iv: Uint8Array; - taglen: number = 0; -} - -export class Aes256CbcPkcs7Decrypt_PARAMS { - data: Uint8Array; - key: Uint8Array; - taglen: number = 0; -} - -export class FromPublicOrPrivateKey_PARAMS { - key: Uint8Array; -} - -export class Sign_PARAMS { - privateKey: Uint8Array; - data: Uint8Array; -} - -export class Verify_PARAMS { - publicKey: Uint8Array; - data: Uint8Array; - signature: Uint8Array; -} - -export class Verify2_PARAMS { - publicKey: Uint8Array; - data: Uint8Array; - r: Uint8Array; - s: Uint8Array; -} - -export class Derive_PARAMS { - privateKey: Uint8Array; - publicKey: Uint8Array; -} - -export class PBKDF2_PARAMS { - password: string; - salt: string; - rounds: number = 0; - length: number = 0; - hash: string; -} - -export class GetBitsLength_PARAMS { - bn: Uint8Array; -} - -export class BNumod_PARAMS { - bn: Uint8Array; - bn2: Uint8Array; -} - -export class BNeq_PARAMS { - bn: Uint8Array; - bn2: Uint8Array; -} - -export class PointEncode_PARAMS { - point: Uint8Array; - compact: boolean; -} - -export class PointMul_PARAMS { - point: Uint8Array; - bn: Uint8Array; -} - -export class PointAdd_PARAMS { - point: Uint8Array; - point2: Uint8Array; -} diff --git a/drivers/privmx-webendpoint-drv-context/src/crypto/Utils.ts b/drivers/privmx-webendpoint-drv-context/src/crypto/Utils.ts deleted file mode 100644 index 8937100..0000000 --- a/drivers/privmx-webendpoint-drv-context/src/crypto/Utils.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*! -PrivMX Endpoint. -Copyright © 2024 Simplito sp. z o.o. - -This file is part of the PrivMX Platform (https://privmx.dev). -This software is Licensed under the PrivMX Free License. - -See the License for the specific language governing permissions and -limitations under the License. -*/ - -export function toArrayBuffer(buffer : Buffer) { - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - } - - export function toBuffer(byteArray : ArrayBuffer) { - return Buffer.from(byteArray); - } \ No newline at end of file diff --git a/drivers/privmx-webendpoint-drv-context/src/index.ts b/drivers/privmx-webendpoint-drv-context/src/index.ts deleted file mode 100644 index 5e7d249..0000000 --- a/drivers/privmx-webendpoint-drv-context/src/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/*! -PrivMX Endpoint. -Copyright © 2024 Simplito sp. z o.o. - -This file is part of the PrivMX Platform (https://privmx.dev). -This software is Licensed under the PrivMX Free License. - -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { EmCrypto } from "./crypto/EmCrypto"; -export {EmCrypto}; - -(self as any).em_crypto = new EmCrypto(); diff --git a/drivers/privmx-webendpoint-drv-context/src/loader.js b/drivers/privmx-webendpoint-drv-context/src/loader.js deleted file mode 100644 index 52d7919..0000000 --- a/drivers/privmx-webendpoint-drv-context/src/loader.js +++ /dev/null @@ -1,6 +0,0 @@ -function loadDriverWebContext() { - if (typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope) { - importScripts("driver-web-context.js"); - } -} -loadDriverWebContext(); \ No newline at end of file diff --git a/drivers/privmx-webendpoint-drv-context/tsconfig.json b/drivers/privmx-webendpoint-drv-context/tsconfig.json deleted file mode 100644 index 65f077c..0000000 --- a/drivers/privmx-webendpoint-drv-context/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "sourceMap": true, - "rootDir": "./src", - "outDir": "./out/", - "allowSyntheticDefaultImports": true, - "jsx": "react", - "allowJs": true, - "module": "commonjs", - "target": "ESNext", - "lib": ["ES2020", "ES2018.promise", "dom"], - "removeComments": true, - "declaration": true, - "alwaysStrict": true, - "noImplicitAny": true, - "noImplicitThis": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": false, - "strictPropertyInitialization": false, - - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - - "allowUnreachableCode": false, - "forceConsistentCasingInFileNames": true, - "preserveConstEnums": true - }, - "include": ["./src/**/*"], -} \ No newline at end of file diff --git a/drivers/privmx-webendpoint-drv-crypto/src/crypto.cpp b/drivers/privmx-webendpoint-drv-crypto/src/crypto.cpp index d05e652..08ec206 100644 --- a/drivers/privmx-webendpoint-drv-crypto/src/crypto.cpp +++ b/drivers/privmx-webendpoint-drv-crypto/src/crypto.cpp @@ -197,8 +197,31 @@ int privmxDrvCrypto_aeadEncrypt( char** out, unsigned int* outlen, char** tag, unsigned int* taglen ) { - // not supported - return 1; + auto future = AsyncEngine::getInstance()->callJsAsync([=](int callId) { + val params = val::object(); + params.set("data", createUint8Array(data, datalen)); + params.set("key", createUint8Array(key, 32)); + params.set("iv", createUint8Array(iv, 12)); + params.set("aad", createUint8Array(aad, aadlen)); + + performCryptoCall("aeadEncrypt", params.as_handle(), callId); + }, CRYPTO_THREAD); + + try { + std::string res = extractCryptoResult(future); + // In WebCrypto GCM response, the last 16 bytes are the tag. + unsigned int res_datalen = res.size() - 16; + *out = reinterpret_cast(malloc(res_datalen)); + *outlen = res_datalen; + memcpy(*out, res.data(), res_datalen); + + *tag = reinterpret_cast(malloc(16)); + *taglen = 16; + memcpy(*tag, res.data() + res_datalen, 16); + return 0; + } catch (...) { + return 1; + } } int privmxDrvCrypto_aesDecrypt(const char* key, const char* iv, const char* data, unsigned int datalen, @@ -237,8 +260,26 @@ int privmxDrvCrypto_aeadDecrypt( const char* config, char** out, unsigned int* outlen ) { - // not supported - return 1; + auto future = AsyncEngine::getInstance()->callJsAsync([=](int callId) { + val params = val::object(); + params.set("data", createUint8Array(data, datalen)); + params.set("key", createUint8Array(key, 32)); + params.set("iv", createUint8Array(iv, 12)); + params.set("aad", createUint8Array(aad, aadlen)); + params.set("tag", createUint8Array(tag, taglen)); + + performCryptoCall("aeadDecrypt", params.as_handle(), callId); + }, CRYPTO_THREAD); + + try { + std::string res = extractCryptoResult(future); + *out = reinterpret_cast(malloc(res.size())); + *outlen = res.size(); + memcpy(*out, res.data(), res.size()); + return 0; + } catch (...) { + return 1; + } } int privmxDrvCrypto_pbkdf2(const char* pass, unsigned int passlen, const char* salt, unsigned int saltlen, int rounds, unsigned int length, const char* hash, char** out, unsigned int* outlen){ diff --git a/jest.config.js b/jest.config.js index ffacc85..c986ed5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,11 +1,11 @@ -const { createDefaultPreset } = require("ts-jest"); - -const tsJestTransformCfg = createDefaultPreset().transform; - /** @type {import("jest").Config} **/ module.exports = { testEnvironment: "node", transform: { - ...tsJestTransformCfg, + "^.+\\.tsx?$": ["ts-jest", { tsconfig: "tsconfig.test.json" }], + "^.+\\.js$": ["ts-jest", { tsconfig: "tsconfig.test.json", diagnostics: false }], }, + transformIgnorePatterns: [ + "node_modules/(?!@noble/)", + ], }; diff --git a/package-lock.json b/package-lock.json index ed0ce5a..5069fcf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,41 +9,33 @@ "version": "2.7.4", "license": "PrivMX Free License", "dependencies": { - "elliptic": "^6.6.1" + "@noble/curves": "^2.2.0", + "@noble/hashes": "^2.2.0", + "aes-js": "^3.1.2" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", "@eslint/js": "^9.39.2", "@playwright/test": "^1.57.0", "@stylistic/eslint-plugin": "^5.6.1", + "@types/aes-js": "^3.1.4", "@types/jest": "^29.5.14", "@types/node": "^20.9.0", "@types/webpack": "^5.28.5", "@typescript-eslint/eslint-plugin": "^8.51.0", "@typescript-eslint/parser": "^8.51.0", - "assert": "^2.1.0", - "babel-jest": "^29.7.0", - "buffer": "^6.0.3", "copy-webpack-plugin": "^14.0.0", - "crypto-browserify": "^3.3.0", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-indent-empty-lines": "^1.0.2", "eslint-plugin-prettier": "^5.5.4", "jest": "^29.7.0", "mongodb": "^7.0.0", - "playwright": "^1.57.0", "prettier": "^3.7.4", - "process": "^0.11.10", - "stream-browserify": "^3.0.0", "ts-jest": "^29.2.5", "ts-loader": "^9.5.1", "ts-node": "^10.9.1", "tslib": "^2.6.2", "typescript": "5.8", - "vite": "^7.3.0", - "vm-browserify": "^1.1.2", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.2.2" @@ -174,19 +166,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.26.5", "resolved": "https://npm.simplito.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", @@ -224,122 +203,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "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.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://npm.simplito.com/semver/-/semver-6.3.1.tgz", - "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.26.3", - "resolved": "https://npm.simplito.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://npm.simplito.com/semver/-/semver-6.3.1.tgz", - "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.3", - "resolved": "https://npm.simplito.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://npm.simplito.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://npm.simplito.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", "resolved": "https://npm.simplito.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", @@ -372,19 +235,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.26.5", "resolved": "https://npm.simplito.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", @@ -395,56 +245,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://npm.simplito.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://npm.simplito.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -475,21 +275,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { "version": "7.27.6", "resolved": "https://npm.simplito.com/@babel/helpers/-/helpers-7.27.6.tgz", @@ -520,103 +305,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://npm.simplito.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://npm.simplito.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -672,22 +360,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://npm.simplito.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.26.0", "resolved": "https://npm.simplito.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", @@ -872,1527 +544,112 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://npm.simplito.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://npm.simplito.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://npm.simplito.com/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@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", - "@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-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@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.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.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.25.9", - "@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.25.9", - "@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.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@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/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://npm.simplito.com/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://npm.simplito.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "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", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://npm.simplito.com/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://npm.simplito.com/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@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.26.5", - "resolved": "https://npm.simplito.com/@babel/traverse/-/traverse-7.26.5.tgz", - "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.5", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://npm.simplito.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://npm.simplito.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://npm.simplito.com/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://npm.simplito.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://npm.simplito.com/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/traverse": { + "version": "7.26.5", + "resolved": "https://npm.simplito.com/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://npm.simplito.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=18" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://npm.simplito.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://npm.simplito.com/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://npm.simplito.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=10.0.0" } }, "node_modules/@eslint-community/eslint-utils": { @@ -3211,408 +1468,85 @@ "node": ">=10.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://npm.simplito.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.4.4", - "resolved": "https://npm.simplito.com/@mongodb-js/saslprep/-/saslprep-1.4.4.tgz", - "integrity": "sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://npm.simplito.com/@pkgr/core/-/core-0.2.9.tgz", - "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/@playwright/test": { - "version": "1.57.0", - "resolved": "https://npm.simplito.com/@playwright/test/-/test-1.57.0.tgz", - "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", - "cpu": [ - "x64" - ], + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://npm.simplito.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", - "cpu": [ - "arm64" - ], + "license": "MIT" + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.4.4", + "resolved": "https://npm.simplito.com/@mongodb-js/saslprep/-/saslprep-1.4.4.tgz", + "integrity": "sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", - "cpu": [ - "arm64" - ], - "dev": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@noble/curves": { + "version": "2.2.0", + "resolved": "https://npm.simplito.com/@noble/curves/-/curves-2.2.0.tgz", + "integrity": "sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", - "cpu": [ - "ia32" - ], - "dev": true, + "dependencies": { + "@noble/hashes": "2.2.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "https://npm.simplito.com/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", - "cpu": [ - "x64" - ], + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://npm.simplito.com/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", - "cpu": [ - "x64" - ], + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@playwright/test": { + "version": "1.57.0", + "resolved": "https://npm.simplito.com/@playwright/test/-/test-1.57.0.tgz", + "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.57.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -3705,6 +1639,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/aes-js": { + "version": "3.1.4", + "resolved": "https://npm.simplito.com/@types/aes-js/-/aes-js-3.1.4.tgz", + "integrity": "sha512-v3D66IptpUqh+pHKVNRxY8yvp2ESSZXe0rTzsGdzUhEwag7ljVfgCllkWv2YgiYXDhWFBrEywll4A5JToyTNFA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://npm.simplito.com/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4645,6 +2586,12 @@ "node": ">=0.4.0" } }, + "node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://npm.simplito.com/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "license": "MIT" + }, "node_modules/ajv": { "version": "6.14.0", "resolved": "https://npm.simplito.com/ajv/-/ajv-6.14.0.tgz", @@ -4778,53 +2725,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://npm.simplito.com/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://npm.simplito.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://npm.simplito.com/babel-jest/-/babel-jest-29.7.0.tgz", @@ -4880,58 +2780,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://npm.simplito.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://npm.simplito.com/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://npm.simplito.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://npm.simplito.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/babel-preset-current-node-syntax": { "version": "1.1.0", "resolved": "https://npm.simplito.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", @@ -4981,25 +2829,6 @@ "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/baseline-browser-mapping": { "version": "2.10.0", "resolved": "https://npm.simplito.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", @@ -5031,13 +2860,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "dev": true, - "license": "MIT" - }, "node_modules/body-parser": { "version": "1.20.4", "resolved": "https://npm.simplito.com/body-parser/-/body-parser-1.20.4.tgz", @@ -5095,158 +2917,38 @@ } }, "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://npm.simplito.com/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://npm.simplito.com/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://npm.simplito.com/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://npm.simplito.com/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://npm.simplito.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://npm.simplito.com/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://npm.simplito.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.5", - "resolved": "https://npm.simplito.com/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", - "dev": true, - "license": "ISC", - "dependencies": { - "bn.js": "^5.2.2", - "browserify-rsa": "^4.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.6.1", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.9", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://npm.simplito.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "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/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://npm.simplito.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "1.3.0", + "resolved": "https://npm.simplito.com/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } }, - "node_modules/browserify-sign/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://npm.simplito.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://npm.simplito.com/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://npm.simplito.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://npm.simplito.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT" + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/browserslist": { "version": "4.28.1", @@ -5315,42 +3017,12 @@ "node": ">=20.19.0" } }, - "node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://npm.simplito.com/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://npm.simplito.com/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true, - "license": "MIT" - }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://npm.simplito.com/bundle-name/-/bundle-name-4.1.0.tgz", @@ -5377,25 +3049,6 @@ "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://npm.simplito.com/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://npm.simplito.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -5542,21 +3195,6 @@ "node": ">=8" } }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://npm.simplito.com/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cjs-module-lexer": { "version": "1.4.1", "resolved": "https://npm.simplito.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", @@ -5768,72 +3406,11 @@ "node": ">=10.13.0" } }, - "node_modules/core-js-compat": { - "version": "3.40.0", - "resolved": "https://npm.simplito.com/core-js-compat/-/core-js-compat-3.40.0.tgz", - "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "dev": true, "license": "MIT" }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://npm.simplito.com/create-ecdh/-/create-ecdh-4.0.4.tgz", - "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.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://npm.simplito.com/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://npm.simplito.com/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://npm.simplito.com/create-jest/-/create-jest-29.7.0.tgz", @@ -5875,33 +3452,6 @@ "node": ">= 8" } }, - "node_modules/crypto-browserify": { - "version": "3.12.1", - "resolved": "https://npm.simplito.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserify-cipher": "^1.0.1", - "browserify-sign": "^4.2.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "diffie-hellman": "^5.0.3", - "hash-base": "~3.0.4", - "inherits": "^2.0.4", - "pbkdf2": "^3.1.2", - "public-encrypt": "^4.0.3", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/debug": { "version": "2.6.9", "dev": true, @@ -5972,23 +3522,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://npm.simplito.com/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://npm.simplito.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -6002,22 +3535,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://npm.simplito.com/depd/-/depd-2.0.0.tgz", @@ -6027,17 +3544,6 @@ "node": ">= 0.8" } }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://npm.simplito.com/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://npm.simplito.com/destroy/-/destroy-1.2.0.tgz", @@ -6083,25 +3589,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://npm.simplito.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT" - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://npm.simplito.com/dns-packet/-/dns-packet-5.6.1.tgz", @@ -6143,27 +3630,6 @@ "dev": true, "license": "ISC" }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://npm.simplito.com/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://npm.simplito.com/emittery/-/emittery-0.13.1.tgz", @@ -6267,48 +3733,6 @@ "node": ">= 0.4" } }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://npm.simplito.com/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://npm.simplito.com/escalade/-/escalade-3.2.0.tgz", @@ -6732,17 +4156,6 @@ "node": ">=0.8.x" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://npm.simplito.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "5.1.1", "dev": true, @@ -7018,22 +4431,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://npm.simplito.com/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/forwarded": { "version": "0.2.0", "dev": true, @@ -7286,18 +4683,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://npm.simplito.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://npm.simplito.com/has-symbols/-/has-symbols-1.1.0.tgz", @@ -7311,44 +4696,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://npm.simplito.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://npm.simplito.com/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://npm.simplito.com/hasown/-/hasown-2.0.2.tgz", @@ -7362,15 +4709,6 @@ "node": ">= 0.4" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hpack.js": { "version": "2.1.6", "dev": true, @@ -7500,35 +4838,16 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://npm.simplito.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "resolved": "https://npm.simplito.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/ignore": { "version": "5.3.2", @@ -7606,6 +4925,7 @@ }, "node_modules/inherits": { "version": "2.0.4", + "dev": true, "license": "ISC" }, "node_modules/interpret": { @@ -7624,21 +4944,6 @@ "node": ">= 10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://npm.simplito.com/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7659,19 +4964,6 @@ "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://npm.simplito.com/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "dev": true, @@ -7727,20 +5019,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "dev": true, @@ -7771,21 +5049,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-nan": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-network-error": { "version": "1.3.0", "resolved": "https://npm.simplito.com/is-network-error/-/is-network-error-1.3.0.tgz", @@ -7841,22 +5104,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://npm.simplito.com/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://npm.simplito.com/is-wsl/-/is-wsl-3.1.0.tgz", @@ -8887,13 +6134,6 @@ "node": ">=8" } }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://npm.simplito.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://npm.simplito.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8949,18 +6189,6 @@ "node": ">= 0.4" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://npm.simplito.com/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://npm.simplito.com/media-typer/-/media-typer-0.3.0.tgz", @@ -9031,27 +6259,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://npm.simplito.com/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT" - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://npm.simplito.com/mime/-/mime-1.6.0.tgz", @@ -9093,12 +6300,9 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", + "dev": true, "license": "ISC" }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "license": "MIT" - }, "node_modules/minimatch": { "version": "3.1.5", "resolved": "https://npm.simplito.com/minimatch/-/minimatch-3.1.5.tgz", @@ -9201,25 +6405,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://npm.simplito.com/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://npm.simplito.com/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9296,46 +6481,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obuf": { "version": "1.1.2", "dev": true, @@ -9486,23 +6631,6 @@ "node": ">=6" } }, - "node_modules/parse-asn1": { - "version": "5.1.9", - "resolved": "https://npm.simplito.com/parse-asn1/-/parse-asn1-5.1.9.tgz", - "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", - "pbkdf2": "^3.1.5", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://npm.simplito.com/parse-json/-/parse-json-5.2.0.tgz", @@ -9566,24 +6694,6 @@ "dev": true, "license": "MIT" }, - "node_modules/pbkdf2": { - "version": "3.1.5", - "resolved": "https://npm.simplito.com/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://npm.simplito.com/picocolors/-/picocolors-1.1.1.tgz", @@ -9671,45 +6781,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://npm.simplito.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://npm.simplito.com/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://npm.simplito.com/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9777,14 +6848,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, @@ -9824,28 +6887,6 @@ "node": ">= 0.10" } }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://npm.simplito.com/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://npm.simplito.com/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT" - }, "node_modules/punycode": { "version": "2.3.1", "dev": true, @@ -9887,27 +6928,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://npm.simplito.com/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://npm.simplito.com/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "dev": true, @@ -9985,107 +7005,26 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://npm.simplito.com/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://npm.simplito.com/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://npm.simplito.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://npm.simplito.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://npm.simplito.com/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://npm.simplito.com/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://npm.simplito.com/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "resolved": "https://npm.simplito.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "jsesc": "~3.0.2" + "picomatch": "^2.2.1" }, - "bin": { - "regjsparser": "bin/parser" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://npm.simplito.com/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "node_modules/rechoir": { + "version": "0.8.0", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "resolve": "^1.20.0" }, "engines": { - "node": ">=6" + "node": ">= 10.13.0" } }, "node_modules/require-directory": { @@ -10166,121 +7105,6 @@ "node": ">= 4" } }, - "node_modules/ripemd160": { - "version": "2.0.3", - "resolved": "https://npm.simplito.com/ripemd160/-/ripemd160-2.0.3.tgz", - "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", - "resolved": "https://npm.simplito.com/hash-base/-/hash-base-3.1.2.tgz", - "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/readable-stream": { - "version": "2.3.8", - "resolved": "https://npm.simplito.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "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/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://npm.simplito.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/ripemd160/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://npm.simplito.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ripemd160/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://npm.simplito.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://npm.simplito.com/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", - "fsevents": "~2.3.2" - } - }, "node_modules/run-applescript": { "version": "7.1.0", "resolved": "https://npm.simplito.com/run-applescript/-/run-applescript-7.1.0.tgz", @@ -10525,50 +7349,12 @@ "node": ">= 0.8.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://npm.simplito.com/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://npm.simplito.com/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://npm.simplito.com/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "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/shallow-clone": { "version": "3.0.1", "dev": true, @@ -10723,16 +7509,6 @@ "node": ">= 8" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://npm.simplito.com/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://npm.simplito.com/source-map-support/-/source-map-support-0.5.21.tgz", @@ -10861,15 +7637,6 @@ "node": ">= 0.8" } }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -11149,28 +7916,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://npm.simplito.com/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-buffer/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://npm.simplito.com/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://npm.simplito.com/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11414,21 +8159,6 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://npm.simplito.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://npm.simplito.com/typescript/-/typescript-5.8.3.tgz", @@ -11463,50 +8193,6 @@ "dev": true, "license": "MIT" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://npm.simplito.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://npm.simplito.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://npm.simplito.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://npm.simplito.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://npm.simplito.com/unpipe/-/unpipe-1.0.0.tgz", @@ -11555,18 +8241,6 @@ "punycode": "^2.1.0" } }, - "node_modules/util": { - "version": "0.12.5", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "dev": true, @@ -11616,117 +8290,6 @@ "node": ">= 0.8" } }, - "node_modules/vite": { - "version": "7.3.0", - "resolved": "https://npm.simplito.com/vite/-/vite-7.3.0.tgz", - "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://npm.simplito.com/fdir/-/fdir-6.5.0.tgz", - "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.4", - "resolved": "https://npm.simplito.com/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://npm.simplito.com/walker/-/walker-1.0.8.tgz", @@ -12057,28 +8620,6 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://npm.simplito.com/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wildcard": { "version": "2.0.1", "dev": true, diff --git a/package.json b/package.json index f1a91a6..d00ca53 100644 --- a/package.json +++ b/package.json @@ -68,43 +68,35 @@ "node": ">=4" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", "@eslint/js": "^9.39.2", "@playwright/test": "^1.57.0", "@stylistic/eslint-plugin": "^5.6.1", + "@types/aes-js": "^3.1.4", "@types/jest": "^29.5.14", "@types/node": "^20.9.0", "@types/webpack": "^5.28.5", "@typescript-eslint/eslint-plugin": "^8.51.0", "@typescript-eslint/parser": "^8.51.0", - "assert": "^2.1.0", - "babel-jest": "^29.7.0", - "buffer": "^6.0.3", "copy-webpack-plugin": "^14.0.0", - "crypto-browserify": "^3.3.0", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-indent-empty-lines": "^1.0.2", "eslint-plugin-prettier": "^5.5.4", "jest": "^29.7.0", "mongodb": "^7.0.0", - "playwright": "^1.57.0", "prettier": "^3.7.4", - "process": "^0.11.10", - "stream-browserify": "^3.0.0", "ts-jest": "^29.2.5", "ts-loader": "^9.5.1", "ts-node": "^10.9.1", "tslib": "^2.6.2", "typescript": "5.8", - "vite": "^7.3.0", - "vm-browserify": "^1.1.2", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.2.2" }, "dependencies": { - "elliptic": "^6.6.1" + "@noble/curves": "^2.2.0", + "@noble/hashes": "^2.2.0", + "aes-js": "^3.1.2" } } diff --git a/scripts/build_api b/scripts/build_api index 6ec3803..d6dcf9c 100755 --- a/scripts/build_api +++ b/scripts/build_api @@ -28,7 +28,6 @@ case "$RESULT" in 1) echo "changes - rebuild..." cd "$PRIVMX_WEBENDPOINT_API_SRC" - cp "$PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC/out/loader.js" "$PRIVMX_WEBENDPOINT_API_SRC/js/" cp "$PRIVMX_ENDPOINT_SRC-$PRIVMX_ENDPOINT_VERSION/emscripten/jslibrary/websocket.js" "$PRIVMX_WEBENDPOINT_API_SRC/js/" rm -rf ./build-emscripten mkdir -p build-emscripten && cd build-emscripten diff --git a/scripts/build_driver_web_context b/scripts/build_driver_web_context deleted file mode 100755 index 477c097..0000000 --- a/scripts/build_driver_web_context +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -set -e - -SCRIPT_PATH=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd ) - -source "$SCRIPT_PATH/config.sh" -source "$EMSDK_DIR/emsdk_env.sh" - -echo "Checking checksum: $PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC ..." -set +e -$SCRIPT_PATH/check_dir_checksum "$PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC" -RESULT=$? -set -e -case "$RESULT" in - 0) - echo "No changes - skipping build" - ;; - 1) - echo "changes - rebuild..." - cd "$PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC" - - npm ci --registry="https://npmregistry.privmx.com" - npm run build - - set +e - $SCRIPT_PATH/check_dir_checksum "$PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC" - set -e - ;; - 2) - echo "\n\n\nBłąd wejścia" >&2 - exit 2 - ;; - *) - echo "\n\n\nNieznany kod wyjścia: $RESULT" >&2 - exit 3 - ;; -esac - - - diff --git a/scripts/config.sh b/scripts/config.sh index 224d3f8..3795fbb 100644 --- a/scripts/config.sh +++ b/scripts/config.sh @@ -38,6 +38,5 @@ PRIVMX_WEBENDPOINT_API_SRC="$BASE_DIR/webendpoint-cpp" PRIVMX_WEBENDPOINT_DRV_ECC_SRC="$DRIVERS_DIR/privmx-webendpoint-drv-ecc" PRIVMX_WEBENDPOINT_DRV_NET_SRC="$DRIVERS_DIR/privmx-webendpoint-drv-net" PRIVMX_WEBENDPOINT_DRV_CRYPTO_SRC="$DRIVERS_DIR/privmx-webendpoint-drv-crypto" -PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC="$DRIVERS_DIR/privmx-webendpoint-drv-context" NPM_ASSETS_DIR="$BASE_DIR/assets/" \ No newline at end of file diff --git a/scripts/move_wasm_assets b/scripts/move_wasm_assets index bbabc0e..f0728f1 100755 --- a/scripts/move_wasm_assets +++ b/scripts/move_wasm_assets @@ -8,6 +8,5 @@ source "$SCRIPT_PATH/config.sh" echo "Adding assets to npm. Assets dir: $NPM_ASSETS_DIR" mkdir -p $NPM_ASSETS_DIR -cp "$PRIVMX_WEBENDPOINT_DRV_CONTEXT_SRC/dist/driver-web-context.js" "$NPM_ASSETS_DIR" cp "$PRIVMX_WEBENDPOINT_API_SRC/build-emscripten/endpoint-wasm-module.js" "$NPM_ASSETS_DIR" cp "$PRIVMX_WEBENDPOINT_API_SRC/build-emscripten/endpoint-wasm-module.wasm" "$NPM_ASSETS_DIR" diff --git a/scripts/pipeline.sh b/scripts/pipeline.sh index 69ef4c3..9eac09a 100755 --- a/scripts/pipeline.sh +++ b/scripts/pipeline.sh @@ -165,7 +165,6 @@ run_step "Build secp256k1 Cryptography Library" "$SCRIPT_PATH/build_secp" run_step "Build Async Engine" "$SCRIPT_PATH/build_async_engine" run_step "Build Web Browser Drivers" "$SCRIPT_PATH/build_webdrivers" run_step "Build PrivMX Endpoint Module" "$SCRIPT_PATH/build_privmx_endpoint" $PRIVMX_ENDPOINT -run_step "Build Driver Web Context" "$SCRIPT_PATH/build_driver_web_context" run_step "Build API Interface" "$SCRIPT_PATH/build_api" $PRIVMX_ENDPOINT run_step "Add Built Assets to package" "$SCRIPT_PATH/move_wasm_assets" diff --git a/src/crypto/CryptoFacade.ts b/src/crypto/CryptoFacade.ts new file mode 100644 index 0000000..0d1f0fb --- /dev/null +++ b/src/crypto/CryptoFacade.ts @@ -0,0 +1,180 @@ +import { getEmCrypto } from "./index"; +import * as Types from "./Types"; + +/** + * Accepted key type for CryptoFacade operations. + * Refer to Types.FacadeKeyRef for definition. + */ +export type FacadeKeyRef = Types.FacadeKeyRef; + +/** + * A user-friendly Javascript facade for cryptographic operations + * backed by the internal EmCrypto WebCrypto/Polyfill implementations. + * + * All key parameters accept only `CryptoKey` or `string` (keyId). + * To use raw key bytes, first call `importKey()` to obtain a keyId. + */ +export class CryptoFacade { + /** + * Generate secure random bytes. + * @param length Number of bytes to generate. + */ + static async randomBytes(length: number): Promise { + return getEmCrypto().randomBytes({ length }); + } + + /** + * Compute HMAC. + */ + static async hmac( + engine: "sha1" | "sha256" | "sha512", + key: FacadeKeyRef, + data: Uint8Array, + ): Promise { + CryptoFacade.assertKeyRef(key, "hmac"); + return getEmCrypto().hmac({ engine, key, data }); + } + + /** + * Compute SHA256 hash. + */ + static async sha256(data: Uint8Array): Promise { + return getEmCrypto().sha256({ data }); + } + + /** + * Compute SHA512 hash. + */ + static async sha512(data: Uint8Array): Promise { + return getEmCrypto().sha512({ data }); + } + + /** + * AES-256-CBC PKCS7 Encrypt. + */ + static async aes256CbcPkcs7Encrypt( + key: FacadeKeyRef, + iv: Uint8Array, + data: Uint8Array, + ): Promise { + CryptoFacade.assertKeyRef(key, "aes256CbcPkcs7Encrypt"); + return getEmCrypto().aes256CbcPkcs7Encrypt({ key, iv, data }); + } + + /** + * AES-256-CBC PKCS7 Decrypt. + */ + static async aes256CbcPkcs7Decrypt( + key: FacadeKeyRef, + iv: Uint8Array, + data: Uint8Array, + ): Promise { + CryptoFacade.assertKeyRef(key, "aes256CbcPkcs7Decrypt"); + return getEmCrypto().aes256CbcPkcs7Decrypt({ key, iv, data }); + } + + /** + * AES-256-GCM (AEAD) Encrypt. + */ + static async aeadEncrypt( + key: FacadeKeyRef, + iv: Uint8Array, + aad: Uint8Array, + data: Uint8Array, + ): Promise { + CryptoFacade.assertKeyRef(key, "aeadEncrypt"); + return getEmCrypto().aeadEncrypt({ key, iv, aad, data }); + } + + /** + * AES-256-GCM (AEAD) Decrypt. + */ + static async aeadDecrypt( + key: FacadeKeyRef, + iv: Uint8Array, + aad: Uint8Array, + data: Uint8Array, + tag: Uint8Array, + ): Promise { + CryptoFacade.assertKeyRef(key, "aeadDecrypt"); + return getEmCrypto().aeadDecrypt({ key, iv, aad, data, tag }); + } + + /** + * Derive a key using PBKDF2. + */ + static async pbkdf2( + password: string | CryptoKey, + salt: string, + rounds: number, + length: number, + hash: string, + ): Promise { + return getEmCrypto().pbkdf2({ password, salt, rounds, length, hash }); + } + + /** + * Generate an ECC key pair (secp256k1). + * Returns { privateKey, publicKey } as Uint8Arrays. + */ + static async eccGenPair(): Promise<{ privateKey: Uint8Array; publicKey: Uint8Array }> { + return getEmCrypto().eccGenPair(); + } + + /** + * Derive a shared secret using ECDH. + */ + static async eccDerive(privateKey: FacadeKeyRef, publicKey: Uint8Array): Promise { + CryptoFacade.assertKeyRef(privateKey, "eccDerive"); + return getEmCrypto().eccDerive({ privateKey, publicKey }); + } + + /** + * Sign data using ECDSA. + */ + static async eccSign(privateKey: FacadeKeyRef, data: Uint8Array): Promise { + CryptoFacade.assertKeyRef(privateKey, "eccSign"); + return getEmCrypto().eccSign({ privateKey, data }); + } + + static async eccVerify( + publicKey: Uint8Array, + data: Uint8Array, + signature: Uint8Array, + ): Promise { + return getEmCrypto().eccVerify({ publicKey, data, signature }); + } + + /** + * Import a raw key into the registry and return its ID. + * This is the ONLY method that accepts raw Uint8Array key bytes. + * Uint8Array will be filled with zeros afterwards + */ + static async importKeyAndWipeMaterial( + key: Uint8Array, + algo: AlgorithmIdentifier, + usages: KeyUsage[], + id?: string, + ): Promise { + return getEmCrypto().importKey({ key, algo, usages, id }); + } + + /** + * Remove a key from the registry. + */ + static unregisterKey(id: string): void { + getEmCrypto().unregisterKey({ id }); + } + + /** + * Runtime guard: ensures that raw Uint8Array is never passed as a key. + */ + private static assertKeyRef(key: FacadeKeyRef, method: string): void { + if (key instanceof Uint8Array || key instanceof ArrayBuffer) { + throw new TypeError( + `CryptoFacade.${method}: Raw key bytes are not allowed. ` + + `Use CryptoFacade.importKey() first to obtain a keyId.`, + ); + } + } +} diff --git a/src/crypto/EmCrypto.ts b/src/crypto/EmCrypto.ts new file mode 100644 index 0000000..16bd795 --- /dev/null +++ b/src/crypto/EmCrypto.ts @@ -0,0 +1,750 @@ +/*! +PrivMX Endpoint. +Copyright © 2024 Simplito sp. z o.o. + +This file is part of the PrivMX Platform (https://privmx.dev). +This software is Licensed under the PrivMX Free License. + +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { assertIsNumber, assertIsUint8Array, assertArgsValid, assertIsString } from "./assert"; +import * as Types from "./Types"; +import * as Utils from "./Utils"; +import * as aesjs from "aes-js"; +import { ripemd160 as nobleRipemd160 } from "@noble/hashes/legacy.js"; +import { secp256k1 as secp } from "@noble/curves/secp256k1.js"; + +const subtle = + typeof crypto !== "undefined" + ? crypto.subtle + : (globalThis as unknown as { crypto?: { subtle?: SubtleCrypto } }).crypto?.subtle!; + +const textEncoder = new TextEncoder(); + +// --------------------------------------------------------------------------- +// Byte helpers — replace every Buffer.* call with native Uint8Array ops +// --------------------------------------------------------------------------- + +function concatBytes(...arrays: Uint8Array[]): Uint8Array { + let total = 0; + for (const a of arrays) total += a.length; + const out = new Uint8Array(total); + let offset = 0; + for (const a of arrays) { + out.set(a, offset); + offset += a.length; + } + return out; +} + +function writeUInt32BE(buf: Uint8Array, value: number, offset: number): void { + buf[offset] = (value >>> 24) & 0xff; + buf[offset + 1] = (value >>> 16) & 0xff; + buf[offset + 2] = (value >>> 8) & 0xff; + buf[offset + 3] = value & 0xff; +} + +function hexToBytes(hex: string): Uint8Array { + const len = hex.length >> 1; + const out = new Uint8Array(len); + for (let i = 0; i < len; i++) { + out[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16); + } + return out; +} + +function uint8ArrayEqual(a: Uint8Array, b: Uint8Array): boolean { + if (a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; +} + +// --------------------------------------------------------------------------- +// BigInt helpers — replace BN.js with native bigint +// --------------------------------------------------------------------------- + +function bytesToBigInt(bytes: Uint8Array): bigint { + let n = 0n; + for (const byte of bytes) { + n = (n << 8n) | BigInt(byte); + } + return n; +} + +function bigIntToBytes(n: bigint, padToLength?: number): Uint8Array { + if (n < 0n) throw new Error("Negative BigInt not supported"); + if (n === 0n) return new Uint8Array(padToLength ?? 1); + let hex = n.toString(16); + if (hex.length % 2) hex = "0" + hex; + const bytes = hexToBytes(hex); + if (padToLength !== undefined && bytes.length < padToLength) { + const padded = new Uint8Array(padToLength); + padded.set(bytes, padToLength - bytes.length); + return padded; + } + return bytes; +} + +// --------------------------------------------------------------------------- + +interface KeyRegistryEntry { + key: CryptoKey; + wipeAfterImport?: boolean; +} + +export class EmCrypto { + static HASH_ALGORITHM_MAP: { [name: string]: string } = { + sha1: "SHA-1", + sha256: "SHA-256", + sha512: "SHA-512", + SHA1: "SHA-1", + SHA256: "SHA-256", + SHA512: "SHA-512", + }; + private keys: Map = new Map(); + + private methodsMap: { [K: string]: Function } = { + randomBytes: this.randomBytes, + hmac: this.hmac, + hmacSha1: this.hmacSha1, + hmacSha256: this.hmacSha256, + hmacSha512: this.hmacSha512, + sha1: this.sha1, + sha256: this.sha256, + sha512: this.sha512, + ripemd160: this.ripemd160Impl, + hash160: this.hash160, + aes256EcbEncrypt: this.aes256EcbEncrypt, + aes256EcbDecrypt: this.aes256EcbDecrypt, + aes256CbcPkcs7Encrypt: this.aes256CbcPkcs7Encrypt, + aes256CbcPkcs7Decrypt: this.aes256CbcPkcs7Decrypt, + aes256CbcNoPadEncrypt: this.aes256CbcNoPadEncrypt, + aes256CbcNoPadDecrypt: this.aes256CbcNoPadDecrypt, + prf_tls12: this.prf_tls12, + kdf: this.kdf, + getKEM: this.getKEM, + aes256CbcHmac256Encrypt: this.aes256CbcHmac256Encrypt, + aes256CbcHmac256Decrypt: this.aes256CbcHmac256Decrypt, + pbkdf2: this.pbkdf2, + aeadEncrypt: this.aeadEncrypt, + aeadDecrypt: this.aeadDecrypt, + ecc_genPair: this.eccGenPair, + ecc_fromPublicKey: this.eccFromPublicKey, + ecc_fromPrivateKey: this.eccFromPrivateKey, + ecc_sign: this.eccSign, + ecc_verify: this.eccVerify, + ecc_verify2: this.eccVerify2, + ecc_derive: this.eccDerive, + ecc_getOrder: this.eccGetOrder, + ecc_getGenerator: this.eccGetGenerator, + importKey: this.importKey, + unregisterKey: this.unregisterKey, + bn_getBitsLength: this.bnGetBitsLength, + bn_umod: this.bnUmod, + bn_eq: this.bnEq, + point_encode: this.pointEncode, + point_mul: this.pointMul, + point_add: this.pointAdd, + fillWithZeroesTo32: this.fillWithZeroesTo32, + getRecoveryParam: this.getRecoveryParam, + }; + + async methodCaller(name: string, params: unknown): Promise { + if (this.methodsMap[name]) { + return (this.methodsMap[name] as (p: unknown) => Promise).call( + this, + this.copyWasmBuffers(params), + ); + } + throw new Error(`Method '${name}' is not implemented.`); + } + + /** + * Copies Uint8Array fields in the flat params object passed by the WASM bridge, + * detaching them from the WASM linear memory heap before any async suspension. + * WASM linear memory is backed by a SharedArrayBuffer when threading is enabled, + * and SubtleCrypto.importKey rejects views over shared memory. SharedArrayBuffer + * .slice() returns another SharedArrayBuffer, so we must copy bytes manually + * into a brand-new ArrayBuffer via set(). + */ + private copyWasmBuffers(params: unknown): unknown { + if (params === null || typeof params !== "object" || params instanceof CryptoKey) { + return params; + } + if (params instanceof Uint8Array) { + return this.copyUint8Array(params); + } + const src = params as Record; + const out: Record = {}; + for (const key of Object.keys(src)) { + const v = src[key]; + out[key] = v instanceof Uint8Array ? this.copyUint8Array(v) : v; + } + return out; + } + + /** + * Copies a Uint8Array into a fresh plain ArrayBuffer-backed view. + */ + private copyUint8Array(src: Uint8Array): Uint8Array { + const dst = new Uint8Array(src.byteLength); + dst.set(src); + return dst; + } + + public async randomBytes(params: Types.RANDOM_BYTES_PARAMS): Promise { + assertArgsValid(params, Types.RANDOM_BYTES_PARAMS); + assertIsNumber(params.length); + let buf = new Uint8Array(params.length); + return Utils.toArrayBuffer(globalThis.crypto.getRandomValues(buf)); + } + + private async getOrImportKey( + keyInput: Uint8Array | CryptoKey | string, + algorithm: AlgorithmIdentifier, + usages: KeyUsage[], + ): Promise { + if (keyInput instanceof CryptoKey) { + return keyInput; + } + if (typeof keyInput === "string") { + const entry = this.keys.get(keyInput); + if (!entry) { + throw new Error(`Key with ID '${keyInput}' not found in registry.`); + } + return entry.key; + } + if (keyInput instanceof Uint8Array) { + const algoName = typeof algorithm === "string" ? algorithm : algorithm.name; + if (algoName === "secp256k1-private" || algoName === "secp256k1-public") { + return keyInput as unknown as CryptoKey; + } + const key = await subtle.importKey( + "raw", + keyInput as unknown as BufferSource, + algorithm, + false, + usages, + ); + keyInput.fill(0); + return key; + } + throw new Error("Invalid key input type."); + } + + public async importKey(params: { + key: Uint8Array; + algo: AlgorithmIdentifier; + usages: KeyUsage[]; + id?: string; + }): Promise { + const cryptoKey = await subtle.importKey( + "raw", + params.key as unknown as BufferSource, + params.algo, + false, + params.usages, + ); + const id = params.id || Utils.randomString(16); + this.keys.set(id, { key: cryptoKey }); + params.key.fill(0); + return id; + } + + public unregisterKey(params: { id: string }): void { + this.keys.delete(params.id); + } + + public async hmac(params: Types.HMAC_PARAMS): Promise { + assertArgsValid(params, Types.HMAC_PARAMS); + assertIsString(params.engine); + assertIsUint8Array(params.data); + if (params.engine === "sha1") { + return this.hmacSha1({ key: params.key, data: params.data }); + } else if (params.engine === "sha256") { + return this.hmacSha256({ key: params.key, data: params.data }); + } else if (params.engine === "sha512") { + return this.hmacSha512({ key: params.key, data: params.data }); + } + throw new Error("hmac: invalid engine arg"); + } + + public async hmacSha1(params: { + key: Uint8Array | CryptoKey | string; + data: ArrayBuffer | Uint8Array; + }): Promise { + const key = await this.getOrImportKey( + params.key, + { name: "HMAC", hash: "SHA-1" } as unknown as AlgorithmIdentifier, + ["sign"], + ); + return await subtle.sign("HMAC", key, new Uint8Array(params.data)); + } + + public async hmacSha256(params: { + key: Uint8Array | CryptoKey | string; + data: ArrayBuffer | Uint8Array; + }): Promise { + const key = await this.getOrImportKey( + params.key, + { name: "HMAC", hash: "SHA-256" } as unknown as AlgorithmIdentifier, + ["sign"], + ); + return subtle.sign("HMAC", key, new Uint8Array(params.data)); + } + + public async hmacSha512(params: { + key: Uint8Array | CryptoKey | string; + data: ArrayBuffer | Uint8Array; + }): Promise { + const key = await this.getOrImportKey( + params.key, + { name: "HMAC", hash: "SHA-512" } as unknown as AlgorithmIdentifier, + ["sign"], + ); + return subtle.sign("HMAC", key, new Uint8Array(params.data)); + } + + public async sha1(params: Types.SHA_PARAMS): Promise { + assertArgsValid(params, Types.SHA_PARAMS); + assertIsUint8Array(params.data); + return subtle.digest("SHA-1", new Uint8Array(params.data)); + } + + public async sha256(params: Types.SHA_PARAMS): Promise { + assertArgsValid(params, Types.SHA_PARAMS); + assertIsUint8Array(params.data); + return subtle.digest("SHA-256", new Uint8Array(params.data)); + } + + public async sha512(params: Types.SHA_PARAMS): Promise { + assertArgsValid(params, Types.SHA_PARAMS); + assertIsUint8Array(params.data); + return subtle.digest("SHA-512", new Uint8Array(params.data)); + } + + public async ripemd160Impl(params: Types.RIPEMD160_PARAMS): Promise { + assertArgsValid(params, Types.RIPEMD160_PARAMS); + assertIsUint8Array(params.data); + return Utils.toArrayBuffer(nobleRipemd160(new Uint8Array(params.data))); + } + + public async aes256EcbEncrypt(params: Types.AES256ECB_PARAMS): Promise { + assertArgsValid(params, Types.AES256ECB_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.key); + const keyCopy = new Uint8Array(params.key); + const aesEcb = new aesjs.ModeOfOperation.ecb(keyCopy); + const encryptedBytes = aesEcb.encrypt(new Uint8Array(params.data)); + keyCopy.fill(0); + return Utils.toArrayBuffer(encryptedBytes); + } + + public async aes256EcbDecrypt(params: Types.AES256ECB_PARAMS): Promise { + assertArgsValid(params, Types.AES256ECB_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.key); + const keyCopy = new Uint8Array(params.key); + const aesEcb = new aesjs.ModeOfOperation.ecb(keyCopy); + const decryptedBytes = aesEcb.decrypt(new Uint8Array(params.data)); + keyCopy.fill(0); + return Utils.toArrayBuffer(decryptedBytes); + } + + public async aes256CbcPkcs7Encrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { + assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.iv); + const key = await this.getOrImportKey(params.key, "AES-CBC", ["encrypt"]); + return subtle.encrypt( + { name: "AES-CBC", iv: new Uint8Array(params.iv) as unknown as BufferSource }, + key, + new Uint8Array(params.data) as unknown as BufferSource, + ); + } + + public async aes256CbcPkcs7Decrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { + assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.iv); + const key = await this.getOrImportKey(params.key, "AES-CBC", ["decrypt"]); + return subtle.decrypt( + { name: "AES-CBC", iv: new Uint8Array(params.iv) as unknown as BufferSource }, + key, + new Uint8Array(params.data) as unknown as BufferSource, + ); + } + + public async aes256CbcNoPadEncrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { + assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.key); + assertIsUint8Array(params.iv); + const keyCopy = new Uint8Array(params.key); + const aesCbc = new aesjs.ModeOfOperation.cbc(keyCopy, new Uint8Array(params.iv)); + const encryptedBytes = aesCbc.encrypt(new Uint8Array(params.data)); + keyCopy.fill(0); + return Utils.toArrayBuffer(encryptedBytes); + } + + public async aes256CbcNoPadDecrypt(params: Types.Aes256CbcPkcs7_PARAMS): Promise { + assertArgsValid(params, Types.Aes256CbcPkcs7_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.key); + assertIsUint8Array(params.iv); + const keyCopy = new Uint8Array(params.key); + const aesCbc = new aesjs.ModeOfOperation.cbc(keyCopy, new Uint8Array(params.iv)); + const decryptedBytes = aesCbc.decrypt(new Uint8Array(params.data)); + keyCopy.fill(0); + return Utils.toArrayBuffer(decryptedBytes); + } + + public async prf_tls12(params: Types.Prf_tls12_PARAMS): Promise { + assertArgsValid(params, Types.Prf_tls12_PARAMS); + assertIsUint8Array(params.key); + assertIsUint8Array(params.seed); + assertIsNumber(params.length); + let result = new Uint8Array(0); + let a = new Uint8Array(params.seed); + while (result.length < params.length) { + a = new Uint8Array(await this.hmacSha256({ key: new Uint8Array(params.key), data: a })); + const block = new Uint8Array( + await this.hmacSha256({ + key: new Uint8Array(params.key), + data: concatBytes(a, new Uint8Array(params.seed)), + }), + ); + result = concatBytes(result, block); + } + return Utils.toArrayBuffer(result.subarray(0, params.length)); + } + + public async kdf( + algo: string, + length: number, + key: Uint8Array, + labelStr: string, + ): Promise { + const label = textEncoder.encode(labelStr); + const seed = new Uint8Array(label.length + 5); + seed.set(label, 0); + seed[label.length] = 0; + writeUInt32BE(seed, length, label.length + 1); + let k = new Uint8Array(0); + let result = new Uint8Array(0); + let i = 1; + while (result.length < length) { + const count = new Uint8Array(4); + writeUInt32BE(count, i++, 0); + const input = concatBytes(k, count, seed); + const hmac = await this.hmac({ engine: algo, key, data: input }); + k = new Uint8Array(hmac); + result = concatBytes(result, k); + } + return result; + } + + public async getKEM(algo: string, key: Uint8Array, keLen?: number, kmLen?: number) { + if (!keLen && keLen !== 0) { + keLen = 32; + } + if (!kmLen && kmLen !== 0) { + kmLen = 32; + } + const kEM = await this.kdf(algo, keLen + kmLen, key, "key expansion"); + return { + kE: kEM.subarray(0, keLen), + kM: kEM.subarray(keLen), + }; + } + + public async aes256CbcHmac256Encrypt( + params: Types.Aes256CbcPkcs7Encrypt_PARAMS, + ): Promise { + assertArgsValid(params, Types.Aes256CbcPkcs7Encrypt_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.key); + assertIsUint8Array(params.iv); + assertIsNumber(params.taglen); + const kem = await this.getKEM("sha256", new Uint8Array(params.key)); + const iv = new Uint8Array(params.iv).subarray(0, 16); + const prefix = new Uint8Array(16); + const data = concatBytes(prefix, new Uint8Array(params.data)); + const cipher = await this.aes256CbcPkcs7Encrypt({ data, key: kem.kE, iv }); + const tag = await this.hmacSha256({ key: kem.kM, data: cipher }); + return Utils.toArrayBuffer( + concatBytes(new Uint8Array(cipher), new Uint8Array(tag).subarray(0, params.taglen)), + ); + } + + public async aes256CbcHmac256Decrypt( + params: Types.Aes256CbcPkcs7Decrypt_PARAMS, + ): Promise { + assertArgsValid(params, Types.Aes256CbcPkcs7Decrypt_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.key); + assertIsNumber(params.taglen); + const kem = await this.getKEM("sha256", new Uint8Array(params.key)); + let data = new Uint8Array(params.data); + const tag = data.subarray(data.length - params.taglen); + data = data.subarray(0, data.length - params.taglen); + const rTag = new Uint8Array(await this.hmacSha256({ key: kem.kM, data })).subarray( + 0, + params.taglen, + ); + if (!uint8ArrayEqual(tag, rTag)) { + throw new Error("Wrong message security tag"); + } + const iv = data.subarray(0, 16); + data = data.subarray(16); + return this.aes256CbcPkcs7Decrypt({ data, key: kem.kE, iv }); + } + + public async aeadEncrypt(params: Types.AeadEncrypt_PARAMS): Promise { + assertArgsValid(params, Types.AeadEncrypt_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.iv); + assertIsUint8Array(params.aad); + const key = await this.getOrImportKey(params.key, "AES-GCM", ["encrypt"]); + return subtle.encrypt( + { + name: "AES-GCM", + iv: new Uint8Array(params.iv) as unknown as BufferSource, + additionalData: new Uint8Array(params.aad) as unknown as BufferSource, + tagLength: 128, + }, + key, + new Uint8Array(params.data) as unknown as BufferSource, + ); + } + + public async aeadDecrypt(params: Types.AeadDecrypt_PARAMS): Promise { + assertArgsValid(params, Types.AeadDecrypt_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.iv); + assertIsUint8Array(params.aad); + assertIsUint8Array(params.tag); + const key = await this.getOrImportKey(params.key, "AES-GCM", ["decrypt"]); + const dataWithTag = concatBytes(new Uint8Array(params.data), new Uint8Array(params.tag)); + return subtle.decrypt( + { + name: "AES-GCM", + iv: new Uint8Array(params.iv) as unknown as BufferSource, + additionalData: new Uint8Array(params.aad) as unknown as BufferSource, + tagLength: 128, + }, + key, + dataWithTag as unknown as BufferSource, + ); + } + + public async pbkdf2(params: Types.PBKDF2_PARAMS): Promise { + assertArgsValid(params, Types.PBKDF2_PARAMS); + assertIsString(params.salt); + assertIsNumber(params.rounds); + assertIsNumber(params.length); + assertIsString(params.hash); + + let key: CryptoKey; + if (params.password instanceof CryptoKey) { + key = params.password; + } else { + const passwordStr = params.password as string; + key = await subtle.importKey( + "raw", + textEncoder.encode(passwordStr) as unknown as BufferSource, + "PBKDF2", + false, + ["deriveBits"], + ); + } + + return subtle.deriveBits( + { + name: "PBKDF2", + salt: textEncoder.encode(params.salt) as unknown as BufferSource, + iterations: params.rounds, + hash: { name: EmCrypto.HASH_ALGORITHM_MAP[params.hash] }, + }, + key, + params.length * 8, + ); + } + + public async hash160(params: Types.HASH160_PARAMS): Promise { + assertArgsValid(params, Types.HASH160_PARAMS); + assertIsUint8Array(params.data); + const sha256 = await subtle.digest("SHA-256", new Uint8Array(params.data)); + return Utils.toArrayBuffer(nobleRipemd160(new Uint8Array(sha256))); + } + + private fillWithZeroesTo32(buffer: Uint8Array): Uint8Array { + if (buffer.length >= 32) return buffer; + const result = new Uint8Array(32); + result.set(buffer, 32 - buffer.length); + return result; + } + + public async eccGenPair() { + const privateKey = secp.utils.randomSecretKey(); // 32 bytes + const publicKey = secp.getPublicKey(privateKey, true); // 33 bytes, compressed + return { privateKey, publicKey }; + } + + public async eccFromPublicKey(params: Types.FromPublicOrPrivateKey_PARAMS) { + assertArgsValid(params, Types.FromPublicOrPrivateKey_PARAMS); + assertIsUint8Array(params.key); + const point = secp.Point.fromBytes(new Uint8Array(params.key)); + return { publicKey: Utils.toArrayBuffer(point.toBytes(true)) }; + } + + public async eccFromPrivateKey(params: Types.FromPublicOrPrivateKey_PARAMS) { + assertArgsValid(params, Types.FromPublicOrPrivateKey_PARAMS); + assertIsUint8Array(params.key); + const privateKey = this.fillWithZeroesTo32(new Uint8Array(params.key)); + const publicKey = secp.getPublicKey(privateKey, true); + return { + privateKey: new Uint8Array(Utils.toArrayBuffer(privateKey)), + publicKey: new Uint8Array(Utils.toArrayBuffer(publicKey)), + }; + } + + public async eccSign(params: Types.Sign_PARAMS) { + assertArgsValid(params, Types.Sign_PARAMS); + assertIsUint8Array(params.data); + const privateKey = await this.getOrImportKey( + params.privateKey, + "secp256k1-private" as unknown as AlgorithmIdentifier, + ["sign"], + ); + const privBytes = new Uint8Array(privateKey as unknown as Uint8Array); + // v3: sign with { format: 'recovered' } returns 65-byte Uint8Array: + // [0] = raw recovery id (0-3), [1..64] = r || s + const rawSig = secp.sign(params.data, privBytes, { format: "recovered", prehash: false }); + const out = new Uint8Array(65); + out[0] = 27 + rawSig[0]; + out.set(rawSig.subarray(1), 1); // r || s + return Utils.toArrayBuffer(out); + } + + private getRecoveryParam(value: number) { + if (value >= 27 && value <= 30) { + return value - 27; + } + if (value >= 31 && value <= 34) { + return value - 31; + } + if (value >= 35 && value <= 38) { + return value - 35; + } + if (value >= 39 && value <= 42) { + return value - 39; + } + throw new Error("Invalid recovery param value"); + } + + public async eccVerify(params: Types.Verify_PARAMS) { + assertArgsValid(params, Types.Verify_PARAMS); + assertIsUint8Array(params.publicKey); + assertIsUint8Array(params.data); + assertIsUint8Array(params.signature); + // signature format: [recovery_byte (1B)] [r (32B)] [s (32B)] + const compactSig = params.signature.subarray(1, 65); // 64 bytes: r || s + return secp.verify(compactSig, params.data, params.publicKey, { prehash: false, lowS: false }); + } + + public async eccVerify2(params: Types.Verify2_PARAMS) { + assertArgsValid(params, Types.Verify2_PARAMS); + assertIsUint8Array(params.data); + assertIsUint8Array(params.r); + assertIsUint8Array(params.s); + const buffer = new Uint8Array(65); + buffer[0] = 27; + buffer.set(params.r, 1); + buffer.set(params.s, 33); + return this.eccVerify({ + publicKey: params.publicKey, + data: buffer, + signature: params.data, + }); + } + + public async eccDerive(params: Types.Derive_PARAMS) { + assertArgsValid(params, Types.Derive_PARAMS); + assertIsUint8Array(params.publicKey); + const privateKey = await this.getOrImportKey( + params.privateKey, + "secp256k1-private" as unknown as AlgorithmIdentifier, + ["deriveBits"], + ); + const privBytes = new Uint8Array(privateKey as unknown as Uint8Array); + // getSharedSecret with isCompressed=true returns [prefix(1B), x(32B)] = 33 bytes + const shared = secp.getSharedSecret(privBytes, new Uint8Array(params.publicKey), true); + return Utils.toArrayBuffer(shared.slice(1)); // 32-byte x-coordinate + } + + public async eccGetOrder(_params?: undefined) { + return bigIntToBytes(secp.Point.CURVE().n, 32); + } + + public async eccGetGenerator(_params?: undefined): Promise { + return secp.Point.BASE.toBytes(true); // 33-byte compressed generator G + } + + public async bnGetBitsLength(params: Types.GetBitsLength_PARAMS) { + assertArgsValid(params, Types.GetBitsLength_PARAMS); + assertIsUint8Array(params.bn); + const bn = bytesToBigInt(new Uint8Array(params.bn)); + return bn === 0n ? 0 : bn.toString(2).length; + } + + public async bnUmod(params: Types.BNumod_PARAMS) { + assertArgsValid(params, Types.BNumod_PARAMS); + assertIsUint8Array(params.bn); + assertIsUint8Array(params.bn2); + const a = bytesToBigInt(new Uint8Array(params.bn)); + const b = bytesToBigInt(new Uint8Array(params.bn2)); + const r = a % b; + return bigIntToBytes(r < 0n ? r + b : r); + } + + public async bnEq(params: Types.BNeq_PARAMS) { + assertArgsValid(params, Types.BNeq_PARAMS); + assertIsUint8Array(params.bn); + assertIsUint8Array(params.bn2); + return bytesToBigInt(new Uint8Array(params.bn)) === bytesToBigInt(new Uint8Array(params.bn2)); + } + + public async pointEncode(params: Types.PointEncode_PARAMS) { + assertArgsValid(params, Types.PointEncode_PARAMS); + assertIsUint8Array(params.point); + const point = secp.Point.fromBytes(new Uint8Array(params.point)); + if (params.compact) { + return point.toBytes(true); // 33-byte compressed + } else { + return Utils.toArrayBuffer(point.toBytes(false)); // 65-byte uncompressed + } + } + + public async pointMul(params: Types.PointMul_PARAMS) { + assertArgsValid(params, Types.PointMul_PARAMS); + assertIsUint8Array(params.point); + assertIsUint8Array(params.bn); + const point = secp.Point.fromBytes(new Uint8Array(params.point)); + const scalar = bytesToBigInt(new Uint8Array(params.bn)); + return point.multiply(scalar).toBytes(true); + } + + public async pointAdd(params: Types.PointAdd_PARAMS) { + assertArgsValid(params, Types.PointAdd_PARAMS); + assertIsUint8Array(params.point); + assertIsUint8Array(params.point2); + const point1 = secp.Point.fromBytes(new Uint8Array(params.point)); + const point2 = secp.Point.fromBytes(new Uint8Array(params.point2)); + return point1.add(point2).toBytes(true); + } +} diff --git a/src/crypto/Types.ts b/src/crypto/Types.ts new file mode 100644 index 0000000..12e8ef3 --- /dev/null +++ b/src/crypto/Types.ts @@ -0,0 +1,154 @@ +/*! +PrivMX Endpoint. +Copyright © 2024 Simplito sp. z o.o. + +This file is part of the PrivMX Platform (https://privmx.dev). +This software is Licensed under the PrivMX Free License. + +See the License for the specific language governing permissions and +limitations under the License. +*/ + +export type FacadeKeyRef = string | Uint8Array | CryptoKey; + +export class RANDOM_BYTES_PARAMS { + length: number = 0; +} + +export class HMAC_PARAMS { + engine: string; + key: FacadeKeyRef; + data: Uint8Array; +} + +export class SHA_PARAMS { + data: Uint8Array; +} + +export class RIPEMD160_PARAMS { + data: Uint8Array; +} + +export class HASH160_PARAMS { + data: Uint8Array; +} + +export class AES256ECB_PARAMS { + data: Uint8Array; + key: FacadeKeyRef; +} + +export class Aes256CbcPkcs7_PARAMS { + data: Uint8Array; + key: FacadeKeyRef; + iv: Uint8Array; +} + +export class Prf_tls12_PARAMS { + key: FacadeKeyRef; + seed: Uint8Array; + length: number = 0; +} + +export class Kdf_PARAMS { + length: number = 0; + key: FacadeKeyRef; + label: string; +} + +export class GenerateIv_PARAMS { + key: FacadeKeyRef; + idx: number = 0; +} + +export class Aes256CbcPkcs7Encrypt_PARAMS { + data: Uint8Array; + key: FacadeKeyRef; + iv: Uint8Array; + taglen: number = 0; +} + +export class Aes256CbcPkcs7Decrypt_PARAMS { + data: Uint8Array; + key: FacadeKeyRef; + taglen: number = 0; +} + +export class FromPublicOrPrivateKey_PARAMS { + key: Uint8Array; +} + +export class Sign_PARAMS { + privateKey: FacadeKeyRef; + data: Uint8Array; +} + +export class Verify_PARAMS { + publicKey: Uint8Array; + data: Uint8Array; + signature: Uint8Array; +} + +export class Verify2_PARAMS { + publicKey: Uint8Array; + data: Uint8Array; + r: Uint8Array; + s: Uint8Array; +} + +export class Derive_PARAMS { + privateKey: FacadeKeyRef; + publicKey: Uint8Array; +} + +export class PBKDF2_PARAMS { + password: string | CryptoKey; + salt: string; + rounds: number = 0; + length: number = 0; + hash: string; +} + +export class GetBitsLength_PARAMS { + bn: Uint8Array; +} + +export class BNumod_PARAMS { + bn: Uint8Array; + bn2: Uint8Array; +} + +export class BNeq_PARAMS { + bn: Uint8Array; + bn2: Uint8Array; +} + +export class PointEncode_PARAMS { + point: Uint8Array; + compact: boolean; +} + +export class PointMul_PARAMS { + point: Uint8Array; + bn: Uint8Array; +} + +export class PointAdd_PARAMS { + point: Uint8Array; + point2: Uint8Array; +} + +export class AeadEncrypt_PARAMS { + key: FacadeKeyRef; + iv: Uint8Array; + aad: Uint8Array; + data: Uint8Array; +} + +export class AeadDecrypt_PARAMS { + key: FacadeKeyRef; + iv: Uint8Array; + aad: Uint8Array; + data: Uint8Array; + tag: Uint8Array; +} diff --git a/src/crypto/Utils.ts b/src/crypto/Utils.ts new file mode 100644 index 0000000..9d0d650 --- /dev/null +++ b/src/crypto/Utils.ts @@ -0,0 +1,38 @@ +/*! +PrivMX Endpoint. +Copyright © 2024 Simplito sp. z o.o. + +This file is part of the PrivMX Platform (https://privmx.dev). +This software is Licensed under the PrivMX Free License. + +See the License for the specific language governing permissions and +limitations under the License. +*/ + +export function toArrayBuffer(buffer: Uint8Array | ArrayBuffer): ArrayBuffer { + if (buffer instanceof ArrayBuffer) { + return buffer; + } + return buffer.buffer.slice( + buffer.byteOffset, + buffer.byteOffset + buffer.byteLength, + ) as ArrayBuffer; +} + +export function toBuffer(byteArray: ArrayBuffer | Uint8Array): Uint8Array { + if (byteArray instanceof Uint8Array) { + return byteArray; + } + return new Uint8Array(byteArray); +} + +export function randomString(length: number): string { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let result = ""; + const randomValues = new Uint8Array(length); + globalThis.crypto.getRandomValues(randomValues); + for (let i = 0; i < length; i++) { + result += chars.charAt(randomValues[i] % chars.length); + } + return result; +} diff --git a/src/crypto/__tests__/Aead.test.ts b/src/crypto/__tests__/Aead.test.ts new file mode 100644 index 0000000..0cd3304 --- /dev/null +++ b/src/crypto/__tests__/Aead.test.ts @@ -0,0 +1,120 @@ +import { CryptoFacade } from "../CryptoFacade"; +import { setGlobalEmCrypto } from "../index"; + +describe("AEAD (AES-GCM) Tests", () => { + beforeAll(async () => { + setGlobalEmCrypto(); + }); + + it("should encrypt and decrypt correctly with AAD", async () => { + const keyBytes = new Uint8Array(32).fill(1); + const iv = new Uint8Array(12).fill(2); + const aad = new Uint8Array([1, 2, 3, 4]); + const data = new Uint8Array([10, 20, 30, 40, 50]); + + const keyId = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + expect(encrypted.byteLength).toBe(data.length + 16); + + const ciphertext = new Uint8Array(encrypted).slice(0, data.length); + const tag = new Uint8Array(encrypted).slice(data.length); + + const decrypted = await CryptoFacade.aeadDecrypt(keyId, iv, aad, ciphertext, tag); + expect(new Uint8Array(decrypted)).toEqual(data); + CryptoFacade.unregisterKey(keyId); + }); + + it("should encrypt and decrypt correctly without AAD", async () => { + const keyBytes = new Uint8Array(32).fill(3); + const iv = new Uint8Array(12).fill(4); + const aad = new Uint8Array(0); + const data = new TextEncoder().encode("Hello AEAD!"); + + const keyId = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + const ciphertext = new Uint8Array(encrypted).slice(0, data.length); + const tag = new Uint8Array(encrypted).slice(data.length); + + const decrypted = await CryptoFacade.aeadDecrypt(keyId, iv, aad, ciphertext, tag); + expect(new TextDecoder().decode(decrypted)).toBe("Hello AEAD!"); + CryptoFacade.unregisterKey(keyId); + }); + + it("should fail decryption if tag is tampered", async () => { + const keyBytes = new Uint8Array(32).fill(5); + const iv = new Uint8Array(12).fill(6); + const aad = new Uint8Array(0); + const data = new Uint8Array([1, 2, 3]); + + const keyId = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + const ciphertext = new Uint8Array(encrypted).slice(0, data.length); + const tag = new Uint8Array(encrypted).slice(data.length); + + tag[0] ^= 0xff; // Tamper tag + + await expect(CryptoFacade.aeadDecrypt(keyId, iv, aad, ciphertext, tag)).rejects.toThrow(); + CryptoFacade.unregisterKey(keyId); + }); + + it("should fail decryption if AAD is tampered", async () => { + const keyBytes = new Uint8Array(32).fill(7); + const iv = new Uint8Array(12).fill(8); + const aad = new Uint8Array([1, 2, 3]); + const data = new Uint8Array([4, 5, 6]); + + const keyId = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + const ciphertext = new Uint8Array(encrypted).slice(0, data.length); + const tag = new Uint8Array(encrypted).slice(data.length); + + const wrongAad = new Uint8Array([1, 2, 4]); // Tamper AAD + + await expect( + CryptoFacade.aeadDecrypt(keyId, iv, wrongAad, ciphertext, tag), + ).rejects.toThrow(); + CryptoFacade.unregisterKey(keyId); + }); + + it("should encrypt and decrypt large data buffers (1MB)", async () => { + const keyBytes = new Uint8Array(32).fill(9); + const iv = new Uint8Array(12).fill(10); + const aad = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + const data = new Uint8Array(1024 * 1024).fill(0xaa); + + const keyId = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + const ciphertext = new Uint8Array(encrypted).slice(0, data.length); + const tag = new Uint8Array(encrypted).slice(data.length); + + const decrypted = await CryptoFacade.aeadDecrypt(keyId, iv, aad, ciphertext, tag); + expect(new Uint8Array(decrypted)).toEqual(data); + CryptoFacade.unregisterKey(keyId); + }); + + it("should reject raw Uint8Array keys at the facade level", async () => { + const rawKey = new Uint8Array(32).fill(99); + const iv = new Uint8Array(12).fill(0); + const aad = new Uint8Array(0); + const data = new Uint8Array([1, 2, 3]); + + await expect(CryptoFacade.aeadEncrypt(rawKey as any, iv, aad, data)).rejects.toThrow( + /Raw key bytes are not allowed/, + ); + }); +}); diff --git a/src/crypto/__tests__/Performance.test.ts b/src/crypto/__tests__/Performance.test.ts new file mode 100644 index 0000000..6d14c50 --- /dev/null +++ b/src/crypto/__tests__/Performance.test.ts @@ -0,0 +1,57 @@ +import { CryptoFacade } from "../CryptoFacade"; +import { setGlobalEmCrypto, getEmCrypto } from "../index"; + +describe("Crypto Performance Benchmarks", () => { + beforeAll(async () => { + setGlobalEmCrypto(); + }); + + it("should compare AEAD performance: raw bytes vs CryptoKey reuse", async () => { + const iv = new Uint8Array(12).fill(2); + const aad = new Uint8Array([1, 2, 3, 4]); + const data = new Uint8Array(1024 * 128).fill(0); + const iterations = 500; + + const keyBytesTemplate = new Uint8Array(32).fill(1); + + // 1. Raw Bytes (repeated import + wipe each iteration) + const startRaw = performance.now(); + for (let i = 0; i < iterations; i++) { + await getEmCrypto().aeadEncrypt({ key: keyBytesTemplate, iv, aad, data }); + } + const endRaw = performance.now(); + const rawTime = endRaw - startRaw; + + // 2. CryptoKey reuse + const keyId = await CryptoFacade.importKeyAndWipeMaterial( + new Uint8Array(keyBytesTemplate), + "AES-GCM", + ["encrypt", "decrypt"], + ); + const startKey = performance.now(); + for (let i = 0; i < iterations; i++) { + await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + } + const endKey = performance.now(); + const keyTime = endKey - startKey; + + console.log(`AEAD Performance (${iterations} iterations, 128KB data):`); + console.log(`Raw Bytes (import every time): ${rawTime.toFixed(2)}ms`); + console.log(`CryptoKey Reuse (registry): ${keyTime.toFixed(2)}ms`); + console.log(`Speedup: ${(rawTime / keyTime).toFixed(2)}x`); + + // Clean up + CryptoFacade.unregisterKey(keyId); + }); + + it("should always wipe raw key bytes after use", async () => { + const keyBytes = new Uint8Array(32).fill(0xff); + const iv = new Uint8Array(12).fill(0); + const aad = new Uint8Array(0); + const data = new Uint8Array(16).fill(0); + + expect(keyBytes.every((b) => b === 0xff)).toBe(true); + await getEmCrypto().aeadEncrypt({ key: keyBytes, iv, aad, data }); + expect(keyBytes.every((b) => b === 0)).toBe(true); + }); +}); diff --git a/src/crypto/__tests__/Robustness.test.ts b/src/crypto/__tests__/Robustness.test.ts new file mode 100644 index 0000000..d2f193e --- /dev/null +++ b/src/crypto/__tests__/Robustness.test.ts @@ -0,0 +1,44 @@ +import { CryptoFacade } from "../CryptoFacade"; +import { setGlobalEmCrypto } from "../index"; + +describe("Crypto Robustness: Stale Handle Recovery", () => { + beforeAll(async () => { + setGlobalEmCrypto(); + }); + + it("should recover when a key handle is manually unregistered from JS registry", async () => { + const keyBytes = new Uint8Array(32).fill(7); + const iv = new Uint8Array(12).fill(0); + const aad = new Uint8Array(0); + const data = new TextEncoder().encode("robustness test"); + + // 1. Initial import and use + const keyId = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted1 = await CryptoFacade.aeadEncrypt(keyId, iv, aad, data); + expect(encrypted1).toBeDefined(); + + // 2. Manually unregister the key behind facade's back + CryptoFacade.unregisterKey(keyId); + + // 3. Attempt to use the same keyId again + // Facade should throw "not found", but if we pass the RAW BYTES again, + // the driver (if we were in WASM) would recover. + // In pure JS, CryptoFacade.aeadEncrypt(keyId, ...) will fail if keyId is unknown. + + await expect(CryptoFacade.aeadEncrypt(keyId, iv, aad, data)).rejects.toThrow(/not found/); + + // 4. Test automatic recovery when passing raw bytes again (mimicking driver behavior) + // High level API doesn't have automatic "re-import on failure" for handles yet, + // but the C++ driver DOES. + // Let's verify that re-importing with same bytes works and doesn't conflict. + const keyId2 = await CryptoFacade.importKeyAndWipeMaterial(keyBytes, "AES-GCM", [ + "encrypt", + "decrypt", + ]); + const encrypted2 = await CryptoFacade.aeadEncrypt(keyId2, iv, aad, data); + expect(encrypted2).toEqual(encrypted1); + }); +}); diff --git a/drivers/privmx-webendpoint-drv-context/src/assert.ts b/src/crypto/assert.ts similarity index 62% rename from drivers/privmx-webendpoint-drv-context/src/assert.ts rename to src/crypto/assert.ts index d01856b..3efa3a7 100644 --- a/drivers/privmx-webendpoint-drv-context/src/assert.ts +++ b/src/crypto/assert.ts @@ -18,33 +18,46 @@ export function assertIsArrayBuffer(value: unknown): asserts value is ArrayBuffe } export function assertIsUint8Array(value: unknown): asserts value is ArrayBuffer { - if (!(value instanceof Uint8Array) && !(value instanceof Int8Array)) throw new Error("Not Uint8Array or Int8Array"); + if (!(value instanceof Uint8Array) && !(value instanceof Int8Array)) + throw new Error("Not Uint8Array or Int8Array"); } export function assertIsNumber(value: unknown): asserts value is number { if (typeof value !== "number") throw new Error("Not a number"); } -export function assertArgsValid(obj: any, argsType: { new(...args: any[]): T }) { +export function assertArgsValid(obj: any, argsType: { new (...args: any[]): T }) { const objKeys = Object.keys(obj); const expected = Object.keys(new argsType()); - if (!(objKeys.length === expected.length && objKeys.every(x => expected.includes(x)))) { - throw new Error("Invalid arguments list\nexpected: " + JSON.stringify(expected) + "\nactual: " + JSON.stringify(objKeys)); + if (!objKeys.every((x) => expected.includes(x))) { + throw new Error( + "Invalid arguments list\nexpected: " + + JSON.stringify(expected) + + "\nactual: " + + JSON.stringify(objKeys), + ); } } -export function assertArgsAndValueValid(actualObj: T, defaultObj: { new(...args: any[]): T}) { +export function assertArgsAndValueValid(actualObj: T, defaultObj: { new (...args: any[]): T }) { const objKeys = Object.keys(actualObj); const expected = Object.keys(new defaultObj()); - if (!(objKeys.length === expected.length && objKeys.every(x => expected.includes(x)))) { - throw new Error("Invalid arguments list\nexpected: " + JSON.stringify(expected) + "\nactual: " + JSON.stringify(objKeys)); + if (!objKeys.every((x) => expected.includes(x))) { + throw new Error( + "Invalid arguments list\nexpected: " + + JSON.stringify(expected) + + "\nactual: " + + JSON.stringify(objKeys), + ); } const defaultInstance = new defaultObj(); for (const p of objKeys) { const actualValue = actualObj[p as keyof typeof actualObj]; const defaultValue = defaultInstance[p as keyof typeof actualObj]; if (actualValue == defaultValue) { - throw new Error(`Invalid argument value of ${defaultObj.name}.${p}: ${(defaultInstance)[p]}`); + throw new Error( + `Invalid argument value of ${defaultObj.name}.${p}: ${(defaultInstance)[p]}`, + ); } } -} \ No newline at end of file +} diff --git a/src/crypto/index.ts b/src/crypto/index.ts new file mode 100644 index 0000000..05f8f1c --- /dev/null +++ b/src/crypto/index.ts @@ -0,0 +1,48 @@ +/*! +PrivMX Web Endpoint. +Copyright © 2024 Simplito sp. z o.o. + +This file is part of the PrivMX Platform (https://privmx.dev). +This software is Licensed under the PrivMX Free License. + +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { EmCrypto } from "./EmCrypto"; + +let emCryptoInstance: EmCrypto | null = null; + +export function getEmCrypto(): EmCrypto { + if (!emCryptoInstance) { + emCryptoInstance = new EmCrypto(); + } + return emCryptoInstance; +} + +export function setGlobalEmCrypto(): void { + const emCrypto = getEmCrypto(); + const target = + typeof window !== "undefined" + ? (window as any) + : typeof globalThis !== "undefined" + ? (globalThis as any) + : (self as any); + target.em_crypto = emCrypto; + if (typeof window !== "undefined") { + (window as any).em_crypto = emCrypto; + } + if (typeof self !== "undefined") { + (self as any).em_crypto = emCrypto; + } + if (typeof globalThis !== "undefined") { + (globalThis as any).em_crypto = emCrypto; + } +} + +export function getMethodCaller(): (name: string, params: any) => Promise { + return getEmCrypto().methodCaller.bind(getEmCrypto()); +} + +export { EmCrypto }; +export * from "./CryptoFacade"; diff --git a/src/crypto/workerHelper.ts b/src/crypto/workerHelper.ts new file mode 100644 index 0000000..2354a52 --- /dev/null +++ b/src/crypto/workerHelper.ts @@ -0,0 +1,4 @@ +import { setGlobalEmCrypto } from "./index"; +import "../webStreams/worker/worker"; + +setGlobalEmCrypto(); diff --git a/src/service/EndpointFactory.ts b/src/service/EndpointFactory.ts index 9cf78ee..afbcb48 100644 --- a/src/service/EndpointFactory.ts +++ b/src/service/EndpointFactory.ts @@ -32,6 +32,7 @@ import { KvdbApi } from "./KvdbApi"; import { StoreApi } from "./StoreApi"; import { StreamApi } from "./StreamApi"; import { ThreadApi } from "./ThreadApi"; +import { setGlobalEmCrypto } from "../crypto/index"; /** * //doc-gen:ignore @@ -55,7 +56,8 @@ export class EndpointFactory { const basePath = this.resolveAssetsBasePath(assetsBasePath); this.assetsBasePath = basePath; - const assets = ["driver-web-context.js", "endpoint-wasm-module.js"]; + setGlobalEmCrypto(); + const assets = ["endpoint-wasm-module.js"]; for (const asset of assets) { await this.loadScript(this.buildAssetUrl(basePath, asset)); diff --git a/src/service/StreamApi.ts b/src/service/StreamApi.ts index f0cee6d..1ac9b46 100644 --- a/src/service/StreamApi.ts +++ b/src/service/StreamApi.ts @@ -25,7 +25,6 @@ import { RemoteStreamListener, } from "../Types"; import { StreamApiNative } from "../api/StreamApiNative"; -import { Buffer } from "buffer"; import { DataChannelCryptor } from "../webStreams/DataChannelCryptor"; import { Logger } from "../webStreams/Logger"; diff --git a/src/webStreams/CryptoUtils.ts b/src/webStreams/CryptoUtils.ts deleted file mode 100644 index ade4acc..0000000 --- a/src/webStreams/CryptoUtils.ts +++ /dev/null @@ -1,121 +0,0 @@ -// Types for function parameters and return values -type BufferLike = ArrayBuffer | Uint8Array; -type CryptoMaterial = BufferLike | CryptoKey; - -interface EncryptionResult { - success: true; - data: Uint8Array; -} - -interface EncryptionError { - success: false; - error: string; -} - -type EncryptionResponse = EncryptionResult | EncryptionError; - -interface DecryptionResult { - success: true; - data: Uint8Array; -} - -interface DecryptionError { - success: false; - error: string; -} - -type DecryptionResponse = DecryptionResult | DecryptionError; - -async function encryptWithAES256GCM( - key: CryptoMaterial, - iv: BufferLike, - data: BufferLike, - header: BufferLike, -): Promise { - try { - const cryptoKey = await ensureCryptoKey(key, "encrypt"); - - // Encrypt the data - const encrypted: ArrayBuffer = await crypto.subtle.encrypt( - { - name: "AES-GCM", - iv: iv, - additionalData: header, - tagLength: 128, // 16 bytes * 8 = 128 bits (TAG_LEN equivalent) - }, - cryptoKey, - data, - ); - - // The encrypted result contains both ciphertext and authentication tag - return { - success: true, - data: new Uint8Array(encrypted), - }; - } catch (error: unknown) { - return { - success: false, - error: "EncryptionFailed", - }; - } -} - -async function decryptWithAES256GCM( - key: CryptoMaterial, - iv: BufferLike, - encryptedData: BufferLike, - header: BufferLike, -): Promise { - try { - const cryptoKey = await ensureCryptoKey(key, "decrypt"); - - const decrypted: ArrayBuffer = await crypto.subtle.decrypt( - { - name: "AES-GCM", - iv: iv, - additionalData: header, - tagLength: 128, - }, - cryptoKey, - encryptedData, - ); - - return { - success: true, - data: new Uint8Array(decrypted), - }; - } catch (error: unknown) { - return { - success: false, - error: "DecryptionFailed", - }; - } -} - -// Type guard functions for better type safety -function isEncryptionSuccess(result: EncryptionResponse): result is EncryptionResult { - return result.success; -} - -function isDecryptionSuccess(result: DecryptionResponse): result is DecryptionResult { - return result.success; -} - -async function ensureCryptoKey(key: CryptoMaterial, usage: KeyUsage): Promise { - if (key instanceof CryptoKey) { - return key; - } - - return crypto.subtle.importKey("raw", key, { name: "AES-GCM" }, false, [usage]); -} - -export { - encryptWithAES256GCM, - decryptWithAES256GCM, - isEncryptionSuccess, - isDecryptionSuccess, - type EncryptionResponse, - type DecryptionResponse, - type BufferLike, - type CryptoMaterial, -}; diff --git a/src/webStreams/DataChannelCryptor.ts b/src/webStreams/DataChannelCryptor.ts index 3da1626..d558650 100644 --- a/src/webStreams/DataChannelCryptor.ts +++ b/src/webStreams/DataChannelCryptor.ts @@ -1,3 +1,4 @@ +import { CryptoFacade } from "../crypto/CryptoFacade"; import { DataChannelCryptorDecryptStatus } from "../Types"; import { KeyStore } from "./KeyStore"; import { Logger } from "./Logger"; @@ -69,18 +70,7 @@ export class DataChannelCryptor { keyIdBytes, }); - const cryptoKey = await this.keyStore.getEncriptionKey(); - - const encrypted = await crypto.subtle.encrypt( - { - name: "AES-GCM", - iv, - additionalData: header, - tagLength: GCM_TAG_LENGTH_BITS, - }, - cryptoKey, - plaintext, - ); + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, header, plaintext); const ciphertext = new Uint8Array(encrypted); @@ -101,18 +91,20 @@ export class DataChannelCryptor { ); } - const cryptoKey = await this.keyStore.getKey(parsed.keyId); - try { - const decrypted = await crypto.subtle.decrypt( - { - name: "AES-GCM", - iv: parsed.iv, - additionalData: parsed.header, - tagLength: GCM_TAG_LENGTH_BITS, - }, - cryptoKey, - parsed.ciphertext, + const fullBuffer = parsed.ciphertext; + if (fullBuffer.length < 16) { + throw new Error("Ciphertext too short for tag"); + } + const data = fullBuffer.slice(0, fullBuffer.length - 16); + const tag = fullBuffer.slice(fullBuffer.length - 16); + + const decrypted = await CryptoFacade.aeadDecrypt( + parsed.keyId, + parsed.iv, + parsed.header, + data, + tag, ); return { data: new Uint8Array(decrypted), seq: parsed.sequenceNumber }; diff --git a/src/webStreams/KeyStore.ts b/src/webStreams/KeyStore.ts index 97c9c4e..26f0193 100644 --- a/src/webStreams/KeyStore.ts +++ b/src/webStreams/KeyStore.ts @@ -1,63 +1,44 @@ import { Key } from "../Types"; +import { CryptoFacade } from "../crypto/CryptoFacade"; const AES_GCM_KEY_LENGTH_BYTES = 32; -interface StoredKey { - keyId: string; - cryptoKey: Promise; - type: number; -} - export class KeyStore { - private _keys: Map = new Map(); - private _encryptionKeyId: string = undefined; + private readonly registeredKeyIds = new Set(); + private encryptionKeyId: string | undefined = undefined; - setKeys(keys: Key[]) { - this._keys.clear(); - this._encryptionKeyId = undefined; + setKeys(keys: Key[]): void { + for (const id of this.registeredKeyIds) { + CryptoFacade.unregisterKey(id); + } + this.registeredKeyIds.clear(); + this.encryptionKeyId = undefined; for (const k of keys) { const rawKey = new Uint8Array(k.key); - this.assertKeyBytes(rawKey); - this._keys.set(k.keyId, { - keyId: k.keyId, - cryptoKey: crypto.subtle.importKey("raw", rawKey, { name: "AES-GCM" }, false, [ - "encrypt", - "decrypt", - ]), - type: k.type, - }); + if (rawKey.length !== AES_GCM_KEY_LENGTH_BYTES) { + throw new Error(`Invalid key length: ${rawKey.length}`); + } + CryptoFacade.importKeyAndWipeMaterial( + rawKey, + { name: "AES-GCM" }, + ["encrypt", "decrypt"], + k.keyId, + ); + this.registeredKeyIds.add(k.keyId); if (k.type === 0) { - this._encryptionKeyId = k.keyId; + this.encryptionKeyId = k.keyId; } } } - async getKey(keyId: string): Promise { - const key = this._keys.get(keyId); - return key ? key.cryptoKey : undefined; - } - - hasKey(keyId: string) { - return this._keys.has(keyId); - } - - async getEncriptionKey(): Promise { - if (!this._encryptionKeyId) { - throw new Error("No encryption key set."); - } - return this._keys.get(this._encryptionKeyId).cryptoKey; + hasKey(keyId: string): boolean { + return this.registeredKeyIds.has(keyId); } getEncryptionKeyId(): string { - if (!this._encryptionKeyId) { + if (!this.encryptionKeyId) { throw new Error("No encryption key set."); } - return this._encryptionKeyId; - } - - private assertKeyBytes(keyBytes: Uint8Array): void { - if (keyBytes.length !== AES_GCM_KEY_LENGTH_BYTES) { - throw new Error(`Invalid key length: ${keyBytes.length}`); - } + return this.encryptionKeyId; } } diff --git a/src/webStreams/Queue.ts b/src/webStreams/Queue.ts index 98f5980..7a375f1 100644 --- a/src/webStreams/Queue.ts +++ b/src/webStreams/Queue.ts @@ -53,7 +53,6 @@ export class Queue implements Iterable { const randId = Math.random(); try { await this.func(item); - await this.awaiter(); } catch (err) { console.error("Error while processing queue item", randId, err); } @@ -62,10 +61,6 @@ export class Queue implements Iterable { this.processing = false; } - async awaiter() { - return new Promise((resolve) => setTimeout(() => resolve(), 5000)); - } - [Symbol.iterator](): Iterator { let idx = 0; const arr = this.items; diff --git a/src/webStreams/Utils.ts b/src/webStreams/Utils.ts index 7753e17..d782e6d 100644 --- a/src/webStreams/Utils.ts +++ b/src/webStreams/Utils.ts @@ -1,252 +1,21 @@ -// const Buffer = require('buffer/').Buffer; +import { CryptoFacade } from "../crypto/CryptoFacade"; export class Utils { public static generateNumericId(): number { - return Math.round(Math.random() * 1000000000000000); + return new DataView(crypto.getRandomValues(new Uint8Array(6)).buffer).getUint32(0, false); } public static getRandomString(size: number): string { - return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join(""); - } - - static async encryptSymmetric( - plaintext: Uint8Array | string, - key: string, - iv: string, - ): Promise<{ ciphertext: Buffer; iv: string }> { - // encode the text you want to encrypt - let encodedPlaintext: Uint8Array; - if (typeof plaintext === "string") { - encodedPlaintext = new TextEncoder().encode(plaintext); - } else { - encodedPlaintext = plaintext; - } - - // prepare the secret key for encryption - const secretKey = await crypto.subtle.importKey( - "raw", - Buffer.from(key, "base64"), - { - name: "AES-GCM", - length: 256, - }, - true, - ["encrypt", "decrypt"], - ); - // encrypt the text with the secret key - const ciphertext = await crypto.subtle.encrypt( - { - name: "AES-GCM", - iv: Buffer.from(iv, "base64"), - }, - secretKey, - encodedPlaintext, - ); - - // return the encrypted text "ciphertext" and the IV - // encoded in base64 - return { - ciphertext: Buffer.from(ciphertext), - iv: iv, - }; - } - - static async decryptSymmetricBuffer(ciphertext: Buffer, iv: Buffer, key: Buffer) { - // prepare the secret key - const secretKey = await crypto.subtle.importKey( - "raw", - key, - { - name: "AES-GCM", - length: 256, - }, - true, - ["encrypt", "decrypt"], - ); - // decrypt the encrypted text "ciphertext" with the secret key and IV - const cleartext = await crypto.subtle.decrypt( - { - name: "AES-GCM", - iv: iv, - }, - secretKey, - ciphertext, - ); - // decode the text and return it - return Buffer.from(cleartext); - } - - static async decryptSymmetric(ciphertext: string, iv: string, key: string) { - // prepare the secret key - const secretKey = await crypto.subtle.importKey( - "raw", - Buffer.from(key, "base64"), - { - name: "AES-GCM", - length: 256, - }, - true, - ["encrypt", "decrypt"], - ); - // decrypt the encrypted text "ciphertext" with the secret key and IV - const cleartext = await crypto.subtle.decrypt( - { - name: "AES-GCM", - iv: Buffer.from(iv, "base64"), - }, - secretKey, - Buffer.from(ciphertext, "base64"), - ); - // decode the text and return it - return new TextDecoder().decode(cleartext); - } - - static genKey(): string { - return Buffer.from(crypto.getRandomValues(new Uint8Array(32))).toString("base64"); - } - - static genIv(): string { - return Buffer.from(crypto.getRandomValues(new Uint8Array(12))).toString("base64"); + const bytes = crypto.getRandomValues(new Uint8Array(size)); + return Array.from(bytes) + .map((b) => (b & 0xf).toString(16)) + .join(""); } static genIvAsBuffer() { return crypto.getRandomValues(new Uint8Array(12)); } - static base64abc = [ - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "+", - "/", - ]; - - static base64codes = [ - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 255, 255, 255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - ]; - - static bytesToBase64(bytes: Uint8Array) { - let result = "", - i, - l = bytes.length; - for (i = 2; i < l; i += 3) { - result += Utils.base64abc[bytes[i - 2] >> 2]; - result += Utils.base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)]; - result += Utils.base64abc[((bytes[i - 1] & 0x0f) << 2) | (bytes[i] >> 6)]; - result += Utils.base64abc[bytes[i] & 0x3f]; - } - if (i === l + 1) { - // 1 octet yet to write - result += Utils.base64abc[bytes[i - 2] >> 2]; - result += Utils.base64abc[(bytes[i - 2] & 0x03) << 4]; - result += "=="; - } - if (i === l) { - // 2 octets yet to write - result += Utils.base64abc[bytes[i - 2] >> 2]; - result += Utils.base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)]; - result += Utils.base64abc[(bytes[i - 1] & 0x0f) << 2]; - result += "="; - } - return result; - } - - static isBitOn(byte: number, index: number) { - return Boolean(byte & (1 << index)); - } - - static getBits(data: Uint8Array, bitOffset: number, numBits: number) { - const numBits2 = Math.pow(2, numBits) - 1; //this will only work up to 32 bits, of course - const bytePos = bitOffset / 8; - const bits = (bitOffset %= 8); - return (data[bytePos] >> bits) & numBits2; - } - - // static numToUint8Array(num: number) { - // let arr = new Uint8Array(8); - - // for (let i = 0; i < 8; i++) { - // arr[i] = num % 256; - // num = Math.floor(num / 256); - // } - - // return arr; - // } - - // static uint8ArrayToNum(arr: Uint8Array) { - // let num = 0; - - // for (let i = 7; i >= 0; i--) { - // num = num * 256 + arr[i]; - // } - - // return num; - // } - static numAsOneByteUint(num: number) { if (num > 255) { throw new Error("Out of bounds value"); @@ -255,11 +24,4 @@ export class Utils { arr[0] = num; return arr; } - - static oneByteUint8AsNum(arr: Uint8Array) { - if (arr[0] > 255) { - throw new Error("Out of bounds value"); - } - return arr[0]; - } } diff --git a/src/webStreams/WebRtcClient.ts b/src/webStreams/WebRtcClient.ts index eec948f..d1d7b81 100644 --- a/src/webStreams/WebRtcClient.ts +++ b/src/webStreams/WebRtcClient.ts @@ -15,6 +15,7 @@ import { DataChannelCryptorDecryptStatus, } from "../Types"; import { KeyStore } from "./KeyStore"; +import { Utils } from "./Utils"; import { PeerConnectionManager } from "./PeerConnectionsManager"; import { Logger } from "./Logger"; import { StreamId, StreamRoomId } from "./types/ApiTypes"; @@ -55,9 +56,9 @@ export class WebRtcClient { public uniqId: string; private e2eeWorker: Worker | undefined; private webWorkerApi: WebWorker; + private keyStore: KeyStore = new KeyStore(); private configuration: RTCConfiguration | undefined; - private keyStore: KeyStore = new KeyStore(); private publishStreamHandle: StreamHandle; @@ -87,7 +88,7 @@ export class WebRtcClient { private bootstrapDataChannel: RTCDataChannel | undefined; constructor(private assetsDir: string) { - this.uniqId = "" + Math.random() + "-" + Math.random(); + this.uniqId = Utils.getRandomString(8) + "-" + Utils.getRandomString(8); this.sequenceNumberOfSender = 1; this.peerConnectionsManager = new PeerConnectionManager( (roomId: StreamRoomId) => { @@ -110,7 +111,7 @@ export class WebRtcClient { }); this.activeSpeakerDetector = new ActiveSpeakerDetector(DEFAULTS); - this.dataChannelCryptor = new DataChannelCryptor(this.getKeyStore()); + this.dataChannelCryptor = new DataChannelCryptor(this.keyStore); } private async ensureLocalAudioLevelMeter(track: MediaStreamTrack) { @@ -477,7 +478,7 @@ export class WebRtcClient { throw new Error("ReconfigureQueue does not exist."); } this.peerConnectionReconfigureQueue.enqueue({ - taskId: Math.floor(1 + Math.random() * 10000), + taskId: Utils.generateNumericId(), _room: roomId, }); try { @@ -493,11 +494,7 @@ export class WebRtcClient { async updateKeys(_streamRoomId: StreamRoomId, keys: Key[]) { this.logger.debug("=======> UPDATE KEYS", _streamRoomId, keys.length); this.keyStore.setKeys(keys); - (await this.getWorkerApi()).setKeys(keys); - } - - getKeyStore(): KeyStore { - return this.keyStore; + await (await this.getWorkerApi()).setKeys(keys); } private setupSenderTransform(videoSender: RTCRtpSender) { @@ -651,7 +648,7 @@ export class WebRtcClient { statusCode: number, ) { const listeners = this.remoteStreamsListeners.get(roomId); - if (!listeners) { + if (!listeners || listeners.length === 0) { return; } const filteredListeners = listeners.filter( @@ -669,7 +666,7 @@ export class WebRtcClient { throw new Error("ReconfigureQueue does not exist."); } this.peerConnectionReconfigureQueue.enqueue({ - taskId: Math.floor(1 + Math.random() * 10000), + taskId: Utils.generateNumericId(), _room, jsep: offer, }); diff --git a/src/webStreams/WebRtcClientTypes.ts b/src/webStreams/WebRtcClientTypes.ts index af09da9..a976a5b 100644 --- a/src/webStreams/WebRtcClientTypes.ts +++ b/src/webStreams/WebRtcClientTypes.ts @@ -14,8 +14,8 @@ export interface PeerCredentials { } export interface EncKey { - key: Buffer; - iv: Buffer; + key: Uint8Array; + iv: Uint8Array; } export interface InitOptions { diff --git a/src/webStreams/WebWorkerHelper copy.ts b/src/webStreams/WebWorkerHelper copy.ts deleted file mode 100644 index b409e3d..0000000 --- a/src/webStreams/WebWorkerHelper copy.ts +++ /dev/null @@ -1,18 +0,0 @@ -// import { EncKey } from "./WebRtcClientTypes"; - -// export class WebWorker { -// worker: Worker | undefined; -// constructor(private encKey: EncKey) { -// // this.worker = new Worker(new URL("./worker/worker.ts", import.meta.url), {name: "worker"}); -// this.worker = new Worker(new URL("worker.js", import.meta.url), {name: "worker"}); -// this.worker.onerror = e => console.error(e); - -// this.worker.postMessage({ -// operation: 'initialize', -// key: encKey.key, iv: encKey.iv -// }); -// } -// getWorker() { -// return this.worker; -// } -// } diff --git a/src/webStreams/WebWorkerHelper.ts b/src/webStreams/WebWorkerHelper.ts index 597c364..f8160fe 100644 --- a/src/webStreams/WebWorkerHelper.ts +++ b/src/webStreams/WebWorkerHelper.ts @@ -1,21 +1,5 @@ import { Key } from "../Types"; import { InitializeEvent, SetKeysEvent } from "./worker/WorkerEvents"; -// export class WebWorkerOld { -// worker: Worker | undefined; -// constructor(private encKey: EncKey) { -// // this.worker = new Worker(new URL("./worker/worker.ts", import.meta.url), {name: "worker"}); -// this.worker = new Worker(new URL("worker.js", import.meta.url), { name: "worker" }); -// this.worker.onerror = e => console.error(e); - -// this.worker.postMessage({ -// operation: 'initialize', -// key: encKey.key, iv: encKey.iv -// }); -// } -// getWorker() { -// return this.worker; -// } -// } interface WorkerLogEvent { data: @@ -46,7 +30,7 @@ export class WebWorker { ) {} async init_e2ee() { - this.worker = new Worker(this.assetsDir + "/e2ee-worker.js"); + this.worker = new Worker(this.assetsDir + "/privmx-worker.js"); this.worker.onmessage = (event: WorkerLogEvent) => { try { if (event.data.type === "rms") { @@ -74,14 +58,23 @@ export class WebWorker { return this.worker; } - setKeys(keys: Key[]) { + setKeys(keys: Key[]): Promise { if (!this.worker) { console.warn("Cannot pass keys to e2ee worker as it is not initialized yet."); - return; + return Promise.resolve(); } - this.worker.postMessage({ - operation: "setKeys", - keys, + return new Promise((resolve) => { + const ackListener = (ev: MessageEvent) => { + if (ev.data?.operation === "setKeys-ack") { + this.worker!.removeEventListener("message", ackListener); + resolve(); + } + }; + this.worker!.addEventListener("message", ackListener); + this.worker!.postMessage({ + operation: "setKeys", + keys, + }); }); } @@ -101,11 +94,3 @@ export class WebWorker { return worker; } } - -// function workerScript() { -// self.onmessage = WorkerSpec.onmessage; -// } - -function workerScript() { - return ""; -} diff --git a/src/webStreams/types/StreamsApiTypes.ts b/src/webStreams/types/StreamsApiTypes.ts index 4154e76..ddcf5cf 100644 --- a/src/webStreams/types/StreamsApiTypes.ts +++ b/src/webStreams/types/StreamsApiTypes.ts @@ -115,7 +115,7 @@ export interface StreamTrackSendDataRequest extends AppRequest { kind: "streams.streamTrackSendData"; data: { streamTrackId: Types.StreamTrackId; - data: Buffer; + data: Uint8Array; }; } diff --git a/src/webStreams/worker/worker.ts b/src/webStreams/worker/worker.ts index c85d836..e378667 100644 --- a/src/webStreams/worker/worker.ts +++ b/src/webStreams/worker/worker.ts @@ -1,14 +1,11 @@ import { Utils } from "../Utils"; -import { - encryptWithAES256GCM, - decryptWithAES256GCM, - isEncryptionSuccess, - isDecryptionSuccess, -} from "../CryptoUtils"; import * as events from "./WorkerEvents"; +import { CryptoFacade } from "../../crypto/CryptoFacade"; import { KeyStore } from "../KeyStore"; import { LocalAudioLevelMeter } from "../audio/LocalAudioLevelMeter"; +const keyStore = new KeyStore(); + const NUM_AS_UINT8_SIZE = 1; const DEBUG = false; const sessions = new Map }>(); @@ -19,7 +16,6 @@ let recvRMS = LocalAudioLevelMeter.RMS_VALUE_OF_SILENCE; let recvRMSTimestamp = Date.now(); export interface TransformContext { - keyStore: KeyStore; id?: string; publisherId?: number; } @@ -41,6 +37,35 @@ export class EncryptTransform { return 0; } + private async encryptFrame_aes( + keyId: string, + iv: Uint8Array, + data: Uint8Array, + header: Uint8Array, + ): Promise { + const encrypted = await CryptoFacade.aeadEncrypt(keyId, iv, header, data); + return new Uint8Array(encrypted); + } + + private async decryptFrame_aes( + keyId: string, + iv: Uint8Array, + encryptedData: Uint8Array, + header: Uint8Array, + ): Promise { + if (encryptedData.length < 16) { + return null; + } + const data = encryptedData.slice(0, encryptedData.length - 16); + const tag = encryptedData.slice(encryptedData.length - 16); + try { + const decrypted = await CryptoFacade.aeadDecrypt(keyId, iv, header, data, tag); + return new Uint8Array(decrypted); + } catch { + return null; + } + } + async encryptFrame( encodedFrame: RTCEncodedAudioFrame | RTCEncodedVideoFrame, kind: string, @@ -53,16 +78,15 @@ export class EncryptTransform { const iv = Utils.genIvAsBuffer(); const keyId = this.keyStore.getEncryptionKeyId(); - const cryptoKey = await this.keyStore.getEncriptionKey(); - const cryptoResult = await encryptWithAES256GCM(cryptoKey, iv, frameBody, frameHeader); - if (!isEncryptionSuccess(cryptoResult)) { + const encrypted = await this.encryptFrame_aes(keyId, iv, frameBody, frameHeader); + if (!encrypted) { throw new Error("Cannot encrypt frame"); } const keyIdAsUint8 = new TextEncoder().encode(keyId); const posOfCipher = frameHeader.byteLength; - const posOfIv = posOfCipher + cryptoResult.data.byteLength; + const posOfIv = posOfCipher + encrypted.byteLength; const posOfIvSize = posOfIv + iv.byteLength; const posOfKeyId = posOfIvSize + NUM_AS_UINT8_SIZE; const posOfKeyIdSize = posOfKeyId + keyIdAsUint8.byteLength; @@ -72,7 +96,7 @@ export class EncryptTransform { const resultUint8 = new Uint8Array(result); resultUint8.set(frameHeader); - resultUint8.set(new Uint8Array(cryptoResult.data), posOfCipher); + resultUint8.set(encrypted, posOfCipher); resultUint8.set(iv, posOfIv); resultUint8.set(Utils.numAsOneByteUint(iv.byteLength), posOfIvSize); resultUint8.set(keyIdAsUint8, posOfKeyId); @@ -124,31 +148,24 @@ export class EncryptTransform { const payloadPos = headerLen; const payloadLen = ivPos - headerLen; - const payload = data.slice(payloadPos, payloadPos + payloadLen); + const payload = new Uint8Array(data.slice(payloadPos, payloadPos + payloadLen)); try { if (!this.keyStore.hasKey(keyId)) { controller.enqueue(encodedFrame); return; } - const cryptoKey = await this.keyStore.getKey(keyId); - const decryptionResult = await decryptWithAES256GCM( - cryptoKey, - iv, - payload, - frameHeader, - ); + const plain = await this.decryptFrame_aes(keyId, iv, payload, frameHeader); - if (!isDecryptionSuccess(decryptionResult)) { + if (!plain) { controller.enqueue(encodedFrame); return; } - const plain = decryptionResult.data; const result = new ArrayBuffer(frameHeader.byteLength + plain.byteLength); const writableResult = new Uint8Array(result); writableResult.set(frameHeader); - writableResult.set(new Uint8Array(plain), frameHeader.byteLength); + writableResult.set(plain, frameHeader.byteLength); encodedFrame.data = result; controller.enqueue(encodedFrame); @@ -159,10 +176,8 @@ export class EncryptTransform { } } -(self as any).keyStore = new KeyStore(); -const getKeyStore = () => (self as any).keyStore as KeyStore; - -self.onmessage = async (event: MessageEvent) => { +self.addEventListener("message", async (event: MessageEvent) => { + if (!event || !event.data || typeof event.data !== "object" || !event.data.operation) return; const { operation, kind } = event.data; if (operation === "initialize") { @@ -172,17 +187,18 @@ self.onmessage = async (event: MessageEvent) => { self.postMessage({ operation: "init-pipeline", id: event.data.id }); } else if (operation === "encode" || operation === "decode") { const { readableStream, writableStream, id, publisherId } = event.data; - const context: TransformContext = { keyStore: getKeyStore(), id, publisherId }; + const context: TransformContext = { id, publisherId }; handleTransform(context, operation, kind, readableStream, writableStream); } else if (operation === "setKeys") { const data = event.data as events.SetKeysEvent; - getKeyStore().setKeys(data.keys); + keyStore.setKeys(data.keys); + self.postMessage({ operation: "setKeys-ack" }); } else if (operation === "rms") { lastRMS = Math.round(event.data.rms as number); } -}; +}); -function createSenderTransform(keyStore: KeyStore, kind: string) { +function createSenderTransform(kind: string) { const encrypter = new EncryptTransform(keyStore); return new TransformStream({ async transform(encodedFrame, controller) { @@ -192,7 +208,7 @@ function createSenderTransform(keyStore: KeyStore, kind: string) { } function createReceiverTransform(context: TransformContext, kind: string) { - const encrypter = new EncryptTransform(context.keyStore); + const encrypter = new EncryptTransform(keyStore); return new TransformStream({ async transform(encodedFrame, controller) { await encrypter.decryptFrame( @@ -217,7 +233,7 @@ function handleTransform( logDebug("handleTransform: " + JSON.stringify({ operation, context })); if (operation === "encode") { - transformStream = createSenderTransform(context.keyStore, kind); + transformStream = createSenderTransform(kind); readableStream.pipeThrough(transformStream).pipeTo(writableStream); } else if (operation === "decode") { transformStream = createReceiverTransform(context, kind); @@ -249,7 +265,6 @@ if ((self as any).RTCTransformEvent) { const { operation, kind, id, publisherId } = options; const context: TransformContext = { - keyStore: getKeyStore(), id, publisherId, }; diff --git a/tests/specs/crypto.spec.ts b/tests/specs/crypto.spec.ts index e9fefd3..2675606 100644 --- a/tests/specs/crypto.spec.ts +++ b/tests/specs/crypto.spec.ts @@ -341,4 +341,250 @@ test.describe("CryptoTest", () => { expect(result.chainCodeHex).toEqual(BIP39_DATA.chainCode_withPassword_hex); } }); + + test("Stale Handle Recovery - Driver Level", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const key = new Uint8Array(32).fill(11); + const data = new Uint8Array([1, 2, 3]); + + // 1. First call - populates driver-side cache and JS registry + await cryptoApi.encryptDataSymmetric(data, key); + + // 2. Simulate manual cleanup in JS (as if from CryptoFacade) + // C++ driver still has the handle in its keyToHandleMap. + const emCrypto = (window as any).em_crypto; + const keys = emCrypto.keys; + const lastId = Array.from(keys.keys()).pop() as string; + emCrypto.unregisterKey({ id: lastId }); + + // 3. Second call - C++ uses cached handle, JS throws 'not found', C++ retries. + const enc2 = await cryptoApi.encryptDataSymmetric(data, key); + return { enc2: Array.from(enc2) }; + }); + expect(result.enc2).toBeDefined(); + }); + + test("Concurrency Stress Test - 1000 parallel AES encrypt/decrypt cycles", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const key = new Uint8Array(32).fill(12); + const originalText = "concurrency-check-123"; + const data = new TextEncoder().encode(originalText); + + // 1. Parallel Encryption + const encPromises = []; + for (let i = 0; i < 1000; i++) { + encPromises.push(cryptoApi.encryptDataSymmetric(data, key)); + } + const ciphertexts = await Promise.all(encPromises); + + // 2. Parallel Decryption + const decPromises = ciphertexts.map((ct) => cryptoApi.decryptDataSymmetric(ct, key)); + const decryptedBuffers = await Promise.all(decPromises); + + // 3. Verification + const decoder = new TextDecoder(); + const allMatch = decryptedBuffers.every((buf) => decoder.decode(buf) === originalText); + + return { count: decryptedBuffers.length, allMatch }; + }); + expect(result.count).toBe(1000); + expect(result.allMatch).toBe(true); + }); + + // ========================================================================= + // CryptoFacade (em_crypto) vs CryptoApi (WASM) sign/verify compatibility + // + // The WASM C++ layer delegates its crypto primitives to em_crypto, so both + // layers share the same secp256k1 implementation. They differ in key encoding + // (WIF / BASE58DER vs raw bytes) and hashing (CryptoApi hashes internally; + // em_crypto.eccSign/eccVerify operate on pre-hashed 32-byte input). + // ========================================================================= + + test.describe("ECC sign/verify: round-trip", () => { + test("EmCrypto (CryptoFacade): sign and verify succeed", async ({ page }) => { + const result = await page.evaluate(async () => { + const em = (window as any).em_crypto; + const { privateKey, publicKey } = await em.eccGenPair(); + const data = new TextEncoder().encode("emcrypto round-trip"); + // eccSign / eccVerify require exactly 32-byte pre-hashed input + const hash = new Uint8Array(await em.sha256({ data })); + const sig = new Uint8Array(await em.eccSign({ privateKey, data: hash })); + const verified: boolean = await em.eccVerify({ publicKey, data: hash, signature: sig }); + return { verified }; + }); + expect(result.verified).toBe(true); + }); + + test("CryptoApi (WASM): sign and verify succeed", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const wif = await cryptoApi.generatePrivateKey(); + const pub = await cryptoApi.derivePublicKey(wif); + const data = new TextEncoder().encode("cryptoapi round-trip"); + const sig = await cryptoApi.signData(data, wif); + const verified: boolean = await cryptoApi.verifySignature(data, sig, pub); + return { verified }; + }); + expect(result.verified).toBe(true); + }); + }); + + test.describe("ECC sign/verify: cross-layer compatibility", () => { + // CryptoApi.signData hashes internally (SHA-256) then calls em_crypto.ecc_sign. + // The signature is over SHA-256(data) in [recovery|r|s] format — identical to + // what em_crypto.eccVerify expects when given the same pre-hashed data. + test("CryptoApi (WASM) sign → EmCrypto (CryptoFacade) verify", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const em = (window as any).em_crypto; + const wif = await cryptoApi.generatePrivateKey(); + + // WIF = base58check( 0x80 | privkey32 | 0x01 ). + // Slice [1, 33) strips the version prefix; the 4-byte checksum at the + // end does not interfere with this slice. + const base58Decode = (s: string): Uint8Array => { + const alpha = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + let n = 0n; + for (const c of s) n = n * 58n + BigInt(alpha.indexOf(c)); + let hex = n.toString(16); + if (hex.length % 2) hex = "0" + hex; + const bytes = Uint8Array.from( + (hex.match(/.{2}/g) as string[]).map((b) => parseInt(b, 16)), + ); + let lead = 0; + for (const c of s) { + if (c !== "1") break; + lead++; + } + const out = new Uint8Array(lead + bytes.length); + out.set(bytes, lead); + return out; + }; + + const rawPrivKey = base58Decode(wif).slice(1, 33); + const { publicKey: rawPubKey } = await em.eccFromPrivateKey({ key: rawPrivKey }); + const rawData = new TextEncoder().encode("wasm-sign / js-verify"); + const sig = new Uint8Array(await cryptoApi.signData(rawData, wif)); + const hash = new Uint8Array(await em.sha256({ data: rawData })); + const verified: boolean = await em.eccVerify({ + publicKey: rawPubKey, + data: hash, + signature: sig, + }); + return { verified }; + }); + expect(result.verified).toBe(true); + }); + + // em_crypto.eccSign signs SHA-256(data) in [recovery|r|s] format. + // CryptoApi.verifySignature re-hashes rawData internally before verifying. + test("EmCrypto (CryptoFacade) sign → CryptoApi (WASM) verify", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const em = (window as any).em_crypto; + const { privateKey: rawPrivKey } = await em.eccGenPair(); + + // Encode raw key as compressed WIF so CryptoApi can derive the + // BASE58DER public key. WIF = base58check( 0x80 | rawKey32 | 0x01 ). + const rawToWIF = async (raw: Uint8Array): Promise => { + const alpha = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + const payload = new Uint8Array([0x80, ...raw, 0x01]); + const h1 = new Uint8Array(await crypto.subtle.digest("SHA-256", payload)); + const h2 = new Uint8Array(await crypto.subtle.digest("SHA-256", h1)); + const full = new Uint8Array([...payload, ...h2.slice(0, 4)]); + let n = BigInt( + "0x" + Array.from(full).map((b) => b.toString(16).padStart(2, "0")).join(""), + ); + let r = ""; + while (n > 0n) { + const rem = n % 58n; + n /= 58n; + r = alpha[Number(rem)] + r; + } + for (const b of full) { + if (b !== 0) break; + r = "1" + r; + } + return r; + }; + + const wif = await rawToWIF(rawPrivKey); + const base58DerPubKey = await cryptoApi.derivePublicKey(wif); + const rawData = new TextEncoder().encode("js-sign / wasm-verify"); + const hash = new Uint8Array(await em.sha256({ data: rawData })); + const sig = new Uint8Array(await em.eccSign({ privateKey: rawPrivKey, data: hash })); + const verified: boolean = await cryptoApi.verifySignature(rawData, sig, base58DerPubKey); + return { verified }; + }); + expect(result.verified).toBe(true); + }); + }); + + test.describe("ECC sign/verify: rejection", () => { + test("EmCrypto rejects a signature with a flipped byte", async ({ page }) => { + const result = await page.evaluate(async () => { + const em = (window as any).em_crypto; + const { privateKey, publicKey } = await em.eccGenPair(); + const hash = new Uint8Array( + await em.sha256({ data: new TextEncoder().encode("tamper-js") }), + ); + const sig = new Uint8Array(await em.eccSign({ privateKey, data: hash })); + sig[32] ^= 0xff; + const verified: boolean = await em.eccVerify({ publicKey, data: hash, signature: sig }); + return { verified }; + }); + expect(result.verified).toBe(false); + }); + + test("CryptoApi (WASM) rejects a tampered signature", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const wif = await cryptoApi.generatePrivateKey(); + const pub = await cryptoApi.derivePublicKey(wif); + const data = new TextEncoder().encode("tamper-wasm"); + const sig = new Uint8Array(await cryptoApi.signData(data, wif)); + sig[32] ^= 0xff; + const verified: boolean = await cryptoApi.verifySignature(data, sig, pub); + return { verified }; + }); + expect(result.verified).toBe(false); + }); + + test("EmCrypto rejects a valid signature verified against the wrong public key", async ({ + page, + }) => { + const result = await page.evaluate(async () => { + const em = (window as any).em_crypto; + const { privateKey } = await em.eccGenPair(); + const { publicKey: wrongPub } = await em.eccGenPair(); + const hash = new Uint8Array( + await em.sha256({ data: new TextEncoder().encode("wrong-key-js") }), + ); + const sig = new Uint8Array(await em.eccSign({ privateKey, data: hash })); + const verified: boolean = await em.eccVerify({ + publicKey: wrongPub, + data: hash, + signature: sig, + }); + return { verified }; + }); + expect(result.verified).toBe(false); + }); + + test("CryptoApi (WASM) rejects a signature from a different key pair", async ({ page }) => { + const result = await page.evaluate(async () => { + const cryptoApi = await window.Endpoint.createCryptoApi(); + const signerWIF = await cryptoApi.generatePrivateKey(); + const verifierWIF = await cryptoApi.generatePrivateKey(); + const verifierPub = await cryptoApi.derivePublicKey(verifierWIF); + const data = new TextEncoder().encode("wrong-key-wasm"); + const sig = await cryptoApi.signData(data, signerWIF); + const verified: boolean = await cryptoApi.verifySignature(data, sig, verifierPub); + return { verified }; + }); + expect(result.verified).toBe(false); + }); + }); }); diff --git a/tsconfig.json b/tsconfig.json index 6cfab46..8f7513f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,5 +30,5 @@ "skipLibCheck": true }, "include": ["src"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist", "**/__tests__", "**/__mocks__"] } \ No newline at end of file diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 0000000..1809033 --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true + } +} diff --git a/webendpoint-cpp/js/loader.js b/webendpoint-cpp/js/loader.js index d198e80..f17e708 100644 --- a/webendpoint-cpp/js/loader.js +++ b/webendpoint-cpp/js/loader.js @@ -1,7 +1,7 @@ "use strict"; function loadDriverWebContext() { if (typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope) { - importScripts("driver-web-context.js"); + importScripts("privmx-worker.js"); } } loadDriverWebContext(); diff --git a/webpack.config.js b/webpack.config.js index 9cd8a02..a869d6d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,4 @@ const path = require("path"); -const webpack = require("webpack"); const CopyPlugin = require("copy-webpack-plugin"); module.exports = { @@ -8,12 +7,6 @@ module.exports = { }, mode: "production", plugins: [ - new webpack.ProvidePlugin({ - Buffer: ["buffer", "Buffer"], - }), - new webpack.ProvidePlugin({ - process: "process/browser", - }), new CopyPlugin({ patterns: [ { @@ -34,19 +27,12 @@ module.exports = { }, resolve: { extensions: [".tsx", ".ts", ".js"], - fallback: { - "crypto": require.resolve("crypto-browserify"), - "assert": require.resolve("assert/"), - "stream": require.resolve("stream-browserify"), - "buffer": require.resolve("buffer"), - "vm": require.resolve("vm-browserify"), - "process/browser": require.resolve("process/browser"), - - }, + fallback: {}, }, output: { filename: (pathData) => { - return pathData.chunk.name == "bundle" ? "privmx-endpoint-web.js" : "privmx-endpoint-web.[name].js"; + if (pathData.chunk.name === "bundle") return "privmx-endpoint-web.js"; + return "privmx-endpoint-web.[name].js"; }, globalObject: "this", path: path.resolve(__dirname, "dist/bundle"), @@ -59,4 +45,9 @@ module.exports = { type: "umd", }, }, + performance: { + hints: false, + maxEntrypointSize: 1048576, // 1MB + maxAssetSize: 1048576, // 1MB + }, }; \ No newline at end of file diff --git a/webpack.worker.config.js b/webpack.worker.config.js index 3cfb694..fdb869b 100644 --- a/webpack.worker.config.js +++ b/webpack.worker.config.js @@ -2,10 +2,10 @@ const path = require("path"); module.exports = { - entry: "./src/webStreams/worker/worker.ts", + entry: "./src/crypto/workerHelper.ts", mode: "production", output: { - filename: "assets/e2ee-worker.js", + filename: "assets/privmx-worker.js", path: path.resolve(__dirname, "dist"), }, target: "webworker", // important for web workers @@ -18,7 +18,13 @@ module.exports = { }, ], }, + performance: { + hints: false, + maxEntrypointSize: 1048576, // 1MB + maxAssetSize: 1048576, // 1MB + }, resolve: { extensions: [".ts", ".js"], + fallback: {}, }, }; \ No newline at end of file