From b1bd71d37de90acd1e3b40d50f10ddd47b950653 Mon Sep 17 00:00:00 2001 From: Tyler Blackham <124708255+tylerablackham@users.noreply.github.com> Date: Mon, 11 Sep 2023 15:50:59 -0600 Subject: [PATCH 1/8] feat!: refactor jwt and fastify packages to use byu-sdk jwt verification (#154) --- package-lock.json | 3278 +++++++++++------ packages/fastify/README.md | 20 +- packages/fastify/package.json | 2 + packages/fastify/src/ByuJwtAuthenticator.ts | 68 +- packages/fastify/src/ByuJwtProvider.ts | 15 +- packages/fastify/test/ByuJwtProvider.spec.ts | 34 +- packages/fastify/test/assets/jwt.ts | 38 + packages/jwt/README.md | 14 +- packages/jwt/package.json | 4 +- packages/jwt/src/ByuJwt.ts | 225 +- packages/jwt/src/models/Certificate.ts | 81 - packages/jwt/src/models/Jwt.ts | 41 +- .../jwt/src/models/OpenIdConfiguration.ts | 542 --- packages/jwt/src/models/index.ts | 2 - packages/jwt/src/util/Errors.ts | 152 - packages/jwt/src/util/Fetch.ts | 17 - packages/jwt/test/ByuJwt.spec.ts | 65 +- packages/jwt/test/assets/jwt.ts | 32 + packages/jwt/test/assets/openid-config.ts | 22 - .../jwt/test/models/Certification.spec.ts | 11 - packages/jwt/test/models/Jwt.spec.ts | 11 - .../test/models/OpenIdConfiguration.spec.ts | 10 - packages/jwt/test/util/Fetch.spec.ts | 10 - 23 files changed, 2404 insertions(+), 2290 deletions(-) delete mode 100644 packages/jwt/src/models/Certificate.ts delete mode 100644 packages/jwt/src/models/OpenIdConfiguration.ts delete mode 100644 packages/jwt/src/util/Errors.ts delete mode 100644 packages/jwt/src/util/Fetch.ts delete mode 100644 packages/jwt/test/assets/openid-config.ts delete mode 100644 packages/jwt/test/models/Certification.spec.ts delete mode 100644 packages/jwt/test/models/Jwt.spec.ts delete mode 100644 packages/jwt/test/models/OpenIdConfiguration.spec.ts delete mode 100644 packages/jwt/test/util/Fetch.spec.ts diff --git a/package-lock.json b/package-lock.json index c436a86..6fede4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,34 +33,91 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -124,12 +181,12 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -141,6 +198,52 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@byu-oit-sdk/credential-provider": { + "version": "0.10.0-beta.11", + "resolved": "https://registry.npmjs.org/@byu-oit-sdk/credential-provider/-/credential-provider-0.10.0-beta.11.tgz", + "integrity": "sha512-dV3h4BpVP7yppkhCj9IO7Nr0FxUTgVzN6Ese/D2XSOI8ulTjc2qXef6GWcjBcU/rLLK3Wy/RqJ05i50q2fNgFA==", + "dependencies": { + "@sinclair/typebox": "^0.31.2", + "camel-case": "^4.1.2", + "debug": "^4.3.4", + "fast-jwt": "^2.2.3", + "tslib": "^2.5.0", + "uncrypto": "^0.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@byu-oit-sdk/credential-provider/node_modules/fast-jwt": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-2.2.3.tgz", + "integrity": "sha512-ziANDWUZpgUyE+A8YAkauVnGa/XXJGEXC1H3qXAYnT8v4Et3EsC8Zuvw8ljiqDgRearw9Wy+Q/Miw5x1XmPJTA==", + "dependencies": { + "asn1.js": "^5.4.1", + "ecdsa-sig-formatter": "^1.0.11", + "mnemonist": "^0.39.5" + }, + "engines": { + "node": ">=14 <22" + } + }, + "node_modules/@byu-oit-sdk/jwt": { + "version": "0.1.0-beta.6", + "resolved": "https://registry.npmjs.org/@byu-oit-sdk/jwt/-/jwt-0.1.0-beta.6.tgz", + "integrity": "sha512-HRuqcMUaQJH7Q8GHfJffuRsSJW59btPYYxvta2ghE3tL6+SRKpBrWXrjLfSoHLXIqDaGtj5H7IRgVTjoBlIXTQ==", + "dependencies": { + "@byu-oit-sdk/credential-provider": "*", + "fast-jwt": "^3.1.1", + "jwk-to-pem": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@sinclair/typebox": "^0.31.2" + } + }, "node_modules/@byu-oit/fastify-jwt": { "resolved": "packages/fastify", "link": true @@ -150,14 +253,14 @@ "link": true }, "node_modules/@commitlint/cli": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz", - "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", + "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", "dev": true, "dependencies": { "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.6.6", - "@commitlint/load": "^17.5.0", + "@commitlint/lint": "^17.7.0", + "@commitlint/load": "^17.7.1", "@commitlint/read": "^17.5.1", "@commitlint/types": "^17.4.4", "execa": "^5.0.0", @@ -174,9 +277,9 @@ } }, "node_modules/@commitlint/config-angular": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-17.6.6.tgz", - "integrity": "sha512-9hKLCMkW4JNTZW/bs/oXYWzaOmMJM8xGwL+muy2HMGWlH9NvbsQsYo/mz2PMtI+ybs0COpTjWvH/42hr9hADIA==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-17.7.0.tgz", + "integrity": "sha512-ZWLgVw4se/vmNHfWiti3OIx295KgyCgZ5LjDeLFbHQe9WXMX3lhwnaeJkum4smsQhQaa3/JvufKzxV/3LDGMJA==", "dev": true, "dependencies": { "@commitlint/config-angular-type-enum": "^17.4.0" @@ -195,9 +298,9 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz", - "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", + "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -208,9 +311,9 @@ } }, "node_modules/@commitlint/ensure": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz", - "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", + "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -247,27 +350,27 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz", - "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", + "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", - "semver": "7.5.2" + "semver": "7.5.4" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/lint": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz", - "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", + "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^17.6.6", - "@commitlint/parse": "^17.6.5", - "@commitlint/rules": "^17.6.5", + "@commitlint/is-ignored": "^17.7.0", + "@commitlint/parse": "^17.7.0", + "@commitlint/rules": "^17.7.0", "@commitlint/types": "^17.4.4" }, "engines": { @@ -275,16 +378,16 @@ } }, "node_modules/@commitlint/load": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz", - "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", + "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^17.4.4", + "@commitlint/config-validator": "^17.6.7", "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.4.4", + "@commitlint/resolve-extends": "^17.6.7", "@commitlint/types": "^17.4.4", - "@types/node": "*", + "@types/node": "20.4.7", "chalk": "^4.1.0", "cosmiconfig": "^8.0.0", "cosmiconfig-typescript-loader": "^4.0.0", @@ -309,14 +412,14 @@ } }, "node_modules/@commitlint/parse": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz", - "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz", + "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" }, "engines": { "node": ">=v14" @@ -339,12 +442,12 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz", - "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", + "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^17.4.4", + "@commitlint/config-validator": "^17.6.7", "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", @@ -356,12 +459,12 @@ } }, "node_modules/@commitlint/rules": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz", - "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz", + "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==", "dev": true, "dependencies": { - "@commitlint/ensure": "^17.4.4", + "@commitlint/ensure": "^17.6.7", "@commitlint/message": "^17.4.2", "@commitlint/to-lines": "^17.4.0", "@commitlint/types": "^17.4.4", @@ -427,12 +530,12 @@ } }, "node_modules/@esbuild-kit/core-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz", - "integrity": "sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.0.tgz", + "integrity": "sha512-jTtSvVpr5ygNXyPXf9IBbCrKQ0uckq6vWkcGfy1fEr9KjkKdnFn4kFAGjpqZDZim1wsTwh/Be+lhAUemEmxEYA==", "dev": true, "dependencies": { - "esbuild": "~0.17.6", + "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, @@ -447,9 +550,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ "arm" ], @@ -463,9 +566,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ "arm64" ], @@ -479,9 +582,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", "cpu": [ "x64" ], @@ -495,9 +598,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ "arm64" ], @@ -511,9 +614,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], @@ -527,9 +630,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], @@ -543,9 +646,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ "x64" ], @@ -559,9 +662,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ "arm" ], @@ -575,9 +678,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", "cpu": [ "arm64" ], @@ -591,9 +694,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", "cpu": [ "ia32" ], @@ -607,9 +710,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -623,9 +726,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", "cpu": [ "mips64el" ], @@ -639,9 +742,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", "cpu": [ "ppc64" ], @@ -655,9 +758,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", "cpu": [ "riscv64" ], @@ -671,9 +774,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", "cpu": [ "s390x" ], @@ -687,9 +790,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "cpu": [ "x64" ], @@ -703,9 +806,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", "cpu": [ "x64" ], @@ -719,9 +822,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", "cpu": [ "x64" ], @@ -735,9 +838,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", "cpu": [ "x64" ], @@ -751,9 +854,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", "cpu": [ "arm64" ], @@ -767,9 +870,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ "ia32" ], @@ -783,9 +886,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ "x64" ], @@ -814,18 +917,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -868,9 +971,9 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -909,9 +1012,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -994,9 +1097,9 @@ } }, "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -1005,6 +1108,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", @@ -1031,9 +1140,9 @@ } }, "node_modules/@lerna/child-process": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.1.1.tgz", - "integrity": "sha512-mR8PaTkckYPLmEBG2VsVsJq2UuzEvjXevOB1rKLKUZ/dPCGcottVhbiEzTxickc+s7Y/1dTTLn/1BKj3B1a5BA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.2.0.tgz", + "integrity": "sha512-8cRsYYX8rGZTXL1KcLBv0RHD9PMvphWZay8yg4qf2giX6x86dQyTetSU4SplG2LBGVClilmNHJa/CQwvPQNUFA==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -1045,129 +1154,599 @@ } }, "node_modules/@lerna/create": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.1.1.tgz", - "integrity": "sha512-1PY2OgwGxp7b91JzLKEhONVl69mCt1IyYEc6pzKy3Sv+UOdeK2QFq1SX/85hNOR3iitiyZ75bNWUTcBly1ZlZg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.2.0.tgz", + "integrity": "sha512-bBypNfwqOQNcfR2nXJ3mWUeIAIoSFpXg8MjuFSf87PzIiyeTEKa3Z57vAa3bDbHQtcB7x6f0rWysK1eQZSH15Q==", "dev": true, "dependencies": { - "@lerna/child-process": "7.1.1", + "@lerna/child-process": "7.2.0", + "@npmcli/run-script": "6.0.2", + "@nx/devkit": ">=16.5.1 < 17", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.1", + "columnify": "1.6.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "^8.2.0", "dedent": "0.7.0", + "execa": "5.0.0", "fs-extra": "^11.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", "init-package-json": "5.0.0", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "7.3.0", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "3.1.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.5", + "npmlog": "^6.0.2", + "nx": ">=16.5.1 < 17", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", "p-reduce": "^2.1.0", "pacote": "^15.2.0", "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "read-package-json": "6.0.4", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", "semver": "^7.3.4", + "signal-exit": "3.0.7", "slash": "^3.0.0", + "ssri": "^9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "upath": "2.0.1", + "uuid": "^9.0.0", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "5.0.0", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "16.2.0", "yargs-parser": "20.2.4" }, "engines": { "node": "^14.17.0 || >=16.0.0" } }, - "node_modules/@lerna/create/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "node_modules/@lerna/create/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", - "dev": true - }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "node_modules/@lerna/create/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" + "engines": { + "node": ">=8" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@lerna/create/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@lerna/create/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@lerna/create/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 8" + "node": ">=7.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@lerna/create/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/create/node_modules/conventional-changelog-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", + "dev": true, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-parser": "^4.0.0", + "dateformat": "^3.0.3", + "get-pkg-repo": "^4.2.1", + "git-raw-commits": "^3.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^5.0.0", + "normalize-package-data": "^3.0.3", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@lerna/create/node_modules/conventional-changelog-writer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@lerna/create/node_modules/conventional-commits-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@lerna/create/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/@lerna/create/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/git-raw-commits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@lerna/create/node_modules/git-semver-tags": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", + "dev": true, + "dependencies": { + "meow": "^8.1.2", + "semver": "^7.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@lerna/create/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@lerna/create/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@lerna/create/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lukeed/ms": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.1.tgz", + "integrity": "sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -1337,34 +1916,36 @@ } }, "node_modules/@nrwl/devkit": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.5.0.tgz", - "integrity": "sha512-O/CH43gM2sumfO1BX7f20B4rniE9P48XwMEQoi1HssdzL+IstHWw5Q9BO2uoSCNpu5x04V/VzX/8yFmoFmOJ7g==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.8.1.tgz", + "integrity": "sha512-Y7yYDh62Hi4q99Q4+ipIQ3K9iLuAld3WcwjLv6vtl6Livu+TU3eqbraBEno7DQL8JuIuwgBT4lX7Bp3w3N9RDg==", "dev": true, "dependencies": { - "@nx/devkit": "16.5.0" + "@nx/devkit": "16.8.1" } }, "node_modules/@nrwl/tao": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.5.0.tgz", - "integrity": "sha512-lY/XV2n7iulHY77Uakt3Epa9m/NG7oTSN196baLjFykxUvLJI47PMX5qytugHkS8JLdcAB5p0qGsrQSHoi6jvg==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.8.1.tgz", + "integrity": "sha512-hgGFLyEgONSofxnJsXN9NlUx4J8/YSLUkfZKdR8Qa97+JGZT8FEuk7NLFJOWdYYqROoCzXLHK0d+twFFNPS5BQ==", "dev": true, "dependencies": { - "nx": "16.5.0" + "nx": "16.8.1", + "tslib": "^2.3.0" }, "bin": { "tao": "index.js" } }, "node_modules/@nx/devkit": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.5.0.tgz", - "integrity": "sha512-IfGGKwgOBZshgRtL0V0IOuTaW8mnuSFft708fQfRyw8ArpNeyJbdbIvd9lCsHAFaKE5VTIKug4C48tyQikM7eA==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.8.1.tgz", + "integrity": "sha512-I+Cg+lXk0wRz6KC9FZbWFuJWQTXAt5O3bNl9ksISmzqmEyuy72Cv+/MBHvF7o54Sq80DNw+RKWB1re5HFOsqCA==", "dev": true, "dependencies": { - "@nrwl/devkit": "16.5.0", + "@nrwl/devkit": "16.8.1", "ejs": "^3.1.7", + "enquirer": "~2.3.6", "ignore": "^5.0.4", "semver": "7.5.3", "tmp": "~0.2.1", @@ -1390,9 +1971,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.5.0.tgz", - "integrity": "sha512-0+5FH3ot5o0lpL0OKD4fO2n0a6LqLxr0LwU2VYxaAR1GLzOeVE5W3jBWY9ztOE+ktm8mGaZsdIIOQ77Iz/xwsQ==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.8.1.tgz", + "integrity": "sha512-xOflqyIVcyLPzdJOZcucI+5ClwnTgK8zIvpjbxHokrO9McJJglhfUyP0bbTHpEpWqzA+GaPA/6/Qdu0ATzqQBQ==", "cpu": [ "arm64" ], @@ -1406,9 +1987,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.5.0.tgz", - "integrity": "sha512-yziX2oXUSyOPOcRLmFMRsNs0eBVla5IGjAKqpY4OXAPBuyrOfgsW5ztj0PQM34gvqipXtTlN04Xt/U0jzQLudA==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.8.1.tgz", + "integrity": "sha512-JJGrlOvEpDMWnM6YKaA1WOnzHgiw5vRKEowX9ba+jxhmCvtdjbLSxi228kv92JtQPPQ91zvtsNM+BFY0EbPOlA==", "cpu": [ "x64" ], @@ -1422,9 +2003,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.5.0.tgz", - "integrity": "sha512-hwIRRMyWrT2R4ozp6yXRNR1fwcclBlkkIQ51/1IzINPQxynMguuOvNZaJFD4OuZIDmI526++GmogPZc0aMzwkg==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.8.1.tgz", + "integrity": "sha512-aZdJQ7cIQfXOmfk4vRXvVYxuV68xz8YyhNZ0IvBfJ16uZQ+YNl4BpklRLEIdaloSbwz9M1NNewmL+AgklEBxlA==", "cpu": [ "x64" ], @@ -1438,9 +2019,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.5.0.tgz", - "integrity": "sha512-BEWLpBhJ2AcZNDsiExLDcM9kmQ4+E+0YUcOsrAeX1s5D4HXXVtHMdTmOucKs4NNFqMuJ2Cf3ZzqmAIkRug0beA==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.8.1.tgz", + "integrity": "sha512-JzjrTf7FFgikoVUbRs0hKvwHRR6SyqT4yIdk/YyiCt2mWY9w4m5DWtHM/9kJzhckkH9MY66m+X/zG6+NKsEMvg==", "cpu": [ "arm" ], @@ -1454,9 +2035,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.5.0.tgz", - "integrity": "sha512-EWmTbDLbBIjM/OJ594hoFKsEka/b8jM6NehL37mlIXL6fixUEA8LlO0MfUQ+kIPg79nWIujzulkIEhYFDWM1WA==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.8.1.tgz", + "integrity": "sha512-CF0s981myBWusW7iW2+fKPa7ceYYe+NO5EdKe9l27fpHDkcA71KZU3q7U823QpO/7tYvVdBevJp3CCn2/GBURQ==", "cpu": [ "arm64" ], @@ -1470,9 +2051,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.5.0.tgz", - "integrity": "sha512-np/7+HEtEEvtu4zo3GBBPtTG8IP++vvH3o8VXpAB9eD4Jctz3rYzbfMc7GtLZkz8LCmCsjzqnrNtmcmoaRbomQ==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.8.1.tgz", + "integrity": "sha512-X4TobxRt1dALvoeKC3/t1CqZCMUqtEhGG+KQLT/51sG54HdxmTAWRFlvj8PvLH0QSBk4e+uRZAo45qpt3iSnBg==", "cpu": [ "arm64" ], @@ -1486,9 +2067,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.5.0.tgz", - "integrity": "sha512-iLOwgAaa1BHPLFhkBVi7GLAf6LfdYuv/R2rxlqq4d6fhv4Eq91Wo08LsqbFds+LpMN0CA+W/QMc3w9IIS/MPrA==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.8.1.tgz", + "integrity": "sha512-lHvv2FD14Lpxh7muMLStH2tC1opQOaepO4nXwb1LaaoIpMym7kBgCK8AQuI98/oNQiMDXMNDKWQZCjxnJGDIPw==", "cpu": [ "x64" ], @@ -1502,9 +2083,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.5.0.tgz", - "integrity": "sha512-UE3tpgli7a08AsRaw/o1BUXnFOxICGzcYj1aglHBh6urVeUHK0aNt11djZcQ6ETgPgcjoGdwr7RqpANGnJQH9g==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.8.1.tgz", + "integrity": "sha512-c4gQvNgIjggD1A5sYhftQEC1PtAhV3sEnv60X00v9wmjl57Wj4Ty0TgyzpYglLysVRiko/B58S8NYS0jKvMmeA==", "cpu": [ "x64" ], @@ -1518,9 +2099,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.5.0.tgz", - "integrity": "sha512-u9cNKP8zrNIdeyaK5LHX+Zh+rkadE8tSE+vNulphCLhGuXJRpjaVY1juq9UQEo41NJQE6DuWWk2fnj4gALWugQ==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.8.1.tgz", + "integrity": "sha512-GKHPy/MyGFoV9cdKgcWLZZK2vDdxt5bQ53ss0k+BDKRP+YwLKm7tJl23eeM7JdB4GLCBntEQPC+dBqxOA8Ze/w==", "cpu": [ "arm64" ], @@ -1534,9 +2115,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.5.0.tgz", - "integrity": "sha512-E9109SAYNZXqCeWikZXyxNd7SZnCbdKGvqtQktS7dedHGwOmgIWfJ6bsvA7s2zHr09THQKJ4+7U1tDkWVNR9cg==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.8.1.tgz", + "integrity": "sha512-yHZ5FAcx54rVc31R0yIpniepkHMPwaxG23l8E/ZYbL1iPwE/Wc1HeUzUvxUuSXtguRp7ihcRhaUEPkcSl2EAVw==", "cpu": [ "x64" ], @@ -1754,22 +2335,48 @@ "node": ">=14" } }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@sigstore/tuf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.2.tgz", - "integrity": "sha512-vjwcYePJzM01Ha6oWWZ9gNcdIgnzyFxfqfWzph483DPJTH8Tb7f7bQRRll3CYVkyH56j0AgcPAcl6Vg95DPF+Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/protobuf-specs": "^0.2.0", "tuf-js": "^1.1.7" }, "engines": { @@ -1777,10 +2384,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.31.14", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.31.14.tgz", + "integrity": "sha512-2spk0ie6J/4r+nwb55OtBXUn5cZLF9S98fopIjuutBVoq8yLRNh+h8QvMkCjMu5gWBMnnZ/PUSXeHE3xGBPKLQ==" }, "node_modules/@sinonjs/commons": { "version": "3.0.0", @@ -1839,12 +2445,13 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/esm/-/esm-1.0.4.tgz", "integrity": "sha512-bix9CWljCxyD06nGQRDYdmTw0wevvEDyrLKjbDocGV31JQYbfqqgMV1yFeJ9aDgorKQ9yDLrak8poiggsB5Liw==", + "deprecated": "Use the tsconfig base for your runtime instead of general 'esm', e.g. 'node18'", "dev": true }, "node_modules/@tsconfig/node-lts": { - "version": "18.12.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node-lts/-/node-lts-18.12.3.tgz", - "integrity": "sha512-a8FraAjwaGKERCO5PowJeeCE/0Kv1whqegfNwJRIPG08Z5QDr6Kl1CgRrdIjGQtUCpSm+/BDCGeRKfAF1mg+ZQ==", + "version": "18.12.5", + "resolved": "https://registry.npmjs.org/@tsconfig/node-lts/-/node-lts-18.12.5.tgz", + "integrity": "sha512-KJZX0kQ5FBv77WDVzmQ9y1dUjaJCNXAAz3LSsg5cMwH0AUijVdDQtII+IVprEXdb13U9GjVOBxBzyRvr/ozPxw==", "dev": true }, "node_modules/@tsconfig/node10": { @@ -1949,9 +2556,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.0.tgz", - "integrity": "sha512-jfT7iTf/4kOQ9S7CHV9BIyRaQqHu67mOjsIQBC3BKZvzvUB6zLxEwJ6sBE3ozcvP8kF6Uk5PXN0Q+c0dfhGX0g==", + "version": "20.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", + "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -1961,15 +2568,15 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", "dev": true }, "node_modules/@types/sinon": { - "version": "10.0.15", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz", - "integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==", + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", + "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", "dev": true, "dependencies": { "@types/sinonjs__fake-timers": "*" @@ -1982,15 +2589,15 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", - "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/type-utils": "5.61.0", - "@typescript-eslint/utils": "5.61.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.0", @@ -2016,14 +2623,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", - "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { @@ -2043,13 +2650,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", - "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2060,13 +2667,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", - "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.61.0", - "@typescript-eslint/utils": "5.61.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2087,9 +2694,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", - "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2100,13 +2707,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", - "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2127,17 +2734,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", - "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -2153,12 +2760,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", - "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2295,13 +2902,11 @@ } }, "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -2406,9 +3011,9 @@ } }, "node_modules/ansi-sequence-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", - "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", "dev": true }, "node_modules/ansi-styles": { @@ -2512,16 +3117,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -2540,16 +3145,36 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2560,15 +3185,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2578,6 +3203,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "peer": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrgv": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", @@ -2764,9 +3411,9 @@ } }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -2859,6 +3506,11 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2957,6 +3609,21 @@ "node": ">=8" } }, + "node_modules/c8/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/c8/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3002,16 +3669,16 @@ } }, "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -3072,16 +3739,16 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", - "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.10.0" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" @@ -3126,6 +3793,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/cacache/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -3142,9 +3818,9 @@ } }, "node_modules/cacache/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" @@ -3154,12 +3830,12 @@ } }, "node_modules/cacache/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -3180,9 +3856,9 @@ } }, "node_modules/callsites": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", - "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.1.0.tgz", + "integrity": "sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==", "dev": true, "engines": { "node": ">=12.20" @@ -3191,6 +3867,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -3452,6 +4137,39 @@ "node": ">=8" } }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3493,10 +4211,28 @@ "node": ">=8" } }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, "engines": { "node": ">=0.8" } @@ -3675,9 +4411,9 @@ } }, "node_modules/concurrently": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", - "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", + "integrity": "sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -3745,16 +4481,15 @@ } }, "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/conventional-changelog-atom": { @@ -3839,6 +4574,26 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-changelog-ember": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", @@ -3933,14 +4688,27 @@ } }, "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, + "node_modules/conventional-changelog/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-commits-filter": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", @@ -3955,23 +4723,21 @@ } }, "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "dependencies": { "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/conventional-recommended-bump": { @@ -4017,24 +4783,6 @@ "node": ">=14" } }, - "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", @@ -4053,13 +4801,13 @@ } }, "node_modules/conventional-recommended-bump/node_modules/git-semver-tags": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.0.tgz", - "integrity": "sha512-fZ+tmZ1O5aXW/T5nLzZLbxWAHdQTLLXalOECMNAmhoEQSfqZjtaeMjpsXH4C5qVhrICTkVQeQFujB1lKzIHljA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, "dependencies": { "meow": "^8.1.2", - "semver": "^6.3.0" + "semver": "^7.0.0" }, "bin": { "git-semver-tags": "cli.js" @@ -4068,15 +4816,6 @@ "node": ">=14" } }, - "node_modules/conventional-recommended-bump/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -4108,14 +4847,14 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.5.tgz", + "integrity": "sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -4123,22 +4862,29 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", - "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", "dev": true, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=v14.21.3" }, "peerDependencies": { "@types/node": "*", "cosmiconfig": ">=7", "ts-node": ">=10", - "typescript": ">=3" + "typescript": ">=4" } }, "node_modules/create-require": { @@ -4223,7 +4969,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4239,8 +4984,7 @@ "node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decamelize": { "version": "1.2.0", @@ -4300,15 +5044,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -4350,15 +5085,6 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -4375,18 +5101,18 @@ } }, "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4429,12 +5155,24 @@ } }, "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/duplexer": { @@ -4472,6 +5210,20 @@ "node": ">=0.10.0" } }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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/emittery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz", @@ -4571,19 +5323,20 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -4603,14 +5356,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -4663,9 +5420,9 @@ } }, "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "hasInstallScript": true, "bin": { @@ -4675,28 +5432,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, "node_modules/escalade": { @@ -4721,27 +5478,27 @@ } }, "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -4751,7 +5508,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -4763,7 +5519,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -4777,9 +5532,9 @@ } }, "node_modules/eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, "funding": [ { @@ -4795,41 +5550,44 @@ "url": "https://feross.org/support" } ], + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "eslint": "^8.0.1", "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", "eslint-plugin-promise": "^6.0.0" } }, "node_modules/eslint-config-standard-with-typescript": { - "version": "36.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-36.0.0.tgz", - "integrity": "sha512-8ZSEskfrDAkUF2lTQLMT0CBzgRNlx1uIM7l2I7L683dKAXUdHuEL2x+GxuGAsdsoWbx7W7Zv0xF67VCEZXIk0Q==", + "version": "36.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-36.1.1.tgz", + "integrity": "sha512-ggLAYiSm+fsriYbq9DyehiZgtBD/QObS6ZPjN7cZFEnJvAOWNgtYxre2T0d/hFt5WOYkGWii/4SEHnOofIKFQA==", "dev": true, "dependencies": { "@typescript-eslint/parser": "^5.50.0", - "eslint-config-standard": "17.0.0" + "eslint-config-standard": "17.1.0" }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "^5.50.0", "eslint": "^8.0.1", "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", "eslint-plugin-promise": "^6.0.0", "typescript": "*" } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "peer": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -4867,77 +5625,53 @@ "dev": true, "peer": true, "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-plugin-es-x": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", + "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", "dev": true, "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0" + }, "engines": { - "node": ">=4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, "peer": true, "dependencies": { "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -4970,9 +5704,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "peer": true, "bin": { @@ -4980,23 +5714,24 @@ } }, "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.1.0.tgz", + "integrity": "sha512-3wv/TooBst0N4ND+pnvffHuz9gNPmk/NkLwAxOt2JykTl/hcuECe6yhTtLJcZjIxtZwN+GX92ACp/QTLpHA3Hg==", "dev": true, "peer": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", + "eslint-plugin-es-x": "^7.1.0", + "get-tsconfig": "^4.7.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=12.22.0" + "node": ">=16.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" @@ -5041,39 +5776,10 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5108,9 +5814,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -5163,9 +5869,9 @@ } }, "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", @@ -5356,9 +6062,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5378,9 +6084,9 @@ "dev": true }, "node_modules/fast-json-stringify": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.7.0.tgz", - "integrity": "sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.8.0.tgz", + "integrity": "sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ==", "dev": true, "dependencies": { "@fastify/deepmerge": "^1.0.0", @@ -5392,10 +6098,11 @@ } }, "node_modules/fast-jwt": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-2.2.3.tgz", - "integrity": "sha512-ziANDWUZpgUyE+A8YAkauVnGa/XXJGEXC1H3qXAYnT8v4Et3EsC8Zuvw8ljiqDgRearw9Wy+Q/Miw5x1XmPJTA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-3.2.0.tgz", + "integrity": "sha512-RELkgZpWwu5BsUgylCjuu9RBwg3mofXd1bVzqD3V3aH4uew2bF2A+nYp1sZbmvPGf/k7sLBnKuzpQA00CM+gnA==", "dependencies": { + "@lukeed/ms": "^2.0.1", "asn1.js": "^5.4.1", "ecdsa-sig-formatter": "^1.0.11", "mnemonist": "^0.39.5" @@ -5420,9 +6127,9 @@ } }, "node_modules/fast-redact": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", - "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", + "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", "dev": true, "engines": { "node": ">=6" @@ -5435,9 +6142,9 @@ "dev": true }, "node_modules/fastify": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.19.2.tgz", - "integrity": "sha512-2unheeIRWFf9/Jjcz7djOpKuXCTzZjlyFfiBwKqpldkHMN2rfTLu/f9pYTdwlhzC9Cdj0S2H12zlug0Kd5uZ1w==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.23.0.tgz", + "integrity": "sha512-u4aQUjAqf+GQQI+IeIJtzOKCJHtdwPlGxzopq/Kv6QcEdJ7xuJFSQ5Bi7+uJ+F8990jWECLzRcAyZ4pVsloRpQ==", "dev": true, "dependencies": { "@fastify/ajv-compiler": "^3.5.0", @@ -5455,13 +6162,13 @@ "rfdc": "^1.3.0", "secure-json-parse": "^2.5.0", "semver": "^7.5.0", - "tiny-lru": "^11.0.1" + "toad-cache": "^3.2.0" } }, "node_modules/fastify-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.0.tgz", - "integrity": "sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==" + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", + "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==" }, "node_modules/fastq": { "version": "1.15.0", @@ -5594,16 +6301,32 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flatted": { @@ -5699,17 +6422,26 @@ } }, "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5717,9 +6449,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -5737,16 +6469,16 @@ "dev": true }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -6033,9 +6765,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz", - "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -6093,9 +6825,9 @@ } }, "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6174,9 +6906,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -6250,13 +6982,13 @@ "dev": true }, "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "dependencies": { "minimist": "^1.2.5", - "neo-async": "^2.6.0", + "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, @@ -6371,6 +7103,25 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/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/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -6679,9 +7430,9 @@ } }, "node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", @@ -6698,7 +7449,7 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.0.1" }, "engines": { "node": ">=12.0.0" @@ -6906,9 +7657,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -7178,17 +7929,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -7235,10 +7982,11 @@ } }, "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "peer": true }, "node_modules/isexe": { "version": "2.0.0", @@ -7265,23 +8013,23 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -7292,9 +8040,9 @@ } }, "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -7328,24 +8076,24 @@ } }, "node_modules/jest-diff": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", - "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -7384,6 +8132,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -7476,6 +8230,25 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, + "node_modules/jwk-to-pem": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-2.0.5.tgz", + "integrity": "sha512-L90jwellhO8jRKYwbssU9ifaMVqajzj3fpRjDKcsDzrslU9syRbFqfkXtT4B89HYAap+xsxNcxgBSB09ig+a7A==", + "dependencies": { + "asn1.js": "^5.3.0", + "elliptic": "^6.5.4", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -7486,15 +8259,15 @@ } }, "node_modules/lerna": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.1.1.tgz", - "integrity": "sha512-rjivAl3bYu2+lWOi90vy0tYFgwBYPMiNkR/DuEWZC08wle5dsbOZ/SlXeLk9+kzbF89Bt5P6p+qF78A2tJsWPA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.2.0.tgz", + "integrity": "sha512-E13iAY4Tdo+86m4ClAe0j0bP7f8QG2neJReglILPOe+gAOoX17TGqEWanmkDELlUXOrTTwnte0ewc6I6/NOqpg==", "dev": true, "dependencies": { - "@lerna/child-process": "7.1.1", - "@lerna/create": "7.1.1", + "@lerna/child-process": "7.2.0", + "@lerna/create": "7.2.0", "@npmcli/run-script": "6.0.2", - "@nx/devkit": ">=16.1.3 < 17", + "@nx/devkit": ">=16.5.1 < 17", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -7528,6 +8301,7 @@ "libnpmaccess": "7.0.2", "libnpmpublish": "7.3.0", "load-json-file": "6.2.0", + "lodash": "^4.17.21", "make-dir": "3.1.0", "minimatch": "3.0.5", "multimatch": "5.0.0", @@ -7536,7 +8310,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=16.1.3 < 17", + "nx": ">=16.5.1 < 17", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", @@ -7653,18 +8427,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/lerna/node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/lerna/node_modules/conventional-changelog-core": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", @@ -7688,9 +8450,9 @@ } }, "node_modules/lerna/node_modules/conventional-changelog-writer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.0.tgz", - "integrity": "sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, "dependencies": { "conventional-commits-filter": "^3.0.0", @@ -7698,7 +8460,7 @@ "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", "meow": "^8.1.2", - "semver": "^6.3.0", + "semver": "^7.0.0", "split": "^1.0.1" }, "bin": { @@ -7708,15 +8470,6 @@ "node": ">=14" } }, - "node_modules/lerna/node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/lerna/node_modules/conventional-commits-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", @@ -7730,24 +8483,6 @@ "node": ">=14" } }, - "node_modules/lerna/node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/lerna/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -7807,13 +8542,13 @@ } }, "node_modules/lerna/node_modules/git-semver-tags": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.0.tgz", - "integrity": "sha512-fZ+tmZ1O5aXW/T5nLzZLbxWAHdQTLLXalOECMNAmhoEQSfqZjtaeMjpsXH4C5qVhrICTkVQeQFujB1lKzIHljA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, "dependencies": { "meow": "^8.1.2", - "semver": "^6.3.0" + "semver": "^7.0.0" }, "bin": { "git-semver-tags": "cli.js" @@ -7822,15 +8557,6 @@ "node": ">=14" } }, - "node_modules/lerna/node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/lerna/node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", @@ -7900,6 +8626,30 @@ "node": ">=8" } }, + "node_modules/lerna/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/lerna/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -8130,6 +8880,15 @@ "node": ">=12" } }, + "node_modules/libnpmpublish/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/libnpmpublish/node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", @@ -8161,12 +8920,12 @@ } }, "node_modules/libnpmpublish/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -8337,6 +9096,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -8356,29 +9123,20 @@ "dev": true }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -8421,17 +9179,26 @@ } }, "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/make-fetch-happen/node_modules/ssri/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -8669,9 +9436,9 @@ } }, "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -8764,6 +9531,11 @@ "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8842,12 +9614,12 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dev": true, "dependencies": { - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -8858,6 +9630,15 @@ "encoding": "^0.1.13" } }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -9095,6 +9876,15 @@ "type-detect": "4.0.8" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -9112,6 +9902,14 @@ "node": ">= 8.0.0" } }, + "node_modules/node-cache/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -9151,22 +9949,43 @@ "which": "^2.0.2" }, "bin": { - "node-gyp": "bin/node-gyp.js" + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true }, "node_modules/nofilter": { "version": "3.1.0", @@ -9226,9 +10045,9 @@ } }, "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", + "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", "dev": true, "dependencies": { "semver": "^7.1.1" @@ -9343,9 +10162,9 @@ } }, "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", "dev": true, "dependencies": { "npm-install-checks": "^6.0.0", @@ -9484,13 +10303,13 @@ } }, "node_modules/nx": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.5.0.tgz", - "integrity": "sha512-X95atskaF1ejrF+C80mC4SwFPq0G/yFvxhfeWpPjKj7vUJEy1nZ4SjqlNVMORdN8dKQTE6ss76cIJux3fE7EXw==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.8.1.tgz", + "integrity": "sha512-K5KrwNdPz0eEe6SY5wrnhZcigjfIJkttPrIJRXNBQTE50NGcOfz1TjMXPdTWBxBCCua5PAealO3OrE8jpv+QnQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "16.5.0", + "@nrwl/tao": "16.8.1", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", @@ -9500,7 +10319,8 @@ "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^7.0.2", - "dotenv": "~10.0.0", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", "fast-glob": "3.2.7", "figures": "3.2.0", @@ -9512,6 +10332,7 @@ "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", "minimatch": "3.0.5", + "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", "semver": "7.5.3", @@ -9529,16 +10350,16 @@ "nx": "bin/nx.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.5.0", - "@nx/nx-darwin-x64": "16.5.0", - "@nx/nx-freebsd-x64": "16.5.0", - "@nx/nx-linux-arm-gnueabihf": "16.5.0", - "@nx/nx-linux-arm64-gnu": "16.5.0", - "@nx/nx-linux-arm64-musl": "16.5.0", - "@nx/nx-linux-x64-gnu": "16.5.0", - "@nx/nx-linux-x64-musl": "16.5.0", - "@nx/nx-win32-arm64-msvc": "16.5.0", - "@nx/nx-win32-x64-msvc": "16.5.0" + "@nx/nx-darwin-arm64": "16.8.1", + "@nx/nx-darwin-x64": "16.8.1", + "@nx/nx-freebsd-x64": "16.8.1", + "@nx/nx-linux-arm-gnueabihf": "16.8.1", + "@nx/nx-linux-arm64-gnu": "16.8.1", + "@nx/nx-linux-arm64-musl": "16.8.1", + "@nx/nx-linux-x64-gnu": "16.8.1", + "@nx/nx-linux-x64-musl": "16.8.1", + "@nx/nx-win32-arm64-msvc": "16.8.1", + "@nx/nx-win32-x64-msvc": "16.8.1" }, "peerDependencies": { "@swc-node/register": "^1.4.2", @@ -9770,16 +10591,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -10220,17 +11072,26 @@ } }, "node_modules/pacote/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/ssri/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10306,6 +11167,15 @@ "parse-path": "^7.0.0" } }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -10340,13 +11210,13 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", - "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -10356,9 +11226,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -10373,6 +11243,12 @@ "isarray": "0.0.1" } }, + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -10404,15 +11280,15 @@ } }, "node_modules/pino": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.1.tgz", - "integrity": "sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.15.1.tgz", + "integrity": "sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA==", "dev": true, "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.0.0", + "pino-abstract-transport": "v1.1.0", "pino-std-serializers": "^6.0.0", "process-warning": "^2.0.0", "quick-format-unescaped": "^4.0.3", @@ -10426,9 +11302,9 @@ } }, "node_modules/pino-abstract-transport": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", - "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", + "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", "dev": true, "dependencies": { "readable-stream": "^4.0.0", @@ -10689,12 +11565,12 @@ } }, "node_modules/pretty-format": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", - "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -10968,16 +11844,16 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", - "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.10.0" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" @@ -11059,9 +11935,9 @@ } }, "node_modules/read-package-json/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" @@ -11232,9 +12108,9 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -11316,9 +12192,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, "node_modules/regexp.prototype.flags": { @@ -11339,19 +12215,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11371,12 +12234,12 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -11477,15 +12340,92 @@ "dev": true }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", + "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^10.2.5" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11532,6 +12472,25 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11596,9 +12555,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -11692,9 +12651,9 @@ } }, "node_modules/shiki": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", - "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { "ansi-sequence-parser": "^1.1.0", @@ -11725,13 +12684,15 @@ "dev": true }, "node_modules/sigstore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.7.0.tgz", - "integrity": "sha512-KP7QULhWdlu3hlp+jw2EvgWKlOGOY9McLj/jrchLjHNlNPK0KWIwF919cbmOp6QiKXLmPijR2qH/5KYWlbtG9Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", "make-fetch-happen": "^11.0.1" }, "bin": { @@ -11759,6 +12720,15 @@ "url": "https://opencollective.com/sinon" } }, + "node_modules/sinon/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -12050,15 +13020,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -12068,30 +13038,30 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12382,9 +13352,9 @@ "dev": true }, "node_modules/thread-stream": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", - "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.0.tgz", + "integrity": "sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==", "dev": true, "dependencies": { "real-require": "^0.2.0" @@ -12414,15 +13384,6 @@ "node": ">=4" } }, - "node_modules/tiny-lru": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.0.1.tgz", - "integrity": "sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -12435,6 +13396,21 @@ "node": ">=8.17.0" } }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12447,6 +13423,15 @@ "node": ">=8.0" } }, + "node_modules/toad-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.2.0.tgz", + "integrity": "sha512-Hj5zSqBS6OHbZoQk9IU8VqIr+0JUpwzunnwSlFJhG8aJSInYUMEuzItl3kJsGteTPd1qtflafdRHlRtUazYeqg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -12514,15 +13499,6 @@ } } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", @@ -12547,10 +13523,9 @@ } }, "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -12574,13 +13549,13 @@ "dev": true }, "node_modules/tsx": { - "version": "3.12.7", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.7.tgz", - "integrity": "sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==", + "version": "3.12.8", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.8.tgz", + "integrity": "sha512-Lt9KYaRGF023tlLInPj8rgHwsZU8qWLBj4iRXNWxTfjIkU7canGL806AqKear1j722plHuiYNcL2ZCo6uS9UJA==", "dev": true, "dependencies": { "@esbuild-kit/cjs-loader": "^2.4.2", - "@esbuild-kit/core-utils": "^3.0.0", + "@esbuild-kit/core-utils": "^3.2.2", "@esbuild-kit/esm-loader": "^2.5.5" }, "bin": { @@ -12622,19 +13597,73 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { - "node": ">=4" + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-length": { @@ -12745,6 +13774,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, "node_modules/unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", @@ -12844,29 +13878,14 @@ "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/validate-npm-package-license": { @@ -12970,9 +13989,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "peer": true, "dependencies": { @@ -12980,8 +13999,7 @@ "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13056,9 +14074,9 @@ "dev": true }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -13066,10 +14084,7 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { @@ -13276,9 +14291,9 @@ } }, "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" @@ -13327,9 +14342,9 @@ } }, "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -13429,6 +14444,21 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/yargs/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -13443,6 +14473,24 @@ "node": ">=12" } }, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -13484,6 +14532,23 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -13519,7 +14584,9 @@ "version": "0.1.6", "license": "Apache-2.0", "dependencies": { + "@byu-oit-sdk/jwt": "^0.1.0-beta.5", "@byu-oit/jwt": "^0.0.6", + "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", "fastify-plugin": "^4.5.0" @@ -13543,109 +14610,17 @@ } }, "packages/fastify/node_modules/@types/node": { - "version": "18.16.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz", - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==" - }, - "packages/fastify/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "packages/fastify/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/fastify/node_modules/glob": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", - "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.10.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/fastify/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/fastify/node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", - "dev": true, - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/fastify/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "version": "18.17.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" }, "packages/jwt": { "name": "@byu-oit/jwt", "version": "0.0.6", "license": "Apache-2.0", "dependencies": { - "@sinclair/typebox": "^0.29.4", - "fast-jwt": "^2.2.1", + "@byu-oit-sdk/jwt": "^0.1.0-beta.5", + "@sinclair/typebox": "^0.31.2", "node-cache": "^5.1.2" }, "devDependencies": { @@ -13666,103 +14641,6 @@ "tsx": "^3.12.7", "typescript": "^5.0.4" } - }, - "packages/jwt/node_modules/@sinclair/typebox": { - "version": "0.29.4", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.29.4.tgz", - "integrity": "sha512-XSEM1jjL9CPI4pZ0RZs84Oq+jcONXFHljufxrp70rTYTbslDuYDj1wnDCzDb3XC9Tf5C36sGO1Fu7VFXXDTgFw==" - }, - "packages/jwt/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "packages/jwt/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/jwt/node_modules/glob": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", - "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.10.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/jwt/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/jwt/node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", - "dev": true, - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/jwt/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } } } } diff --git a/packages/fastify/README.md b/packages/fastify/README.md index a9237d1..c17ad8f 100644 --- a/packages/fastify/README.md +++ b/packages/fastify/README.md @@ -14,10 +14,26 @@ const fastify = Fastify({ logger }) fastify.register(ByuJwtProvider, { /** Only authenticate routes matching this prefix */ - prefix: '/example/v1', + prefix: '/example/v1', + development: process.env.NODE_ENV === 'development', /** May pass in ByuJwt options from @byu-oit/jwt */ - development: process.env.NODE_ENV === 'development' + byuJwtOptions: { + issuer: 'https://api.byu.edu', + additionalValidations: [() => { + if(false) throw new Error('This will never happen') + }] + } + }) await fastify.listen({ port: 3000 }).catch(console.error) ``` + +## Options + +| property | type | default | description | +|-----------------------|---------|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| prefix | string | `undefined` | Will only authenticate routes matching this prefix. | +| development | boolean | false | skips JWT verification for development purposes but will throw an error if NODE_ENV is set to `production`. | +| basePath | string | `undefined` | will validate that the audience starts with the provided basePath in production. | +| byuJwtOptions | object | `undefined` | an object that contains any ByuJwt options passed in. See the [BYU JWT](https://byu-oit.github.io/byu-jwt-nodejs/modules/BYU_JWT.html#md:options) Documentation for a full list of those options. | diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 48a90e0..078f229 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -40,7 +40,9 @@ }, "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { + "@byu-oit-sdk/jwt": "^0.1.0-beta.5", "@byu-oit/jwt": "^0.0.6", + "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", "fastify-plugin": "^4.5.0" diff --git a/packages/fastify/src/ByuJwtAuthenticator.ts b/packages/fastify/src/ByuJwtAuthenticator.ts index 7cd8f21..4fad6f7 100644 --- a/packages/fastify/src/ByuJwtAuthenticator.ts +++ b/packages/fastify/src/ByuJwtAuthenticator.ts @@ -1,12 +1,34 @@ -import { ByuJwt, type JwtPayload } from '@byu-oit/jwt' +import { ByuJwt, type JwtPayload, type CreateByuJwtOptions, type TransformedJwtPayload } from '@byu-oit/jwt' import { TokenError } from 'fast-jwt' import { type IncomingHttpHeaders } from 'http' import { BYU_JWT_ERROR_CODES, ByuJwtError } from './ByuJwtError.js' -export class ByuJwtAuthenticator extends ByuJwt { +export interface ByuJwtAuthenticatorOptions { + byuJwtOptions?: CreateByuJwtOptions + development?: boolean + basePath?: string +} + +export class ByuJwtAuthenticator { static HEADER_CURRENT = 'x-jwt-assertion' static HEADER_ORIGINAL = 'x-jwt-assertion-original' + private readonly ByuJwt: typeof ByuJwt + private readonly development: boolean + + constructor ({ development, basePath, byuJwtOptions = {} }: ByuJwtAuthenticatorOptions = {}) { + this.development = development ?? false + + /** Extra validation step if basePath is provided */ + if (basePath != null) { + if (byuJwtOptions.additionalValidations == null) { + byuJwtOptions.additionalValidations = [] + } + byuJwtOptions.additionalValidations.push(apiContextValidationFunction(basePath)) + } + this.ByuJwt = ByuJwt.create(byuJwtOptions) + } + async authenticate (headers: IncomingHttpHeaders): Promise { /** Verify any known JWT headers */ const JwtHeaders = [ @@ -17,7 +39,7 @@ export class ByuJwtAuthenticator extends ByuJwt { const jwt = headers[header] if (typeof jwt !== 'string') return undefined try { - const { payload } = await this.verify(jwt) + const { payload } = this.development ? this.ByuJwt.decode(jwt) : await this.ByuJwt.verify(jwt) return payload } catch (e) { if (e instanceof TokenError) { @@ -32,24 +54,30 @@ export class ByuJwtAuthenticator extends ByuJwt { throw new ByuJwtError(BYU_JWT_ERROR_CODES.missingExpectedJwt, 'Missing expected JWT') } - /** Extra validation step if basePath is provided */ - const basePath = this.basePath - if (basePath != null) { - const context = current.apiContext - if (!context.startsWith(basePath)) { - throw new ByuJwtError(BYU_JWT_ERROR_CODES.invalidApiContext, 'Invalid API context in JWT') - } - /** Check that the JWT is meant for the audience */ - if (current.aud != null) { - const audiences = typeof current.aud === 'string' ? [current.aud] : current.aud - const hasAValidAudience = !audiences.some(audience => audience.startsWith(basePath)) - if (hasAValidAudience) { - throw new ByuJwtError(BYU_JWT_ERROR_CODES.invalidAudience, 'Invalid aud in JWT') - } - } - } - /** Prioritize original caller over current */ return original ?? current } } + +/** + * Returns a function that provides additional validation to the JWT + * + * @param basePath - will validate that the audience starts with the provided basePath in production. + * @returns - A function that validates the API context and audience. + */ +export function apiContextValidationFunction (basePath: string): (jwt: { payload: TransformedJwtPayload }) => void { + return (jwt) => { + const context = jwt.payload.apiContext + if (!context.startsWith(basePath)) { + throw new ByuJwtError(BYU_JWT_ERROR_CODES.invalidApiContext, 'Invalid API context in JWT') + } + /** Check that the JWT is meant for the audience */ + if (jwt.payload.aud != null) { + const audiences = typeof jwt.payload.aud === 'string' ? [jwt.payload.aud] : jwt.payload.aud + const hasAValidAudience = !audiences.some((audience) => audience.startsWith(basePath)) + if (hasAValidAudience) { + throw new ByuJwtError(BYU_JWT_ERROR_CODES.invalidAudience, 'Invalid aud in JWT') + } + } + } +} diff --git a/packages/fastify/src/ByuJwtProvider.ts b/packages/fastify/src/ByuJwtProvider.ts index 40cafd7..36a421f 100644 --- a/packages/fastify/src/ByuJwtProvider.ts +++ b/packages/fastify/src/ByuJwtProvider.ts @@ -1,7 +1,10 @@ import type { FastifyPluginAsync, FastifyReply, FastifyRequest } from 'fastify' import fp from 'fastify-plugin' -import type { ByuJwtOptions, JwtPayload } from '@byu-oit/jwt' -import { ByuJwtAuthenticator } from './ByuJwtAuthenticator.js' +import type { JwtPayload } from '@byu-oit/jwt' +import { + ByuJwtAuthenticator, + type ByuJwtAuthenticatorOptions +} from './ByuJwtAuthenticator.js' /** Enhance the fastify request with the verified caller information */ declare module 'fastify' { @@ -10,13 +13,13 @@ declare module 'fastify' { } } -export interface ByuJwtProviderOptions extends ByuJwtOptions { +export interface ByuJwtProviderOptions extends ByuJwtAuthenticatorOptions { prefix?: string } const ByuJwtProviderPlugin: FastifyPluginAsync = async (fastify, options) => { - const authenticator = new ByuJwtAuthenticator(options) - + const { prefix, ...opts } = options + const authenticator = new ByuJwtAuthenticator(opts) async function ByuJwtAuthenticationHandler (request: FastifyRequest, reply: FastifyReply): Promise { try { request.caller = await authenticator.authenticate(request.headers) @@ -31,7 +34,7 @@ const ByuJwtProviderPlugin: FastifyPluginAsync = async (f * under the specified prefix. */ fastify.addHook('onRoute', (route) => { - if (options.prefix != null && !route.path.startsWith(options.prefix)) { + if (prefix != null && !route.path.startsWith(prefix)) { /** Don't add authentication to routes that don't match the specified prefix */ return } diff --git a/packages/fastify/test/ByuJwtProvider.spec.ts b/packages/fastify/test/ByuJwtProvider.spec.ts index e7c1671..85a4156 100644 --- a/packages/fastify/test/ByuJwtProvider.spec.ts +++ b/packages/fastify/test/ByuJwtProvider.spec.ts @@ -1,7 +1,8 @@ import test from 'ava' import Fastify, { type FastifyReply, type FastifyRequest } from 'fastify' import ByuJwtProvider, { type ByuJwtError } from '../src/index.js' -import { expiredJwt } from './assets/jwt.js' +import { expiredJwt, decodedJwt } from './assets/jwt.js' +import { apiContextValidationFunction } from '../src/index.js' const issuer = 'https://example.com' const development = true @@ -12,26 +13,41 @@ const errorHandler = (error: ByuJwtError, request: FastifyRequest, reply: Fastif test('authenticated user', async t => { const fastify = Fastify() - await fastify.register(ByuJwtProvider, { issuer, development }) + await fastify.register(ByuJwtProvider, { byuJwtOptions: { issuer }, development }) fastify.get('/', (request) => request.caller) const result = await fastify.inject({ url: '/', headers: { 'x-jwt-assertion': expiredJwt } }).then(res => res.json()) t.is(result.netId, 'stuft2') }) +test('cannot fetch key', async t => { + const fastify = Fastify() + await fastify.register(ByuJwtProvider, { byuJwtOptions: { issuer }, basePath: '/test' }) + fastify.get('/', (request) => request.caller) + const result = await fastify.inject({ url: '/', headers: { 'x-jwt-assertion': expiredJwt } }).then(res => res.json()) + t.is(result.message, 'Cannot fetch key.') +}) + test('missing expected JWT', async t => { const fastify = Fastify() fastify.setErrorHandler(errorHandler) - await fastify.register(ByuJwtProvider, { issuer, development }) + await fastify.register(ByuJwtProvider, { byuJwtOptions: { issuer }, development }) fastify.get('/', () => true) const result = await fastify.inject('/').then(res => res.json()) t.is(result.message, 'Missing expected JWT') }) + test('invalid API context in JWT', async t => { - const fastify = Fastify() - await fastify.register(ByuJwtProvider, { issuer, development, basePath: '/test' }) // fails because development:false forces jwt to be valid - fastify.get('/', (request) => request.caller) - const result = await fastify.inject({ url: '/', headers: { 'x-jwt-assertion': expiredJwt } }).then(res => res.json()) - t.is(result.message, 'Invalid API context in JWT') + const validate = apiContextValidationFunction('/test') + t.throws(() => { + validate(decodedJwt) + }, { instanceOf: Error, message: 'Invalid API context in JWT' }) }) -test.todo('invalid audience in JWT') // Can't easily get aud from auth code token + +test('invalid audience in JWT', async t => { + const validate = apiContextValidationFunction('/echo') + t.throws(() => { + validate(decodedJwt) + }, { instanceOf: Error, message: 'Invalid aud in JWT' }) +}) + test.todo('will return original instead of current') diff --git a/packages/fastify/test/assets/jwt.ts b/packages/fastify/test/assets/jwt.ts index 5b91dbc..acfb7f4 100644 --- a/packages/fastify/test/assets/jwt.ts +++ b/packages/fastify/test/assets/jwt.ts @@ -1 +1,39 @@ export const expiredJwt = 'eyJraWQiOiJwdWJsaWM6YXBpLXNhbmRib3gtMiIsIng1dCI6Img1bnFJM2dBQm4wM3p2dGFfQVBMRVdZYm1LMCIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJodHRwczovL2FwaS5ieXUuZWR1IiwiZXhwIjoxNjgyNjE1OTg0LCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL3N1YnNjcmliZXIiOiJCWVUvc3R1ZnQyIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy9hcHBsaWNhdGlvbmlkIjoiZWEyZWRlOWEtMTQ1Zi00YTZjLWE1MzEtNTViYTA0ODQ3ZTRiIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy9hcHBsaWNhdGlvbm5hbWUiOiJlYTJlZGU5YS0xNDVmLTRhNmMtYTUzMS01NWJhMDQ4NDdlNGIiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL2FwcGxpY2F0aW9udGllciI6IlVubGltaXRlZCIsImh0dHA6Ly93c28yLm9yZy9jbGFpbXMvYXBpY29udGV4dCI6Ii9lY2hvL3YxIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy92ZXJzaW9uIjoidjEiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL3RpZXIiOiJVbmxpbWl0ZWQiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL2tleXR5cGUiOiJTQU5EQk9YIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VydHlwZSI6IkFQUExJQ0FUSU9OIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy9lbmR1c2VyIjoic3R1ZnQyQGNhcmJvbi5zdXBlciIsImh0dHA6Ly93c28yLm9yZy9jbGFpbXMvZW5kdXNlclRlbmFudElkIjoiLTEyMzQiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL2NsaWVudF9pZCI6ImVhMmVkZTlhLTE0NWYtNGE2Yy1hNTMxLTU1YmEwNDg0N2U0YiIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfc3Vic2NyaWJlcl9uZXRfaWQiOiJzdHVmdDIiLCJodHRwOi8vYnl1LmVkdS9jbGFpbXMvY2xpZW50X3BlcnNvbl9pZCI6IjI5OTI3Njc4MiIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfYnl1X2lkIjoiNzUwNzE3MDczIiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9uZXRfaWQiOiJzdHVmdDIiLCJodHRwOi8vYnl1LmVkdS9jbGFpbXMvY2xpZW50X3N1cm5hbWUiOiJUdWZ0IiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9zdXJuYW1lX3Bvc2l0aW9uIjoiTCIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfcmVzdF9vZl9uYW1lIjoiU3BlbmNlciBKYW1lcyIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfcHJlZmVycmVkX2ZpcnN0X25hbWUiOiJTcGVuY2VyIiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9zb3J0X25hbWUiOiJUdWZ0LCBTcGVuY2VyIEphbWVzIiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9uYW1lX3ByZWZpeCI6IiAiLCJodHRwOi8vYnl1LmVkdS9jbGFpbXMvY2xpZW50X25hbWVfc3VmZml4IjoiICIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfY2xhaW1fc291cmNlIjoiQ0xJRU5UX1NVQlNDUklCRVIifQ.RoPdD6Inrdkovu0gQE1ozVf23HepuNLPqJJIJCnUe_0tY7r36ilKQmnER__bCNfHkGZUyVx0wjTinoPIG8ytIv-0pjP-LkR4dpZK9O3WMbb06qGyzWa0-OWOkb2iuH_qGcolM6brmco6eM8NROtn6jx3rVqbffJY1czpW5zJPzLo8YiiEDvTwk7efh99faVXQoRcUV0_LdFORwfgqKwBp8HmhXfZrMhCLQKbahTasIUUtpN8nyPk6BHb0GITXRjK4WQ5eHFf3CDRuGLVVQeTV6dbvIpa9jrzcKGtqkCDbJ-d9uxoPQ7OvLdouQ1D3oi2zj4Qalgs9ydKX3vpO4-4etm5T18qkJ9WlDe_Qra6hiD0CS0zT2umXh3MVFeU9qIpDNwBXRmXXMDbZTvQGWeWB14tK6x24gj-nNkOz_0JlwbykDN11mgsvCxDSWiSBBtYHndyO9B_YDKpLntP1ZafAIVLZtT9QYSljNKps1iIkotC7CG7FbMl9cr34yWuU7T4Sgn-_U1OE3DY6yojiDDtPqnkmTeTMWqmdqC2-ajqJ3JtQ1PFNdKWM5LIYbgmOXHsQB6DuaPIhwQlV0-reNX2_M9RRrNhklOhlUqpBz_A56ZKA5Su990YvDS6DcnW9wMERkxNDcW-tqGltxUwiN3PeCEhim5_ndul66DpBXndpSY' + +export const decodedJwt = { + header: { + kid: 'public:api-sandbox-2', + x5t: 'h5nqI3gABn03zvta_APLEWYbmK0', + alg: 'RS256' + }, + payload: { + apiContext: '/echo/v1', + application: { + id: 'ea2ede9a-145f-4a6c-a531-55ba04847e4b', + name: 'ea2ede9a-145f-4a6c-a531-55ba04847e4b', + tier: 'Unlimited' + }, + aud: 'invalid aud', + byuId: '750717073', + clientId: 'ea2ede9a-145f-4a6c-a531-55ba04847e4b', + endUser: 'stuft2@carbon.super', + endUserTenantId: '-1234', + exp: 1682615984, + iss: 'https://api.byu.edu', + keyType: 'SANDBOX', + netId: 'stuft2', + personId: '299276782', + preferredFirstName: 'Spencer', + prefix: ' ', + restOfName: 'Spencer James', + sortName: 'Tuft, Spencer James', + subscriber: 'BYU/stuft2', + suffix: ' ', + surname: 'Tuft', + surnamePosition: 'L', + tier: 'Unlimited', + userType: 'APPLICATION', + version: 'v1' + }, + signature: '' +} diff --git a/packages/jwt/README.md b/packages/jwt/README.md index b294390..f210fff 100644 --- a/packages/jwt/README.md +++ b/packages/jwt/README.md @@ -27,10 +27,10 @@ const { alg } = jwt.header ## Options -| property | type | default | description | -|-----------------|---------|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| basePath | string | `undefined` | will validate that the audience starts with the provided basePath in production. | -| cacheDuration | number | `60 * 60` (1 hour) | the default cache duration in seconds if one isn't provided by the [Cache-Control header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) (max-age directive) for the certs or openid configuration. | -| development | boolean | false | skips JWT verification for development purposes but will throw an error if NODE_ENV is set to `production`. | -| issuer | string | `undefined` | The OAuth Provider host, e.g. `https://api.byu.edu`. Either the issuer or the openIdConfigUrl are required but not both. | -| openIdConfigUrl | string | `undefined` | Can specify the openIdConfigUrl explicitly if your open id configuration is not located at `/.well-known/openid-configuration`. Overwrites issuer when fetching the OpenID configuration. Either the issuer or the openIdConfigUrl are required but not both. | +| property | type | default | description | +|-----------------------|---------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| issuer | string | `undefined` | The OAuth Provider host, e.g. `https://api.byu.edu`. Either the issuer or the discoveryEndpoint are required but not both. If the discoveryEndpoint is not provided, the issuer will be used to specify the open id configuration. | +| discoveryEndpoint | string | `undefined` | Can specify the discoveryEndpoint explicitly if your open id configuration is not located at `/.well-known/openid-configuration`. Either the issuer or the discoveryEndpoint are required but not both. | +| key | string | `undefined` | A JWK in the form of a PEM Certificate that will be used to verify the JWT. | +| additionalValidations | array | `undefined` | An array of additional validation functions that can be run when `verify()` is called. Each function should accept a decoded jwt as its parameter, throw an error if the validation fails, and return void if it succeeds. | +> There are additional options that can be passed in that are all listed under the fast-jwt [VerifierOptions](https://nearform.github.io/fast-jwt/docs/api/interfaces/VerifierOptions) properties. Descriptions of these properties can be found [here](https://nearform.github.io/fast-jwt/#createverifier). diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 0c7aab2..4ca0332 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -40,8 +40,8 @@ }, "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { - "@sinclair/typebox": "^0.29.4", - "fast-jwt": "^2.2.1", + "@byu-oit-sdk/jwt": "^0.1.0-beta.5", + "@sinclair/typebox": "^0.31.2", "node-cache": "^5.1.2" }, "devDependencies": { diff --git a/packages/jwt/src/ByuJwt.ts b/packages/jwt/src/ByuJwt.ts index e9e801c..fe166b6 100644 --- a/packages/jwt/src/ByuJwt.ts +++ b/packages/jwt/src/ByuJwt.ts @@ -1,103 +1,144 @@ -import NodeCache from 'node-cache' import { - OpenIdConfiguration, - Certificates, - type PemCertificate, - Jwt -} from './models/index.js' -import { getMaxAge } from './util/Fetch.js' - -export const OPEN_ID_CONFIG_KEY = 'open-id-config' -export const BYU_CERT_KEY = 'byu-cert' + JwtPayload, + RawByuClientClaimsSchema, + RawByuResourceOwnerClaimsSchema, + RawIssuerClaimsSchema +} from './models/Jwt.js' +import { + createJwt, + type CreateJwtOptions, + type JwtPayloadTransformer +} from '@byu-oit-sdk/jwt' +import { type Static, Type } from '@sinclair/typebox' + +export const JwtPayloadSchema = Type.Intersect([ + Type.Object({ + iss: Type.Optional(Type.String()), + exp: Type.Optional(Type.Number()), + aud: Type.Optional(Type.Union([Type.String(), Type.Array(Type.String())])) + }), + RawIssuerClaimsSchema, + RawByuClientClaimsSchema, + Type.Partial(RawByuResourceOwnerClaimsSchema) +]) + +export type JwtPayloadData = Static +export interface TransformedJwtPayload extends Record { + readonly iss?: string + readonly exp?: number + readonly aud?: string[] | string + + /** + * Issuer Claims + */ + readonly apiContext: string + readonly application: { + readonly id: string + readonly name: string + readonly tier: string + } -export interface ByuJwtOptions { - basePath?: string - cacheDuration?: number - development?: boolean - issuer?: string - openIdConfigUrl?: string + readonly clientId: string + readonly endUser: string + readonly endUserTenantId: string + readonly keyType: string + readonly subscriber: string + readonly tier: string + readonly userType: string + readonly version: string + + /** + * Client Claims + */ + readonly byuId: string + readonly netId: string + readonly personId: string + readonly preferredFirstName: string + readonly prefix: string + readonly restOfName: string + readonly sortName: string + readonly suffix: string + readonly surname: string + readonly surnamePosition: string + readonly claimSource?: string + readonly subscriberNetId?: string } -export class ByuJwt { - protected basePath?: string - - protected cacheDuration: number - - public readonly cache: NodeCache - - protected development: boolean - - public readonly openIdConfigUrl: string - - constructor (options?: ByuJwtOptions) { - this.basePath = options?.basePath - this.cacheDuration = options?.cacheDuration ?? 60 * 60 // 1 hour default - - if (options?.openIdConfigUrl != null) { - this.openIdConfigUrl = options.openIdConfigUrl - } else if (options?.issuer != null) { - const issuer = /^https?:\/\//.test(options.issuer) ? options.issuer : `https://${options.issuer}` - this.openIdConfigUrl = `${issuer}/.well-known/openid-configuration` - } else { - throw Error('Missing OpenID configuration URL') - } - - this.development = options?.development ?? false - if (this.development && process.env.NODE_ENV === 'production') { - throw Error('@byu-oit/jwt is set to development mode but environment variable NODE_ENV is set to production') - } - - this.cache = new NodeCache() - } - - async getOpenIdConfiguration (): Promise { - /** Check cache fo open id config */ - let config = this.cache.get(OPEN_ID_CONFIG_KEY) - if (config == null) { - /** Refresh our open id configuration cache */ - const response = await fetch(this.openIdConfigUrl) - /** Check for max-age in Cache-Control header or set a default */ - const cacheDuration = getMaxAge(response.headers) ?? this.cacheDuration - /** Validate the configuration */ - config = OpenIdConfiguration.from(await response.json()) - /** Cache OpenId configuration */ - this.cache.set(OPEN_ID_CONFIG_KEY, config, cacheDuration) - } - return config +export const transformer: JwtPayloadTransformer = (payload) => { + const iss = payload.iss + const exp = payload.exp + const aud = payload.aud + + /** + * Issuer Claims + */ + const apiContext = payload['http://wso2.org/claims/apicontext'] + const application = { + id: payload['http://wso2.org/claims/applicationid'], + name: payload['http://wso2.org/claims/applicationname'], + tier: payload['http://wso2.org/claims/applicationtier'] } - - async getPem (): Promise { - let certs = this.cache.get(BYU_CERT_KEY) - if (certs == null) { - /** Refresh our cert cache */ - const config = await this.getOpenIdConfiguration() - const response = await fetch(config.jwksUri) - /** Check for max-age in Cache-Control header or set a default */ - const cacheDuration = getMaxAge(response.headers) ?? this.cacheDuration - /** Validate the certification endpoint response */ - certs = Certificates.from(await response.json()) - /** Cache certs */ - this.cache.set(BYU_CERT_KEY, certs, cacheDuration) - } - /** Return pem-formatted certificates */ - return certs.pemCertificates + const clientId = payload['http://wso2.org/claims/client_id'] + const endUser = payload['http://wso2.org/claims/enduser'] + const endUserTenantId = payload['http://wso2.org/claims/enduserTenantId'] + const keyType = payload['http://wso2.org/claims/keytype'] + const subscriber = payload['http://wso2.org/claims/subscriber'] + const tier = payload['http://wso2.org/claims/tier'] + const userType = payload['http://wso2.org/claims/usertype'] + const version = payload['http://wso2.org/claims/version'] + + /** + * Resource Owner or Client Claims + */ + const hasResourceOwner = payload['http://byu.edu/claims/resourceowner_byu_id'] !== undefined + const byuId = payload['http://byu.edu/claims/resourceowner_byu_id'] ?? payload['http://byu.edu/claims/client_byu_id'] + const netId = payload['http://byu.edu/claims/resourceowner_net_id'] ?? payload['http://byu.edu/claims/client_net_id'] + const personId = payload['http://byu.edu/claims/resourceowner_person_id'] ?? payload['http://byu.edu/claims/client_person_id'] + const preferredFirstName = payload['http://byu.edu/claims/resourceowner_preferred_first_name'] ?? payload['http://byu.edu/claims/client_preferred_first_name'] + const prefix = payload['http://byu.edu/claims/resourceowner_prefix'] ?? payload['http://byu.edu/claims/client_name_prefix'] + const restOfName = payload['http://byu.edu/claims/resourceowner_rest_of_name'] ?? payload['http://byu.edu/claims/client_rest_of_name'] + const sortName = payload['http://byu.edu/claims/resourceowner_sort_name'] ?? payload['http://byu.edu/claims/client_sort_name'] + const suffix = payload['http://byu.edu/claims/resourceowner_suffix'] ?? payload['http://byu.edu/claims/client_name_suffix'] + const surname = payload['http://byu.edu/claims/resourceowner_surname'] ?? payload['http://byu.edu/claims/client_surname'] + const surnamePosition = payload['http://byu.edu/claims/resourceowner_surname_position'] ?? payload['http://byu.edu/claims/client_surname_position'] + const claimSource = hasResourceOwner ? payload['http://byu.edu/claims/client_claim_source'] : undefined + const subscriberNetId = hasResourceOwner ? payload['http://byu.edu/claims/client_subscriber_net_id'] : undefined + + return { + iss, + exp, + aud, + apiContext, + application, + clientId, + endUser, + endUserTenantId, + keyType, + subscriber, + tier, + userType, + version, + byuId, + netId, + personId, + preferredFirstName, + prefix, + restOfName, + sortName, + suffix, + surname, + surnamePosition, + claimSource, + subscriberNetId } +} - async verify (jwt: string): Promise { - const decoded = Jwt.decode(jwt) - if (this.development) { - /** We can skip verification */ - return decoded - } +export type CreateByuJwtOptions = Omit, 'schema' | 'transformer'> - /** Check for valid key in JWT header */ - const validKeys = await this.getPem() - const foundKey = validKeys.find(key => key.x5t === decoded.header.x5t) - if (foundKey == null) { - throw new Error('x5t in JWT did not correspond to any known key') +export class ByuJwt extends createJwt({ schema: JwtPayload.Schema, transformer }) { + static create (options?: CreateByuJwtOptions): typeof ByuJwt { + return class CustomByuJwt extends createJwt({ ...options, schema: JwtPayload.Schema, transformer }) { + static create = ByuJwt.create } - - /** Verify JWT integrity */ - return Jwt.verify(jwt, foundKey.x5c) } } diff --git a/packages/jwt/src/models/Certificate.ts b/packages/jwt/src/models/Certificate.ts deleted file mode 100644 index d92d269..0000000 --- a/packages/jwt/src/models/Certificate.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Type, type Static } from '@sinclair/typebox' -import { TypeCompiler } from '@sinclair/typebox/compiler' -import { ValidationError } from '../util/Errors.js' - -export interface PemCertificate { - kid: string - x5t: string - x5c: string -} - -export type CertificateType = Static - -export class Certificate { - static Schema = Type.Object({ - e: Type.String(), - kty: Type.String(), - use: Type.String(), - kid: Type.String(), - x5t: Type.String(), - n: Type.String(), - x5c: Type.Array(Type.String()) - }, { $id: 'CertificateKey' }) - - readonly e: string - readonly kty: string - readonly use: string - readonly kid: string - readonly x5t: string - readonly n: string - readonly x5c: string[] - - constructor (cert: CertificateType) { - this.e = cert.e - this.kty = cert.kty - this.use = cert.use - this.kid = cert.kid - this.x5t = cert.x5t - this.n = cert.n - this.x5c = cert.x5c - } - - static from (value: unknown): Certificate { - const C = TypeCompiler.Compile(Certificate.Schema) - const result = C.Check(value) - if (!result) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid Certification') - } - return new Certificate(value) - } -} - -export type CertificatesType = Static - -export class Certificates { - keys: Certificate[] - static Schema = Type.Object({ - keys: Type.Array(Type.Ref(Certificate.Schema)) - }) - - constructor (certs: CertificatesType) { - this.keys = certs.keys - } - - static from (value: unknown): Certificates { - const C = TypeCompiler.Compile(Certificates.Schema, [Certificate.Schema]) - const result = C.Check(value) - if (!result) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid Certificates') - } - return new Certificates(value) - } - - get pemCertificates (): PemCertificate[] { - return this.keys.map((key) => { - const x5c = `-----BEGIN CERTIFICATE-----\n${key.x5c[0].replace(/(.{64})/g, '$1\n')}\n-----END CERTIFICATE-----` - return { kid: key.kid, x5t: key.x5t, x5c } - }) - } -} diff --git a/packages/jwt/src/models/Jwt.ts b/packages/jwt/src/models/Jwt.ts index 5598331..752c13b 100644 --- a/packages/jwt/src/models/Jwt.ts +++ b/packages/jwt/src/models/Jwt.ts @@ -1,7 +1,5 @@ import { Type, type Static } from '@sinclair/typebox' -import { createDecoder, createVerifier, type DecoderOptions, type VerifierOptions } from 'fast-jwt' import { TypeCompiler } from '@sinclair/typebox/compiler' -import { ValidationError } from '../util/Errors.js' export enum KeyType { PRD = 'PRODUCTION', @@ -90,8 +88,7 @@ export class JwtHeader { const C = TypeCompiler.Compile(JwtHeader.Schema) const result = C.Check(value) if (!result) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid JWT Header') + throw new Error('Invalid JWT Header') } return new JwtHeader(value) } @@ -195,42 +192,8 @@ export class JwtPayload { const C = TypeCompiler.Compile(JwtPayload.Schema) const result = C.Check(value) if (!result) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid JWT Payload') + throw new Error('Invalid JWT Payload') } return new JwtPayload(value) } } - -export interface CompleteJwt { - header: unknown - payload: unknown - signature: string - input: string -} - -export class Jwt { - header: JwtHeader - payload: JwtPayload - signature: string - input: string - - constructor (completeJwt: CompleteJwt) { - this.header = JwtHeader.from(completeJwt.header) - this.payload = JwtPayload.from(completeJwt.payload) - this.signature = completeJwt.signature - this.input = completeJwt.input - } - - static decode (value: string, options?: Partial): Jwt { - const opts = { ...options, complete: true } - const decode = createDecoder(opts) - return new Jwt(decode(value)) - } - - static verify (value: string, key: string, options?: Partial): Jwt { - const opts = { ...options, complete: true, key } - const verify = createVerifier(opts) - return new Jwt(verify(value)) - } -} diff --git a/packages/jwt/src/models/OpenIdConfiguration.ts b/packages/jwt/src/models/OpenIdConfiguration.ts deleted file mode 100644 index 7dc57f4..0000000 --- a/packages/jwt/src/models/OpenIdConfiguration.ts +++ /dev/null @@ -1,542 +0,0 @@ -// (OpenID Connect Discovery 1.0)[https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata] - -import { Type, type Static } from '@sinclair/typebox' -import { TypeCompiler } from '@sinclair/typebox/compiler' -import { ValidationError } from '../util/Errors.js' - -export type OpenIdConfigurationType = Static - -export class OpenIdConfiguration { - static Schema = Type.Object({ - issuer: Type.String(), - authorization_endpoint: Type.String(), - token_endpoint: Type.Optional(Type.String()), - userinfo_endpoint: Type.Optional(Type.String()), - jwks_uri: Type.String(), - registration_endpoint: Type.Optional(Type.String()), - scopes_supported: Type.Optional(Type.Array(Type.String())), - response_types_supported: Type.Array(Type.String()), - response_modes_supported: Type.Optional(Type.Array(Type.String())), - grant_type_supported: Type.Optional(Type.Array(Type.String())), - acr_values_supported: Type.Optional(Type.Array(Type.String())), - subject_types_supported: Type.Array(Type.String()), - id_token_signing_alg_values_supported: Type.Array(Type.String()), - id_token_encryption_alg_values_supported: Type.Optional(Type.Array(Type.String())), - id_token_encryption_enc_values_supported: Type.Optional(Type.Array(Type.String())), - user_info_signing_alg_values_supported: Type.Optional(Type.Array(Type.String())), - user_info_encryption_alg_values_supported: Type.Optional(Type.Array(Type.String())), - user_info_encryption_enc_values_supported: Type.Optional(Type.Array(Type.String())), - request_object_signing_alg_values_supported: Type.Optional(Type.Array(Type.String())), - request_object_encryption_alg_values_supported: Type.Optional(Type.Array(Type.String())), - request_object_encryption_enc_values_supported: Type.Optional(Type.Array(Type.String())), - token_endpoint_auth_methods_supported: Type.Optional(Type.Array(Type.String())), - token_endpoint_auth_signing_alg_values_supported: Type.Optional(Type.Array(Type.String())), - display_values_supported: Type.Optional(Type.Array(Type.String())), - claim_types_supported: Type.Optional(Type.Array(Type.String())), - claims_supported: Type.Optional(Type.Array(Type.String())), - service_documentation: Type.Optional(Type.String()), - claims_locales_supported: Type.Optional(Type.Array(Type.String())), - ui_locales_supported: Type.Optional(Type.Array(Type.String())), - claims_parameter_supported: Type.Optional(Type.Boolean()), - request_parameter_supported: Type.Optional(Type.Boolean()), - request_uri_parameter_supported: Type.Optional(Type.Boolean()), - require_request_uri_registration: Type.Optional(Type.Boolean()), - op_policy_uri: Type.Optional(Type.String()), - op_tos_uri: Type.Optional(Type.String()) - }, { additionalProperties: true }) - - /** - * URL using the https scheme with no query or fragment component that the OP - * asserts as its Issuer Identifier. If Issuer discovery is supported (see Section - * 2), this value MUST be identical to the issuer value returned by WebFinger. This - * also MUST be identical to the iss Claim value in ID Tokens issued from this Issuer. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * Section 2: https://openid.net/specs/openid-connect-discovery-1_0.html#IssuerDiscovery - */ - readonly issuer: string - - /** - * URL of the OP's OAuth 2.0 Authorization Endpoint [OpenID.Core]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly authorizationEndpoint: string - - /** - * URL of the OP's OAuth 2.0 Token Endpoint [OpenID.Core]. This is REQUIRED unless - * only the Implicit Flow is used. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly tokenEndpoint: string | undefined - - /** - * URL of the OP's UserInfo Endpoint [OpenID.Core]. This URL MUST use the https - * scheme and MAY contain port, path, and query parameter components. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly userInfoEndpoint: string | undefined - - /** - * URL of the OP's JSON Web Key Set [JWK] document. This contains the signing - * key(s) the RP uses to validate signatures from the OP. The JWK Set MAY also - * contain the Server's encryption key(s), which are used by RPs to encrypt - * requests to the Server. When both signing and encryption keys are made - * available, a use (Key Use) parameter value is REQUIRED for all keys in the - * referenced JWK Set to indicate each key's intended usage. Although some - * algorithms allow the same key to be used for both signatures and encryption, - * doing so is NOT RECOMMENDED, as it is less secure. The JWK x5c parameter MAY be - * used to provide X.509 representations of keys provided. When used, the bare key - * values MUST still be present and MUST match those in the certificate. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWK: https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-key - */ - readonly jwksUri: string - - /** - * URL of the OP's Dynamic Client Registration Endpoint [OpenID.Registration]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Registration: https://openid.net/specs/openid-connect-registration-1_0.html - */ - readonly registrationEndpoint: string | undefined - - /** - * JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this - * server supports. The server MUST support the openid scope value. Servers MAY - * choose not to advertise some supported scope values even when this parameter is - * used, although those defined in [OpenID.Core] SHOULD be listed, if supported. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * RFC6749: https://www.rfc-editor.org/rfc/rfc6749 - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly scopesSupported: string[] | undefined - - /** - * JSON array containing a list of the OAuth 2.0 response_type values that this OP - * supports. Dynamic OpenID Providers MUST support the code, id_token, and the - * token id_token Response Type values. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly responseTypesSupported: string[] - - /** - * JSON array containing a list of the OAuth 2.0 response_mode values that this OP - * supports, as specified in OAuth 2.0 Multiple Response Type Encoding Practices - * [OAuth.Responses]. If omitted, the default for Dynamic OpenID Providers is - * ["query", "fragment"]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OAuth.Responses: https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html - */ - readonly responseModesSupported: string[] | undefined - - /** - * JSON array containing a list of the OAuth 2.0 Grant Type values that this OP - * supports. Dynamic OpenID Providers MUST support the authorization_code and - * implicit Grant Type values and MAY support other Grant Types. If omitted, the - * default value is ["authorization_code", "implicit"]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly grantTypeSupported: string[] | undefined - - /** - * JSON array containing a list of the Authentication Context Class References that - * this OP supports. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly acrValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the Subject Identifier types that this OP - * supports. Valid types include pairwise and public. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly subjectTypesSupported: string[] - - /** - * JSON array containing a list of the JWS signing algorithms (alg values) - * supported by the OP for the ID Token to encode the Claims in a JWT [JWT]. The - * algorithm RS256 MUST be included. The value none MAY be supported, but MUST NOT - * be used unless the Response Type used returns no ID Token from the Authorization - * Endpoint (such as when using the Authorization Code Flow). - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly idTokenSigningAlgValuesSupported: string[] - - /** - * JSON array containing a list of the JWE encryption algorithms (alg values) - * supported by the OP for the ID Token to encode the Claims in a JWT [JWT]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly idTokenEncryptionAlgValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWE encryption algorithms (enc values) - * supported by the OP for the ID Token to encode the Claims in a JWT [JWT]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly idTokenEncryptionEncValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWS [JWS] signing algorithms (alg values) - * [JWA] supported by the UserInfo Endpoint to encode the Claims in a JWT [JWT]. - * The value none MAY be included. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWS: https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-signature - * - * JWA: https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-algorithms - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly userInfoSigningAlgValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWE [JWE] encryption algorithms (alg values) - * [JWA] supported by the UserInfo Endpoint to encode the Claims in a JWT [JWT]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWE: https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-encryption - * - * JWA: https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-algorithms - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly userInfoEncryptionAlgValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWE encryption algorithms (enc values) [JWA] - * supported by the UserInfo Endpoint to encode the Claims in a JWT [JWT]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWA: https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-algorithms - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly userInfoEncryptionEncValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWS signing algorithms (alg values) - * supported by the OP for Request Objects, which are described in Section 6.1 of - * OpenID Connect Core 1.0 [OpenID.Core]. These algorithms are used both when the - * Request Object is passed by value (using the request parameter) and when it is - * passed by reference (using the request_uri parameter). Servers SHOULD support - * none and RS256. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly requestObjectSigningAlgValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWE encryption algorithms (alg values) - * supported by the OP for Request Objects. These algorithms are used both when the - * Request Object is passed by value and when it is passed by reference. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly requestObjectEncryptionAlgValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the JWE encryption algorithms (enc values) - * supported by the OP for Request Objects. These algorithms are used both when the - * Request Object is passed by value and when it is passed by reference. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly requestObjectEncryptionEncValuesSupported: string[] | undefined - - /** - * JSON array containing a list of Client Authentication methods supported by this - * Token Endpoint. The options are client_secret_post, client_secret_basic, - * client_secret_jwt, and private_key_jwt, as described in Section 9 of OpenID - * Connect Core 1.0 [OpenID.Core]. Other authentication methods MAY be defined by - * extensions. If omitted, the default is client_secret_basic -- the HTTP Basic - * Authentication Scheme specified in Section 2.3.1 of OAuth 2.0 [RFC6749]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - * - * RFC6749: https://www.rfc-editor.org/rfc/rfc6749 - */ - readonly tokenEndpointAuthMethodsSupported: string[] | undefined - - /** - * JSON array containing a list of the JWS signing algorithms (alg values) - * supported by the Token Endpoint for the signature on the JWT [JWT] used to - * authenticate the Client at the Token Endpoint for the private_key_jwt and - * client_secret_jwt authentication methods. Servers SHOULD support RS256. The - * value none MUST NOT be used. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * JWT: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token - */ - readonly tokenEndpointAuthSigningAlgValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the display parameter values that the OpenID - * Provider supports. These values are described in Section 3.1.2.1 of OpenID - * Connect Core 1.0 [OpenID.Core]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly displayValuesSupported: string[] | undefined - - /** - * JSON array containing a list of the Claim Types that the OpenID Provider - * supports. These Claim Types are described in Section 5.6 of OpenID Connect Core - * 1.0 [OpenID.Core]. Values defined by this specification are normal, aggregated, - * and distributed. If omitted, the implementation supports only normal Claims. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Core: https://openid.net/specs/openid-connect-core-1_0.html - */ - readonly claimTypesSupported: string[] | undefined - - /** - * JSON array containing a list of the Claim Names of the Claims that the OpenID - * Provider MAY be able to supply values for. Note that for privacy or other - * reasons, this might not be an exhaustive list. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly claimsSupported: string[] | undefined - - /** - * URL of a page containing human-readable information that developers might want - * or need to know when using the OpenID Provider. In particular, if the OpenID - * Provider does not support Dynamic Client Registration, then information on how - * to register Clients needs to be provided in this documentation. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly serviceDocumentation: string | undefined - - /** - * Languages and scripts supported for values in Claims being returned, represented - * as a JSON array of BCP47 [RFC5646] language tag values. Not all languages and - * scripts are necessarily supported for all Claim values. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * RFC5646: https://www.rfc-editor.org/rfc/rfc5646 - */ - readonly claimsLocalesSupported: string[] | undefined - - /** - * Languages and scripts supported for the user interface, represented as a JSON - * array of BCP47 [RFC5646] language tag values. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * RFC5646: https://www.rfc-editor.org/rfc/rfc5646 - */ - readonly uiLocalesSupported: string[] | undefined - - /** - * Boolean value specifying whether the OP supports use of the claims parameter, - * with true indicating support. If omitted, the default value is false. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly claimsParameterSupported: boolean | undefined - - /** - * Boolean value specifying whether the OP supports use of the request parameter, - * with true indicating support. If omitted, the default value is false. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly requestParameterSupported: boolean | undefined - - /** - * Boolean value specifying whether the OP supports use of the request_uri - * parameter, with true indicating support. If omitted, the default value is true. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly requestUriParameterSupported: boolean | undefined - - /** - * Boolean value specifying whether the OP requires any request_uri values used to - * be pre-registered using the request_uris registration parameter. - * Pre-registration is REQUIRED when the value is true. If omitted, the default - * value is false. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly requireRequestUriRegistration: boolean | undefined - - /** - * URL that the OpenID Provider provides to the person registering the Client to - * read about the OP's requirements on how the Relying Party can use the data - * provided by the OP. The registration process SHOULD display this URL to the - * person registering the Client if it is given. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly opPolicyUri: string | undefined - - /** - * URL that the OpenID Provider provides to the person registering the Client to - * read about OpenID Provider's terms of service. The registration process SHOULD - * display this URL to the person registering the Client if it is given. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - */ - readonly opTosUri: string | undefined - - /** - * Additional OpenID Provider Metadata parameters MAY also be used. Some are - * defined by other specifications, such as OpenID Connect Session Management 1.0 - * [OpenID.Session]. - * - * Source: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata - * - * OpenID.Session: https://openid.net/specs/openid-connect-session-1_0.html - */ - readonly additional: Record - - /** - * Determines the exact time (in seconds) that the token expires and is used to - * answer that inquiry. See also: isExpired. - */ - private readonly expiresAt: number | undefined - - constructor (config: OpenIdConfigurationType) { - const { - issuer, - authorization_endpoint: authorizationEndpoint, - token_endpoint: tokenEndpoint, - userinfo_endpoint: userInfoEndpoint, - jwks_uri: jwksUri, - registration_endpoint: registrationEndpoint, - scopes_supported: scopesSupported, - response_types_supported: responseTypesSupported, - response_modes_supported: responseModesSupported, - grant_type_supported: grantTypeSupported, - acr_values_supported: acrValuesSupported, - subject_types_supported: subjectTypesSupported, - id_token_signing_alg_values_supported: idTokenSigningAlgValuesSupported, - id_token_encryption_alg_values_supported: idTokenEncryptionAlgValuesSupported, - id_token_encryption_enc_values_supported: idTokenEncryptionEncValuesSupported, - user_info_signing_alg_values_supported: userInfoSigningAlgValuesSupported, - user_info_encryption_alg_values_supported: userInfoEncryptionAlgValuesSupported, - user_info_encryption_enc_values_supported: userInfoEncryptionEncValuesSupported, - request_object_signing_alg_values_supported: requestObjectSigningAlgValuesSupported, - request_object_encryption_alg_values_supported: requestObjectEncryptionAlgValuesSupported, - request_object_encryption_enc_values_supported: requestObjectEncryptionEncValuesSupported, - token_endpoint_auth_methods_supported: tokenEndpointAuthMethodsSupported, - token_endpoint_auth_signing_alg_values_supported: tokenEndpointAuthSigningAlgValuesSupported, - display_values_supported: displayValuesSupported, - claim_types_supported: claimTypesSupported, - claims_supported: claimsSupported, - service_documentation: serviceDocumentation, - claims_locales_supported: claimsLocalesSupported, - ui_locales_supported: uiLocalesSupported, - claims_parameter_supported: claimsParameterSupported, - request_parameter_supported: requestParameterSupported, - request_uri_parameter_supported: requestUriParameterSupported, - require_request_uri_registration: requireRequestUriRegistration, - op_policy_uri: opPolicyUri, - op_tos_uri: opTosUri, - // additional properties stored separately from the core config - ...additional - } = config - - this.issuer = issuer - this.authorizationEndpoint = authorizationEndpoint - this.tokenEndpoint = tokenEndpoint - this.userInfoEndpoint = userInfoEndpoint - this.jwksUri = jwksUri - this.registrationEndpoint = registrationEndpoint - this.scopesSupported = scopesSupported - this.responseTypesSupported = responseTypesSupported - this.responseModesSupported = responseModesSupported - this.grantTypeSupported = grantTypeSupported - this.acrValuesSupported = acrValuesSupported - this.subjectTypesSupported = subjectTypesSupported - this.idTokenSigningAlgValuesSupported = idTokenSigningAlgValuesSupported - this.idTokenEncryptionAlgValuesSupported = idTokenEncryptionAlgValuesSupported - this.idTokenEncryptionEncValuesSupported = idTokenEncryptionEncValuesSupported - this.userInfoSigningAlgValuesSupported = userInfoSigningAlgValuesSupported - this.userInfoEncryptionAlgValuesSupported = userInfoEncryptionAlgValuesSupported - this.userInfoEncryptionEncValuesSupported = userInfoEncryptionEncValuesSupported - this.requestObjectSigningAlgValuesSupported = requestObjectSigningAlgValuesSupported - this.requestObjectEncryptionAlgValuesSupported = requestObjectEncryptionAlgValuesSupported - this.requestObjectEncryptionEncValuesSupported = requestObjectEncryptionEncValuesSupported - this.tokenEndpointAuthMethodsSupported = tokenEndpointAuthMethodsSupported - this.tokenEndpointAuthSigningAlgValuesSupported = tokenEndpointAuthSigningAlgValuesSupported - this.displayValuesSupported = displayValuesSupported - this.claimTypesSupported = claimTypesSupported - this.claimsSupported = claimsSupported - this.serviceDocumentation = serviceDocumentation - this.claimsLocalesSupported = claimsLocalesSupported - this.uiLocalesSupported = uiLocalesSupported - this.claimsParameterSupported = claimsParameterSupported - this.requestParameterSupported = requestParameterSupported - this.requestUriParameterSupported = requestUriParameterSupported - this.requireRequestUriRegistration = requireRequestUriRegistration - this.opPolicyUri = opPolicyUri - this.opTosUri = opTosUri - - // Additional properties made available on this property - this.additional = this.additional = Object.freeze(additional) as Record - } - - /** - * Validates the input and converts it to an OpenIdConfiguration. - * - * @param value - Any unknown value that is needing validation to use as - * OpenIdConfiguration input. - * @returns Access validated input on an access token instance. - */ - static from (value: unknown): OpenIdConfiguration { - const C = TypeCompiler.Compile(OpenIdConfiguration.Schema) - const result = C.Check(value) - if (!result) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid Open ID Configuration') - } - return new OpenIdConfiguration(value) - } -} diff --git a/packages/jwt/src/models/index.ts b/packages/jwt/src/models/index.ts index 8280d76..cc965b1 100644 --- a/packages/jwt/src/models/index.ts +++ b/packages/jwt/src/models/index.ts @@ -1,3 +1 @@ -export * from './Certificate.js' export * from './Jwt.js' -export * from './OpenIdConfiguration.js' diff --git a/packages/jwt/src/util/Errors.ts b/packages/jwt/src/util/Errors.ts deleted file mode 100644 index 36b8df0..0000000 --- a/packages/jwt/src/util/Errors.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { Type, type Static } from '@sinclair/typebox' -import { TypeCompiler } from '@sinclair/typebox/compiler' - -export class ErrorDetails extends Error { - readonly details: I[] - constructor (message?: string, errors: I[] = []) { - super(message ?? 'Multiple errors occurred: see additional details.') - this.details = errors - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } - - push (...detail: I[]): this { - this.details.push(...detail) - return this - } -} - -export class ValidationError extends ErrorDetails { - name = 'ValidationError' - constructor (errors: unknown[] = [], message?: string) { - super(message ?? 'Validation error', errors) - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } -} - -export class NoAccessTokenError extends ErrorDetails { - name = 'NoAccessTokenError' - constructor (errors: unknown[] = []) { - super('Unable to retrieve access token', errors) - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } -} - -export class NoRefreshTokenError extends Error { - name = 'NoRefreshTokenError' - constructor () { - super('The access token did not have a refresh token.') - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } -} - -// (Error Response)[https://www.rfc-editor.org/rfc/rfc6749#section-5.2] -export type OAuthProviderErrorType = Static - -export enum OAuthProviderErrorCode { - INVALID_CLIENT = 'invalid_client', - INVALID_GRANT = 'invalid_grant', - UNAUTHORIZED_CLIENT = 'unauthorized_client', - UNSUPPORTED_GRANT_TYPE = 'unsupported_grant_type', - INVALID_SCOPE = 'invalid_scope' -} - -export const OAuthProviderErrorSchema = Type.Object({ - error: Type.Enum(OAuthProviderErrorCode), - error_description: Type.Optional(Type.String()), - error_uri: Type.Optional(Type.String()) -}) - -export class OAuthProviderError extends Error { - name = 'OAuthProviderError' - readonly error: OAuthProviderErrorCode - readonly description: string | undefined - readonly uri: string | undefined - - constructor ({ error, error_description: description, error_uri: uri }: OAuthProviderErrorType) { - super(`Error ${error.toUpperCase()} from Open ID provider`) - this.error = error - this.description = description - this.uri = uri - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } - - static from (value: unknown): OAuthProviderError { - const C = TypeCompiler.Compile(OAuthProviderErrorSchema) - const valid = C.Check(value) - if (!valid) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid error response from Open ID provider') - } - return new OAuthProviderError(value) - } -} - -export type AuthorizationCodeRedirectErrorType = Static - -export const AuthorizationCodeErrorSchema = Type.Intersect([ - OAuthProviderErrorSchema, - Type.Object({ - state: Type.Optional(Type.String()), - iss: Type.Optional(Type.String()) - }) -]) - -export class AuthorizationCodeRedirectError extends OAuthProviderError { - name = 'AuthorizationCodeRedirectError' - state: string | undefined - iss: string | undefined - - /** - * Constructs a type-safe object to interact with authorization code redirect errors. - * - * @param options - The remaining OauthResponseError parameters. - * @param options -.state State that may have been passed back - * from the - * authorization server in the error body. - * @param options -.iss The issuer or authorization server that - * returned - * the response. Used to verify the issuer is intended authorization target. - */ - constructor ({ state, iss, ...options }: AuthorizationCodeRedirectErrorType) { - super(options) - this.state = state - this.iss = iss - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } - - /** - * This error typically is used to validate an error response during the redirect - * from the authorization server. - * - * @param params - The parameters returned from the failed - * authorization code redirect. - * @returns The authorization code redirect error - * parsed to make the response type-safe. - */ - static from (params: URLSearchParams | unknown): AuthorizationCodeRedirectError { - const value = params instanceof URLSearchParams ? Object.fromEntries(params.entries()) : params - const C = TypeCompiler.Compile(AuthorizationCodeErrorSchema) - const valid = C.Check(value) - if (!valid) { - const errors = [...C.Errors(value)] - throw new ValidationError(errors, 'Invalid error response from OpenId provider') - } - return new AuthorizationCodeRedirectError(value) - } -} - -export class CredentialProviderError extends TypeError { - name = 'CredentialProviderError' - - constructor (message?: string) { - super(message ?? 'Credential Provider Error') - // restore prototype chain - Object.setPrototypeOf(this, new.target.prototype) - } -} diff --git a/packages/jwt/src/util/Fetch.ts b/packages/jwt/src/util/Fetch.ts deleted file mode 100644 index e0ecc8b..0000000 --- a/packages/jwt/src/util/Fetch.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Parses the headers to find the max-age directive in the cache-control header. - * @param headers - The request headers - * @returns The max age in seconds. - */ -export function getMaxAge (headers: Headers): number | undefined { - const cacheControl = headers.get('cache-control') - if (cacheControl == null) { - return - } - const rx = /(?:^|,|\s)max-age=(?\d+)(?:,|\s|$)/ - const match = rx.exec(cacheControl) - if (match?.groups?.maxAge == null) { - return - } - return +match.groups.maxAge -} diff --git a/packages/jwt/test/ByuJwt.spec.ts b/packages/jwt/test/ByuJwt.spec.ts index ff1fc6c..50dd714 100644 --- a/packages/jwt/test/ByuJwt.spec.ts +++ b/packages/jwt/test/ByuJwt.spec.ts @@ -1,61 +1,16 @@ import test from 'ava' -import * as sinon from 'sinon' -import { validOpenIdConfig } from './assets/openid-config.js' -import { ByuJwt, OPEN_ID_CONFIG_KEY, BYU_CERT_KEY } from '../src/index.js' -import { validCerts } from './assets/byu-certs.js' -import { expiredJwt } from './assets/jwt.js' +import { ByuJwt } from '../src/index.js' +import { expiredJwt, decodedJwtPayload } from './assets/jwt.js' -test.serial('should cache an openid configuration', async t => { - const response = { - headers: new Headers(), - async json () { - return validOpenIdConfig - } - } - const mockFetch = sinon.stub().resolves(response) - global.fetch = mockFetch - const byuJwt = new ByuJwt({ issuer: 'https://example.com', development: true }) +test.serial('should decode the jwt', async t => { + const byuJwt = ByuJwt.create({ issuer: 'https://example.com' }) - await byuJwt.getOpenIdConfiguration() - await byuJwt.getOpenIdConfiguration() - t.is(mockFetch.callCount, 1) - t.truthy(byuJwt.cache.has(OPEN_ID_CONFIG_KEY)) + t.notThrows(() => byuJwt.decode(expiredJwt)) + const decodedJwt = byuJwt.decode(expiredJwt) + t.deepEqual(decodedJwt.payload, decodedJwtPayload) }) -test.serial('should cache byu certs', async t => { - const openIdResponse = { - headers: new Headers(), - async json () { - return validOpenIdConfig - } - } - const byuCertResponse = { - headers: new Headers(), - async json () { - return validCerts - } - } - const mockFetch = sinon.stub() - .onFirstCall().resolves(openIdResponse) - .onSecondCall().resolves(byuCertResponse) - global.fetch = mockFetch - const byuJwt = new ByuJwt({ issuer: 'https://example.com', development: true }) - - await byuJwt.getPem() - await byuJwt.getPem() - t.is(mockFetch.callCount, 2) - t.truthy(byuJwt.cache.has(OPEN_ID_CONFIG_KEY)) - t.truthy(byuJwt.cache.has(BYU_CERT_KEY)) -}) - -test.serial('should decode the jwt when in development', async t => { - const mockFetch = sinon.stub() - global.fetch = mockFetch - - const byuJwt = new ByuJwt({ issuer: 'https://example.com', development: true }) - await byuJwt.verify(expiredJwt) - - t.is(mockFetch.callCount, 0) - t.falsy(byuJwt.cache.has(OPEN_ID_CONFIG_KEY)) - t.falsy(byuJwt.cache.has(BYU_CERT_KEY)) +test.serial('verify should fail on an expired jwt', async t => { + const byuJwt = ByuJwt.create({ issuer: 'https://api.byu.edu' }) + await t.throwsAsync(async () => await byuJwt.verify(expiredJwt)) }) diff --git a/packages/jwt/test/assets/jwt.ts b/packages/jwt/test/assets/jwt.ts index 5b91dbc..9bd25f5 100644 --- a/packages/jwt/test/assets/jwt.ts +++ b/packages/jwt/test/assets/jwt.ts @@ -1 +1,33 @@ export const expiredJwt = 'eyJraWQiOiJwdWJsaWM6YXBpLXNhbmRib3gtMiIsIng1dCI6Img1bnFJM2dBQm4wM3p2dGFfQVBMRVdZYm1LMCIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJodHRwczovL2FwaS5ieXUuZWR1IiwiZXhwIjoxNjgyNjE1OTg0LCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL3N1YnNjcmliZXIiOiJCWVUvc3R1ZnQyIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy9hcHBsaWNhdGlvbmlkIjoiZWEyZWRlOWEtMTQ1Zi00YTZjLWE1MzEtNTViYTA0ODQ3ZTRiIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy9hcHBsaWNhdGlvbm5hbWUiOiJlYTJlZGU5YS0xNDVmLTRhNmMtYTUzMS01NWJhMDQ4NDdlNGIiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL2FwcGxpY2F0aW9udGllciI6IlVubGltaXRlZCIsImh0dHA6Ly93c28yLm9yZy9jbGFpbXMvYXBpY29udGV4dCI6Ii9lY2hvL3YxIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy92ZXJzaW9uIjoidjEiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL3RpZXIiOiJVbmxpbWl0ZWQiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL2tleXR5cGUiOiJTQU5EQk9YIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VydHlwZSI6IkFQUExJQ0FUSU9OIiwiaHR0cDovL3dzbzIub3JnL2NsYWltcy9lbmR1c2VyIjoic3R1ZnQyQGNhcmJvbi5zdXBlciIsImh0dHA6Ly93c28yLm9yZy9jbGFpbXMvZW5kdXNlclRlbmFudElkIjoiLTEyMzQiLCJodHRwOi8vd3NvMi5vcmcvY2xhaW1zL2NsaWVudF9pZCI6ImVhMmVkZTlhLTE0NWYtNGE2Yy1hNTMxLTU1YmEwNDg0N2U0YiIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfc3Vic2NyaWJlcl9uZXRfaWQiOiJzdHVmdDIiLCJodHRwOi8vYnl1LmVkdS9jbGFpbXMvY2xpZW50X3BlcnNvbl9pZCI6IjI5OTI3Njc4MiIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfYnl1X2lkIjoiNzUwNzE3MDczIiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9uZXRfaWQiOiJzdHVmdDIiLCJodHRwOi8vYnl1LmVkdS9jbGFpbXMvY2xpZW50X3N1cm5hbWUiOiJUdWZ0IiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9zdXJuYW1lX3Bvc2l0aW9uIjoiTCIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfcmVzdF9vZl9uYW1lIjoiU3BlbmNlciBKYW1lcyIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfcHJlZmVycmVkX2ZpcnN0X25hbWUiOiJTcGVuY2VyIiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9zb3J0X25hbWUiOiJUdWZ0LCBTcGVuY2VyIEphbWVzIiwiaHR0cDovL2J5dS5lZHUvY2xhaW1zL2NsaWVudF9uYW1lX3ByZWZpeCI6IiAiLCJodHRwOi8vYnl1LmVkdS9jbGFpbXMvY2xpZW50X25hbWVfc3VmZml4IjoiICIsImh0dHA6Ly9ieXUuZWR1L2NsYWltcy9jbGllbnRfY2xhaW1fc291cmNlIjoiQ0xJRU5UX1NVQlNDUklCRVIifQ.RoPdD6Inrdkovu0gQE1ozVf23HepuNLPqJJIJCnUe_0tY7r36ilKQmnER__bCNfHkGZUyVx0wjTinoPIG8ytIv-0pjP-LkR4dpZK9O3WMbb06qGyzWa0-OWOkb2iuH_qGcolM6brmco6eM8NROtn6jx3rVqbffJY1czpW5zJPzLo8YiiEDvTwk7efh99faVXQoRcUV0_LdFORwfgqKwBp8HmhXfZrMhCLQKbahTasIUUtpN8nyPk6BHb0GITXRjK4WQ5eHFf3CDRuGLVVQeTV6dbvIpa9jrzcKGtqkCDbJ-d9uxoPQ7OvLdouQ1D3oi2zj4Qalgs9ydKX3vpO4-4etm5T18qkJ9WlDe_Qra6hiD0CS0zT2umXh3MVFeU9qIpDNwBXRmXXMDbZTvQGWeWB14tK6x24gj-nNkOz_0JlwbykDN11mgsvCxDSWiSBBtYHndyO9B_YDKpLntP1ZafAIVLZtT9QYSljNKps1iIkotC7CG7FbMl9cr34yWuU7T4Sgn-_U1OE3DY6yojiDDtPqnkmTeTMWqmdqC2-ajqJ3JtQ1PFNdKWM5LIYbgmOXHsQB6DuaPIhwQlV0-reNX2_M9RRrNhklOhlUqpBz_A56ZKA5Su990YvDS6DcnW9wMERkxNDcW-tqGltxUwiN3PeCEhim5_ndul66DpBXndpSY' + +export const decodedJwtPayload = { + apiContext: '/echo/v1', + application: { + id: 'ea2ede9a-145f-4a6c-a531-55ba04847e4b', + name: 'ea2ede9a-145f-4a6c-a531-55ba04847e4b', + tier: 'Unlimited' + }, + aud: undefined, + byuId: '750717073', + claimSource: undefined, + clientId: 'ea2ede9a-145f-4a6c-a531-55ba04847e4b', + endUser: 'stuft2@carbon.super', + endUserTenantId: '-1234', + exp: 1682615984, + iss: 'https://api.byu.edu', + keyType: 'SANDBOX', + netId: 'stuft2', + personId: '299276782', + preferredFirstName: 'Spencer', + prefix: ' ', + restOfName: 'Spencer James', + sortName: 'Tuft, Spencer James', + subscriber: 'BYU/stuft2', + subscriberNetId: undefined, + suffix: ' ', + surname: 'Tuft', + surnamePosition: 'L', + tier: 'Unlimited', + userType: 'APPLICATION', + version: 'v1' +} diff --git a/packages/jwt/test/assets/openid-config.ts b/packages/jwt/test/assets/openid-config.ts deleted file mode 100644 index 0c3dbfb..0000000 --- a/packages/jwt/test/assets/openid-config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type OpenIdConfigurationType } from '../../src/index.js' - -export const validOpenIdConfig: OpenIdConfigurationType = { - issuer: 'https://api.byu.edu', - authorization_endpoint: 'https://api.byu.edu/authorize', - token_endpoint: 'https://api.byu.edu/token', - userinfo_endpoint: 'https://api.byu.edu/userinfo', - jwks_uri: 'https://api.byu.edu/.well-known/byucerts', - response_types_supported: [ - 'code', - 'token' - ], - subject_types_supported: [ - 'public' - ], - id_token_signing_alg_values_supported: [ - 'RS256' - ], - scopes_supported: [ - 'openid' - ] -} diff --git a/packages/jwt/test/models/Certification.spec.ts b/packages/jwt/test/models/Certification.spec.ts deleted file mode 100644 index b8d7b9a..0000000 --- a/packages/jwt/test/models/Certification.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import test from 'ava' -import { Certificates } from '../../src/index.js' -import { validCerts } from '../assets/byu-certs.js' - -test('should validate certificate', t => { - t.notThrows(() => Certificates.from(validCerts)) -}) - -test('should throw for invalid certificate', t => { - t.throws(() => Certificates.from({})) -}) diff --git a/packages/jwt/test/models/Jwt.spec.ts b/packages/jwt/test/models/Jwt.spec.ts deleted file mode 100644 index 397bdfb..0000000 --- a/packages/jwt/test/models/Jwt.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import test from 'ava' -import { Jwt } from '../../src/index.js' -import { expiredJwt } from '../assets/jwt.js' - -test('decodes a valid jwt', t => { - t.notThrows(() => Jwt.decode(expiredJwt)) -}) - -test('throws an error for an invalid jwt', t => { - t.throws(() => Jwt.decode('')) -}) diff --git a/packages/jwt/test/models/OpenIdConfiguration.spec.ts b/packages/jwt/test/models/OpenIdConfiguration.spec.ts deleted file mode 100644 index b3fed68..0000000 --- a/packages/jwt/test/models/OpenIdConfiguration.spec.ts +++ /dev/null @@ -1,10 +0,0 @@ -import test from 'ava' -import { validOpenIdConfig } from '../assets/openid-config.js' -import { OpenIdConfiguration } from '../../src/index.js' - -test('should validate token input', t => { - t.notThrows(() => OpenIdConfiguration.from(validOpenIdConfig)) -}) -test('should throw when given invalid token input', t => { - t.throws(() => OpenIdConfiguration.from({ accessToken: 0 })) -}) diff --git a/packages/jwt/test/util/Fetch.spec.ts b/packages/jwt/test/util/Fetch.spec.ts deleted file mode 100644 index a559c61..0000000 --- a/packages/jwt/test/util/Fetch.spec.ts +++ /dev/null @@ -1,10 +0,0 @@ -import test from 'ava' -import { getMaxAge } from '../../src/util/Fetch.js' - -test('should parse the max-age from the cache-control header', t => { - const maxAge = 900 - const headers = new Headers({ - 'Cache-Control': `max-age=${maxAge}` - }) - t.is(getMaxAge(headers), 900) -}) From 352dd4180da905ea3d0c843d9f24cb7eedba764f Mon Sep 17 00:00:00 2001 From: tylerablackham Date: Mon, 11 Sep 2023 21:52:45 +0000 Subject: [PATCH 2/8] chore(release): publish - @byu-oit/fastify-jwt@0.1.7-beta.0 - @byu-oit/jwt@0.0.7-beta.0 --- package-lock.json | 6 +++--- packages/fastify/CHANGELOG.md | 8 ++++++++ packages/fastify/package.json | 4 ++-- packages/jwt/CHANGELOG.md | 8 ++++++++ packages/jwt/package.json | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fede4c..72f318d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14581,11 +14581,11 @@ }, "packages/fastify": { "name": "@byu-oit/fastify-jwt", - "version": "0.1.6", + "version": "0.1.7-beta.0", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.5", - "@byu-oit/jwt": "^0.0.6", + "@byu-oit/jwt": "^0.0.7-beta.0", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", @@ -14616,7 +14616,7 @@ }, "packages/jwt": { "name": "@byu-oit/jwt", - "version": "0.0.6", + "version": "0.0.7-beta.0", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.5", diff --git a/packages/fastify/CHANGELOG.md b/packages/fastify/CHANGELOG.md index d3b7be0..61fa96c 100644 --- a/packages/fastify/CHANGELOG.md +++ b/packages/fastify/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.7-beta.0](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.6...@byu-oit/fastify-jwt@0.1.7-beta.0) (2023-09-11) + +**Note:** Version bump only for package @byu-oit/fastify-jwt + + + + + ## [0.1.6](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.5...@byu-oit/fastify-jwt@0.1.6) (2023-07-10) diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 078f229..8251c69 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/fastify-jwt", - "version": "0.1.6", + "version": "0.1.7-beta.0", "description": "A Fastify plugin for verifying callers JWTs with the BYU JWT package", "keywords": [], "author": "Spencer Tuft ", @@ -41,7 +41,7 @@ "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.5", - "@byu-oit/jwt": "^0.0.6", + "@byu-oit/jwt": "^0.0.7-beta.0", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", diff --git a/packages/jwt/CHANGELOG.md b/packages/jwt/CHANGELOG.md index b56a3bd..d46e305 100644 --- a/packages/jwt/CHANGELOG.md +++ b/packages/jwt/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.0.7-beta.0](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/jwt@0.0.6...@byu-oit/jwt@0.0.7-beta.0) (2023-09-11) + +**Note:** Version bump only for package @byu-oit/jwt + + + + + ## [0.0.6](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/jwt@0.0.5...@byu-oit/jwt@0.0.6) (2023-07-10) diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 4ca0332..326e3e3 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/jwt", - "version": "0.0.6", + "version": "0.0.7-beta.0", "description": "Utilities for verifying and decoding BYU JWTs", "keywords": [], "author": "Spencer Tuft ", From e20663ecfd7c6c42a09ee48fa272fee85e694cfb Mon Sep 17 00:00:00 2001 From: Tyler Blackham <124708255+tylerablackham@users.noreply.github.com> Date: Thu, 14 Sep 2023 11:13:28 -0600 Subject: [PATCH 3/8] fix: update dependencies (#155) --- package-lock.json | 10 +++++----- packages/fastify/package.json | 2 +- packages/jwt/package.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72f318d..9939982 100644 --- a/package-lock.json +++ b/package-lock.json @@ -228,9 +228,9 @@ } }, "node_modules/@byu-oit-sdk/jwt": { - "version": "0.1.0-beta.6", - "resolved": "https://registry.npmjs.org/@byu-oit-sdk/jwt/-/jwt-0.1.0-beta.6.tgz", - "integrity": "sha512-HRuqcMUaQJH7Q8GHfJffuRsSJW59btPYYxvta2ghE3tL6+SRKpBrWXrjLfSoHLXIqDaGtj5H7IRgVTjoBlIXTQ==", + "version": "0.1.0-beta.7", + "resolved": "https://registry.npmjs.org/@byu-oit-sdk/jwt/-/jwt-0.1.0-beta.7.tgz", + "integrity": "sha512-gVwihGANhP3OSRdshb7vOysf3Mxb8GAWePH/bNcnUyR5bD8VNUSO26Ws8Xa1Z5i28zNNy940Mi48gWFsLQvhYw==", "dependencies": { "@byu-oit-sdk/credential-provider": "*", "fast-jwt": "^3.1.1", @@ -14584,7 +14584,7 @@ "version": "0.1.7-beta.0", "license": "Apache-2.0", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.5", + "@byu-oit-sdk/jwt": "^0.1.0-beta.7", "@byu-oit/jwt": "^0.0.7-beta.0", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", @@ -14619,7 +14619,7 @@ "version": "0.0.7-beta.0", "license": "Apache-2.0", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.5", + "@byu-oit-sdk/jwt": "^0.1.0-beta.7", "@sinclair/typebox": "^0.31.2", "node-cache": "^5.1.2" }, diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 8251c69..cc1ff27 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -40,7 +40,7 @@ }, "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.5", + "@byu-oit-sdk/jwt": "^0.1.0-beta.7", "@byu-oit/jwt": "^0.0.7-beta.0", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 326e3e3..88e731d 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -40,7 +40,7 @@ }, "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.5", + "@byu-oit-sdk/jwt": "^0.1.0-beta.7", "@sinclair/typebox": "^0.31.2", "node-cache": "^5.1.2" }, From c2b95ab7ea67b2caa81770ba30522c4cc686847a Mon Sep 17 00:00:00 2001 From: tylerablackham Date: Thu, 14 Sep 2023 17:15:14 +0000 Subject: [PATCH 4/8] chore(release): publish - @byu-oit/fastify-jwt@0.1.7-beta.1 - @byu-oit/jwt@0.0.7-beta.1 --- package-lock.json | 6 +++--- packages/fastify/CHANGELOG.md | 11 +++++++++++ packages/fastify/package.json | 4 ++-- packages/jwt/CHANGELOG.md | 11 +++++++++++ packages/jwt/package.json | 2 +- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9939982..54b5b4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14581,11 +14581,11 @@ }, "packages/fastify": { "name": "@byu-oit/fastify-jwt", - "version": "0.1.7-beta.0", + "version": "0.1.7-beta.1", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.7", - "@byu-oit/jwt": "^0.0.7-beta.0", + "@byu-oit/jwt": "^0.0.7-beta.1", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", @@ -14616,7 +14616,7 @@ }, "packages/jwt": { "name": "@byu-oit/jwt", - "version": "0.0.7-beta.0", + "version": "0.0.7-beta.1", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.7", diff --git a/packages/fastify/CHANGELOG.md b/packages/fastify/CHANGELOG.md index 61fa96c..0331ae2 100644 --- a/packages/fastify/CHANGELOG.md +++ b/packages/fastify/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.7-beta.1](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.7-beta.0...@byu-oit/fastify-jwt@0.1.7-beta.1) (2023-09-14) + + +### Bug Fixes + +* update dependencies ([#155](https://github.com/byu-oit/byu-jwt-nodejs/issues/155)) ([e20663e](https://github.com/byu-oit/byu-jwt-nodejs/commit/e20663ecfd7c6c42a09ee48fa272fee85e694cfb)) + + + + + ## [0.1.7-beta.0](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.6...@byu-oit/fastify-jwt@0.1.7-beta.0) (2023-09-11) **Note:** Version bump only for package @byu-oit/fastify-jwt diff --git a/packages/fastify/package.json b/packages/fastify/package.json index cc1ff27..d0d166d 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/fastify-jwt", - "version": "0.1.7-beta.0", + "version": "0.1.7-beta.1", "description": "A Fastify plugin for verifying callers JWTs with the BYU JWT package", "keywords": [], "author": "Spencer Tuft ", @@ -41,7 +41,7 @@ "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.7", - "@byu-oit/jwt": "^0.0.7-beta.0", + "@byu-oit/jwt": "^0.0.7-beta.1", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", diff --git a/packages/jwt/CHANGELOG.md b/packages/jwt/CHANGELOG.md index d46e305..84b6c76 100644 --- a/packages/jwt/CHANGELOG.md +++ b/packages/jwt/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.0.7-beta.1](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/jwt@0.0.7-beta.0...@byu-oit/jwt@0.0.7-beta.1) (2023-09-14) + + +### Bug Fixes + +* update dependencies ([#155](https://github.com/byu-oit/byu-jwt-nodejs/issues/155)) ([e20663e](https://github.com/byu-oit/byu-jwt-nodejs/commit/e20663ecfd7c6c42a09ee48fa272fee85e694cfb)) + + + + + ## [0.0.7-beta.0](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/jwt@0.0.6...@byu-oit/jwt@0.0.7-beta.0) (2023-09-11) **Note:** Version bump only for package @byu-oit/jwt diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 88e731d..ad5eda6 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/jwt", - "version": "0.0.7-beta.0", + "version": "0.0.7-beta.1", "description": "Utilities for verifying and decoding BYU JWTs", "keywords": [], "author": "Spencer Tuft ", From b611bd0d9584efce2e0ec19ac43bbf41a2174cea Mon Sep 17 00:00:00 2001 From: Tyler Blackham <124708255+tylerablackham@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:49:12 -0600 Subject: [PATCH 5/8] fix(fastify): flatten ByuJwtAuthenticator options (#156) --- packages/fastify/README.md | 23 +++++++++----------- packages/fastify/src/ByuJwtAuthenticator.ts | 6 ++--- packages/fastify/test/ByuJwtProvider.spec.ts | 6 ++--- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/packages/fastify/README.md b/packages/fastify/README.md index c17ad8f..2afa2b3 100644 --- a/packages/fastify/README.md +++ b/packages/fastify/README.md @@ -17,23 +17,20 @@ fastify.register(ByuJwtProvider, { prefix: '/example/v1', development: process.env.NODE_ENV === 'development', /** May pass in ByuJwt options from @byu-oit/jwt */ - byuJwtOptions: { - issuer: 'https://api.byu.edu', - additionalValidations: [() => { - if(false) throw new Error('This will never happen') - }] - } - + issuer: 'https://api.byu.edu', + additionalValidations: [(jwt) => { + if(false) throw new Error('This will never happen') + }] }) await fastify.listen({ port: 3000 }).catch(console.error) ``` ## Options +In addition to the three properties below, you can also pass in any options that are defined in [BYU JWT](https://byu-oit.github.io/byu-jwt-nodejs/modules/BYU_JWT.html#md:options) documentation as well. -| property | type | default | description | -|-----------------------|---------|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| prefix | string | `undefined` | Will only authenticate routes matching this prefix. | -| development | boolean | false | skips JWT verification for development purposes but will throw an error if NODE_ENV is set to `production`. | -| basePath | string | `undefined` | will validate that the audience starts with the provided basePath in production. | -| byuJwtOptions | object | `undefined` | an object that contains any ByuJwt options passed in. See the [BYU JWT](https://byu-oit.github.io/byu-jwt-nodejs/modules/BYU_JWT.html#md:options) Documentation for a full list of those options. | +| property | type | default | description | +|------------------|---------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| prefix | string | `undefined` | Will only authenticate routes matching this prefix. | +| development | boolean | false | skips JWT verification for development purposes but will throw an error if NODE_ENV is set to `production`. | +| basePath | string | `undefined` | will validate that the audience starts with the provided basePath in production. | diff --git a/packages/fastify/src/ByuJwtAuthenticator.ts b/packages/fastify/src/ByuJwtAuthenticator.ts index 4fad6f7..f8f6261 100644 --- a/packages/fastify/src/ByuJwtAuthenticator.ts +++ b/packages/fastify/src/ByuJwtAuthenticator.ts @@ -3,8 +3,7 @@ import { TokenError } from 'fast-jwt' import { type IncomingHttpHeaders } from 'http' import { BYU_JWT_ERROR_CODES, ByuJwtError } from './ByuJwtError.js' -export interface ByuJwtAuthenticatorOptions { - byuJwtOptions?: CreateByuJwtOptions +export interface ByuJwtAuthenticatorOptions extends CreateByuJwtOptions { development?: boolean basePath?: string } @@ -16,9 +15,8 @@ export class ByuJwtAuthenticator { private readonly ByuJwt: typeof ByuJwt private readonly development: boolean - constructor ({ development, basePath, byuJwtOptions = {} }: ByuJwtAuthenticatorOptions = {}) { + constructor ({ development, basePath, ...byuJwtOptions }: ByuJwtAuthenticatorOptions = {}) { this.development = development ?? false - /** Extra validation step if basePath is provided */ if (basePath != null) { if (byuJwtOptions.additionalValidations == null) { diff --git a/packages/fastify/test/ByuJwtProvider.spec.ts b/packages/fastify/test/ByuJwtProvider.spec.ts index 85a4156..0c570a2 100644 --- a/packages/fastify/test/ByuJwtProvider.spec.ts +++ b/packages/fastify/test/ByuJwtProvider.spec.ts @@ -13,7 +13,7 @@ const errorHandler = (error: ByuJwtError, request: FastifyRequest, reply: Fastif test('authenticated user', async t => { const fastify = Fastify() - await fastify.register(ByuJwtProvider, { byuJwtOptions: { issuer }, development }) + await fastify.register(ByuJwtProvider, { issuer, development }) fastify.get('/', (request) => request.caller) const result = await fastify.inject({ url: '/', headers: { 'x-jwt-assertion': expiredJwt } }).then(res => res.json()) t.is(result.netId, 'stuft2') @@ -21,7 +21,7 @@ test('authenticated user', async t => { test('cannot fetch key', async t => { const fastify = Fastify() - await fastify.register(ByuJwtProvider, { byuJwtOptions: { issuer }, basePath: '/test' }) + await fastify.register(ByuJwtProvider, { issuer, basePath: '/test' }) fastify.get('/', (request) => request.caller) const result = await fastify.inject({ url: '/', headers: { 'x-jwt-assertion': expiredJwt } }).then(res => res.json()) t.is(result.message, 'Cannot fetch key.') @@ -30,7 +30,7 @@ test('cannot fetch key', async t => { test('missing expected JWT', async t => { const fastify = Fastify() fastify.setErrorHandler(errorHandler) - await fastify.register(ByuJwtProvider, { byuJwtOptions: { issuer }, development }) + await fastify.register(ByuJwtProvider, { issuer, development }) fastify.get('/', () => true) const result = await fastify.inject('/').then(res => res.json()) t.is(result.message, 'Missing expected JWT') From a9d9f00093d20289a28017236b0919fdadf757b3 Mon Sep 17 00:00:00 2001 From: tylerablackham Date: Mon, 18 Sep 2023 22:50:41 +0000 Subject: [PATCH 6/8] chore(release): publish - @byu-oit/fastify-jwt@0.1.7-beta.2 --- package-lock.json | 2 +- packages/fastify/CHANGELOG.md | 11 +++++++++++ packages/fastify/package.json | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54b5b4a..3a01b4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14581,7 +14581,7 @@ }, "packages/fastify": { "name": "@byu-oit/fastify-jwt", - "version": "0.1.7-beta.1", + "version": "0.1.7-beta.2", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0-beta.7", diff --git a/packages/fastify/CHANGELOG.md b/packages/fastify/CHANGELOG.md index 0331ae2..ed2e9b6 100644 --- a/packages/fastify/CHANGELOG.md +++ b/packages/fastify/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.7-beta.2](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.7-beta.1...@byu-oit/fastify-jwt@0.1.7-beta.2) (2023-09-18) + + +### Bug Fixes + +* **fastify:** flatten ByuJwtAuthenticator options ([#156](https://github.com/byu-oit/byu-jwt-nodejs/issues/156)) ([b611bd0](https://github.com/byu-oit/byu-jwt-nodejs/commit/b611bd0d9584efce2e0ec19ac43bbf41a2174cea)) + + + + + ## [0.1.7-beta.1](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.7-beta.0...@byu-oit/fastify-jwt@0.1.7-beta.1) (2023-09-14) diff --git a/packages/fastify/package.json b/packages/fastify/package.json index d0d166d..42a78f0 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/fastify-jwt", - "version": "0.1.7-beta.1", + "version": "0.1.7-beta.2", "description": "A Fastify plugin for verifying callers JWTs with the BYU JWT package", "keywords": [], "author": "Spencer Tuft ", From 1a3229c1e8e6baaee03ee29946a7a1d29f5009c6 Mon Sep 17 00:00:00 2001 From: Tyler Blackham <124708255+tylerablackham@users.noreply.github.com> Date: Mon, 25 Sep 2023 14:13:57 -0600 Subject: [PATCH 7/8] fix: update dependencies (#157) --- package-lock.json | 10 +++++----- packages/fastify/package.json | 2 +- packages/jwt/package.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a01b4c..395cb1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -228,9 +228,9 @@ } }, "node_modules/@byu-oit-sdk/jwt": { - "version": "0.1.0-beta.7", - "resolved": "https://registry.npmjs.org/@byu-oit-sdk/jwt/-/jwt-0.1.0-beta.7.tgz", - "integrity": "sha512-gVwihGANhP3OSRdshb7vOysf3Mxb8GAWePH/bNcnUyR5bD8VNUSO26Ws8Xa1Z5i28zNNy940Mi48gWFsLQvhYw==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@byu-oit-sdk/jwt/-/jwt-0.1.0.tgz", + "integrity": "sha512-soIg1XuwhdmLZ77pImTlCSA8LF9B+1uw1uykYGdsBGwiiiHxExbw5qU8OiFAR2LTQDJD0A/6HLuzRIl0Gn1H+g==", "dependencies": { "@byu-oit-sdk/credential-provider": "*", "fast-jwt": "^3.1.1", @@ -14584,7 +14584,7 @@ "version": "0.1.7-beta.2", "license": "Apache-2.0", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.7", + "@byu-oit-sdk/jwt": "^0.1.0", "@byu-oit/jwt": "^0.0.7-beta.1", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", @@ -14619,7 +14619,7 @@ "version": "0.0.7-beta.1", "license": "Apache-2.0", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.7", + "@byu-oit-sdk/jwt": "^0.1.0", "@sinclair/typebox": "^0.31.2", "node-cache": "^5.1.2" }, diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 42a78f0..d6fd670 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -40,7 +40,7 @@ }, "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.7", + "@byu-oit-sdk/jwt": "^0.1.0", "@byu-oit/jwt": "^0.0.7-beta.1", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", diff --git a/packages/jwt/package.json b/packages/jwt/package.json index ad5eda6..fb2cfff 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -40,7 +40,7 @@ }, "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { - "@byu-oit-sdk/jwt": "^0.1.0-beta.7", + "@byu-oit-sdk/jwt": "^0.1.0", "@sinclair/typebox": "^0.31.2", "node-cache": "^5.1.2" }, From 6845c18cc9881a081b5217eae4061d6ab528c163 Mon Sep 17 00:00:00 2001 From: tylerablackham Date: Mon, 25 Sep 2023 20:15:48 +0000 Subject: [PATCH 8/8] chore(release): publish - @byu-oit/fastify-jwt@0.1.7-beta.3 - @byu-oit/jwt@0.0.7-beta.2 --- package-lock.json | 6 +++--- packages/fastify/CHANGELOG.md | 11 +++++++++++ packages/fastify/package.json | 4 ++-- packages/jwt/CHANGELOG.md | 11 +++++++++++ packages/jwt/package.json | 2 +- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 395cb1e..7bebff0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14581,11 +14581,11 @@ }, "packages/fastify": { "name": "@byu-oit/fastify-jwt", - "version": "0.1.7-beta.2", + "version": "0.1.7-beta.3", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0", - "@byu-oit/jwt": "^0.0.7-beta.1", + "@byu-oit/jwt": "^0.0.7-beta.2", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", @@ -14616,7 +14616,7 @@ }, "packages/jwt": { "name": "@byu-oit/jwt", - "version": "0.0.7-beta.1", + "version": "0.0.7-beta.2", "license": "Apache-2.0", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0", diff --git a/packages/fastify/CHANGELOG.md b/packages/fastify/CHANGELOG.md index ed2e9b6..21bb260 100644 --- a/packages/fastify/CHANGELOG.md +++ b/packages/fastify/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.7-beta.3](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.7-beta.2...@byu-oit/fastify-jwt@0.1.7-beta.3) (2023-09-25) + + +### Bug Fixes + +* update dependencies ([#157](https://github.com/byu-oit/byu-jwt-nodejs/issues/157)) ([1a3229c](https://github.com/byu-oit/byu-jwt-nodejs/commit/1a3229c1e8e6baaee03ee29946a7a1d29f5009c6)) + + + + + ## [0.1.7-beta.2](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/fastify-jwt@0.1.7-beta.1...@byu-oit/fastify-jwt@0.1.7-beta.2) (2023-09-18) diff --git a/packages/fastify/package.json b/packages/fastify/package.json index d6fd670..2881eef 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/fastify-jwt", - "version": "0.1.7-beta.2", + "version": "0.1.7-beta.3", "description": "A Fastify plugin for verifying callers JWTs with the BYU JWT package", "keywords": [], "author": "Spencer Tuft ", @@ -41,7 +41,7 @@ "homepage": "https://github.com/byu-oit/byu-jwt-nodejs#readme", "dependencies": { "@byu-oit-sdk/jwt": "^0.1.0", - "@byu-oit/jwt": "^0.0.7-beta.1", + "@byu-oit/jwt": "^0.0.7-beta.2", "@sinclair/typebox": "^0.31.2", "@types/node": "^18.16.2", "fastify": "^4.17.0", diff --git a/packages/jwt/CHANGELOG.md b/packages/jwt/CHANGELOG.md index 84b6c76..426a0be 100644 --- a/packages/jwt/CHANGELOG.md +++ b/packages/jwt/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.0.7-beta.2](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/jwt@0.0.7-beta.1...@byu-oit/jwt@0.0.7-beta.2) (2023-09-25) + + +### Bug Fixes + +* update dependencies ([#157](https://github.com/byu-oit/byu-jwt-nodejs/issues/157)) ([1a3229c](https://github.com/byu-oit/byu-jwt-nodejs/commit/1a3229c1e8e6baaee03ee29946a7a1d29f5009c6)) + + + + + ## [0.0.7-beta.1](https://github.com/byu-oit/byu-jwt-nodejs/compare/@byu-oit/jwt@0.0.7-beta.0...@byu-oit/jwt@0.0.7-beta.1) (2023-09-14) diff --git a/packages/jwt/package.json b/packages/jwt/package.json index fb2cfff..d8aaeff 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -1,6 +1,6 @@ { "name": "@byu-oit/jwt", - "version": "0.0.7-beta.1", + "version": "0.0.7-beta.2", "description": "Utilities for verifying and decoding BYU JWTs", "keywords": [], "author": "Spencer Tuft ",