diff --git a/package-lock.json b/package-lock.json index 043af0dc..8d64846f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,22 +11,23 @@ "dependencies": { "@aws-sdk/client-s3": "^3.688.0", "@aws-sdk/s3-presigned-post": "^3.787.0", - "@nestjs/axios": "^0.0.7", - "@nestjs/common": "^8.4.2", - "@nestjs/config": "^2.3.4", - "@nestjs/core": "^8.0.0", - "@nestjs/jwt": "^8.0.1", + "@nestjs/axios": "^3.0.1", + "@nestjs/cache-manager": "^2.1.1", + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "^10.0.0", + "@nestjs/jwt": "^10.2.0", "@nestjs/passport": "^10.0.3", - "@nestjs/platform-express": "^8.4.7", - "@nestjs/schedule": "^1.1.0", - "@nestjs/swagger": "^5.2.1", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/schedule": "^4.0.0", + "@nestjs/swagger": "^7.1.0", "@nestjs/typeorm": "^10.0.2", "@types/multer": "^1.4.12", "aws-sdk": "^2.1692.0", - "axios": "^0.26.1", - "cache-manager": "^3.6.1", + "axios": "^1.6.7", + "cache-manager": "^5.4.0", "class-transformer": "^0.5.1", - "class-validator": "^0.13.2", + "class-validator": "^0.14.1", "csv": "^6.3.10", "csvtojson": "^2.0.10", "date-fns": "^3.6.0", @@ -36,6 +37,7 @@ "graphql-tag": "^2.12.6", "in-memory-faceted-search": "^1.0.1", "jwt-decode": "^3.1.2", + "kafkajs": "^2.2.4", "moment": "^2.30.1", "multer": "^1.4.4", "node-cron": "^3.0.1", @@ -46,67 +48,69 @@ "pg": "^8.11.3", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0", - "swagger-ui-express": "^4.3.0", + "rxjs": "^7.8.1", + "swagger-ui-express": "^5.0.0", "templates.js": "^0.3.11", "typeorm": "^0.3.20", "winston": "^3.11.0" }, "devDependencies": { - "@nestjs/cli": "^8.0.0", - "@nestjs/schematics": "^8.0.0", - "@nestjs/testing": "^8.0.0", - "@types/cache-manager": "^3.4.3", - "@types/cron": "^1.7.3", + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/cache-manager": "^4.0.6", + "@types/cron": "^2.0.0", "@types/express": "^4.17.13", - "@types/jest": "27.4.1", - "@types/node": "^16.0.0", - "@types/supertest": "^2.0.11", + "@types/jest": "29.5.12", + "@types/node": "^20.0.0", + "@types/supertest": "^6.0.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.0.1", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.2.5", - "prettier": "^2.3.2", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.7.0", + "prettier": "^3.0.0", "source-map-support": "^0.5.20", "supertest": "^6.1.3", - "ts-jest": "^27.0.3", + "ts-jest": "^29.1.2", "ts-loader": "^9.2.3", "ts-node": "^10.0.0", - "tsconfig-paths": "^3.10.1", - "typescript": "^4.3.5" + "tsconfig-paths": "^4.2.0", + "typescript": "^5.0.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@angular-devkit/core": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.6.tgz", - "integrity": "sha512-ZmD586B+RnM2CG5+jbXh2NVfIydTc/yKSjppYDDOv4I530YBm6vpfZMwClpiNk6XLbMv7KqX4Tlr4wfxlPYYbA==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", + "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "8.9.0", + "ajv": "8.12.0", "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" }, "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -119,147 +123,137 @@ } } }, - "node_modules/@angular-devkit/core/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" + "tslib": "^2.1.0" } }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/@angular-devkit/schematics": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.6.tgz", - "integrity": "sha512-yLh5xc92C/FiaAp27coPiKWpSUmwoXF7vMxbJYJTyOXlt0mUITAEAwtrZQNr4yAxW/yvgTdyg7PhXaveQNTUuQ==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", + "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "13.3.6", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", + "@angular-devkit/core": "17.3.11", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", "ora": "5.4.1", - "rxjs": "6.6.7" + "rxjs": "7.8.1" }, "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/schematics-cli": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-13.3.6.tgz", - "integrity": "sha512-5tTuu9gbXM0bMk0sin4phmWA3U1Qz53zT/rpEfzQ/+c/s8CoqZ5N1qOnYtemRct3Jxsz1kn4TBpHeriR4r5hHg==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.11.tgz", + "integrity": "sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "13.3.6", - "@angular-devkit/schematics": "13.3.6", - "ansi-colors": "4.1.1", - "inquirer": "8.2.0", - "minimist": "1.2.6", - "symbol-observable": "4.0.0" + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "ansi-colors": "4.1.3", + "inquirer": "9.2.15", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" }, "bin": { "schematics": "bin/schematics.js" }, "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", - "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", "lodash": "^4.17.21", - "mute-stream": "0.0.8", + "mute-stream": "1.0.0", "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" } }, - "node_modules/@angular-devkit/schematics-cli/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, + "license": "MIT", "engines": { - "npm": ">=2.0.0" + "node": ">=0.12.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "license": "0BSD" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", @@ -290,6 +284,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", @@ -303,6 +298,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -314,6 +310,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -326,6 +323,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -405,6 +403,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } @@ -413,6 +412,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -423,6 +423,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -434,6 +435,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -446,6 +448,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -455,114 +458,116 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.787.0.tgz", - "integrity": "sha512-eGLCWkN0NlntJ9yPU6OKUggVS4cFvuZJog+cFg1KD5hniLqz7Y0YRtB4uBxW212fK3XCfddgyscEOEeHaTQQTw==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.848.0.tgz", + "integrity": "sha512-6uT+THQfsB92eAH0p5zvpGiSCtO2ZhGwmuw6HWEngui53YIWz7W/GCnN0G7nrKpgD5DPrMaBwqZvKuoAh9NHAQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/credential-provider-node": "3.787.0", - "@aws-sdk/middleware-bucket-endpoint": "3.775.0", - "@aws-sdk/middleware-expect-continue": "3.775.0", - "@aws-sdk/middleware-flexible-checksums": "3.787.0", - "@aws-sdk/middleware-host-header": "3.775.0", - "@aws-sdk/middleware-location-constraint": "3.775.0", - "@aws-sdk/middleware-logger": "3.775.0", - "@aws-sdk/middleware-recursion-detection": "3.775.0", - "@aws-sdk/middleware-sdk-s3": "3.775.0", - "@aws-sdk/middleware-ssec": "3.775.0", - "@aws-sdk/middleware-user-agent": "3.787.0", - "@aws-sdk/region-config-resolver": "3.775.0", - "@aws-sdk/signature-v4-multi-region": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.787.0", - "@aws-sdk/util-user-agent-browser": "3.775.0", - "@aws-sdk/util-user-agent-node": "3.787.0", - "@aws-sdk/xml-builder": "3.775.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", - "@smithy/eventstream-serde-browser": "^4.0.2", - "@smithy/eventstream-serde-config-resolver": "^4.1.0", - "@smithy/eventstream-serde-node": "^4.0.2", - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/hash-blob-browser": "^4.0.2", - "@smithy/hash-node": "^4.0.2", - "@smithy/hash-stream-node": "^4.0.2", - "@smithy/invalid-dependency": "^4.0.2", - "@smithy/md5-js": "^4.0.2", - "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/credential-provider-node": "3.848.0", + "@aws-sdk/middleware-bucket-endpoint": "3.840.0", + "@aws-sdk/middleware-expect-continue": "3.840.0", + "@aws-sdk/middleware-flexible-checksums": "3.846.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-location-constraint": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-sdk-s3": "3.846.0", + "@aws-sdk/middleware-ssec": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.848.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/signature-v4-multi-region": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.848.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.0", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-blob-browser": "^4.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/hash-stream-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/md5-js": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-stream": "^4.2.3", "@smithy/util-utf8": "^4.0.0", - "@smithy/util-waiter": "^4.0.3", - "tslib": "^2.6.2" + "@smithy/util-waiter": "^4.0.6", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.787.0.tgz", - "integrity": "sha512-L8R+Mh258G0DC73ktpSVrG4TT9i2vmDLecARTDR/4q5sRivdDQSL5bUp3LKcK80Bx+FRw3UETIlX6mYMLL9PJQ==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.848.0.tgz", + "integrity": "sha512-mD+gOwoeZQvbecVLGoCmY6pS7kg02BHesbtIxUj+PeBqYoZV5uLvjUOmuGfw1SfoSobKvS11urxC9S7zxU/Maw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/middleware-host-header": "3.775.0", - "@aws-sdk/middleware-logger": "3.775.0", - "@aws-sdk/middleware-recursion-detection": "3.775.0", - "@aws-sdk/middleware-user-agent": "3.787.0", - "@aws-sdk/region-config-resolver": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.787.0", - "@aws-sdk/util-user-agent-browser": "3.775.0", - "@aws-sdk/util-user-agent-node": "3.787.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/hash-node": "^4.0.2", - "@smithy/invalid-dependency": "^4.0.2", - "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.848.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.848.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -571,21 +576,25 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.775.0.tgz", - "integrity": "sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.846.0.tgz", + "integrity": "sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/core": "^3.2.0", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/signature-v4": "^5.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/util-middleware": "^4.0.2", - "fast-xml-parser": "4.4.1", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.7.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { @@ -593,15 +602,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.775.0.tgz", - "integrity": "sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.846.0.tgz", + "integrity": "sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@smithy/property-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -609,20 +618,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.775.0.tgz", - "integrity": "sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.846.0.tgz", + "integrity": "sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/property-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/util-stream": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.3", "tslib": "^2.6.2" }, "engines": { @@ -630,23 +639,23 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.787.0.tgz", - "integrity": "sha512-hc2taRoDlXn2uuNuHWDJljVWYrp3r9JF1a/8XmOAZhVUNY+ImeeStylHXhXXKEA4JOjW+5PdJj0f1UDkVCHJiQ==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.848.0.tgz", + "integrity": "sha512-r6KWOG+En2xujuMhgZu7dzOZV3/M5U/5+PXrG8dLQ3rdPRB3vgp5tc56KMqLwm/EXKRzAOSuw/UE4HfNOAB8Hw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/credential-provider-env": "3.775.0", - "@aws-sdk/credential-provider-http": "3.775.0", - "@aws-sdk/credential-provider-process": "3.775.0", - "@aws-sdk/credential-provider-sso": "3.787.0", - "@aws-sdk/credential-provider-web-identity": "3.787.0", - "@aws-sdk/nested-clients": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/credential-provider-env": "3.846.0", + "@aws-sdk/credential-provider-http": "3.846.0", + "@aws-sdk/credential-provider-process": "3.846.0", + "@aws-sdk/credential-provider-sso": "3.848.0", + "@aws-sdk/credential-provider-web-identity": "3.848.0", + "@aws-sdk/nested-clients": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -654,22 +663,22 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.787.0.tgz", - "integrity": "sha512-JioVi44B1vDMaK2CdzqimwvJD3uzvzbQhaEWXsGMBcMcNHajXAXf08EF50JG3ZhLrhhUsT1ObXpbTaPINOhh+g==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.848.0.tgz", + "integrity": "sha512-AblNesOqdzrfyASBCo1xW3uweiSro4Kft9/htdxLeCVU1KVOnFWA5P937MNahViRmIQm2sPBCqL8ZG0u9lnh5g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.775.0", - "@aws-sdk/credential-provider-http": "3.775.0", - "@aws-sdk/credential-provider-ini": "3.787.0", - "@aws-sdk/credential-provider-process": "3.775.0", - "@aws-sdk/credential-provider-sso": "3.787.0", - "@aws-sdk/credential-provider-web-identity": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/credential-provider-env": "3.846.0", + "@aws-sdk/credential-provider-http": "3.846.0", + "@aws-sdk/credential-provider-ini": "3.848.0", + "@aws-sdk/credential-provider-process": "3.846.0", + "@aws-sdk/credential-provider-sso": "3.848.0", + "@aws-sdk/credential-provider-web-identity": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -677,16 +686,16 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.775.0.tgz", - "integrity": "sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.846.0.tgz", + "integrity": "sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -694,18 +703,18 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.787.0.tgz", - "integrity": "sha512-fHc08bsvwm4+dEMEQKnQ7c1irEQmmxbgS+Fq41y09pPvPh31nAhoMcjBSTWAaPHvvsRbTYvmP4Mf12ZGr8/nfg==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.848.0.tgz", + "integrity": "sha512-pozlDXOwJZL0e7w+dqXLgzVDB7oCx4WvtY0sk6l4i07uFliWF/exupb6pIehFWvTUcOvn5aFTTqcQaEzAD5Wsg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.787.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/token-providers": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/client-sso": "3.848.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/token-providers": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -713,16 +722,16 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.787.0.tgz", - "integrity": "sha512-SobmCwNbk6TfEsF283mZPQEI5vV2j6eY5tOCj8Er4Lzraxu9fBPADV+Bib2A8F6jlB1lMPJzOuDCbEasSt/RIw==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.848.0.tgz", + "integrity": "sha512-D1fRpwPxtVDhcSc/D71exa2gYweV+ocp4D3brF0PgFd//JR3XahZ9W24rVnTQwYEcK9auiBZB89Ltv+WbWN8qw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/nested-clients": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@smithy/property-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/nested-clients": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -730,16 +739,16 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.775.0.tgz", - "integrity": "sha512-qogMIpVChDYr4xiUNC19/RDSw/sKoHkAhouS6Skxiy6s27HBhow1L3Z1qVYXuBmOZGSWPU0xiyZCvOyWrv9s+Q==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", + "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-arn-parser": "3.723.0", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" }, @@ -748,14 +757,14 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.775.0.tgz", - "integrity": "sha512-Apd3owkIeUW5dnk3au9np2IdW2N0zc9NjTjHiH+Mx3zqwSrc+m+ANgJVgk9mnQjMzU/vb7VuxJ0eqdEbp5gYsg==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.840.0.tgz", + "integrity": "sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -763,22 +772,22 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.787.0.tgz", - "integrity": "sha512-X71qEwWoixFmwowWzlPoZUR3u1CWJ7iAzU0EzIxqmPhQpQJLFmdL1+SRjqATynDPZQzLs1a5HBtPT++EnZ+Quw==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.846.0.tgz", + "integrity": "sha512-CdkeVfkwt3+bDLhmOwBxvkUf6oY9iUhvosaUnqkoPsOqIiUEN54yTGOnO8A0wLz6mMsZ6aBlfFrQhFnxt3c+yw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", "@smithy/is-array-buffer": "^4.0.0", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -787,14 +796,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz", - "integrity": "sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -802,13 +811,13 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.775.0.tgz", - "integrity": "sha512-8TMXEHZXZTFTckQLyBT5aEI8fX11HZcwZseRifvBKKpj0RZDk4F0EEYGxeNSPpUQ7n+PRWyfAEnnZNRdAj/1NQ==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.840.0.tgz", + "integrity": "sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -816,13 +825,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz", - "integrity": "sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -830,14 +839,14 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz", - "integrity": "sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -845,23 +854,23 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.775.0.tgz", - "integrity": "sha512-zsvcu7cWB28JJ60gVvjxPCI7ZU7jWGcpNACPiZGyVtjYXwcxyhXbYEVDSWKsSA6ERpz9XrpLYod8INQWfW3ECg==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.846.0.tgz", + "integrity": "sha512-jP9x+2Q87J5l8FOP+jlAd7vGLn0cC6G9QGmf386e5OslBPqxXKcl3RjqGLIOKKos2mVItY3ApP5xdXQx7jGTVA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-arn-parser": "3.723.0", - "@smithy/core": "^3.2.0", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/signature-v4": "^5.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.7.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -870,13 +879,13 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.775.0.tgz", - "integrity": "sha512-Iw1RHD8vfAWWPzBBIKaojO4GAvQkHOYIpKdAfis/EUSUmSa79QsnXnRqsdcE0mCB0Ylj23yi+ah4/0wh9FsekA==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.840.0.tgz", + "integrity": "sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -884,17 +893,17 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.787.0.tgz", - "integrity": "sha512-Lnfj8SmPLYtrDFthNIaNj66zZsBCam+E4XiUDr55DIHTGstH6qZ/q6vg0GfbukxwSmUcGMwSR4Qbn8rb8yd77g==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.848.0.tgz", + "integrity": "sha512-rjMuqSWJEf169/ByxvBqfdei1iaduAnfolTshsZxwcmLIUtbYrFUmts0HrLQqsAG8feGPpDLHA272oPl+NTCCA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.787.0", - "@smithy/core": "^3.2.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@smithy/core": "^3.7.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -902,47 +911,47 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.787.0.tgz", - "integrity": "sha512-xk03q1xpKNHgbuo+trEf1dFrI239kuMmjKKsqLEsHlAZbuFq4yRGMlHBrVMnKYOPBhVFDS/VineM991XI52fKg==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.848.0.tgz", + "integrity": "sha512-joLsyyo9u61jnZuyYzo1z7kmS7VgWRAkzSGESVzQHfOA1H2PYeUFek6vLT4+c9xMGrX/Z6B0tkRdzfdOPiatLg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/middleware-host-header": "3.775.0", - "@aws-sdk/middleware-logger": "3.775.0", - "@aws-sdk/middleware-recursion-detection": "3.775.0", - "@aws-sdk/middleware-user-agent": "3.787.0", - "@aws-sdk/region-config-resolver": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.787.0", - "@aws-sdk/util-user-agent-browser": "3.775.0", - "@aws-sdk/util-user-agent-node": "3.787.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/hash-node": "^4.0.2", - "@smithy/invalid-dependency": "^4.0.2", - "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.848.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.848.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -951,16 +960,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz", - "integrity": "sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" }, "engines": { @@ -968,17 +977,17 @@ } }, "node_modules/@aws-sdk/s3-presigned-post": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-presigned-post/-/s3-presigned-post-3.787.0.tgz", - "integrity": "sha512-/mM9VvdjC5fBa1WqlygmjTZ4R2fNsMjSc03JfdtcLWDShFZ61gungGZVSvsBbwh/YcVe1sKOnJz4qBQxl/ey8g==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-presigned-post/-/s3-presigned-post-3.848.0.tgz", + "integrity": "sha512-17MrG6Vei65zCofYobDrYp4ohIZvNSgyqDMqAlSnB8NuxSKIxeYoB743ctGX20yw9ASU6YaQjKshuZiBlfP77g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-s3": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-format-url": "3.775.0", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/signature-v4": "^5.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/client-s3": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-format-url": "3.840.0", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -988,16 +997,16 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.775.0.tgz", - "integrity": "sha512-cnGk8GDfTMJ8p7+qSk92QlIk2bmTmFJqhYxcXZ9PysjZtx0xmfCMxnG3Hjy1oU2mt5boPCVSOptqtWixayM17g==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.846.0.tgz", + "integrity": "sha512-ZMfIMxUljqZzPJGOcraC6erwq/z1puNMU35cO1a/WdhB+LdYknMn1lr7SJuH754QwNzzIlZbEgg4hoHw50+DpQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/signature-v4": "^5.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/middleware-sdk-s3": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -1005,16 +1014,17 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.787.0.tgz", - "integrity": "sha512-d7/NIqxq308Zg0RPMNrmn0QvzniL4Hx8Qdwzr6YZWLYAbUSvZYS2ppLR3BFWSkV6SsTJUx8BuDaj3P8vttkrog==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.848.0.tgz", + "integrity": "sha512-oNPyM4+Di2Umu0JJRFSxDcKQ35+Chl/rAwD47/bS0cDPI8yrao83mLXLeDqpRPHyQW4sXlP763FZcuAibC0+mg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/nested-clients": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/nested-clients": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -1022,12 +1032,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.775.0.tgz", - "integrity": "sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -1035,9 +1045,9 @@ } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz", - "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1047,14 +1057,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.787.0.tgz", - "integrity": "sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz", + "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/types": "^4.2.0", - "@smithy/util-endpoints": "^3.0.2", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -1062,14 +1073,14 @@ } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.775.0.tgz", - "integrity": "sha512-Nw4nBeyCbWixoGh8NcVpa/i8McMA6RXJIjQFyloJLaPr7CPquz7ZbSl0MUWMFVwP/VHaJ7B+lNN3Qz1iFCEP/Q==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.840.0.tgz", + "integrity": "sha512-VB1PWyI1TQPiPvg4w7tgUGGQER1xxXPNUqfh3baxUSFi1Oh8wHrDnFywkxLm3NMmgDmnLnSZ5Q326qAoyqKLSg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -1077,38 +1088,39 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.679.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.679.0.tgz", - "integrity": "sha512-zKTd48/ZWrCplkXpYDABI74rQlbR0DNHs8nH95htfSLj9/mWRSwaGptoxwcihaq/77vi/fl2X3y0a1Bo8bt7RA==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz", - "integrity": "sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==", + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/types": "^4.2.0", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.787.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.787.0.tgz", - "integrity": "sha512-mG7Lz8ydfG4SF9e8WSXiPQ/Lsn3n8A5B5jtPROidafi06I3ckV2WxyMLdwG14m919NoS6IOfWHyRGSqWIwbVKA==", + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.848.0.tgz", + "integrity": "sha512-Zz1ft9NiLqbzNj/M0jVNxaoxI2F4tGXN0ZbZIj+KJ+PbJo+w5+Jo6d0UDAtbj3AEd79pjcCaP4OA9NTVzItUdw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.787.0", - "@aws-sdk/types": "3.775.0", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@aws-sdk/middleware-user-agent": "3.848.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -1124,12 +1136,12 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.775.0.tgz", - "integrity": "sha512-b9NGO6FKJeLGYnV7Z1yvcP1TNU4dkD5jNsLWOF1/sygZoASaQhNOlaiJ/1OH331YQ1R1oWk38nBb0frsYkDsOQ==", + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -1137,50 +1149,52 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", - "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz", - "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.7", - "@babel/parser": "^7.17.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1201,16 +1215,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -1218,21 +1232,30 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", - "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { @@ -1245,86 +1268,62 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.17.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -1332,9 +1331,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -1342,36 +1341,37 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1385,6 +1385,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1397,6 +1398,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1409,6 +1411,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1416,11 +1419,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1433,6 +1469,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1440,11 +1477,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1457,6 +1511,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1469,6 +1524,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1481,6 +1537,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1493,6 +1550,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1505,6 +1563,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1512,11 +1571,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1528,12 +1604,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1543,57 +1620,48 @@ } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1603,91 +1671,233 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, "engines": { "node": ">=0.1.90" } }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "devOptional": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "devOptional": true, + "license": "MIT", "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@dabh/diagnostics": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", "kuler": "^2.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "eslint-visitor-keys": "^3.4.3" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "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/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/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, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1701,9 +1911,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -1715,6 +1926,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -1725,12 +1937,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1747,6 +1961,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1761,6 +1976,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1778,6 +1994,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1794,17 +2011,23 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { @@ -1812,6 +2035,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1820,75 +2044,124 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1899,104 +2172,117 @@ } } }, - "node_modules/@jest/core/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2007,143 +2293,182 @@ } } }, - "node_modules/@jest/reporters/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "*" } }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "node_modules/@jest/schemas": { + "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, + "license": "MIT", "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2152,16 +2477,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "devOptional": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2169,314 +2494,180 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nestjs/axios": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-0.0.7.tgz", - "integrity": "sha512-at8nj+1Nb8UleHcIN5QqZYeWX54m4m9s9gxzVE1qWy00neX2rg0+h2TfbWsnDi2tc23zIxqexanxMOJZbzO0CA==", + "node_modules/@ljharb/through": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", + "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", + "dev": true, "license": "MIT", "dependencies": { - "axios": "0.26.0" + "call-bind": "^1.0.8" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "license": "MIT" + }, + "node_modules/@nestjs/axios": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.1.3.tgz", + "integrity": "sha512-RZ/63c1tMxGLqyG3iOCVt7A72oy4x1eM6QEhd4KzCYpaVWW0igq0WSREeRoEZhIxRcZfDfIIkvsOMiM7yfVGZQ==", + "license": "MIT", "peerDependencies": { - "@nestjs/common": "^7.0.0 || ^8.0.0", - "reflect-metadata": "^0.1.12", + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "axios": "^1.3.1", "rxjs": "^6.0.0 || ^7.0.0" } }, - "node_modules/@nestjs/axios/node_modules/axios": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", - "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "node_modules/@nestjs/cache-manager": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/cache-manager/-/cache-manager-2.3.0.tgz", + "integrity": "sha512-pxeBp9w/s99HaW2+pezM1P3fLiWmUEnTUoUMLa9UYViCtjj0E0A19W/vaT5JFACCzFIeNrwH4/16jkpAhQ25Vw==", "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.8" + "peerDependencies": { + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "cache-manager": "<=5", + "rxjs": "^7.0.0" } }, "node_modules/@nestjs/cli": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-8.2.8.tgz", - "integrity": "sha512-y5Imcw1EY0OxD3POAM7SLUB1rFdn5FjbfSsyJrokjKmXY+i6KcBdbRrv3Ox7aeJ4W7wXuckIXZEUlK6lC52dnA==", + "version": "10.4.9", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.9.tgz", + "integrity": "sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "13.3.6", - "@angular-devkit/schematics": "13.3.6", - "@angular-devkit/schematics-cli": "13.3.6", - "@nestjs/schematics": "^8.0.3", - "chalk": "3.0.0", - "chokidar": "3.5.3", - "cli-table3": "0.6.2", + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "@angular-devkit/schematics-cli": "17.3.11", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.5", "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "7.2.11", - "inquirer": "7.3.3", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.4.5", + "inquirer": "8.2.6", "node-emoji": "1.11.0", "ora": "5.4.1", - "os-name": "4.0.1", - "rimraf": "3.0.2", - "shelljs": "0.8.5", - "source-map-support": "0.5.21", "tree-kill": "1.2.2", - "tsconfig-paths": "3.14.1", - "tsconfig-paths-webpack-plugin": "3.5.2", - "typescript": "4.7.4", - "webpack": "5.73.0", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.2.0", + "typescript": "5.7.2", + "webpack": "5.97.1", "webpack-node-externals": "3.0.0" }, "bin": { "nest": "bin/nest.js" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0" - } - }, - "node_modules/@nestjs/cli/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "node": ">= 16.14" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "node_modules/@nestjs/cli/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@nestjs/cli/node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "node_modules/@nestjs/cli/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/@nestjs/cli/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@nestjs/cli/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=8" + "node": ">=0.8.x" } }, - "node_modules/@nestjs/cli/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=14.17" } }, - "node_modules/@nestjs/cli/node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@nestjs/cli/node_modules/webpack": { - "version": "5.73.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", - "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -2496,31 +2687,27 @@ } }, "node_modules/@nestjs/common": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-8.4.7.tgz", - "integrity": "sha512-m/YsbcBal+gA5CFrDpqXqsSfylo+DIQrkFY3qhVIltsYRfu8ct8J9pqsTO6OPf3mvqdOpFGrV5sBjoyAzOBvsw==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.19.tgz", + "integrity": "sha512-0TZJ8H+7qtaqZt6YfZJkDRp0e+v6jjo5/pevPAjUy0WYxaTy16bNNQxFPRKLMe/v1hUr2oGV9imvL2477zNt5g==", "license": "MIT", "dependencies": { - "axios": "0.27.2", + "file-type": "20.4.1", "iterare": "1.2.1", - "tslib": "2.4.0", - "uuid": "8.3.2" + "tslib": "2.8.1", + "uid": "2.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nest" }, "peerDependencies": { - "cache-manager": "*", "class-transformer": "*", "class-validator": "*", - "reflect-metadata": "^0.1.12", + "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "peerDependenciesMeta": { - "cache-manager": { - "optional": true - }, "class-transformer": { "optional": true }, @@ -2529,85 +2716,57 @@ } } }, - "node_modules/@nestjs/common/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/@nestjs/common/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "license": "0BSD" - }, "node_modules/@nestjs/config": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.3.4.tgz", - "integrity": "sha512-IGdSF+0F9MJO6dCRTEahdxPz4iVijjtolcFBxnY+2QYM3bXYQvAgzskGZi+WkAFJN/VzR3TEp60gN5sI74GxPA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.3.0.tgz", + "integrity": "sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==", "license": "MIT", "dependencies": { - "dotenv": "16.1.4", + "dotenv": "16.4.5", "dotenv-expand": "10.0.0", - "lodash": "4.17.21", - "uuid": "9.0.0" + "lodash": "4.17.21" }, "peerDependencies": { - "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0", - "reflect-metadata": "^0.1.13", - "rxjs": "^6.0.0 || ^7.2.0" + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" } }, "node_modules/@nestjs/config/node_modules/dotenv": { - "version": "16.1.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", - "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/@nestjs/config/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "url": "https://dotenvx.com" } }, "node_modules/@nestjs/core": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.4.7.tgz", - "integrity": "sha512-XB9uexHqzr2xkPo6QSiQWJJttyYYLmvQ5My64cFvWFi7Wk2NIus0/xUNInwX3kmFWB6pF1ab5Y2ZBvWdPwGBhw==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.19.tgz", + "integrity": "sha512-gahghu0y4Rn4gn/xPjTgNHFMpUM8TxfhdeMowVWTGVnYMZtGeEGbIXMFhJS0Dce3E4VKyqAglzgO9ecAZd4Ong==", "hasInstallScript": true, "license": "MIT", "dependencies": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", - "object-hash": "3.0.0", - "path-to-regexp": "3.2.0", - "tslib": "2.4.0", - "uuid": "8.3.2" + "path-to-regexp": "3.3.0", + "tslib": "2.8.1", + "uid": "2.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nest" }, "peerDependencies": { - "@nestjs/common": "^8.0.0", - "@nestjs/microservices": "^8.0.0", - "@nestjs/platform-express": "^8.0.0", - "@nestjs/websockets": "^8.0.0", - "reflect-metadata": "^0.1.12", + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "peerDependenciesMeta": { @@ -2622,66 +2781,29 @@ } } }, - "node_modules/@nestjs/core/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "license": "0BSD" - }, "node_modules/@nestjs/jwt": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-8.0.1.tgz", - "integrity": "sha512-9WGfgngX8aclC/MC+CH35Ooo4iPVKc+7xLXaBV6o4ty8g2uZdPomry7cSdK/e6Lv623O/84WapThnPoAtW/jvA==", - "license": "MIT", - "dependencies": { - "@types/jsonwebtoken": "8.5.8", - "jsonwebtoken": "8.5.1" - }, - "peerDependencies": { - "@nestjs/common": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@nestjs/jwt/node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/@nestjs/jwt/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", + "license": "MIT", + "dependencies": { + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, "node_modules/@nestjs/mapped-types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.0.1.tgz", - "integrity": "sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", + "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", "license": "MIT", "peerDependencies": { - "@nestjs/common": "^7.0.8 || ^8.0.0", - "class-transformer": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0", - "class-validator": "^0.11.1 || ^0.12.0 || ^0.13.0", - "reflect-metadata": "^0.1.12" + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "class-transformer": "^0.4.0 || ^0.5.0", + "class-validator": "^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12 || ^0.2.0" }, "peerDependenciesMeta": { "class-transformer": { @@ -2696,30 +2818,31 @@ "version": "10.0.3", "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.3.tgz", "integrity": "sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==", + "license": "MIT", "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", "passport": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0" } }, "node_modules/@nestjs/platform-express": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.4.7.tgz", - "integrity": "sha512-lPE5Ltg2NbQGRQIwXWY+4cNrXhJdycbxFDQ8mNxSIuv+LbrJBIdEB/NONk+LLn9N/8d2+I2LsIETGQrPvsejBg==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.4.19.tgz", + "integrity": "sha512-IeQkBZUtPeJoO4E0QqSLwkB+60KcThw8/s4gGvAwIRJ5ViuXoxnwU59eBDy84PUuVbNe4VdKjfAF9fuQOEh11Q==", "license": "MIT", "dependencies": { - "body-parser": "1.20.0", + "body-parser": "1.20.3", "cors": "2.8.5", - "express": "4.18.1", - "multer": "1.4.4-lts.1", - "tslib": "2.4.0" + "express": "4.21.2", + "multer": "2.0.1", + "tslib": "2.8.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nest" }, "peerDependencies": { - "@nestjs/common": "^8.0.0", - "@nestjs/core": "^8.0.0" + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" } }, "node_modules/@nestjs/platform-express/node_modules/busboy": { @@ -2733,22 +2856,51 @@ "node": ">=10.16.0" } }, + "node_modules/@nestjs/platform-express/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "node_modules/@nestjs/platform-express/node_modules/multer": { - "version": "1.4.4-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", - "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.1.tgz", + "integrity": "sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==", "license": "MIT", "dependencies": { "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "type-is": "^1.6.18", + "xtend": "^4.0.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 10.16.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/@nestjs/platform-express/node_modules/streamsearch": { @@ -2759,175 +2911,117 @@ "node": ">=10.0.0" } }, - "node_modules/@nestjs/platform-express/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "license": "0BSD" - }, - "node_modules/@nestjs/schedule": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-1.1.0.tgz", - "integrity": "sha512-0QpbwClUildXqlyoaygG+aIQZNNMv31XDyQxX+Ob1zw/3I8+AVrDlBwZHQ+tlhIcJFR8aG+VTH8xwIjXwtS1UA==", + "node_modules/@nestjs/platform-express/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { - "cron": "1.8.2", - "uuid": "8.3.2" - }, - "peerDependencies": { - "@nestjs/common": "^6.10.11 || ^7.0.0 || ^8.0.0", - "@nestjs/core": "^7.0.0 || ^8.0.0", - "reflect-metadata": "^0.1.12" - } - }, - "node_modules/@nestjs/schematics": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.8.tgz", - "integrity": "sha512-xIIb5YnMQN/OJQ68+MCapy2bXvTxSWgINoqQbyZWkLL/yTIuROvZCdtV850NPGyr7f7l93VBP0ZPitbFIexy3Q==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.2.5", - "@angular-devkit/schematics": "13.2.5", - "fs-extra": "10.0.1", - "jsonc-parser": "3.0.0", - "pluralize": "8.0.0" - }, - "peerDependencies": { - "typescript": "^3.4.5 || ^4.3.5" + "safe-buffer": "~5.2.0" } }, - "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { - "version": "13.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.2.5.tgz", - "integrity": "sha512-WuWp/1R0FtCHPBcJLF13lTLHETtDGFUX0ULfGPRaYB5OVCSQcovVp5UbZTTy/Ss3ub3EOEmJlU8kMJfBrWuq+A==", - "dev": true, + "node_modules/@nestjs/schedule": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-4.1.2.tgz", + "integrity": "sha512-hCTQ1lNjIA5EHxeu8VvQu2Ed2DBLS1GSC6uKPYlBiQe6LL9a7zfE9iVSK+zuK8E2odsApteEBmfAQchc8Hx0Gg==", + "license": "MIT", "dependencies": { - "ajv": "8.9.0", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "cron": "3.2.1", + "uuid": "11.0.3" }, "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { - "version": "13.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.2.5.tgz", - "integrity": "sha512-kAye6VYiF9JQAoeO+BYhy8eT2QOmhB+WLziRjXoFCBxh5+yXTygTVfs9fD5jmIpHmeu4hd2ErSh69yT5xWcD9g==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "13.2.5", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/@nestjs/schematics/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node_modules/@nestjs/schedule/node_modules/uuid": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" } }, - "node_modules/@nestjs/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/@nestjs/schematics": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.9.0" + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "comment-json": "4.2.5", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" }, - "engines": { - "npm": ">=2.0.0" + "peerDependencies": { + "typescript": ">=4.8.2" } }, - "node_modules/@nestjs/schematics/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nestjs/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "license": "MIT" }, "node_modules/@nestjs/swagger": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-5.2.1.tgz", - "integrity": "sha512-7dNa08WCnTsW/oAk3Ujde+z64JMfNm19DhpXasFR8oJp/9pggYAbYU927HpA+GJsSFJX6adjIRZsCKUqaGWznw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.2.tgz", + "integrity": "sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==", "license": "MIT", "dependencies": { - "@nestjs/mapped-types": "1.0.1", + "@microsoft/tsdoc": "^0.15.0", + "@nestjs/mapped-types": "2.0.5", + "js-yaml": "4.1.0", "lodash": "4.17.21", - "path-to-regexp": "3.2.0" + "path-to-regexp": "3.3.0", + "swagger-ui-dist": "5.17.14" }, "peerDependencies": { - "@nestjs/common": "^8.0.0", - "@nestjs/core": "^8.0.0", - "fastify-swagger": "*", - "reflect-metadata": "^0.1.12", - "swagger-ui-express": "*" + "@fastify/static": "^6.0.0 || ^7.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" }, "peerDependenciesMeta": { - "fastify-swagger": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { "optional": true }, - "swagger-ui-express": { + "class-validator": { "optional": true } } }, "node_modules/@nestjs/testing": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-8.4.7.tgz", - "integrity": "sha512-aedpeJFicTBeiTCvJWUG45WMMS53f5eu8t2fXsfjsU1t+WdDJqYcZyrlCzA4dL1B7MfbqaTURdvuVVHTmJO8ag==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.19.tgz", + "integrity": "sha512-YfzkjTmwEcoWqo8xr8YiTZMC4FjBEOg4uRTAPI2p6iGLWu+27tYau1CtAKFHY0uSAK3FzgtsAuYoxBSlfr9mWA==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "2.4.0" + "tslib": "2.8.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nest" }, "peerDependencies": { - "@nestjs/common": "^8.0.0", - "@nestjs/core": "^8.0.0", - "@nestjs/microservices": "^8.0.0", - "@nestjs/platform-express": "^8.0.0" + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" }, "peerDependenciesMeta": { "@nestjs/microservices": { @@ -2938,17 +3032,11 @@ } } }, - "node_modules/@nestjs/testing/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nestjs/typeorm": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", + "license": "MIT", "dependencies": { "uuid": "9.0.1" }, @@ -2960,16 +3048,17 @@ "typeorm": "^0.3.0" } }, - "node_modules/@nestjs/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@nodelib/fs.scandir": { @@ -2977,6 +3066,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2990,6 +3080,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -2999,6 +3090,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3011,6 +3103,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.0", @@ -3024,47 +3117,73 @@ "npm": ">=5.0.0" } }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@scarf/scarf": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", - "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", - "hasInstallScript": true, - "license": "Apache-2.0" + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@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, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^3.0.0" } }, "node_modules/@smithy/abort-controller": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", - "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3097,15 +3216,15 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz", - "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", + "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" }, "engines": { @@ -3113,17 +3232,18 @@ } }, "node_modules/@smithy/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz", - "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.1.tgz", + "integrity": "sha512-ExRCsHnXFtBPnM7MkfKBPcBBdHw1h/QS/cbNw4ho95qnyNHvnpmGbR39MIAv9KggTr5qSPxRSEL+hRXlyGyGQw==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.0.3", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -3132,15 +3252,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz", - "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", + "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", "tslib": "^2.6.2" }, "engines": { @@ -3148,13 +3268,13 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz", - "integrity": "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz", + "integrity": "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" }, @@ -3163,13 +3283,13 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz", - "integrity": "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz", + "integrity": "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3177,12 +3297,12 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz", - "integrity": "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz", + "integrity": "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3190,13 +3310,13 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz", - "integrity": "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz", + "integrity": "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3204,13 +3324,13 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz", - "integrity": "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz", + "integrity": "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-codec": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3218,14 +3338,14 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", - "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz", + "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, @@ -3234,14 +3354,14 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.2.tgz", - "integrity": "sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", + "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^5.0.0", "@smithy/chunked-blob-reader-native": "^4.0.0", - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3249,12 +3369,12 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", - "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", + "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -3264,12 +3384,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.2.tgz", - "integrity": "sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", + "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -3278,12 +3398,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", - "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", + "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3303,12 +3423,12 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.2.tgz", - "integrity": "sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", + "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -3317,13 +3437,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", - "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", + "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3331,18 +3451,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz", - "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==", + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.16.tgz", + "integrity": "sha512-plpa50PIGLqzMR2ANKAw2yOW5YKS626KYKqae3atwucbz4Ve4uQ9K9BEZxDLIFmCu7hKLcrq2zmj4a+PfmUV5w==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", - "@smithy/util-middleware": "^4.0.2", + "@smithy/core": "^3.7.1", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" }, "engines": { @@ -3350,18 +3470,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz", - "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==", + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.17.tgz", + "integrity": "sha512-gsCimeG6BApj0SBecwa1Be+Z+JOJe46iy3B3m3A8jKJHf7eIihP76Is4LwLrbJ1ygoS7Vg73lfqzejmLOrazUA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/service-error-classification": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.6", + "@smithy/smithy-client": "^4.4.8", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -3369,26 +3489,14 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@smithy/middleware-serde": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", - "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", + "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3396,12 +3504,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", - "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", + "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3409,14 +3517,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", - "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3424,15 +3532,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", - "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz", + "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3440,12 +3548,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", - "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3453,12 +3561,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", - "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3466,12 +3574,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", - "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", + "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, @@ -3480,12 +3588,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", - "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3493,24 +3601,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz", - "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz", + "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0" + "@smithy/types": "^4.3.1" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", - "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3518,16 +3626,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.2.tgz", - "integrity": "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", + "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.4", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -3537,17 +3645,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz", - "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.8.tgz", + "integrity": "sha512-pcW691/lx7V54gE+dDGC26nxz8nrvnvRSCJaIYD6XLPpOInEZeKdV/SpSux+wqeQ4Ine7LJQu8uxMvobTIBK0w==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", - "@smithy/util-stream": "^4.2.0", + "@smithy/core": "^3.7.1", + "@smithy/middleware-endpoint": "^4.1.16", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.3", "tslib": "^2.6.2" }, "engines": { @@ -3555,9 +3663,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -3567,13 +3675,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", - "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3644,14 +3752,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz", - "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==", + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.24.tgz", + "integrity": "sha512-UkQNgaQ+bidw1MgdgPO1z1k95W/v8Ej/5o/T/Is8PiVUYPspl/ZxV6WO/8DrzZQu5ULnmpB9CDdMSRwgRc21AA==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.8", + "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -3660,17 +3768,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz", - "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==", + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.24.tgz", + "integrity": "sha512-phvGi/15Z4MpuQibTLOYIumvLdXb+XIJu8TA55voGgboln85jytA3wiD7CkUE8SNcWqkkb+uptZKPiuFouX/7g==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.1.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.8", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3678,13 +3786,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz", - "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3704,12 +3812,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", - "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", + "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3717,13 +3825,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz", - "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz", + "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/service-error-classification": "^4.0.6", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3731,14 +3839,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", - "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz", + "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/types": "^4.2.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", @@ -3775,13 +3883,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.3.tgz", - "integrity": "sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz", + "integrity": "sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/abort-controller": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -3791,129 +3899,148 @@ "node_modules/@sqltools/formatter": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "devOptional": true + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "devOptional": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "devOptional": true + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "devOptional": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "devOptional": true + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true, + "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, - "node_modules/@types/body-parser/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" - }, "node_modules/@types/cache-manager": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@types/cache-manager/-/cache-manager-3.4.3.tgz", - "integrity": "sha512-71aBXoFYXZW4TnDHHH8gExw2lS28BZaWeKefgsiJI7QYZeJfUEbMKw6CQtzGjlYQcGIWwB76hcCrkVA3YHSvsw==", - "dev": true + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/cache-manager/-/cache-manager-4.0.6.tgz", + "integrity": "sha512-8qL93MF05/xrzFm/LSPtzNEOE1eQF3VwGHAcQEylgp5hDSTe41jtFwbSYAPfyYcVa28y1vYSjIt0c1fLLUiC/Q==", + "dev": true, + "license": "MIT" }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/connect/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" - }, "node_modules/@types/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", - "dev": true + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" }, "node_modules/@types/cron": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/cron/-/cron-1.7.3.tgz", - "integrity": "sha512-iPmUXyIJG1Js+ldPYhOQcYU3kCAQ2FWrSkm1FJPoii2eYSn6wEW6onPukNTT0bfiflexNSRPl6KWmAIqS+36YA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.0.1.tgz", + "integrity": "sha512-WHa/1rtNtD2Q/H0+YTTZoty+/5rcE66iAFX2IY+JuUoOACsevYyFkSYu/2vdw+G5LrmO7Lxowrqm0av4k3qWNQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "moment": ">=2.14.0" + "@types/luxon": "*", + "@types/node": "*" } }, "node_modules/@types/eslint": { @@ -3939,247 +4066,279 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@types/express-serve-static-core/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" - }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/graceful-fs/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, + "license": "MIT", "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/jsonwebtoken": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", - "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/luxon": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", + "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" }, "node_modules/@types/multer": { - "version": "1.4.12", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.12.tgz", - "integrity": "sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.13.tgz", + "integrity": "sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw==", "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/node": { - "version": "16.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", - "dev": true + "version": "20.19.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", + "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "node_modules/@types/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/serve-static/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/superagent": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", - "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/cookiejar": "*", - "@types/node": "*" + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" } }, - "node_modules/@types/superagent/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/@types/supertest": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.11.tgz", - "integrity": "sha512-uci4Esokrw9qGb9bvhhSVEjd6rkny/dk5PK/Qz4yxKiyppEI+dOPlNrZBahE3i+PoKFYyDxChVXZ/ysS/nrm1Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", + "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", "dev": true, + "license": "MIT", "dependencies": { - "@types/superagent": "*" + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" } }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" }, "node_modules/@types/uuid": { "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", + "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz", - "integrity": "sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/type-utils": "5.15.0", - "@typescript-eslint/utils": "5.15.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -4188,25 +4347,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.15.0.tgz", - "integrity": "sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -4215,16 +4376,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", - "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -4232,24 +4394,26 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz", - "integrity": "sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.15.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -4258,12 +4422,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", - "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -4271,21 +4436,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", - "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -4298,53 +4465,62 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", - "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", - "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.15.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -4355,24 +4531,21 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", @@ -4380,7 +4553,6 @@ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -4392,8 +4564,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", @@ -4401,7 +4572,6 @@ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4415,7 +4585,6 @@ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4426,7 +4595,6 @@ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4436,8 +4604,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", @@ -4445,7 +4612,6 @@ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4463,7 +4629,6 @@ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -4478,7 +4643,6 @@ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4492,7 +4656,6 @@ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -4508,7 +4671,6 @@ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -4528,28 +4690,11 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4559,9 +4704,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", "bin": { @@ -4571,46 +4716,18 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "deprecated": "package has been renamed to acorn-import-attributes", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/acorn-jsx": { @@ -4618,40 +4735,34 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "devOptional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "acorn": "^8.11.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=0.4.0" } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -4677,42 +4788,23 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, - "node_modules/ajv/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/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -4724,6 +4816,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4739,6 +4832,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4750,6 +4844,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -4758,6 +4853,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4768,16 +4864,21 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4786,10 +4887,24 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/app-root-path": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "license": "MIT", "engines": { "node": ">= 6.0.0" } @@ -4797,30 +4912,41 @@ "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "license": "Python-2.0" }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4833,19 +4959,22 @@ "license": "MIT" }, "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -4861,6 +4990,7 @@ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -4877,68 +5007,43 @@ "node": ">= 10.0.0" } }, - "node_modules/aws-sdk/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/aws-sdk/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/aws-sdk/node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/aws-sdk/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.8" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -4949,6 +5054,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -4960,55 +5066,88 @@ "node": ">=8" } }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -5017,7 +5156,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -5036,15 +5176,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -5052,17 +5197,44 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5077,6 +5249,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -5084,24 +5257,25 @@ "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -5132,12 +5306,12 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -5153,16 +5327,10 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -5180,10 +5348,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -5197,6 +5365,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -5209,56 +5378,38 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" }, "node_modules/busboy": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==", "dependencies": { "dicer": "0.2.5", "readable-stream": "1.1.x" @@ -5271,24 +5422,31 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cache-manager": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.1.tgz", - "integrity": "sha512-jxJvGYhN5dUgpriAdsDnnYbKse4dEXI5i3XpwTfPq5utPtXH1uYXWyGLHGlbSlh9Vq4ytrgAUVwY+IodNeKigA==", + "version": "5.7.6", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-5.7.6.tgz", + "integrity": "sha512-wBxnBHjDxF1RXpHCBD6HGvKER003Ts7IIm0CHpggliHzN1RZditb7rXoduE1rplc2DEFYKxhLKgFuchXMJje9w==", + "license": "MIT", "dependencies": { - "async": "3.2.3", - "lodash": "^4.17.21", - "lru-cache": "6.0.0" + "eventemitter3": "^5.0.1", + "lodash.clonedeep": "^4.5.0", + "lru-cache": "^10.2.2", + "promise-coalesce": "^1.1.2" + }, + "engines": { + "node": ">= 18" } }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -5306,6 +5464,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -5315,12 +5474,13 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -5334,26 +5494,25 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001714", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz", - "integrity": "sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -5375,6 +5534,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5391,6 +5551,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -5428,39 +5589,53 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" }, "node_modules/class-transformer": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" }, "node_modules/class-validator": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", - "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz", + "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", "license": "MIT", "dependencies": { - "libphonenumber-js": "^1.9.43", - "validator": "^13.7.0" + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.11.1", + "validator": "^13.9.0" } }, "node_modules/cli-cursor": { @@ -5468,6 +5643,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5475,36 +5651,12 @@ "node": ">=8" } }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5513,9 +5665,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5528,17 +5680,6 @@ "@colors/colors": "1.5.0" } }, - "node_modules/cli-table3/node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -5549,21 +5690,43 @@ "node": ">= 10" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "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": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -5571,23 +5734,26 @@ "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" }, "node_modules/color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -5597,6 +5763,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5607,12 +5774,14 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -5622,6 +5791,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -5629,12 +5799,14 @@ "node_modules/color/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -5644,6 +5816,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5656,20 +5829,43 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, "engines": { "node": ">= 6" } }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -5678,6 +5874,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -5685,15 +5882,11 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5707,12 +5900,14 @@ "node_modules/concat-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -5720,12 +5915,14 @@ "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -5743,24 +5940,16 @@ } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5769,7 +5958,8 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" }, "node_modules/cookiejar": { "version": "2.1.4", @@ -5781,12 +5971,14 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -5796,49 +5988,89 @@ } }, "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/cron": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz", - "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cron/-/cron-3.2.1.tgz", + "integrity": "sha512-w2n5l49GMmmkBFEsH9FIDhjZ1n1QgTMOCMGuQtOXs5veNiosZmso6bQGuqOJSYAXXrG84WQFVneNk+Yt0Ua9iw==", "license": "MIT", "dependencies": { - "moment-timezone": "^0.5.x" + "@types/luxon": "~3.4.0", + "luxon": "~3.5.0" } }, "node_modules/cron-parser": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz", - "integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "license": "MIT", "dependencies": { - "is-nan": "^1.3.2", - "luxon": "^1.26.0" + "luxon": "^3.2.1" }, "engines": { - "node": ">=0.8" + "node": ">=12.0.0" } }, + "node_modules/cron/node_modules/@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5853,61 +6085,37 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, "node_modules/csv": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.10.tgz", - "integrity": "sha512-5NYZG4AN2ZUthmNxIudgBEdMPUnbQHu9V4QTzBPqQzUP3KQsFiJo+8HQ0+oVxj1PomIT1/f67VI1QH/hsrZLKA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/csv/-/csv-6.4.1.tgz", + "integrity": "sha512-ajGosmTGnTwYyGl8STqZDu7R6LkDf3xL39XiOmliV/GufQeVUxHzTKIm4NOBCwmEuujK7B6isxs4Uqt9GcRCvA==", "license": "MIT", "dependencies": { - "csv-generate": "^4.4.1", - "csv-parse": "^5.5.6", - "csv-stringify": "^6.5.1", - "stream-transform": "^3.3.2" + "csv-generate": "^4.5.0", + "csv-parse": "^6.1.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "engines": { "node": ">= 0.1.90" } }, "node_modules/csv-generate": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.4.1.tgz", - "integrity": "sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.5.0.tgz", + "integrity": "sha512-aQr/vmOKyBSBHNwYhAoXw1+kUsPnMSwmYgpNoo36rIXoG1ecWILnvPGZeQ6oUjzrWknZAD3+jfpqYOBAl4x15A==", "license": "MIT" }, "node_modules/csv-parse": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz", - "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.1.0.tgz", + "integrity": "sha512-CEE+jwpgLn+MmtCpVcPtiCZpVtB6Z2OKPTr34pycYYoL7sxdOkXDdQ4lRiw6ioC0q6BLqhc6cKweCVvral8yhw==", "license": "MIT" }, "node_modules/csv-stringify": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.1.tgz", - "integrity": "sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.6.0.tgz", + "integrity": "sha512-YW32lKOmIBgbxtu3g5SaiqWNwa/9ISQt2EcgOq0+RAIFufFp9is6tqNnKahqE5kuKvrnYAzs28r+s6pXJR8Vcw==", "license": "MIT" }, "node_modules/csvtojson": { @@ -5927,49 +6135,26 @@ "node": ">=4.0.0" } }, - "node_modules/csvtojson/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/date-fns": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5983,46 +6168,55 @@ } } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6035,25 +6229,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -6082,6 +6262,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6114,17 +6295,19 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "devOptional": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { @@ -6132,6 +6315,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6144,6 +6328,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6151,32 +6336,10 @@ "node": ">=6.0.0" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -6198,6 +6361,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -6210,12 +6374,14 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } @@ -6223,22 +6389,40 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/electron-to-chromium": { - "version": "1.5.138", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.138.tgz", - "integrity": "sha512-FWlQc52z1dXqm+9cCJ2uyFgJkESd+16j6dBEjsgDNuHjBpuIzL8/lRc0uvh1k8RNI6waGo6tcy2DvwkTBJOLDg==", + "version": "1.5.187", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.187.tgz", + "integrity": "sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==", "dev": true, "license": "ISC" }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -6247,36 +6431,28 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6292,6 +6468,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -6300,6 +6477,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -6308,22 +6486,23 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -6331,6 +6510,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -6341,83 +6535,70 @@ } }, "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "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, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, + "license": "MIT", "engines": { - "node": ">=6.0" + "node": ">=10" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.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", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -6430,10 +6611,11 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -6442,107 +6624,92 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", "dev": true, + "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" }, "engines": { - "node": ">=6.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "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, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "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, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint/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, - "engines": { - "node": ">=10" + "license": "MIT", + "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": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/glob-parent": { @@ -6550,6 +6717,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6557,18 +6725,42 @@ "node": ">=10.13.0" } }, + "node_modules/eslint/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, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -6576,6 +6768,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6585,10 +6778,11 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6601,6 +6795,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6613,6 +6808,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6622,6 +6818,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -6635,20 +6832,19 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { + "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" }, "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=0.4.x" } }, "node_modules/execa": { @@ -6656,6 +6852,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6674,62 +6871,71 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -6738,12 +6944,17 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6751,12 +6962,13 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/external-editor": { @@ -6778,25 +6990,28 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -6806,72 +7021,56 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" }, "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } ], "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -6879,7 +7078,14 @@ "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", @@ -6897,11 +7103,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/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, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6909,6 +7126,47 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-type": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.4.1.tgz", + "integrity": "sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.2.6", + "strtok3": "^10.2.0", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -6923,13 +7181,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6956,25 +7214,31 @@ "license": "MIT" }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -6982,15 +7246,17 @@ } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" }, "node_modules/follow-redirects": { "version": "1.15.9", @@ -7016,35 +7282,26 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child/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==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, "engines": { "node": ">=14" }, @@ -7053,20 +7310,21 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "7.2.11", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.11.tgz", - "integrity": "sha512-2e5+NyTUTE1Xq4fWo7KFEQblCaIvvINQwUX3jRmEGlgCTc1Ecqw/975EfQrQ0GEraxJTnp8KB9d/c8hlCHUMJA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.7", "chalk": "^4.1.2", "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", + "cosmiconfig": "^8.2.0", "deepmerge": "^4.2.2", "fs-extra": "^10.0.0", "memfs": "^3.4.1", "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", "schema-utils": "^3.1.1", "semver": "^7.3.5", "tapable": "^2.2.1" @@ -7077,22 +7335,43 @@ }, "peerDependencies": { "typescript": ">3.6.0", - "vue-template-compiler": "*", "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "peerDependenciesMeta": { - "vue-template-compiler": { - "optional": true - } + "engines": { + "node": "*" } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -7100,14 +7379,14 @@ } }, "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz", + "integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==", "dev": true, "license": "MIT", "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", "once": "^1.4.0", "qs": "^6.11.0" }, @@ -7115,26 +7394,11 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/formidable/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7149,10 +7413,11 @@ } }, "node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -7163,16 +7428,17 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", "dev": true, "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -7193,21 +7459,17 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -7216,6 +7478,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -7224,6 +7487,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -7248,6 +7512,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -7256,6 +7521,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -7269,6 +7535,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7277,19 +7544,20 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7300,6 +7568,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7314,11 +7583,27 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7334,6 +7619,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7353,6 +7639,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7367,10 +7654,18 @@ "dev": true, "license": "ISC" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", + "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "license": "MIT", "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -7380,6 +7675,7 @@ "version": "2.12.6", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" }, @@ -7390,22 +7686,21 @@ "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7414,6 +7709,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -7425,6 +7721,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7436,6 +7733,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7450,6 +7748,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7457,40 +7756,12 @@ "node": ">= 0.4" } }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", @@ -7508,38 +7779,12 @@ "node": ">= 0.8" } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -7548,6 +7793,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7556,38 +7802,27 @@ } }, "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7599,20 +7834,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -7630,8 +7857,9 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -7639,12 +7867,15 @@ "node_modules/in-memory-faceted-search": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/in-memory-faceted-search/-/in-memory-faceted-search-1.0.1.tgz", - "integrity": "sha512-01/euii6wxK0y2SZKv6diGU9+o0GbsLqscNmd+idBKgAIGVlQH/uEwzv92PId0WuEiqbSUMmjxReQrTk4wDyKA==" + "integrity": "sha512-01/euii6wxK0y2SZKv6diGU9+o0GbsLqscNmd+idBKgAIGVlQH/uEwzv92PId0WuEiqbSUMmjxReQrTk4wDyKA==", + "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7653,67 +7884,41 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "mute-stream": "0.0.8", + "ora": "^5.4.1", "run-async": "^2.4.0", - "rxjs": "^6.6.0", + "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/inquirer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" + "node": ">=12.0.0" } }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -7722,6 +7927,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -7736,14 +7942,16 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7755,6 +7963,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7763,12 +7972,16 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7777,8 +7990,9 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7787,6 +8001,7 @@ "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==", + "license": "MIT", "engines": { "node": ">=8" } @@ -7796,6 +8011,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7804,6 +8020,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", @@ -7822,6 +8039,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7834,25 +8052,11 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7863,16 +8067,21 @@ "node": ">=0.12.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -7890,6 +8099,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -7901,6 +8111,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -7911,17 +8122,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7932,65 +8138,61 @@ "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "license": "MIT" }, "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/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, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=10" } }, "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, + "license": "BSD-3-Clause", "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-lib-source-maps": { @@ -7998,6 +8200,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -8007,11 +8210,22 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -8024,20 +8238,19 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "license": "ISC", "engines": { "node": ">=6" } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -8045,21 +8258,66 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -8071,79 +8329,76 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -8155,285 +8410,269 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "detect-newline": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "*" } }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-node/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-haste-map/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -8447,188 +8686,234 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jest-runner/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "*" } }, - "node_modules/jest-serializer/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -8636,81 +8921,95 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8725,6 +9024,7 @@ "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", "engines": { "node": ">= 0.6.0" } @@ -8740,7 +9040,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8748,66 +9048,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -8821,23 +9061,33 @@ "node": ">=6" } }, + "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, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -8853,16 +9103,18 @@ } }, "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -8893,11 +9145,12 @@ } }, "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } @@ -8906,6 +9159,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -8914,13 +9168,34 @@ "node_modules/jwt-decode": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "license": "MIT" + }, + "node_modules/kafkajs": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz", + "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8928,13 +9203,15 @@ "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8944,6 +9221,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8952,117 +9230,119 @@ "node": ">= 0.8.0" } }, - "node_modules/levn/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/levn/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/libphonenumber-js": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.7.tgz", - "integrity": "sha512-0nYZSNj/QEikyhcM5RZFXGlCB/mr4PVamnT1C2sKBnDDTYndrvbybYjvg+PMqAndQHlLbwQ3socolnL3WWTUFA==", + "version": "1.12.10", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.10.tgz", + "integrity": "sha512-E91vHJD61jekHHR/RF/E83T/CMoaLXT7cwYA75T4gim4FZjnM6hbJjVIGg7chqlSqRsSvQ3izGmOjHy1SQzcGQ==", "license": "MIT" }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -9075,9 +9355,10 @@ } }, "node_modules/logform": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", - "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -9090,89 +9371,78 @@ "node": ">= 12.0.0" } }, + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/long-timeout": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", - "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==" + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "license": "MIT" }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/luxon": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz", - "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true, + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dev": true, + "license": "MIT", "dependencies": { - "sourcemap-codec": "^1.4.4" + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" } }, "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, + "license": "MIT", "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.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "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", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -9181,6 +9451,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9188,7 +9459,8 @@ "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9207,21 +9479,27 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -9229,7 +9507,8 @@ "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9248,22 +9527,36 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=4" } }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9272,6 +9565,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -9284,19 +9578,25 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -9318,11 +9618,12 @@ } }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -9332,18 +9633,7 @@ "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.48", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", - "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", "license": "MIT", - "dependencies": { - "moment": "^2.29.4" - }, "engines": { "node": "*" } @@ -9359,6 +9649,7 @@ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "deprecated": "Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.", + "license": "MIT", "dependencies": { "append-field": "^1.0.0", "busboy": "^0.2.11", @@ -9380,26 +9671,18 @@ "dev": true, "license": "ISC" }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9408,29 +9691,52 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true, + "license": "MIT" }, "node_modules/node-cron": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.1.tgz", - "integrity": "sha512-RAWZTNn2M5KDIUV/389UX0EXsqvdFAwc9QwHQceh0Ga56dygqSRthqIjwpgZsoDspHGt2rkHdk9Z4RgfPMdALw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "license": "ISC", + "dependencies": { + "uuid": "8.3.2" + }, "engines": { "node": ">=6.0.0" } }, + "node_modules/node-cron/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9446,30 +9752,12 @@ } } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.19", @@ -9479,11 +9767,12 @@ "license": "MIT" }, "node_modules/node-schedule": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.0.tgz", - "integrity": "sha512-nl4JTiZ7ZQDc97MmpTq9BQjYhq7gOtoh7SiPH069gBFBj0PzD8HI7zyFs6rzqL8Y5tTiEEYLxgtbx034YPrbyQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "license": "MIT", "dependencies": { - "cron-parser": "^3.5.0", + "cron-parser": "^4.2.0", "long-timeout": "0.1.1", "sorted-array-functions": "^1.3.0" }, @@ -9496,6 +9785,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9505,6 +9795,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -9512,27 +9803,13 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, "node_modules/object-inspect": { @@ -9547,18 +9824,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object-resolve-path": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-resolve-path/-/object-resolve-path-1.1.1.tgz", - "integrity": "sha1-p/j5Poogr4DkQhe6fbVDFtnRIjI=" + "integrity": "sha512-SnDr0lPbDWDB8s6qbWAcDs2dZ4G7niCJpxihaf5g6wluZQd3yHtN4ApwoKz7pLdMnRlGrdXslO57MulC+h3Neg==", + "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", @@ -9575,7 +9845,8 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -9584,6 +9855,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", "dependencies": { "fn.name": "1.x.x" } @@ -9593,6 +9865,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -9604,38 +9877,18 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -9646,6 +9899,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -9664,23 +9918,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -9692,30 +9929,35 @@ } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -9723,20 +9965,23 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9749,6 +9994,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -9762,19 +10008,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -9788,6 +10021,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", + "license": "MIT", "dependencies": { "passport-strategy": "1.x.x", "pause": "0.0.1", @@ -9805,6 +10039,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "license": "MIT", "dependencies": { "jsonwebtoken": "^9.0.0", "passport-strategy": "^1.0.0" @@ -9823,6 +10058,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9830,7 +10066,8 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9839,6 +10076,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -9847,7 +10085,8 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", @@ -9865,18 +10104,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "license": "MIT" }, "node_modules/path-type": { @@ -9884,6 +10115,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9894,23 +10126,22 @@ "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" }, "node_modules/pg": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", - "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "license": "MIT", "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.6.2", - "pg-pool": "^3.6.1", - "pg-protocol": "^1.6.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.1.1" + "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -9922,41 +10153,47 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", - "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" }, "node_modules/pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -9972,6 +10209,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", "dependencies": { "split2": "^4.1.0" } @@ -9984,22 +10222,24 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -10009,6 +10249,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -10016,11 +10257,68 @@ "node": ">=8" } }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -10029,6 +10327,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10037,6 +10336,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -10045,6 +10345,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10053,6 +10354,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10061,6 +10363,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -10068,16 +10371,30 @@ "node": ">=0.10.0" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, + "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -10085,6 +10402,7 @@ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -10093,17 +10411,18 @@ } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -10111,6 +10430,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10118,24 +10438,27 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise-coalesce": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/promise-coalesce/-/promise-coalesce-1.1.2.tgz", + "integrity": "sha512-zLaJ9b8hnC564fnJH6NFSOGZYYdzrAJn2JUUIwzoQb32fG2QAakpDNM+CZo1km6keXkRXRM+hml1BFAPVnPkxg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=16" + } }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -10148,6 +10471,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -10156,39 +10480,46 @@ "node": ">= 0.10" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -10206,13 +10537,6 @@ "node": ">=0.4.x" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10231,7 +10555,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", @@ -10253,9 +10578,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -10268,15 +10593,17 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -10284,11 +10611,18 @@ "string_decoder": "~0.10.x" } }, + "node_modules/readable-stream/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==", + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10296,39 +10630,40 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, + "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "license": "Apache-2.0" }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.10" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10338,30 +10673,28 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10371,6 +10704,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -10378,20 +10712,32 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -10401,6 +10747,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -10409,11 +10756,19 @@ "node": ">=8" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10423,6 +10778,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -10433,6 +10790,49 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -10462,14 +10862,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -10492,12 +10893,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -10514,6 +10917,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", "engines": { "node": ">=10" } @@ -10521,24 +10925,14 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "license": "ISC" }, "node_modules/schema-utils": { "version": "3.3.0", @@ -10559,13 +10953,45 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/schema-utils/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, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "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/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/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, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10574,9 +11000,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -10612,16 +11038,13 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", - "bin": { - "mime": "cli.js" - }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, "node_modules/serialize-javascript": { @@ -10635,15 +11058,15 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -10653,6 +11076,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10672,21 +11096,30 @@ "license": "ISC" }, "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10698,28 +11131,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -10793,15 +11209,22 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -10809,19 +11232,22 @@ "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10829,15 +11255,17 @@ "node_modules/sorted-array-functions": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", - "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==" + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", + "license": "MIT" }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/source-map-support": { @@ -10845,45 +11273,69 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sql-highlight": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sql-highlight/-/sql-highlight-6.1.0.tgz", + "integrity": "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==", + "funding": [ + "https://github.com/scriptcoded/sql-highlight?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/scriptcoded" + } + ], + "license": "MIT", "engines": { - "node": ">= 10.x" + "node": ">=14" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -10896,6 +11348,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10910,15 +11363,15 @@ } }, "node_modules/stream-transform": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.2.tgz", - "integrity": "sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.4.0.tgz", + "integrity": "sha512-QO3OGhKyeIV8p6eRQdG+W6WounFw519zk690hHCNfhgfP9bylVS+NTXsuBc7n+RsGn31UgFPGrWYIgoAbArKEw==", "license": "MIT" }, "node_modules/streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", "engines": { "node": ">=0.8.0" } @@ -10926,13 +11379,15 @@ "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -10945,6 +11400,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10959,16 +11415,21 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10981,17 +11442,24 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, "node_modules/strip-final-newline": { @@ -10999,6 +11467,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -11008,6 +11477,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11016,9 +11486,9 @@ } }, "node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", "funding": [ { "type": "github", @@ -11027,68 +11497,78 @@ ], "license": "MIT" }, + "node_modules/strtok3": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.2.tgz", + "integrity": "sha512-or9w505RhhY66+uoe5YOC5QO/bRuATaoim3XTh+pGKx5VMWi/HDhMKuCjDLsLJouU2zg9Hf1nLPcNW7IHv80kQ==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/superagent": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz", - "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", "dev": true, + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", - "cookiejar": "^2.1.3", - "debug": "^4.3.3", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^2.0.1", + "formidable": "^2.1.2", "methods": "^1.1.2", - "mime": "^2.5.0", - "qs": "^6.10.1", - "readable-stream": "^3.6.0", - "semver": "^7.3.5" + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" }, "engines": { "node": ">=6.4.0 <13 || >=14" } }, - "node_modules/superagent/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "license": "MIT", + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/superagent/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "node": ">=4.0.0" } }, "node_modules/supertest": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.2.tgz", - "integrity": "sha512-wCw9WhAtKJsBvh07RaS+/By91NNE0Wh0DN19/hWPlBOU8tAfOtbZoVSV4xXeoKoxgPx0rx2y+y+8660XtE7jzg==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net", "dev": true, + "license": "MIT", "dependencies": { "methods": "^1.1.2", - "superagent": "^7.1.0" + "superagent": "^8.1.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.4.0" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11096,24 +11576,12 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11122,26 +11590,24 @@ } }, "node_modules/swagger-ui-dist": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.21.0.tgz", - "integrity": "sha512-E0K3AB6HvQd8yQNSMR7eE5bk+323AUxjtCz/4ZNKiahOlPhPJxqn3UPIGs00cyY/dhrTDJ61L7C/a8u6zhGrZg==", - "license": "Apache-2.0", - "dependencies": { - "@scarf/scarf": "=1.4.0" - } + "version": "5.17.14", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", + "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==", + "license": "Apache-2.0" }, "node_modules/swagger-ui-express": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.3.0.tgz", - "integrity": "sha512-jN46SEEe9EoXa3ZgZoKgnSF6z0w3tnM1yqhO4Y+Q4iZVc8JOQB960EZpIAz6rNROrDApVDwcMHR0mhlnc/5Omw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", + "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", + "license": "MIT", "dependencies": { - "swagger-ui-dist": ">=4.1.3" + "swagger-ui-dist": ">=5.0.0" }, "engines": { "node": ">= v0.10.32" }, "peerDependencies": { - "express": ">=4.0.0" + "express": ">=4.0.0 || >=5.0.0-beta" } }, "node_modules/symbol-observable": { @@ -11154,17 +11620,28 @@ "node": ">=0.10" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -11172,36 +11649,21 @@ "node_modules/templates.js": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/templates.js/-/templates.js-0.3.11.tgz", - "integrity": "sha1-qAtXgaoySmHpK+GmlHDVATQd6QQ=", + "integrity": "sha512-hyKDzcU/wAnihrrzeaqzAKufNJPcguHH9KIDcamXccbgSmHb0ydgfK0/1gjcQGdxQ/FGK50+o05EYsa7i4aWsA==", + "license": "MIT", "engines": { "node": ">=0.6" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -11247,40 +11709,25 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">= 10.13.0" } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11297,6 +11744,22 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -11309,6 +11772,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11318,41 +11782,64 @@ "node": ">=8" } }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "any-promise": "^1.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", "dependencies": { - "thenify": ">= 3.1.0 < 4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.8" + "node": "*" } }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", @@ -11378,7 +11865,28 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -11402,49 +11910,55 @@ "node": ">=0.6" } }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/token-types": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.3.tgz", + "integrity": "sha512-IKJ6EzuPPWtKtEIEPpIdXv9j5j2LGJEYk0CKY2efgKoYKLBiZdh6iQkLVBow/CB3phyWAWCyk+bZeaimJn6uRQ==", + "license": "MIT", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" }, "engines": { - "node": ">=6" + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } + "node_modules/token-types/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -11453,44 +11967,64 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", "engines": { "node": ">= 14.0.0" } }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.2", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "esbuild": "~0.14.0", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, - "@types/jest": { + "@jest/transform": { + "optional": true + }, + "@jest/types": { "optional": true }, "babel-jest": { @@ -11498,19 +12032,37 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-loader": { - "version": "9.2.8", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.8.tgz", - "integrity": "sha512-gxSak7IHUuRtwKf3FIPSW1VpZcqF9+MBrHOvBp9cjHh+525SjtCIJKVGjRKIAfxBwDGDGCFF00rTfzB1quxdSw==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", - "semver": "^7.3.4" + "semver": "^7.3.4", + "source-map": "^0.7.4" }, "engines": { "node": ">=12.0.0" @@ -11521,12 +12073,13 @@ } }, "node_modules/ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "devOptional": true, + "license": "MIT", "dependencies": { - "@cspotcode/source-map-support": "0.7.0", + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -11537,7 +12090,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "bin": { @@ -11564,41 +12117,44 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/tsconfig-paths-webpack-plugin": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", - "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", + "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^3.9.0" + "tapable": "^2.2.1", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=4" } }, "node_modules/tslib": { @@ -11607,32 +12163,25 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.8.1" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">= 0.8.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11642,6 +12191,7 @@ "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, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -11653,6 +12203,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -11661,40 +12212,46 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" }, "node_modules/typeorm": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", - "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.25.tgz", + "integrity": "sha512-fTKDFzWXKwAaBdEMU4k661seZewbNYET4r1J/z3Jwf+eAvlzMVpTLKAVcAzg75WwQk7GDmtsmkZ5MfkmXCiFWg==", + "license": "MIT", "dependencies": { "@sqltools/formatter": "^1.2.5", + "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", - "chalk": "^4.1.2", - "cli-highlight": "^2.1.11", - "dayjs": "^1.11.9", - "debug": "^4.3.4", - "dotenv": "^16.0.3", - "glob": "^10.3.10", - "mkdirp": "^2.1.3", - "reflect-metadata": "^0.2.1", + "dayjs": "^1.11.13", + "debug": "^4.4.0", + "dedent": "^1.6.0", + "dotenv": "^16.4.7", + "glob": "^10.4.5", "sha.js": "^2.4.11", - "tslib": "^2.5.0", - "uuid": "^9.0.0", - "yargs": "^17.6.2" + "sql-highlight": "^6.0.0", + "tslib": "^2.8.1", + "uuid": "^11.1.0", + "yargs": "^17.7.2" }, "bin": { "typeorm": "cli.js", @@ -11708,23 +12265,24 @@ "url": "https://opencollective.com/typeorm" }, "peerDependencies": { - "@google-cloud/spanner": "^5.18.0", + "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", + "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", - "mongodb": "^5.8.0", - "mssql": "^9.1.1 || ^10.0.1", + "mongodb": "^5.8.0 || ^6.0.0", + "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", + "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0" + "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { @@ -11780,14 +12338,6 @@ } } }, - "node_modules/typeorm/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/typeorm/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -11806,119 +12356,49 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, - "node_modules/typeorm/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/typeorm/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/reflect-metadata": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", - "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" + "node_modules/typeorm/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, "node_modules/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/typeorm/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/typeorm/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -11926,14 +12406,45 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -11941,7 +12452,8 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11982,6 +12494,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -11990,31 +12503,23 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "license": "MIT", "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "license": "MIT" }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -12026,64 +12531,57 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "devOptional": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/validator": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz", - "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==", + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -12091,32 +12589,11 @@ }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, "node_modules/walker": { @@ -12124,14 +12601,15 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -12145,38 +12623,38 @@ "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "version": "5.100.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", + "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -12186,11 +12664,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -12213,52 +12691,94 @@ "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "iconv-lite": "0.4.24" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "node_modules/webpack/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -12270,14 +12790,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, @@ -12288,156 +12810,79 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, "node_modules/winston": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.16.0.tgz", - "integrity": "sha512-xz7+cyGN5M+4CmmD4Npq1/4T+UZaz7HaeTlAruFUTjk79CNMq+P6H30vlE4z0qfqJ01VHYQwd7OZo03nYm/+lg==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.6.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" + "winston-transport": "^4.9.0" }, "engines": { "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.8.0.tgz", - "integrity": "sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", "dependencies": { - "logform": "^2.6.1", - "readable-stream": "^4.5.2", + "logform": "^2.7.0", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, "engines": { "node": ">= 12.0.0" } }, - "node_modules/winston-transport/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/winston-transport/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" } }, "node_modules/winston-transport/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/winston/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12451,6 +12896,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -12466,19 +12912,18 @@ } }, "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, + "license": "MIT", "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": ">=8" } }, "node_modules/wrap-ansi-cjs": { @@ -12486,61 +12931,51 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" }, "node_modules/xml2js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -12553,20 +12988,16 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { "node": ">=4.0" } }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -12575,48 +13006,43 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } + "license": "ISC" }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yn": { @@ -12624,9 +13050,23 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 3a49ac9e..933737a4 100644 --- a/package.json +++ b/package.json @@ -23,22 +23,23 @@ "dependencies": { "@aws-sdk/client-s3": "^3.688.0", "@aws-sdk/s3-presigned-post": "^3.787.0", - "@nestjs/axios": "^0.0.7", - "@nestjs/common": "^8.4.2", - "@nestjs/config": "^2.3.4", - "@nestjs/core": "^8.0.0", - "@nestjs/jwt": "^8.0.1", + "@nestjs/axios": "^3.0.1", + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "^10.0.0", + "@nestjs/jwt": "^10.2.0", "@nestjs/passport": "^10.0.3", - "@nestjs/platform-express": "^8.4.7", - "@nestjs/schedule": "^1.1.0", - "@nestjs/swagger": "^5.2.1", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/schedule": "^4.0.0", + "@nestjs/swagger": "^7.1.0", "@nestjs/typeorm": "^10.0.2", + "@nestjs/cache-manager": "^2.1.1", "@types/multer": "^1.4.12", "aws-sdk": "^2.1692.0", - "axios": "^0.26.1", - "cache-manager": "^3.6.1", + "axios": "^1.6.7", + "cache-manager": "^5.4.0", "class-transformer": "^0.5.1", - "class-validator": "^0.13.2", + "class-validator": "^0.14.1", "csv": "^6.3.10", "csvtojson": "^2.0.10", "date-fns": "^3.6.0", @@ -58,39 +59,38 @@ "pg": "^8.11.3", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0", - "swagger-ui-express": "^4.3.0", + "rxjs": "^7.8.1", + "swagger-ui-express": "^5.0.0", "templates.js": "^0.3.11", "typeorm": "^0.3.20", "winston": "^3.11.0", "kafkajs": "^2.2.4" - }, "devDependencies": { - "@nestjs/cli": "^8.0.0", - "@nestjs/schematics": "^8.0.0", - "@nestjs/testing": "^8.0.0", - "@types/cache-manager": "^3.4.3", - "@types/cron": "^1.7.3", + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/cache-manager": "^4.0.6", + "@types/cron": "^2.0.0", "@types/express": "^4.17.13", - "@types/jest": "27.4.1", - "@types/node": "^16.0.0", - "@types/supertest": "^2.0.11", + "@types/jest": "29.5.12", + "@types/node": "^20.0.0", + "@types/supertest": "^6.0.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.0.1", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.2.5", - "prettier": "^2.3.2", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.7.0", + "prettier": "^3.0.0", "source-map-support": "^0.5.20", "supertest": "^6.1.3", - "ts-jest": "^27.0.3", + "ts-jest": "^29.1.2", "ts-loader": "^9.2.3", "ts-node": "^10.0.0", - "tsconfig-paths": "^3.10.1", - "typescript": "^4.3.5" + "tsconfig-paths": "^4.2.0", + "typescript": "^5.0.0" }, "jest": { "moduleFileExtensions": [ diff --git a/src/academicyears/academicyears.controller.ts b/src/academicyears/academicyears.controller.ts index 3aae26ce..638c762e 100644 --- a/src/academicyears/academicyears.controller.ts +++ b/src/academicyears/academicyears.controller.ts @@ -49,7 +49,7 @@ export class AcademicyearsController { async createAcademicYears( @Body() academicyearsService: AcademicYearDto, @Res() response: Response, - @Headers() headers + @Headers() headers, ) { const tenantId = headers["tenantid"]; if (!tenantId || !isUUID(tenantId)) { @@ -71,7 +71,7 @@ export class AcademicyearsController { async getAcademicYearList( @Body() academicYearSearchDto: AcademicYearSearchDto, @Res() response: Response, - @Headers() headers + @Headers() headers, ) { const tenantId = headers["tenantid"]; if (!tenantId || !isUUID(tenantId)) { @@ -95,7 +95,7 @@ export class AcademicyearsController { }) async getAcademicYearById( @Param("id", new ParseUUIDPipe()) id: string, - @Res() response: Response + @Res() response: Response, ) { const result = await this.academicYearAdapter .buildAcademicYears() diff --git a/src/academicyears/academicyears.module.ts b/src/academicyears/academicyears.module.ts index 1856b889..88ec2b35 100644 --- a/src/academicyears/academicyears.module.ts +++ b/src/academicyears/academicyears.module.ts @@ -11,4 +11,4 @@ import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; providers: [AcademicYearAdapter, PostgresAcademicYearService], controllers: [AcademicyearsController], }) -export class AcademicyearsModule { } +export class AcademicyearsModule {} diff --git a/src/academicyears/academicyearsadaptor.ts b/src/academicyears/academicyearsadaptor.ts index 582e3152..bd381760 100644 --- a/src/academicyears/academicyearsadaptor.ts +++ b/src/academicyears/academicyearsadaptor.ts @@ -5,7 +5,7 @@ import { PostgresAcademicYearService } from "src/adapters/postgres/academicyears @Injectable() export class AcademicYearAdapter { constructor( - private readonly postgresProviders: PostgresAcademicYearService + private readonly postgresProviders: PostgresAcademicYearService, ) {} buildAcademicYears(): IServicelocatorAcademicyear { let adapter: IServicelocatorAcademicyear; diff --git a/src/academicyears/dto/academicyears-create.dto.ts b/src/academicyears/dto/academicyears-create.dto.ts index 97fccf2a..76675269 100644 --- a/src/academicyears/dto/academicyears-create.dto.ts +++ b/src/academicyears/dto/academicyears-create.dto.ts @@ -6,14 +6,14 @@ export class AcademicYearDto { @IsNotEmpty() @IsDateString( {}, - { message: "startDate must be in ISO 8601 format (e.g., YYYY-MM-DD)" } + { message: "startDate must be in ISO 8601 format (e.g., YYYY-MM-DD)" }, ) startDate: string; @ApiProperty({ description: "endDate", example: "YYYY-MM-DD" }) @IsDateString( {}, - { message: "endDate must be in ISO 8601 format (e.g., YYYY-MM-DD)" } + { message: "endDate must be in ISO 8601 format (e.g., YYYY-MM-DD)" }, ) endDate: string; diff --git a/src/adapters/academicyearsservicelocater.ts b/src/adapters/academicyearsservicelocater.ts index 8edc5095..9425bf1b 100644 --- a/src/adapters/academicyearsservicelocater.ts +++ b/src/adapters/academicyearsservicelocater.ts @@ -6,13 +6,13 @@ export interface IServicelocatorAcademicyear { createAcademicYear( academicYearDto: AcademicYearDto, tenantId, - response: Response + response: Response, ): Promise; getActiveAcademicYear(academicYearId: string, tenantId: string); getAcademicYearList( academicYearSearchDto: AcademicYearSearchDto, tenantId, - response: Response + response: Response, ); getAcademicYearById(id, response: Response); } diff --git a/src/adapters/assignprivilegelocater.ts b/src/adapters/assignprivilegelocater.ts index cf3256f9..6e53c17f 100644 --- a/src/adapters/assignprivilegelocater.ts +++ b/src/adapters/assignprivilegelocater.ts @@ -5,7 +5,7 @@ export interface IServicelocatorprivilegeRole { createPrivilegeRole( request: any, createPrivilegeRole: CreatePrivilegeRoleDto, - response: Response + response: Response, ); getPrivilegeRole(userId, request, response: Response); } diff --git a/src/adapters/assignroleservicelocater.ts b/src/adapters/assignroleservicelocater.ts index df639b69..18f40dfa 100644 --- a/src/adapters/assignroleservicelocater.ts +++ b/src/adapters/assignroleservicelocater.ts @@ -4,7 +4,7 @@ export interface IServicelocatorassignRole { createAssignRole( request: any, createAssignRoleDto: CreateAssignRoleDto, - response: Response + response: Response, ); getAssignedRole(userId, request, response: Response); deleteAssignedRole(deleteAssignRoleDto, response: Response); diff --git a/src/adapters/cohortMembersservicelocator.ts b/src/adapters/cohortMembersservicelocator.ts index f442b7cb..a15407fb 100644 --- a/src/adapters/cohortMembersservicelocator.ts +++ b/src/adapters/cohortMembersservicelocator.ts @@ -9,27 +9,27 @@ export interface IServicelocatorcohortMembers { response: any, tenantId: string, deviceId: string, - academicyearid: string + academicyearid: string, ); getCohortMembers( cohortMemberId: string, tenantId: string, fieldvalue: string, academicyearId: string, - response: Response + response: Response, ); searchCohortMembers( cohortMembersSearchDto: CohortMembersSearchDto, tenantId: string, academicyearId: string, - response: Response + response: Response, ); updateCohortMembers( cohortMembershipId: string, loginUser: any, cohortMemberUpdateDto: CohortMembersUpdateDto, - response: any + response: any, ); deleteCohortMemberById(tenantid, cohortMembershipId, response); createBulkCohortMembers( @@ -37,6 +37,6 @@ export interface IServicelocatorcohortMembers { cohortMembersDto, response, tenantId, - academicyearId: string + academicyearId: string, ); } diff --git a/src/adapters/cohortacademicyearservicelocator.ts b/src/adapters/cohortacademicyearservicelocator.ts index 2256cca1..3917770a 100644 --- a/src/adapters/cohortacademicyearservicelocator.ts +++ b/src/adapters/cohortacademicyearservicelocator.ts @@ -2,10 +2,10 @@ import { CohortAcademicYearDto } from "src/cohortAcademicYear/dto/cohort-academi import { Request, Response } from "express"; export interface IServiceLocatorCohortAcademicYear { - createCohortAcademicYear( - tenantId: string, - request: Request, - cohortAcademicYearDto: CohortAcademicYearDto, - response: Response - ); -} \ No newline at end of file + createCohortAcademicYear( + tenantId: string, + request: Request, + cohortAcademicYearDto: CohortAcademicYearDto, + response: Response, + ); +} diff --git a/src/adapters/cohortservicelocator.ts b/src/adapters/cohortservicelocator.ts index 6cfebea1..7795e9fd 100644 --- a/src/adapters/cohortservicelocator.ts +++ b/src/adapters/cohortservicelocator.ts @@ -9,7 +9,7 @@ export interface IServicelocatorcohort { tenantid: string, academicYearId: string, cohortSearchDto: CohortSearchDto, - response + response, ); updateCohort(cohortId: string, cohortUpdateDto: CohortUpdateDto, response); updateCohortStatus(cohortId: string, response, userId: string); diff --git a/src/adapters/fieldsservicelocator.ts b/src/adapters/fieldsservicelocator.ts index 88f2e7fc..651e8ccc 100644 --- a/src/adapters/fieldsservicelocator.ts +++ b/src/adapters/fieldsservicelocator.ts @@ -17,32 +17,32 @@ export interface IServicelocatorfields { fieldId: any, request: any, fieldsUpdateDto: FieldsUpdateDto, - response: Response + response: Response, ); // getFields(tenantId, fieldsId, request); searchFields( tenantid, request: any, fieldsSearchDto: FieldsSearchDto, - response: Response + response: Response, ); // updateFields(fieldsId: string, request: any, fieldsDto: FieldsDto); //field values createFieldValues( request: any, fieldValuesDto: FieldValuesDto, - response: Response + response: Response, ); // getFieldValues(id, request); searchFieldValues( request: any, fieldValuesSearchDto: FieldValuesSearchDto, - response: Response + response: Response, ); updateFieldValues(id: string, request: any, fieldValuesDto: FieldValuesDto); getFieldOptions( fieldsOptionsSearchDto: FieldsOptionsSearchDto, - response: Response + response: Response, ); deleteFieldOptions(requiredData, response); getFormCustomField(requiredData, response); diff --git a/src/adapters/postgres/academicyears-adapter.ts b/src/adapters/postgres/academicyears-adapter.ts index 6041ee5e..15cfc983 100644 --- a/src/adapters/postgres/academicyears-adapter.ts +++ b/src/adapters/postgres/academicyears-adapter.ts @@ -13,43 +13,46 @@ import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; @Injectable() export class PostgresAcademicYearService - implements IServicelocatorAcademicyear { + implements IServicelocatorAcademicyear +{ constructor( @InjectRepository(AcademicYear) private readonly academicYearRespository: Repository, @InjectRepository(Tenants) - private readonly tenantRepository: Repository - ) { } + private readonly tenantRepository: Repository, + ) {} public async createAcademicYear( academicYearDto: AcademicYearDto, tenantId, - response: Response + response: Response, ): Promise { const apiId = APIID.ACADEMICYEAR_CREATE; try { const startSessionYear = new Date( - academicYearDto.startDate + academicYearDto.startDate, ).getFullYear(); const endSessionYear = new Date(academicYearDto.endDate).getFullYear(); academicYearDto.session = `${startSessionYear}-${endSessionYear}`; academicYearDto.tenantId = tenantId; - const tenantExist = await this.tenantRepository.findOne({ where: { tenantId: tenantId } }) + const tenantExist = await this.tenantRepository.findOne({ + where: { tenantId: tenantId }, + }); if (!tenantExist) { return APIResponse.error( response, apiId, API_RESPONSES.TENANT_NOTFOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } // session session alread exist or not const checkResult = await this.isExistSessionWithTenant( academicYearDto, - tenantId + tenantId, ); if (checkResult) { return APIResponse.error( @@ -57,7 +60,7 @@ export class PostgresAcademicYearService apiId, API_RESPONSES.ACADEMICYEAR_YEAR, API_RESPONSES.ACADEMICYEAR_EXIST, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -68,19 +71,18 @@ export class PostgresAcademicYearService if (getCurrentActiveYear) { const updateStatus = await this.academicYearRespository.update( { id: getCurrentActiveYear.id }, - { isActive: false } + { isActive: false }, ); } //save record - const saveAcademicYear = await this.academicYearRespository.save( - academicYearDto - ); + const saveAcademicYear = + await this.academicYearRespository.save(academicYearDto); return APIResponse.success( response, apiId, saveAcademicYear, HttpStatus.CREATED, - API_RESPONSES.ACADEMICYEAR + API_RESPONSES.ACADEMICYEAR, ); } catch (error) { const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; @@ -89,7 +91,7 @@ export class PostgresAcademicYearService apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -103,7 +105,7 @@ export class PostgresAcademicYearService .andWhere("academicYear.isActive = true") .andWhere( "(academicYear.startDate <= :endDate AND academicYear.endDate >= :startDate)", - { startDate, endDate } + { startDate, endDate }, ) .getOne(); if (overlappingSession) { @@ -114,7 +116,7 @@ export class PostgresAcademicYearService async getActiveAcademicYear( academicYearId: string, - tenantId: string + tenantId: string, ): Promise { return await this.academicYearRespository.findOne({ where: { id: academicYearId, isActive: true, tenantId }, @@ -124,7 +126,7 @@ export class PostgresAcademicYearService async getAcademicYearList( academicYearSearchDto: AcademicYearSearchDto, tenantId, - response: Response + response: Response, ) { const apiId = APIID.ACADEMICYEAR_LIST; try { @@ -144,7 +146,7 @@ export class PostgresAcademicYearService apiId, API_RESPONSES.ACADEMICYEAR_NOTFOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } return APIResponse.success( @@ -152,7 +154,7 @@ export class PostgresAcademicYearService apiId, academicYearList, HttpStatus.OK, - API_RESPONSES.ACADEMICYEAR_GET_SUCCESS + API_RESPONSES.ACADEMICYEAR_GET_SUCCESS, ); } catch (error) { const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; @@ -161,7 +163,7 @@ export class PostgresAcademicYearService apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -169,14 +171,16 @@ export class PostgresAcademicYearService async getAcademicYearById(id, response) { const apiId = APIID.ACADEMICYEAR_GET; try { - const academicYearResult = await this.academicYearRespository.findOne({ where: { id: id } }); + const academicYearResult = await this.academicYearRespository.findOne({ + where: { id: id }, + }); if (!academicYearResult) { return APIResponse.error( response, apiId, API_RESPONSES.ACADEMICYEAR_NOTFOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } return APIResponse.success( @@ -184,7 +188,7 @@ export class PostgresAcademicYearService apiId, academicYearResult, HttpStatus.OK, - API_RESPONSES.ACADEMICYEAR_GET_SUCCESS + API_RESPONSES.ACADEMICYEAR_GET_SUCCESS, ); } catch (error) { const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; @@ -193,9 +197,8 @@ export class PostgresAcademicYearService apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } } - diff --git a/src/adapters/postgres/cohort-adapter.ts b/src/adapters/postgres/cohort-adapter.ts index 2f7b2860..093f7db6 100644 --- a/src/adapters/postgres/cohort-adapter.ts +++ b/src/adapters/postgres/cohort-adapter.ts @@ -44,8 +44,8 @@ export class PostgresCohortService { private readonly postgresAcademicYearService: PostgresAcademicYearService, private readonly postgresCohortMembersService: PostgresCohortMembersService, private readonly automaticMemberService: AutomaticMemberService, - private readonly kafkaService: KafkaService - ) { } + private readonly kafkaService: KafkaService, + ) {} public async getCohortsDetails(requiredData, res) { const apiId = APIID.COHORT_READ; @@ -79,7 +79,7 @@ export class PostgresCohortService { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.COHORT_NOT_FOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -92,15 +92,15 @@ export class PostgresCohortService { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -114,13 +114,14 @@ export class PostgresCohortService { name: data.name, parentId: data.parentId, type: data.type, - customField: await this.fieldsService.getCustomFieldDetails(data.cohortId, 'Cohort'), + customField: await this.fieldsService.getCustomFieldDetails( + data.cohortId, + "Cohort", + ), }; result.cohortData.push(cohortData); } - LoggerUtil.log( - API_RESPONSES.COHORT_DATA_RESPONSE, - ) + LoggerUtil.log(API_RESPONSES.COHORT_DATA_RESPONSE); return APIResponse.success( res, apiId, @@ -141,18 +142,19 @@ export class PostgresCohortService { type: cohort.type, status: cohort?.status, customField: requiredData.customField - ? await this.fieldsService.getCustomFieldDetails(cohort.cohortId, 'Cohort') + ? await this.fieldsService.getCustomFieldDetails( + cohort.cohortId, + "Cohort", + ) : undefined, childData: await this.getCohortHierarchy( cohort.cohortId, - requiredData.customField + requiredData.customField, ), }; resultDataList.push(resultData); - LoggerUtil.log( - API_RESPONSES.CHILD_DATA, - ) + LoggerUtil.log(API_RESPONSES.CHILD_DATA); } return APIResponse.success( @@ -166,14 +168,16 @@ export class PostgresCohortService { public async getCohortDataWithCustomfield( cohortId: string, - contextType?: string + contextType?: string, ) { - const fieldValues = await this.fieldsService.getCustomFieldDetails(cohortId, 'Cohort'); + const fieldValues = await this.fieldsService.getCustomFieldDetails( + cohortId, + "Cohort", + ); return fieldValues; } public async findCohortName(userId: any, academicYearId?: string) { - const baseQuery = ` SELECT c."name", @@ -236,11 +240,11 @@ export class PostgresCohortService { // fieldOption?: boolean // ) { // const query = ` - // SELECT DISTINCT + // SELECT DISTINCT // f."fieldId", - // f."label", - // fv."value", - // f."type", + // f."label", + // fv."value", + // f."type", // f."fieldParams", // f."sourceDetails" // FROM public."Cohort" c @@ -315,12 +319,12 @@ export class PostgresCohortService { const academicYearId = cohortCreateDto.academicYearId; const tenantId = cohortCreateDto.tenantId; - cohortCreateDto.name = cohortCreateDto?.name.toLowerCase() + cohortCreateDto.name = cohortCreateDto?.name.toLowerCase(); // verify if the academic year id is valid const academicYear = await this.postgresAcademicYearService.getActiveAcademicYear( cohortCreateDto.academicYearId, - tenantId + tenantId, ); if (!academicYear) { @@ -329,7 +333,7 @@ export class PostgresCohortService { apiId, HttpStatus.NOT_FOUND.toLocaleString(), API_RESPONSES.ACADEMICYEAR_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -339,7 +343,7 @@ export class PostgresCohortService { ) { const validationResponse = await this.fieldsService.validateCustomField( cohortCreateDto, - "COHORT" + "COHORT", ); // Check the validation response @@ -349,7 +353,7 @@ export class PostgresCohortService { apiId, validationResponse.error, "Validation Error", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } @@ -372,11 +376,11 @@ export class PostgresCohortService { apiId, API_RESPONSES.COHORT_NAME_EXIST, API_RESPONSES.COHORT_EXISTS, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } const response = await this.cohortRepository.save(cohortCreateDto); - + const createFailures = []; //SAVE in fieldValues table @@ -397,7 +401,7 @@ export class PostgresCohortService { const resfields = await this.fieldsService.updateCustomFields( cohortId, fieldData, - cohortCreateDto.customFields[0].fieldId + cohortCreateDto.customFields[0].fieldId, ); if (resfields.correctValue) { if (!response["customFieldsValue"]) @@ -405,7 +409,7 @@ export class PostgresCohortService { response["customFieldsValue"].push(resfields); } else { createFailures.push( - `${fieldData.fieldId}: ${resfields?.valueIssue} - ${resfields.fieldName}` + `${fieldData.fieldId}: ${resfields?.valueIssue} - ${resfields.fieldName}`, ); } } @@ -416,16 +420,14 @@ export class PostgresCohortService { response.cohortId, academicYearId, cohortCreateDto.createdBy, - cohortCreateDto.updatedBy + cohortCreateDto.updatedBy, ); const resBody = new ReturnResponseBody({ ...response, academicYearId: academicYearId, }); - LoggerUtil.log( - API_RESPONSES.CREATE_COHORT, - ) + LoggerUtil.log(API_RESPONSES.CREATE_COHORT); // Send response to the client const apiResponse = APIResponse.success( @@ -433,31 +435,37 @@ export class PostgresCohortService { apiId, resBody, HttpStatus.CREATED, - API_RESPONSES.CREATE_COHORT + API_RESPONSES.CREATE_COHORT, ); // Publish cohort created event to Kafka asynchronously - after response is sent to client - this.publishCohortEvent('created', response.cohortId, academicYearId, apiId) - .catch(error => LoggerUtil.error( + this.publishCohortEvent( + "created", + response.cohortId, + academicYearId, + apiId, + ).catch((error) => + LoggerUtil.error( `Failed to publish cohort created event to Kafka`, `Error: ${error.message}`, - apiId - )); + apiId, + ), + ); return apiResponse; } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -465,7 +473,7 @@ export class PostgresCohortService { public async updateCohort( cohortId: string, cohortUpdateDto: CohortUpdateDto, - res + res, ) { const apiId = APIID.COHORT_UPDATE; // Define valid status transitions @@ -481,7 +489,7 @@ export class PostgresCohortService { apiId, `Please Enter valid cohortId(UUID)`, `Invalid cohortId`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } @@ -504,7 +512,7 @@ export class PostgresCohortService { const validationResponse = await this.fieldsService.validateCustomField( cohortUpdateDto, - contextType + contextType, ); if (!validationResponse.isValid) { return APIResponse.error( @@ -512,7 +520,7 @@ export class PostgresCohortService { apiId, validationResponse.error, "Validation Error", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } @@ -522,7 +530,8 @@ export class PostgresCohortService { const filterOptions = { where: { name: cohortUpdateDto.name || existingCohorDetails.name, - parentId: cohortUpdateDto.parentId || existingCohorDetails.parentId, + parentId: + cohortUpdateDto.parentId || existingCohorDetails.parentId, cohortId: Not(cohortId), }, }; @@ -534,7 +543,7 @@ export class PostgresCohortService { apiId, `Cohort name already exists under the specified parent. Please provide another name or parent.`, `Cohort already exists`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } } @@ -563,7 +572,7 @@ export class PostgresCohortService { if ( cohortUpdateDto.customFields && cohortUpdateDto.customFields.length > 0 - ) { + ) { const contextType = cohortUpdateDto.type ? [cohortUpdateDto.type] : existingCohorDetails?.type @@ -571,19 +580,19 @@ export class PostgresCohortService { : []; const allCustomFields = await this.fieldsService.findCustomFields( "COHORT", - contextType + contextType, ); - + if (allCustomFields.length > 0) { const customFieldAttributes = allCustomFields.reduce( (fieldDetail, { fieldId, fieldAttributes, fieldParams, name }) => fieldDetail[`${fieldId}`] ? fieldDetail : { - ...fieldDetail, - [`${fieldId}`]: { fieldAttributes, fieldParams, name }, - }, - {} + ...fieldDetail, + [`${fieldId}`]: { fieldAttributes, fieldParams, name }, + }, + {}, ); for (const fieldValues of cohortUpdateDto.customFields) { const fieldData = { @@ -593,7 +602,7 @@ export class PostgresCohortService { await this.fieldsService.updateCustomFields( cohortId, fieldData, - customFieldAttributes[fieldData.fieldId] + customFieldAttributes[fieldData.fieldId], ); } } @@ -602,7 +611,7 @@ export class PostgresCohortService { //Update status in cohortMember table if exist record corresponding cohortId if ( validTransitions[cohortUpdateDto.status]?.includes( - existingCohorDetails.status + existingCohorDetails.status, ) ) { let memberStatus; @@ -617,14 +626,12 @@ export class PostgresCohortService { if (memberStatus) { await this.cohortMembersRepository.update( { cohortId }, - { status: memberStatus, updatedBy: cohortUpdateDto.updatedBy } + { status: memberStatus, updatedBy: cohortUpdateDto.updatedBy }, ); } } - LoggerUtil.log( - API_RESPONSES.COHORT_UPDATED_SUCCESSFULLY, - ) + LoggerUtil.log(API_RESPONSES.COHORT_UPDATED_SUCCESSFULLY); // Send response to the client const apiResponse = APIResponse.success( @@ -632,16 +639,18 @@ export class PostgresCohortService { apiId, response?.affected, HttpStatus.OK, - API_RESPONSES.COHORT_UPDATED_SUCCESSFULLY + API_RESPONSES.COHORT_UPDATED_SUCCESSFULLY, ); // Publish cohort updated event to Kafka asynchronously - after response is sent to client - this.publishCohortEvent('updated', cohortId, null, apiId) - .catch(error => LoggerUtil.error( - `Failed to publish cohort updated event to Kafka`, - `Error: ${error.message}`, - apiId - )); + this.publishCohortEvent("updated", cohortId, null, apiId).catch( + (error) => + LoggerUtil.error( + `Failed to publish cohort updated event to Kafka`, + `Error: ${error.message}`, + apiId, + ), + ); return apiResponse; } else { @@ -650,22 +659,22 @@ export class PostgresCohortService { apiId, `Cohort not found`, `Cohort not found`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -674,7 +683,7 @@ export class PostgresCohortService { tenantId: string, academicYearId: string, cohortSearchDto: CohortSearchDto, - response + response, ) { const apiId = APIID.COHORT_LIST; try { @@ -697,13 +706,13 @@ export class PostgresCohortService { apiId, `Limit exceeds maximum allowed value of ${MAX_LIMIT}`, `Limit exceeded`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } //Get all cohorts fields const cohortAllKeys = this.cohortRepository.metadata.columns.map( - (column) => column.propertyName + (column) => column.propertyName, ); //Get custom fields @@ -716,7 +725,7 @@ export class PostgresCohortService { }); // Extract custom field names const customFieldsKeys = getCustomFields.map( - (customFields) => customFields.name + (customFields) => customFields.name, ); // Combine the arrays @@ -729,7 +738,7 @@ export class PostgresCohortService { cohortsByAcademicYear = await this.cohortAcademicYearService.getCohortsAcademicYear( academicYearId, - tenantId + tenantId, ); if (cohortsByAcademicYear?.length === 0) { @@ -738,7 +747,7 @@ export class PostgresCohortService { apiId, API_RESPONSES.COHORT_NOT_AVAILABLE_FOR_ACADEMIC_YEAR, API_RESPONSES.COHORT_NOT_AVAILABLE_FOR_ACADEMIC_YEAR, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } @@ -757,7 +766,7 @@ export class PostgresCohortService { apiId, `${key} Invalid key`, `Invalid filter key`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } if (value === "") { @@ -797,7 +806,7 @@ export class PostgresCohortService { if (whereClause["userId"]) { const additionalFields = Object.keys(whereClause).filter( - (key) => key !== "userId" && key !== "academicYearId" + (key) => key !== "userId" && key !== "academicYearId", ); if (additionalFields.length > 0) { // Handle the case where userId is provided along with other fields @@ -806,7 +815,7 @@ export class PostgresCohortService { apiId, `When filtering by userId, do not include additional fields`, "Invalid filters", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -822,7 +831,7 @@ export class PostgresCohortService { apiId, `User is not mapped for this tenant`, "Invalid combination of userId and tenantId", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -834,7 +843,7 @@ export class PostgresCohortService { count = totalCount; const cohortIds = userExistCohortGroup.map( - (cohortId) => cohortId.cohortId + (cohortId) => cohortId.cohortId, ); const cohortAllData = await this.cohortRepository.find({ @@ -845,14 +854,14 @@ export class PostgresCohortService { }); for (const data of cohortAllData) { const customFieldsData = await this.getCohortDataWithCustomfield( - data.cohortId + data.cohortId, ); data["customFields"] = customFieldsData; results.cohortDetails.push(data); } } else { let getCohortIdUsingCustomFields; - + //If source config in source details from fields table is not exist then return false if (Object.keys(searchCustomFields).length > 0) { @@ -860,7 +869,7 @@ export class PostgresCohortService { getCohortIdUsingCustomFields = await this.fieldsService.filterUserUsingCustomFields( context, - searchCustomFields + searchCustomFields, ); if (getCohortIdUsingCustomFields == null) { @@ -869,23 +878,24 @@ export class PostgresCohortService { apiId, "No data found", "NOT FOUND", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } if ( getCohortIdUsingCustomFields && - getCohortIdUsingCustomFields.length > 0 && !whereClause['cohortId'] + getCohortIdUsingCustomFields.length > 0 && + !whereClause["cohortId"] ) { let cohortIdsByFieldAndAcademicYear; if (cohortsByAcademicYear?.length >= 1) { cohortIdsByFieldAndAcademicYear = cohortsByAcademicYear.filter( - ({ cohortId }) => getCohortIdUsingCustomFields.includes(cohortId) + ({ cohortId }) => getCohortIdUsingCustomFields.includes(cohortId), ); } const cohortIds = cohortIdsByFieldAndAcademicYear?.map( - ({ cohortId }) => cohortId + ({ cohortId }) => cohortId, ); whereClause["cohortId"] = In(cohortIds); } @@ -901,14 +911,13 @@ export class PostgresCohortService { order, }); - const cohortData = data.slice(offset, offset + limit); count = totalCount; for (const data of cohortData) { const customFieldsData = await this.getCohortDataWithCustomfield( data.cohortId, - data.type + data.type, ); data["customFields"] = customFieldsData || []; results.cohortDetails.push(data); @@ -921,7 +930,7 @@ export class PostgresCohortService { apiId, { count, results }, HttpStatus.OK, - "Cohort details fetched successfully" + "Cohort details fetched successfully", ); } else { return APIResponse.error( @@ -929,22 +938,22 @@ export class PostgresCohortService { apiId, `No data found.`, "No data found.", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -958,7 +967,7 @@ export class PostgresCohortService { apiId, `Invalid Cohort Id format. It must be a valid UUID`, "Invalid cohortId", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const checkData = await this.checkIfCohortExist(cohortId); @@ -980,16 +989,18 @@ export class PostgresCohortService { apiId, affectedrows[1], HttpStatus.OK, - "Cohort Deleted Successfully." + "Cohort Deleted Successfully.", ); // Publish cohort deleted event to Kafka asynchronously - after response is sent to client - this.publishCohortEvent('deleted', cohortId, null, apiId) - .catch(error => LoggerUtil.error( - `Failed to publish cohort deleted event to Kafka`, - `Error: ${error.message}`, - apiId - )); + this.publishCohortEvent("deleted", cohortId, null, apiId).catch( + (error) => + LoggerUtil.error( + `Failed to publish cohort deleted event to Kafka`, + `Error: ${error.message}`, + apiId, + ), + ); return apiResponse; } else { @@ -998,22 +1009,22 @@ export class PostgresCohortService { apiId, `Cohort not found`, "Invalid cohortId", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1033,7 +1044,7 @@ export class PostgresCohortService { private async getCohortHierarchy( parentId: string, - customField?: boolean + customField?: boolean, ): Promise { const childData = await this.cohortRepository.find({ where: { parentId } }); const hierarchy = []; @@ -1043,10 +1054,11 @@ export class PostgresCohortService { if (customField) { childHierarchy = await this.getCohortHierarchy( data.cohortId, - customField + customField, ); customFieldDetails = await this.fieldsService.getCustomFieldDetails( - data.cohortId, 'Cohort' + data.cohortId, + "Cohort", ); } else { childHierarchy = await this.getCohortHierarchy(data.cohortId); @@ -1062,42 +1074,51 @@ export class PostgresCohortService { }); } - LoggerUtil.log( - API_RESPONSES.COHORT_HIERARCHY, - ) + LoggerUtil.log(API_RESPONSES.COHORT_HIERARCHY); return hierarchy; } public async getCohortDetailsByIds(ids: string[], academicYearId) { return await this.cohortRepository - .createQueryBuilder('cohort') - .innerJoin('CohortAcademicYear', 'cay', 'cohort.cohortId = cay.cohortId') - .where('cohort.cohortId IN (:...ids)', { ids }) - .andWhere('cay.academicYearId = :academicYearId', { academicYearId }) - .select(['cohort.cohortId', 'cohort.name', 'cohort.parentId', 'cohort.type', 'cohort.status']) + .createQueryBuilder("cohort") + .innerJoin("CohortAcademicYear", "cay", "cohort.cohortId = cay.cohortId") + .where("cohort.cohortId IN (:...ids)", { ids }) + .andWhere("cay.academicYearId = :academicYearId", { academicYearId }) + .select([ + "cohort.cohortId", + "cohort.name", + "cohort.parentId", + "cohort.type", + "cohort.status", + ]) .getMany(); } public async automaticMemberCohortHierarchy(requiredData, academicYearId) { - const { condition: { value, fieldId } } = requiredData?.rules; + const { + condition: { value, fieldId }, + } = requiredData?.rules; // Pass fieldId to getSearchFieldValueData - let filledValues = await this.fieldsService.getSearchFieldValueData( + const filledValues = await this.fieldsService.getSearchFieldValueData( 0, "0", { fieldId: fieldId, - value: value - } // Passing extracted fieldId + value: value, + }, // Passing extracted fieldId ); - const cohortIds = filledValues.mappedResponse.map(item => item.itemId); + const cohortIds = filledValues.mappedResponse.map((item) => item.itemId); if (cohortIds.length === 0) { throw new Error("No cohort IDs found for the given fieldId and value."); } - const existingCohortIds = await this.getCohortDetailsByIds(cohortIds,academicYearId); + const existingCohortIds = await this.getCohortDetailsByIds( + cohortIds, + academicYearId, + ); return existingCohortIds; } @@ -1105,20 +1126,27 @@ export class PostgresCohortService { const apiId = APIID.COHORT_LIST; try { - const checkAutomaticMember = await this.automaticMemberService.checkMemberById(requiredData.userId); + const checkAutomaticMember = + await this.automaticMemberService.checkMemberById(requiredData.userId); let findCohortId; if (checkAutomaticMember) { - findCohortId = await this.automaticMemberCohortHierarchy(checkAutomaticMember, requiredData?.academicYearId); + findCohortId = await this.automaticMemberCohortHierarchy( + checkAutomaticMember, + requiredData?.academicYearId, + ); } else { - findCohortId = await this.findCohortName(requiredData.userId, requiredData?.academicYearId); + findCohortId = await this.findCohortName( + requiredData.userId, + requiredData?.academicYearId, + ); if (!findCohortId.length) { return APIResponse.error( res, apiId, "BAD_REQUEST", `No Cohort Found for this User ID`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } @@ -1134,10 +1162,16 @@ export class PostgresCohortService { cohortMembershipId: cohort?.cohortMembershipId, cohortStatus: cohort?.cohortstatus || cohort?.status, type: cohort?.type, - customField: await this.fieldsService.getCustomFieldDetails(cohort.cohortId, 'Cohort'), + customField: await this.fieldsService.getCustomFieldDetails( + cohort.cohortId, + "Cohort", + ), childData: requiredData.getChildData - ? await this.getCohortHierarchy(cohort.cohortId, requiredData.customField) - : [] + ? await this.getCohortHierarchy( + cohort.cohortId, + requiredData.customField, + ) + : [], }; resultDataList.push(resultData); @@ -1148,14 +1182,13 @@ export class PostgresCohortService { apiId, resultDataList, HttpStatus.OK, - API_RESPONSES.COHORT_HIERARCHY + API_RESPONSES.COHORT_HIERARCHY, ); - } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId + apiId, ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -1163,7 +1196,7 @@ export class PostgresCohortService { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1175,19 +1208,19 @@ export class PostgresCohortService { * @param apiId API ID for logging */ private async publishCohortEvent( - eventType: 'created' | 'updated' | 'deleted', + eventType: "created" | "updated" | "deleted", cohortId: string, academicYearId: string | null, - apiId: string + apiId: string, ): Promise { try { // For delete events, we may want to include just basic information since the cohort might already be removed let cohortData: any; - - if (eventType === 'deleted') { + + if (eventType === "deleted") { cohortData = { cohortId: cohortId, - deletedAt: new Date().toISOString() + deletedAt: new Date().toISOString(), }; } else { // For create and update, fetch complete data from DB @@ -1205,23 +1238,29 @@ export class PostgresCohortService { "createdAt", "updatedAt", "createdBy", - "updatedBy" - ] + "updatedBy", + ], }); if (!cohort) { - LoggerUtil.error(`Failed to fetch cohort data for Kafka event`, `Cohort with ID ${cohortId} not found`); + LoggerUtil.error( + `Failed to fetch cohort data for Kafka event`, + `Cohort with ID ${cohortId} not found`, + ); cohortData = { cohortId }; } else { // Get custom fields for the cohort let customFields = []; try { - customFields = await this.fieldsService.getCustomFieldDetails(cohortId, 'Cohort'); + customFields = await this.fieldsService.getCustomFieldDetails( + cohortId, + "Cohort", + ); } catch (customFieldError) { LoggerUtil.error( `Failed to fetch custom fields for Kafka event`, `Error: ${customFieldError.message}`, - apiId + apiId, ); // Don't fail the entire operation if custom fields fetching fails customFields = []; @@ -1232,26 +1271,33 @@ export class PostgresCohortService { ...cohort, ...(academicYearId && { academicYearId }), customFields: customFields || [], - eventTimestamp: new Date().toISOString() + eventTimestamp: new Date().toISOString(), }; } } catch (error) { LoggerUtil.error( `Failed to fetch cohort data for Kafka event`, - `Error: ${error.message}` + `Error: ${error.message}`, ); // Return at least the cohortId if we can't fetch complete data cohortData = { cohortId }; } } - await this.kafkaService.publishCohortEvent(eventType, cohortData, cohortId); - LoggerUtil.log(`Cohort ${eventType} event published to Kafka for cohort ${cohortId}`, apiId); + await this.kafkaService.publishCohortEvent( + eventType, + cohortData, + cohortId, + ); + LoggerUtil.log( + `Cohort ${eventType} event published to Kafka for cohort ${cohortId}`, + apiId, + ); } catch (error) { LoggerUtil.error( `Failed to publish cohort ${eventType} event to Kafka`, `Error: ${error.message}`, - apiId + apiId, ); // Don't throw the error to avoid affecting the main operation } diff --git a/src/adapters/postgres/cohortAcademicYear-adapter.ts b/src/adapters/postgres/cohortAcademicYear-adapter.ts index bfd5b7d3..7066eb9b 100644 --- a/src/adapters/postgres/cohortAcademicYear-adapter.ts +++ b/src/adapters/postgres/cohortAcademicYear-adapter.ts @@ -12,21 +12,27 @@ import { PostgresAcademicYearService } from "./academicyears-adapter"; import { Cohort } from "src/cohort/entities/cohort.entity"; @Injectable() -export class CohortAcademicYearService implements IServiceLocatorCohortAcademicYear { - +export class CohortAcademicYearService + implements IServiceLocatorCohortAcademicYear +{ constructor( private readonly postgresAcademicYearService: PostgresAcademicYearService, @InjectRepository(Cohort) private readonly cohortRepository: Repository, @InjectRepository(CohortAcademicYear) private readonly cohortAcademicYearRepository: Repository, - ) { } + ) {} - async createCohortAcademicYear(tenantId: string, request: Request, cohortAcademicYearDto: CohortAcademicYearDto, response: Response) { + async createCohortAcademicYear( + tenantId: string, + request: Request, + cohortAcademicYearDto: CohortAcademicYearDto, + response: Response, + ) { const apiId = APIID.ADD_COHORT_TO_ACADEMIC_YEAR; try { const existingCohort = await this.cohortRepository.findOne({ - where: { cohortId: cohortAcademicYearDto.cohortId, status: 'active' }, + where: { cohortId: cohortAcademicYearDto.cohortId, status: "active" }, }); if (!existingCohort) { @@ -35,7 +41,7 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY apiId, HttpStatus.NOT_FOUND.toLocaleString(), API_RESPONSES.COHORT_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -45,7 +51,7 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY apiId, HttpStatus.BAD_REQUEST.toLocaleString(), API_RESPONSES.TENANTID_MISMATCHED, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -53,7 +59,7 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY const academicYear = await this.postgresAcademicYearService.getActiveAcademicYear( cohortAcademicYearDto.academicYearId, - tenantId + tenantId, ); if (!academicYear) { @@ -62,11 +68,16 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY apiId, HttpStatus.NOT_FOUND.toLocaleString(), API_RESPONSES.ACADEMICYEAR_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } - const createdAcademicYear = await this.insertCohortAcademicYear(cohortAcademicYearDto.cohortId, cohortAcademicYearDto.academicYearId, cohortAcademicYearDto.createdBy, cohortAcademicYearDto.updatedBy); + const createdAcademicYear = await this.insertCohortAcademicYear( + cohortAcademicYearDto.cohortId, + cohortAcademicYearDto.academicYearId, + cohortAcademicYearDto.createdBy, + cohortAcademicYearDto.updatedBy, + ); if (createdAcademicYear) { return APIResponse.success( @@ -74,10 +85,9 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY apiId, createdAcademicYear, HttpStatus.OK, - API_RESPONSES.ADD_COHORT_TO_ACADEMIC_YEAR + API_RESPONSES.ADD_COHORT_TO_ACADEMIC_YEAR, ); } - } catch (error) { const errorMessage = error.message || "Internal server error"; return APIResponse.error( @@ -85,7 +95,7 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -94,7 +104,7 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY cohortId: string, academicYearId: string, createdBy: string, - updatedBy: string + updatedBy: string, ) { const cohortAcademicYear = new CohortAcademicYear(); cohortAcademicYear.cohortId = cohortId; @@ -106,7 +116,7 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY async getCohortsAcademicYear( academicYearId: string, - tenantId: string + tenantId: string, ): Promise { const query = ` SELECT cay.* @@ -127,5 +137,4 @@ export class CohortAcademicYearService implements IServiceLocatorCohortAcademicY where: { academicYearId: yearId, cohortId: cohortId }, }); } - } diff --git a/src/adapters/postgres/cohortMembers-adapter.ts b/src/adapters/postgres/cohortMembers-adapter.ts index 7512e8e8..147b3df0 100644 --- a/src/adapters/postgres/cohortMembers-adapter.ts +++ b/src/adapters/postgres/cohortMembers-adapter.ts @@ -40,8 +40,8 @@ export class PostgresCohortMembersService { private readonly academicyearService: PostgresAcademicYearService, private readonly notificationRequest: NotificationRequest, private fieldsService: PostgresFieldsService, - private userService: PostgresUserService - ) { } + private userService: PostgresUserService, + ) {} //Get cohort member async getCohortMembers( @@ -49,7 +49,7 @@ export class PostgresCohortMembersService { tenantId: any, fieldvalue: any, academicYearId: string, - res: Response + res: Response, ) { const apiId = APIID.COHORT_MEMBER_GET; try { @@ -61,7 +61,7 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.TANANT_ID_REQUIRED, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -71,13 +71,13 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.COHORT_VALID_UUID, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const cohortAcademicYearMap = await this.isCohortExistForYear( academicYearId, - cohortId + cohortId, ); if (cohortAcademicYearMap.length === 0) { return APIResponse.error( @@ -85,14 +85,14 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.ACADEMICYEAR_COHORT_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } const cohortAcademicyearId = cohortAcademicYearMap[0].cohortAcademicYearId; const userDetails = await this.findcohortData( cohortId, - cohortAcademicyearId + cohortAcademicyearId, ); if (userDetails === true) { const results = { @@ -103,7 +103,7 @@ export class PostgresCohortMembersService { cohortId, "cohortId", fieldvalues, - cohortAcademicyearId + cohortAcademicyearId, ); results.userDetails.push(cohortDetails); @@ -112,7 +112,7 @@ export class PostgresCohortMembersService { apiId, results, HttpStatus.OK, - API_RESPONSES.COHORT_MEMBER_GET_SUCCESSFULLY + API_RESPONSES.COHORT_MEMBER_GET_SUCCESSFULLY, ); } else { return APIResponse.error( @@ -120,22 +120,22 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.COHORTMEMBER_NOTFOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId - ) + apiId, + ); const errorMessage = e.message || API_RESPONSES.INTERNAL_SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -143,7 +143,7 @@ export class PostgresCohortMembersService { searchId: any, searchKey: any, fieldShowHide: any, - cohortAcademicyearId: string + cohortAcademicyearId: string, ) { const results = { userDetails: [], @@ -152,7 +152,7 @@ export class PostgresCohortMembersService { const getUserDetails = await this.findUserName( searchId, searchKey, - cohortAcademicyearId + cohortAcademicyearId, ); for (const data of getUserDetails) { @@ -241,7 +241,7 @@ export class PostgresCohortMembersService { cohortMembersSearchDto: CohortMembersSearchDto, tenantId: string, academicyearId: string, - res: Response + res: Response, ) { const apiId = APIID.COHORT_MEMBER_SEARCH; try { @@ -251,7 +251,7 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.TENANT_ID_NOTFOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -277,7 +277,7 @@ export class PostgresCohortMembersService { if (whereClause["cohortId"]) { const getYearExistRecord = await this.isCohortExistForYear( academicyearId, - cohortMembersSearchDto.filters.cohortId + cohortMembersSearchDto.filters.cohortId, ); if (getYearExistRecord.length === 0) { return APIResponse.error( @@ -285,11 +285,11 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.COHORT_NOTFOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } cohortYearExistInYear = getYearExistRecord.map( - (item) => item.cohortAcademicYearId + (item) => item.cohortAcademicYearId, ); finalExistRecord = [...cohortYearExistInYear]; } @@ -298,7 +298,7 @@ export class PostgresCohortMembersService { if (whereClause["userId"]) { const getYearExitUser = await this.isUserExistForYear( academicyearId, - cohortMembersSearchDto.filters.userId + cohortMembersSearchDto.filters.userId, ); if (getYearExitUser.length === 0) { return APIResponse.error( @@ -306,11 +306,11 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.USER_NOTFOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } userYearExistInYear = getYearExitUser.map( - (item) => item.cohortAcademicYearId + (item) => item.cohortAcademicYearId, ); finalExistRecord = [...userYearExistInYear]; } @@ -326,7 +326,7 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.COHORT_USER_NOTFOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } // Add cohortAcademicYearId filter if applicable @@ -360,7 +360,7 @@ export class PostgresCohortMembersService { where, "true", options, - order + order, ); if (results["userDetails"].length == 0) { @@ -369,7 +369,7 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USER_DETAIL_NOTFOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -377,21 +377,21 @@ export class PostgresCohortMembersService { apiId, results, HttpStatus.OK, - API_RESPONSES.COHORT_GET_SUCCESSFULLY + API_RESPONSES.COHORT_GET_SUCCESSFULLY, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId - ) + apiId, + ); const errorMessage = e.message || API_RESPONSES.INTERNAL_SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -434,7 +434,7 @@ export class PostgresCohortMembersService { where: any, fieldShowHide: any, options: any, - order: any + order: any, ) { const results = { totalCount: 0, @@ -450,12 +450,14 @@ export class PostgresCohortMembersService { if (fieldShowHide === "false") { results.userDetails.push(data); } else { - const fieldValues = - await this.fieldsService.getCustomFieldDetails(data.userId, 'Users'); + const fieldValues = await this.fieldsService.getCustomFieldDetails( + data.userId, + "Users", + ); //get data by cohort membership Id let fieldValuesForCohort = await this.fieldsService.getFieldsAndFieldsValues( - data.cohortMembershipId + data.cohortMembershipId, ); fieldValuesForCohort = fieldValuesForCohort.map((field) => { return { @@ -481,7 +483,7 @@ export class PostgresCohortMembersService { res: Response, tenantId: string, deviceId: string, - academicyearId: string + academicyearId: string, ) { const apiId = APIID.COHORT_MEMBER_CREATE; try { @@ -496,13 +498,13 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.INVALID_USERID, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } // check year is live or not const academicYear = await this.academicyearService.getActiveAcademicYear( academicyearId, - tenantId + tenantId, ); if (!academicYear) { @@ -511,13 +513,13 @@ export class PostgresCohortMembersService { apiId, HttpStatus.NOT_FOUND.toLocaleString(), API_RESPONSES.ACADEMICYEAR_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } //check this cohort exist this year or not const isExistAcademicYear = await this.findCohortAcademicYearId( academicyearId, - cohortMembers + cohortMembers, ); if (!isExistAcademicYear) { return APIResponse.error( @@ -525,7 +527,7 @@ export class PostgresCohortMembersService { apiId, HttpStatus.NOT_FOUND.toLocaleString(), API_RESPONSES.ACADEMICYEAR_COHORT_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } const cohortacAdemicyearId = isExistAcademicYear.cohortAcademicYearId; @@ -543,7 +545,7 @@ export class PostgresCohortMembersService { apiId, API_RESPONSES.CONFLICT, `User '${cohortMembers.userId}' is already assigned to cohort '${cohortMembers.cohortId}'.`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } @@ -551,30 +553,29 @@ export class PostgresCohortMembersService { cohortMembers.updatedBy = loginUser; cohortMembers.cohortAcademicYearId = cohortacAdemicyearId; // Create a new CohortMembers entity and populate it with cohortMembers data - const savedCohortMember = await this.cohortMembersRepository.save( - cohortMembers - ); + const savedCohortMember = + await this.cohortMembersRepository.save(cohortMembers); return APIResponse.success( res, apiId, savedCohortMember, HttpStatus.OK, - API_RESPONSES.COHORTMEMBER_CREATED_SUCCESSFULLY + API_RESPONSES.COHORTMEMBER_CREATED_SUCCESSFULLY, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId - ) + apiId, + ); const errorMessage = e.message || API_RESPONSES.INTERNAL_SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -663,7 +664,7 @@ export class PostgresCohortMembersService { cohortMembershipId: string, loginUser: any, cohortMembersUpdateDto: CohortMembersUpdateDto, - res + res, ) { const apiId = APIID.COHORT_MEMBER_UPDATE; try { @@ -674,7 +675,7 @@ export class PostgresCohortMembersService { apiId, "Bad Request", "Invalid input: Please Enter a valid UUID for cohortMembershipId.", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } //validate custom fileds @@ -687,7 +688,7 @@ export class PostgresCohortMembersService { await this.fieldsService.validateCustomFieldByContext( cohortMembersUpdateDto, "COHORTMEMBER", - "COHORTMEMBER" + "COHORTMEMBER", ); if (!customFieldValidate || !isValid) { return APIResponse.error( @@ -695,14 +696,15 @@ export class PostgresCohortMembersService { apiId, "BAD_REQUEST", `${customFieldValidate}`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } - let cohortMembershipToUpdate = await this.cohortMembersRepository.findOne({ - where: { cohortMembershipId: cohortMembershipId }, - }); + const cohortMembershipToUpdate = + await this.cohortMembersRepository.findOne({ + where: { cohortMembershipId: cohortMembershipId }, + }); if (!cohortMembershipToUpdate) { return APIResponse.error( @@ -710,12 +712,12 @@ export class PostgresCohortMembersService { apiId, "Not Found", "Invalid input: Cohort member not found.", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } Object.assign(cohortMembershipToUpdate, cohortMembersUpdateDto); - let result = await this.cohortMembersRepository.save( - cohortMembershipToUpdate + const result = await this.cohortMembersRepository.save( + cohortMembershipToUpdate, ); //update custom fields let responseForCustomField; @@ -730,7 +732,7 @@ export class PostgresCohortMembersService { responseForCustomField = await this.processCustomFields( customFields, cohortMembershipId, - cohortMembersUpdateDto + cohortMembersUpdateDto, ); if (result && responseForCustomField.success) { return APIResponse.success( @@ -738,7 +740,7 @@ export class PostgresCohortMembersService { apiId, [], HttpStatus.CREATED, - API_RESPONSES.COHORTMEMBER_UPDATE_SUCCESSFULLY + API_RESPONSES.COHORTMEMBER_UPDATE_SUCCESSFULLY, ); } else { const errorMessage = @@ -748,7 +750,7 @@ export class PostgresCohortMembersService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -758,32 +760,30 @@ export class PostgresCohortMembersService { apiId, [], HttpStatus.OK, - API_RESPONSES.COHORTMEMBER_UPDATE_SUCCESSFULLY + API_RESPONSES.COHORTMEMBER_UPDATE_SUCCESSFULLY, ); } } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); return APIResponse.error( response, apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, `Error : ${error.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } - - } public async deleteCohortMemberById( tenantid: any, cohortMembershipId: any, - res: any + res: any, ) { const apiId = APIID.COHORT_MEMBER_DELETE; @@ -800,34 +800,33 @@ export class PostgresCohortMembersService { apiId, "Not Found", "Invalid input: Cohort member not found.", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } - const result = await this.cohortMembersRepository.delete( - cohortMembershipId - ); + const result = + await this.cohortMembersRepository.delete(cohortMembershipId); return APIResponse.success( res, apiId, result, HttpStatus.OK, - "Cohort Member deleted Successfully." + "Cohort Member deleted Successfully.", ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId - ) + apiId, + ); const errorMessage = e.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( res, apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -875,7 +874,7 @@ export class PostgresCohortMembersService { }, response: Response, tenantId: string, - academicyearId: string + academicyearId: string, ) { const apiId = APIID.COHORT_MEMBER_CREATE; const results = []; @@ -889,7 +888,7 @@ export class PostgresCohortMembersService { const academicYear = await this.academicyearService.getActiveAcademicYear( academicyearId, - tenantId + tenantId, ); if (!academicYear) { return APIResponse.error( @@ -897,7 +896,7 @@ export class PostgresCohortMembersService { apiId, HttpStatus.NOT_FOUND.toLocaleString(), API_RESPONSES.ACADEMICYEAR_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -918,11 +917,11 @@ export class PostgresCohortMembersService { try { const cohortExists = await this.isCohortExistForYear( academicyearId, - removeCohortId + removeCohortId, ); if (cohortExists.length === 0) { errors.push( - API_RESPONSES.COHORTID_NOTFOUND_FOT_THIS_YEAR(removeCohortId) + API_RESPONSES.COHORTID_NOTFOUND_FOT_THIS_YEAR(removeCohortId), ); continue; } @@ -932,20 +931,20 @@ export class PostgresCohortMembersService { cohortId: removeCohortId, cohortAcademicYearId: cohortExists[0].cohortAcademicYearId, }, - { status: MemberStatus.ARCHIVED } + { status: MemberStatus.ARCHIVED }, ); if (updateCohort.affected === 0) { results.push({ message: API_RESPONSES.COHORT_NOTMAPPED_WITH_USER( removeCohortId, - userId + userId, ), }); } else { results.push({ message: API_RESPONSES.COHORT_STATUS_UPDATED_FOR_USER( removeCohortId, - userId + userId, ), }); } @@ -953,24 +952,21 @@ export class PostgresCohortMembersService { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); errors.push( API_RESPONSES.ERROR_UPDATE_COHORTMEMBER( userId, removeCohortId, - error.message - ) + error.message, + ), ); } } } // Handling of Addition of User in Cohort - if ( - cohortMembersDto?.cohortId && - cohortMembersDto?.cohortId.length > 0 - ) { + if (cohortMembersDto?.cohortId && cohortMembersDto?.cohortId.length > 0) { for (const cohortId of cohortMembersDto.cohortId) { const cohortMembers = { ...cohortMembersBase, @@ -980,11 +976,11 @@ export class PostgresCohortMembersService { try { const cohortExists = await this.isCohortExistForYear( academicyearId, - cohortId + cohortId, ); if (cohortExists.length === 0) { errors.push( - API_RESPONSES.COHORTID_NOTFOUND_FOT_THIS_YEAR(cohortId) + API_RESPONSES.COHORTID_NOTFOUND_FOT_THIS_YEAR(cohortId), ); continue; } @@ -992,13 +988,16 @@ export class PostgresCohortMembersService { const mappingExists = await this.cohortUserMapping( userId, cohortId, - cohortExists[0].cohortAcademicYearId + cohortExists[0].cohortAcademicYearId, ); if (mappingExists) { // if (mappingExists.status === MemberStatus.ACTIVE) { // errors.push(`Mapping already exists for userId ${userId} and cohortId ${cohortId} for this academic year`); errors.push( - API_RESPONSES.MAPPING_EXIST_BW_USER_AND_COHORT(userId, cohortId) + API_RESPONSES.MAPPING_EXIST_BW_USER_AND_COHORT( + userId, + cohortId, + ), ); continue; } @@ -1030,21 +1029,21 @@ export class PostgresCohortMembersService { }; // Need to add User in cohort for Academic year const result = await this.cohortMembersRepository.save( - cohortMemberForAcademicYear + cohortMemberForAcademicYear, ); results.push(result); } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId - ) + apiId, + ); errors.push( API_RESPONSES.ERROR_SAVING_COHORTMEMBER( userId, cohortId, - error.message - ) + error.message, + ), ); } } @@ -1057,7 +1056,7 @@ export class PostgresCohortMembersService { APIID.COHORT_MEMBER_CREATE, { results, errors }, HttpStatus.CREATED, - API_RESPONSES.COHORTMEMBER_ERROR + API_RESPONSES.COHORTMEMBER_ERROR, ); } return APIResponse.success( @@ -1065,7 +1064,7 @@ export class PostgresCohortMembersService { APIID.COHORT_MEMBER_CREATE, results, HttpStatus.CREATED, - API_RESPONSES.COHORTMEMBER_SUCCESSFULLY + API_RESPONSES.COHORTMEMBER_SUCCESSFULLY, ); } @@ -1073,7 +1072,7 @@ export class PostgresCohortMembersService { fieldId: string, value: any, itemId: string, - loggedInUserId: string + loggedInUserId: string, ) { //create const registerResponse = await this.fieldsService.findAndSaveFieldValues({ @@ -1095,7 +1094,7 @@ export class PostgresCohortMembersService { fieldId: fieldId, updatedBy: loggedInUserId, }, - {} + {}, ); if (updateResponse) { return true; @@ -1107,7 +1106,7 @@ export class PostgresCohortMembersService { async processCustomFields( customFields: FieldValuesOptionDto[], cohortMembershipId: string, - cohortMembersUpdateDto: CohortMembersUpdateDto + cohortMembersUpdateDto: CohortMembersUpdateDto, ) { try { const promises = customFields.map((customField) => @@ -1115,8 +1114,8 @@ export class PostgresCohortMembersService { customField.fieldId, customField.value, cohortMembershipId, - cohortMembersUpdateDto.userId - ) + cohortMembersUpdateDto.userId, + ), ); const results = await Promise.all(promises); diff --git a/src/adapters/postgres/fields-adapter.ts b/src/adapters/postgres/fields-adapter.ts index 5869d1d6..eaefdd20 100644 --- a/src/adapters/postgres/fields-adapter.ts +++ b/src/adapters/postgres/fields-adapter.ts @@ -32,8 +32,8 @@ export class PostgresFieldsService implements IServicelocatorfields { @InjectRepository(Fields) private fieldsRepository: Repository, @InjectRepository(FieldValues) - private fieldsValuesRepository: Repository - ) { } + private fieldsValuesRepository: Repository, + ) {} async getFormCustomField(requiredData, response) { const apiId = "FormData"; @@ -41,7 +41,7 @@ export class PostgresFieldsService implements IServicelocatorfields { let whereClause = '(context IS NULL AND "contextType" IS NULL)'; const fileread = readFileSync( join(process.cwd(), "src/utils/corefield.json"), - "utf8" + "utf8", ); const corefield = JSON.parse(fileread); if (!requiredData.context && !requiredData.contextType) { @@ -54,7 +54,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "NOT_FOUND", `Fields not found for the search term`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -62,7 +62,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, data, HttpStatus.OK, - "Fields fetched successfully." + "Fields fetched successfully.", ); } @@ -81,7 +81,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "NOT_FOUND", `Fields not found for the search term`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } if ( @@ -96,13 +96,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, data, HttpStatus.OK, - "Fields fetched successfully." + "Fields fetched successfully.", ); } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId + apiId, ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; @@ -111,7 +111,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -151,10 +151,10 @@ export class PostgresFieldsService implements IServicelocatorfields { getFieldDetails.type == "radio") && getFieldDetails.sourceDetails.source == "table" ) { - let fieldValue = fieldsData["value"][0]; + const fieldValue = fieldsData["value"][0]; const getOption = await this.findDynamicOptions( getFieldDetails.sourceDetails.table, - `"${getFieldDetails?.sourceDetails?.table}_id"='${fieldValue}'` + `"${getFieldDetails?.sourceDetails?.table}_id"='${fieldValue}'`, ); const transformedFieldParams = { options: getOption.flatMap((param) => { @@ -175,11 +175,11 @@ export class PostgresFieldsService implements IServicelocatorfields { } const checkValidation = this.validateFieldValue( getFieldDetails, - fieldsData["value"] + fieldsData["value"], ); if (typeof checkValidation === "object" && "error" in checkValidation) { invalidateFields.push( - `${fieldId}: ${getFieldDetails["name"]} - ${checkValidation?.error?.message}` + `${fieldId}: ${getFieldDetails["name"]} - ${checkValidation?.error?.message}`, ); } } @@ -210,7 +210,7 @@ export class PostgresFieldsService implements IServicelocatorfields { return { isValid: false, error: `The following fields are not valid for this user: ${invalidFieldIds.join( - ", " + ", ", )}.`, }; } @@ -222,7 +222,7 @@ export class PostgresFieldsService implements IServicelocatorfields { public async validateCustomFieldByContext( cohortCreateDto, context: string, - contextType: string + contextType: string, ) { const fieldValues = cohortCreateDto ? cohortCreateDto.customFields : []; const encounteredKeys = []; @@ -254,7 +254,7 @@ export class PostgresFieldsService implements IServicelocatorfields { getFieldDetails.sourceDetails.source == "table" ) { const getOption = await this.findDynamicOptions( - getFieldDetails.sourceDetails.table + getFieldDetails.sourceDetails.table, ); const transformedFieldParams = { options: getOption.map((param) => ({ @@ -269,12 +269,12 @@ export class PostgresFieldsService implements IServicelocatorfields { const checkValidation = this.validateFieldValue( getFieldDetails, - fieldsData["value"] + fieldsData["value"], ); if (typeof checkValidation === "object" && "error" in checkValidation) { invalidateFields.push( - `${fieldId}: ${getFieldDetails["name"]} - ${checkValidation?.error?.message}` + `${fieldId}: ${getFieldDetails["name"]} - ${checkValidation?.error?.message}`, ); } } @@ -306,7 +306,7 @@ export class PostgresFieldsService implements IServicelocatorfields { return { isValid: false, error: `The following fields are not valid for this user: ${invalidFieldIds.join( - ", " + ", ", )}.`, }; } @@ -374,7 +374,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `Fields already exist`, `CONFLICT`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } @@ -399,9 +399,8 @@ export class PostgresFieldsService implements IServicelocatorfields { WHERE value = '${sourceFieldName["value"]}' GROUP BY "name", "value"`; - const checkSourceData = await this.fieldsValuesRepository.query( - query - ); + const checkSourceData = + await this.fieldsValuesRepository.query(query); //If code is not exist in db if (checkSourceData.length === 0) { @@ -412,7 +411,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "BAD_REQUEST", `Error: This code '${sourceFieldName["value"]}' does not exist in the '${fieldsData.sourceDetails.table}' table.`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -423,7 +422,7 @@ export class PostgresFieldsService implements IServicelocatorfields { sourceFieldName["value"], createdBy, sourceFieldName["controllingfieldfk"], - fieldsData.dependsOn + fieldsData.dependsOn, ); } else { //If code is exist in db and isCreate flag is true @@ -433,7 +432,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "CONFLICT", `Error: This code '${sourceFieldName["value"]}' already exists for '${checkSourceData[0].name}' in the '${fieldsData.sourceDetails.table}' table.`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } @@ -443,7 +442,7 @@ export class PostgresFieldsService implements IServicelocatorfields { sourceFieldName["name"], sourceFieldName["value"], updatedBy, - sourceFieldName["controllingfieldfk"] + sourceFieldName["controllingfieldfk"], ); } } @@ -462,13 +461,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, { result, error }, HttpStatus.CREATED, - "Fields created successfully." + "Fields created successfully.", ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); const errorMessage = e?.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -476,7 +475,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -485,7 +484,7 @@ export class PostgresFieldsService implements IServicelocatorfields { fieldId: any, request: any, fieldsUpdateDto: FieldsUpdateDto, - response: Response + response: Response, ) { const apiId = APIID.FIELDS_CREATE; try { @@ -538,9 +537,8 @@ export class PostgresFieldsService implements IServicelocatorfields { WHERE value = '${sourceFieldName["value"]}' GROUP BY "name", "value"`; - const checkSourceData = await this.fieldsValuesRepository.query( - query - ); + const checkSourceData = + await this.fieldsValuesRepository.query(query); //If code is not exist in db if (checkSourceData.length === 0) { @@ -551,7 +549,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "BAD_REQUEST", `Error: This code '${sourceFieldName["value"]}' does not exist in the '${getSourceDetails.sourceDetails.table}' table.`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -562,7 +560,7 @@ export class PostgresFieldsService implements IServicelocatorfields { sourceFieldName["value"], createdBy, sourceFieldName["controllingfieldfk"], - getSourceDetails.dependsOn + getSourceDetails.dependsOn, ); } else { //If code is exist in db and isCreate flag is true @@ -572,7 +570,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "CONFLICT", `Error: This code '${sourceFieldName["value"]}' already exists for '${checkSourceData[0].name}' in the '${getSourceDetails.sourceDetails.table}' table.`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } @@ -582,7 +580,7 @@ export class PostgresFieldsService implements IServicelocatorfields { sourceFieldName["name"], sourceFieldName["value"], updatedBy, - sourceFieldName["controllingfieldfk"] + sourceFieldName["controllingfieldfk"], ); } } @@ -612,7 +610,7 @@ export class PostgresFieldsService implements IServicelocatorfields { if (checkSourceData[0].count == 0) { const addFieldParamsValue = await this.addOptionsInFieldParams( fieldId, - sourceFieldName + sourceFieldName, ); if (addFieldParamsValue !== true) { return APIResponse.error( @@ -620,7 +618,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "Internal Server Error", `Error : ${addFieldParamsValue}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -639,13 +637,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, result, HttpStatus.CREATED, - "Fields updated successfully." + "Fields updated successfully.", ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); const errorMessage = e?.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -653,7 +651,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -693,7 +691,7 @@ export class PostgresFieldsService implements IServicelocatorfields { value: string, createdBy: string, controllingfieldfk?: string, - dependsOn?: string + dependsOn?: string, ) { let createSourceFields = `INSERT INTO public.${tableName} ("name", "value", "createdBy"`; @@ -716,9 +714,8 @@ export class PostgresFieldsService implements IServicelocatorfields { } //Insert data into source table - const checkSourceData = await this.fieldsValuesRepository.query( - createSourceFields - ); + const checkSourceData = + await this.fieldsValuesRepository.query(createSourceFields); if (checkSourceData.length == 0) { return false; } @@ -729,7 +726,7 @@ export class PostgresFieldsService implements IServicelocatorfields { name: string, value: string, updatedBy: string, - controllingfieldfk?: string + controllingfieldfk?: string, ) { let updateSourceDetails = `UPDATE public.${tableName} SET "name"='${name}',"updatedBy"='${updatedBy}'`; @@ -739,9 +736,8 @@ export class PostgresFieldsService implements IServicelocatorfields { updateSourceDetails += ` WHERE value='${value}';`; - const updateSourceData = await this.fieldsValuesRepository.query( - updateSourceDetails - ); + const updateSourceData = + await this.fieldsValuesRepository.query(updateSourceDetails); if (updateSourceData.length == 0) { return false; } @@ -786,7 +782,7 @@ export class PostgresFieldsService implements IServicelocatorfields { tenantId: string, request: any, fieldsSearchDto: FieldsSearchDto, - response: Response + response: Response, ) { const apiId = APIID.FIELDS_SEARCH; try { @@ -796,9 +792,9 @@ export class PostgresFieldsService implements IServicelocatorfields { offset = offset ? offset : 0; const fieldKeys = this.fieldsRepository.metadata.columns.map( - (column) => column.propertyName + (column) => column.propertyName, ); - let tenantCond = tenantId + const tenantCond = tenantId ? `"tenantId" = '${tenantId}'` : `"tenantId" IS NULL`; let whereClause = tenantCond; @@ -819,7 +815,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "BAD_REQUEST", `Invalid Filter Entered : ${key}`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } }); @@ -832,7 +828,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, "NOT_FOUND", `Fields not found for the search term`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -840,13 +836,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, fieldData, HttpStatus.OK, - "Fields fetched successfully." + "Fields fetched successfully.", ); } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId + apiId, ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -854,7 +850,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -872,9 +868,8 @@ export class PostgresFieldsService implements IServicelocatorfields { queryOptions.take = parseInt(limit); } - const [results, totalCount] = await this.fieldsRepository.findAndCount( - queryOptions - ); + const [results, totalCount] = + await this.fieldsRepository.findAndCount(queryOptions); const mappedResponse = await this.mappedResponseField(results); return { mappedResponse, totalCount }; @@ -883,7 +878,7 @@ export class PostgresFieldsService implements IServicelocatorfields { async createFieldValues( request: any, fieldValuesDto: FieldValuesDto, - res: Response + res: Response, ) { const apiId = APIID.FIELDVALUES_CREATE; @@ -895,7 +890,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `Fields not found or already exist`, `Fields not found or already exist`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -903,13 +898,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, result, HttpStatus.CREATED, - "Field Values created successfully" + "Field Values created successfully", ); } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${error.message}`, - apiId + apiId, ); const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -917,7 +912,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -925,7 +920,7 @@ export class PostgresFieldsService implements IServicelocatorfields { async searchFieldValues( request: any, fieldValuesSearchDto: FieldValuesSearchDto, - response: Response + response: Response, ) { const apiId = APIID.FIELDVALUES_SEARCH; try { @@ -937,7 +932,7 @@ export class PostgresFieldsService implements IServicelocatorfields { const getFieldValue = await this.getSearchFieldValueData( offset, limit, - whereClause + whereClause, ); const result = { @@ -950,13 +945,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, result, HttpStatus.OK, - "Field Values fetched successfully." + "Field Values fetched successfully.", ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); const errorMessage = e?.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -964,7 +959,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -972,9 +967,8 @@ export class PostgresFieldsService implements IServicelocatorfields { async getSearchFieldValueData( offset: number, limit: string, - searchData: any + searchData: any, ) { - // Assign user in multiple block // const results = await this.fieldsValuesRepository // .createQueryBuilder("fieldValues") @@ -1007,7 +1001,7 @@ export class PostgresFieldsService implements IServicelocatorfields { async getSearchFieldValueDataByIds( offset: number, limit: string, - searchData: any + searchData: any, ) { const queryOptions: any = { where: { @@ -1047,7 +1041,7 @@ export class PostgresFieldsService implements IServicelocatorfields { async updateFieldValues( id: string, - fieldValuesUpdateDto: FieldValuesUpdateDto + fieldValuesUpdateDto: FieldValuesUpdateDto, ) { try { const fieldsData: any = {}; @@ -1062,7 +1056,7 @@ export class PostgresFieldsService implements IServicelocatorfields { }); const response = await this.fieldsValuesRepository.update( id, - fieldValuesUpdateDto + fieldValuesUpdateDto, ); return response; @@ -1178,7 +1172,7 @@ export class PostgresFieldsService implements IServicelocatorfields { //Get all fields options public async getFieldOptions( fieldsOptionsSearchDto: FieldsOptionsSearchDto, - response: Response + response: Response, ) { const apiId = APIID.FIELDVALUES_SEARCH; try { @@ -1227,33 +1221,33 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `No ControllingFields Found for this Field`, `NOT_FOUND`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } - let foreignKeys = controllingfieldfk.toString(); + const foreignKeys = controllingfieldfk.toString(); whereClause = `"${fetchFieldParams?.dependsOn}_id" IN(${foreignKeys})`; } - + dynamicOptions = await this.findDynamicOptions( fieldName, whereClause, offset, limit, order, - optionName + optionName, ); } else if (fetchFieldParams?.sourceDetails?.source === "jsonFile") { const filePath = path.join( process.cwd(), - `${fetchFieldParams.sourceDetails.filePath}` + `${fetchFieldParams.sourceDetails.filePath}`, ); const getFieldValuesFromJson = JSON.parse( - readFileSync(filePath, "utf-8") + readFileSync(filePath, "utf-8"), ); if (controllingfieldfk) { dynamicOptions = getFieldValuesFromJson.options.filter( - (option) => option?.controllingfieldfk === controllingfieldfk + (option) => option?.controllingfieldfk === controllingfieldfk, ); } else { dynamicOptions = getFieldValuesFromJson; @@ -1261,7 +1255,7 @@ export class PostgresFieldsService implements IServicelocatorfields { } else { if (fetchFieldParams.fieldParams["options"] && controllingfieldfk) { dynamicOptions = fetchFieldParams?.fieldParams["options"].filter( - (option: any) => option?.controllingfieldfk === controllingfieldfk + (option: any) => option?.controllingfieldfk === controllingfieldfk, ); } else { dynamicOptions = fetchFieldParams?.fieldParams["options"]; @@ -1274,7 +1268,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `No data found in ${fieldName} table`, `NOT_FOUND`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -1299,8 +1293,8 @@ export class PostgresFieldsService implements IServicelocatorfields { label: item[labelField], ...Object.fromEntries( Object.entries(item).filter( - ([key]) => !["value", "label"].includes(key) - ) + ([key]) => !["value", "label"].includes(key), + ), ), }; }); @@ -1316,7 +1310,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, result, HttpStatus.OK, - "Field options fetched successfully." + "Field options fetched successfully.", ); } catch (e) { LoggerUtil.error(`${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`); @@ -1326,7 +1320,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1361,7 +1355,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `Please select additional filters. The deletion cannot proceed because multiple fields have the same name.`, `BAD_REQUEST`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -1375,7 +1369,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `Field not found.`, `NOT_FOUND`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -1393,7 +1387,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `Fields option not found`, `NOT_FOUND`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } result = { affected: affectedRow }; @@ -1410,7 +1404,7 @@ export class PostgresFieldsService implements IServicelocatorfields { let fieldParamsData: any = {}; if (fieldParamsOptions) { fieldParamsOptions = fieldParamsOptions.filter( - (option) => option.name !== removeOption + (option) => option.name !== removeOption, ); } fieldParamsData = @@ -1420,7 +1414,7 @@ export class PostgresFieldsService implements IServicelocatorfields { result = await this.fieldsRepository.update( { fieldId: getField.fieldId }, - { fieldParams: fieldParamsData } + { fieldParams: fieldParamsData }, ); } else { return await APIResponse.error( @@ -1428,7 +1422,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, `Fields option not found`, `NOT_FOUND`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } @@ -1438,7 +1432,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, result, HttpStatus.OK, - "Field Options deleted successfully." + "Field Options deleted successfully.", ); } } catch (e) { @@ -1449,7 +1443,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1460,7 +1454,7 @@ export class PostgresFieldsService implements IServicelocatorfields { offset?: any, limit?: any, order?: any, - optionSelected?: any + optionSelected?: any, ) { try { const orderCond = order || ""; @@ -1494,7 +1488,7 @@ export class PostgresFieldsService implements IServicelocatorfields { async findCustomFields( context: string, contextType?: string[], - getFields?: string[] + getFields?: string[], ) { const condition: any = { context, @@ -1515,8 +1509,10 @@ export class PostgresFieldsService implements IServicelocatorfields { condition.contextType = IsNull(); } - const customFields = await this.fieldsRepository.find({ where: [condition, {context: IsNull(), contextType: IsNull()}] }); - + const customFields = await this.fieldsRepository.find({ + where: [condition, { context: IsNull(), contextType: IsNull() }], + }); + return customFields; } @@ -1591,7 +1587,7 @@ export class PostgresFieldsService implements IServicelocatorfields { context: string, contextType?: string, getFields?: string[], - requiredFieldOptions?: boolean + requiredFieldOptions?: boolean, ) { let customField; const fieldsArr = []; @@ -1600,7 +1596,7 @@ export class PostgresFieldsService implements IServicelocatorfields { this.findCustomFields(context, [contextType], getFields), ]); const filledValuesMap = new Map( - filledValues.map((item) => [item.fieldId, item.value]) + filledValues.map((item) => [item.fieldId, item.value]), ); if (customFields) { for (const data of customFields) { @@ -1629,13 +1625,13 @@ export class PostgresFieldsService implements IServicelocatorfields { ) { if (data?.sourceDetails?.source === "table") { const dynamicOptions = await this.findDynamicOptions( - data?.sourceDetails?.table + data?.sourceDetails?.table, ); customField.options = dynamicOptions; } else if (data?.sourceDetails?.source === "jsonFile") { const filePath = path.join( process.cwd(), - `${data?.sourceDetails?.filePath}` + `${data?.sourceDetails?.filePath}`, ); customField = JSON.parse(readFileSync(filePath, "utf-8")); } else { @@ -1652,16 +1648,16 @@ export class PostgresFieldsService implements IServicelocatorfields { } async getEditableFieldsAttributes(tenantId: string) { - let tenantData = tenantId ? tenantId : 'default' + const tenantData = tenantId ? tenantId : "default"; const getFieldsAttributesQuery = ` SELECT * FROM "public"."Fields" WHERE "fieldAttributes"->>'isEditable' = $1; - `; + `; const getFieldsAttributesParams = ["true"]; return await this.fieldsRepository.query( getFieldsAttributesQuery, - getFieldsAttributesParams + getFieldsAttributesParams, ); } @@ -1673,7 +1669,7 @@ export class PostgresFieldsService implements IServicelocatorfields { const result: any = await this.fieldsValuesRepository.update( { itemId, fieldId: data.fieldId }, - { value: data.value } + { value: data.value }, ); let newResult; @@ -1695,25 +1691,25 @@ export class PostgresFieldsService implements IServicelocatorfields { if (!Array.isArray(data.value)) { data.value = [data.value]; } - + const result = await this.fieldsValuesRepository.insert({ itemId, fieldId: data.fieldId, value: data.value, }); - + return { ...result, correctValue: true, }; } - + validateFieldValue(field: any, value: any) { try { const fieldInstance = FieldFactory.createField( field.type, field.fieldAttributes, - field.fieldParams + field.fieldParams, ); const isValid = fieldInstance.validate(value); return isValid; @@ -1739,7 +1735,7 @@ export class PostgresFieldsService implements IServicelocatorfields { })) || []; // let fieldValidation = field.fieldAttributes[tenantId] || field.fieldAttributes["default"]; - let fieldValidation = field.fieldAttributes; + const fieldValidation = field.fieldAttributes; return { label: field.label, @@ -1776,7 +1772,7 @@ export class PostgresFieldsService implements IServicelocatorfields { public async getCustomFieldDetails( itemId: string, tableName: string, - fieldOption?: boolean + fieldOption?: boolean, ) { let joinCond; if (tableName === "Users") { @@ -1808,7 +1804,7 @@ export class PostgresFieldsService implements IServicelocatorfields { let optionValues; // let processedValue = data.value; - let selectedValues = data.value; + const selectedValues = data.value; const allFieldsOptions = data?.fieldParams?.options ? data.fieldParams.options : null; @@ -1845,7 +1841,7 @@ export class PostgresFieldsService implements IServicelocatorfields { const whereCond = `"${data.sourceDetails.table}_id" IN (${allIds})`; const labels = await this.findDynamicOptions( data.sourceDetails.table, - whereCond + whereCond, ); const tableName = data.sourceDetails.table; @@ -1858,7 +1854,7 @@ export class PostgresFieldsService implements IServicelocatorfields { value: data[nameField], })); } else if (data.sourceDetails?.externalsource) { - processedValue = data?.value + processedValue = data?.value; } } else { processedValue = selectedValues; @@ -1877,7 +1873,7 @@ export class PostgresFieldsService implements IServicelocatorfields { } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${error.message}` + `Error: ${error.message}`, ); } } @@ -1891,7 +1887,7 @@ export class PostgresFieldsService implements IServicelocatorfields { } async deleteFieldValues( fieldValuesDeleteDto: FieldValuesDeleteDto, - response: Response + response: Response, ) { const apiId = APIID.FIELDVALUES_DELETE; try { @@ -1912,14 +1908,14 @@ export class PostgresFieldsService implements IServicelocatorfields { conditions .map( (condition, index) => - `(fieldId = :fieldId${index} AND itemId = :itemId${index})` + `(fieldId = :fieldId${index} AND itemId = :itemId${index})`, ) .join(" OR "), conditions.reduce((acc, condition, index) => { acc[`fieldId${index}`] = condition.fieldId; acc[`itemId${index}`] = condition.itemId; return acc; - }, {}) + }, {}), ) .execute(); @@ -1928,13 +1924,13 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, result, HttpStatus.OK, - "Field Values deleted successfully." + "Field Values deleted successfully.", ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); const errorMessage = e?.message || API_RESPONSES.SERVER_ERROR; return APIResponse.error( @@ -1942,7 +1938,7 @@ export class PostgresFieldsService implements IServicelocatorfields { apiId, API_RESPONSES.SERVER_ERROR, `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/adapters/postgres/postgres-module.ts b/src/adapters/postgres/postgres-module.ts index 45a0316b..54ca7705 100644 --- a/src/adapters/postgres/postgres-module.ts +++ b/src/adapters/postgres/postgres-module.ts @@ -27,7 +27,6 @@ import { AutomaticMemberService } from "src/automatic-member/automatic-member.se import { AutomaticMember } from "src/automatic-member/entity/automatic-member.entity"; import { KafkaModule } from "src/kafka/kafka.module"; - @Module({ imports: [ HttpModule, @@ -72,4 +71,4 @@ import { KafkaModule } from "src/kafka/kafka.module"; AutomaticMemberService, ], }) -export class PostgresModule { } +export class PostgresModule {} diff --git a/src/adapters/postgres/rbac/assignrole-adapter.ts b/src/adapters/postgres/rbac/assignrole-adapter.ts index 06b9d044..bc9b05c6 100644 --- a/src/adapters/postgres/rbac/assignrole-adapter.ts +++ b/src/adapters/postgres/rbac/assignrole-adapter.ts @@ -27,12 +27,12 @@ export class PostgresAssignroleService { @InjectRepository(UserRoleMapping) private userRoleMappingRepository: Repository, @InjectRepository(Role) - private roleRepository: Repository + private roleRepository: Repository, ) {} public async createAssignRole( request: Request, createAssignRoleDto: CreateAssignRoleDto, - response: Response + response: Response, ) { const apiId = APIID.USERROLE_CREATE; try { @@ -47,7 +47,7 @@ export class PostgresAssignroleService { apiId, `Roles array cannot be empty.`, "empty array found", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const result = []; @@ -92,8 +92,8 @@ export class PostgresAssignroleService { result.push( new ResponseAssignRoleDto( data, - `Role assigned successfully to the user in the specified tenant.` - ) + `Role assigned successfully to the user in the specified tenant.`, + ), ); } @@ -103,7 +103,7 @@ export class PostgresAssignroleService { apiId, `Please Enter Valid User ID`, "Invalid User ID", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } return APIResponse.success( @@ -116,7 +116,7 @@ export class PostgresAssignroleService { errors, }, HttpStatus.CREATED, - "Role successfully Created" + "Role successfully Created", ); } catch (error) { if (error.code === "23503") { @@ -125,7 +125,7 @@ export class PostgresAssignroleService { apiId, `User Id or Role Id Doesn't Exist in Database`, "Not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } const errorMessage = error.message || "Internal server error"; @@ -134,7 +134,7 @@ export class PostgresAssignroleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -142,7 +142,7 @@ export class PostgresAssignroleService { public async getAssignedRole( userId: string, request: Request, - response: Response + response: Response, ) { const apiId = APIID.USERROLE_GET; try { @@ -152,7 +152,7 @@ export class PostgresAssignroleService { apiId, `Please Enter Valid User ID`, "Invalid User ID", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -163,7 +163,7 @@ export class PostgresAssignroleService { apiId, `User Id or Role Id Doesn't Exist in Database`, "Not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -171,7 +171,7 @@ export class PostgresAssignroleService { apiId, result, HttpStatus.OK, - "User role fetched successfully" + "User role fetched successfully", ); } catch (error) { const errorMessage = error.message || "Internal server error"; @@ -180,14 +180,14 @@ export class PostgresAssignroleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } public async deleteAssignedRole( deleteAssignRoleDto: DeleteAssignRoleDto, - res: Response + res: Response, ) { const apiId = APIID.USERROLE_DELETE; try { @@ -198,7 +198,7 @@ export class PostgresAssignroleService { apiId, `Invalid userId format. Please provide a valid UUID.`, "Invalid UUID", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } // Validate roleId format @@ -209,7 +209,7 @@ export class PostgresAssignroleService { apiId, `Invalid roleId format. Please provide valid UUIDs`, "Invalid UUID", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } @@ -223,7 +223,7 @@ export class PostgresAssignroleService { apiId, `User not found in userRoleMapping table`, "User not found", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } // Check if all roleId(s) exist @@ -240,7 +240,7 @@ export class PostgresAssignroleService { apiId, `Roles not found for the user`, "Roles not found", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } // If all validations pass, proceed with deletion @@ -253,7 +253,7 @@ export class PostgresAssignroleService { apiId, { rowCount: response.affected }, HttpStatus.OK, - "Roles deleted successfully." + "Roles deleted successfully.", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -262,7 +262,7 @@ export class PostgresAssignroleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/adapters/postgres/rbac/privilege-adapter.ts b/src/adapters/postgres/rbac/privilege-adapter.ts index f3c5fa30..39539d88 100644 --- a/src/adapters/postgres/rbac/privilege-adapter.ts +++ b/src/adapters/postgres/rbac/privilege-adapter.ts @@ -23,13 +23,13 @@ export class PostgresPrivilegeService { @InjectRepository(RolePrivilegeMapping) private rolePrivilegeMappingRepository: Repository, @InjectRepository(Role) - private roleRepository: Repository + private roleRepository: Repository, ) {} public async createPrivilege( loggedinUser: any, createPrivilegesDto: CreatePrivilegesDto, - response: Response + response: Response, ) { const privileges = []; const errors = []; @@ -63,7 +63,7 @@ export class PostgresPrivilegeService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } return APIResponse.success( @@ -76,7 +76,7 @@ export class PostgresPrivilegeService { errors, }, HttpStatus.CREATED, - "Privileges successfully Created" + "Privileges successfully Created", ); } @@ -97,7 +97,7 @@ export class PostgresPrivilegeService { public async getPrivilege( privilegeId: string, request: any, - response: Response + response: Response, ) { const apiId = APIID.PRIVILEGE_BYPRIVILEGEID; try { @@ -107,7 +107,7 @@ export class PostgresPrivilegeService { apiId, `Please Enter valid PrivilegeId (UUID)`, "Invalid PrivilegeId (UUID)", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -120,7 +120,7 @@ export class PostgresPrivilegeService { apiId, `Privilege not found`, "Not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -129,7 +129,7 @@ export class PostgresPrivilegeService { apiId, privilege, HttpStatus.OK, - "Privilege fetched successfully" + "Privilege fetched successfully", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -138,7 +138,7 @@ export class PostgresPrivilegeService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -194,7 +194,7 @@ export class PostgresPrivilegeService { APIID.ROLE_GET, { privileges, totalCount }, HttpStatus.OK, - "privileges fetched successfully" + "privileges fetched successfully", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -203,7 +203,7 @@ export class PostgresPrivilegeService { APIID.PRIVILEGE_BYROLEID, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -220,7 +220,7 @@ export class PostgresPrivilegeService { apiId, `Privilege not found`, "Not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } // Delete the privilege @@ -236,7 +236,7 @@ export class PostgresPrivilegeService { APIID.PRIVILEGE_DELETE, { rowCount: response.affected }, HttpStatus.OK, - "Privilege deleted successfully." + "Privilege deleted successfully.", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -245,7 +245,7 @@ export class PostgresPrivilegeService { APIID.PRIVILEGE_DELETE, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -254,7 +254,7 @@ export class PostgresPrivilegeService { tenantId, roleId, request, - response: Response + response: Response, ) { const apiId = APIID.PRIVILEGE_BYROLEID; if (!isUUID(tenantId) || !isUUID(roleId)) { @@ -263,14 +263,14 @@ export class PostgresPrivilegeService { apiId, `Please Enter valid tenantId and roleId (UUID)`, "Invalid Tenant Id or Role Id", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } try { const valid = await this.checkValidTenantIdRoleIdCombination( tenantId, - roleId + roleId, ); if (!valid) { return APIResponse.error( @@ -278,7 +278,7 @@ export class PostgresPrivilegeService { apiId, `Invalid combination of roleId and tenantId`, "Invalid roleId or tenantId ", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -293,7 +293,7 @@ export class PostgresPrivilegeService { const privilegeDto = new PrivilegeDto(item); privilegeDto.title = item.name; return new PrivilegeResponseDto(privilegeDto); - } + }, ); if (!privilegeResponseArray.length) { @@ -302,7 +302,7 @@ export class PostgresPrivilegeService { apiId, `No privileges assigned to the role`, "Not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -310,7 +310,7 @@ export class PostgresPrivilegeService { apiId, privilegeResponseArray, HttpStatus.OK, - "privilege fetched successfully by Role Id" + "privilege fetched successfully by Role Id", ); } catch (error) { const errorMessage = error.message || "Internal server error"; @@ -319,7 +319,7 @@ export class PostgresPrivilegeService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/adapters/postgres/rbac/privilegerole.adapter.ts b/src/adapters/postgres/rbac/privilegerole.adapter.ts index 1032669c..75fabe05 100644 --- a/src/adapters/postgres/rbac/privilegerole.adapter.ts +++ b/src/adapters/postgres/rbac/privilegerole.adapter.ts @@ -12,12 +12,12 @@ import { APIID } from "src/common/utils/api-id.config"; export class PostgresAssignPrivilegeService { constructor( @InjectRepository(RolePrivilegeMapping) - private rolePrivilegeMappingRepository: Repository + private rolePrivilegeMappingRepository: Repository, ) {} public async createPrivilegeRole( request: Request, createPrivilegeRoleDto: CreatePrivilegeRoleDto, - response: Response + response: Response, ) { const apiId = APIID.ASSIGNPRIVILEGE_CREATE; try { @@ -30,7 +30,7 @@ export class PostgresAssignPrivilegeService { roleId: createPrivilegeRoleDto.roleId, tenantId: createPrivilegeRoleDto.tenantId, privilegeId, - }) + }), ); const existingPrivileges = await this.rolePrivilegeMappingRepository.find( { @@ -39,12 +39,12 @@ export class PostgresAssignPrivilegeService { tenantId: createPrivilegeRoleDto.tenantId, privilegeId: In(createPrivilegeRoleDto.privilegeId), }, - } + }, ); const newPrivileges = privilegeRoles.filter((privilegeRole) => { return !existingPrivileges.some( - (existing) => existing.privilegeId === privilegeRole.privilegeId + (existing) => existing.privilegeId === privilegeRole.privilegeId, ); }); @@ -57,7 +57,7 @@ export class PostgresAssignPrivilegeService { apiId, result, HttpStatus.CREATED, - "Privileges assigned successfully." + "Privileges assigned successfully.", ); } catch (error) { if (error.code === "23503") { @@ -66,7 +66,7 @@ export class PostgresAssignPrivilegeService { apiId, "Not Found", `Privilege Id or Role Id Doesn't Exist in Database.`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -75,7 +75,7 @@ export class PostgresAssignPrivilegeService { apiId, "Not Found", `Error is: ${error}.`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } @@ -91,7 +91,7 @@ export class PostgresAssignPrivilegeService { public async getPrivilegeRole( roleId: string, request: Request, - response: Response + response: Response, ) { const apiId = APIID.ASSIGNPRIVILEGE_GET; try { @@ -101,12 +101,12 @@ export class PostgresAssignPrivilegeService { apiId, "Bad Request", "Please Enter Valid User ID.", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const privileges = await this.getPrivilegesForRoleAndTenant( roleId, - request.headers["tenantid"] + request.headers["tenantid"], ); if (!privileges) { @@ -115,7 +115,7 @@ export class PostgresAssignPrivilegeService { apiId, "Not Found", "No Role Found.", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -124,7 +124,7 @@ export class PostgresAssignPrivilegeService { apiId, privileges, HttpStatus.OK, - "Privileges for role fetched successfully." + "Privileges for role fetched successfully.", ); } catch (error) { return APIResponse.error( @@ -132,7 +132,7 @@ export class PostgresAssignPrivilegeService { apiId, "Internal Server Error", `Something went wrong.`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/adapters/postgres/rbac/role-adapter.ts b/src/adapters/postgres/rbac/role-adapter.ts index fb0591ff..f1c63940 100644 --- a/src/adapters/postgres/rbac/role-adapter.ts +++ b/src/adapters/postgres/rbac/role-adapter.ts @@ -15,8 +15,7 @@ import { isUUID } from "class-validator"; import APIResponse from "src/common/responses/response"; import { Response } from "express"; import { APIID } from "src/common/utils/api-id.config"; -import { validate as uuidValidate } from 'uuid'; - +import { validate as uuidValidate } from "uuid"; @Injectable() export class PostgresRoleService { @@ -26,25 +25,28 @@ export class PostgresRoleService { @InjectRepository(UserRoleMapping) private readonly userRoleMappingRepository: Repository, @InjectRepository(RolePrivilegeMapping) - private readonly roleprivilegeMappingRepository: Repository - ) { } + private readonly roleprivilegeMappingRepository: Repository, + ) {} public async createRole( request: any, createRolesDto: CreateRolesDto, - response: Response + response: Response, ) { const apiId = APIID.ROLE_CREATE; const roles = []; const errors = []; try { - if (createRolesDto?.tenantId?.trim() !== '' && !uuidValidate(createRolesDto?.tenantId)) { + if ( + createRolesDto?.tenantId?.trim() !== "" && + !uuidValidate(createRolesDto?.tenantId) + ) { return APIResponse.error( response, apiId, `Please enter valid tenantId or keep blank`, "Invalid Tenant Id", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } else if (uuidValidate(createRolesDto?.tenantId)) { const tenant = await this.checkTenantID(createRolesDto.tenantId); @@ -54,7 +56,7 @@ export class PostgresRoleService { apiId, `Tenant Id not found`, "Tenant Id not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } } @@ -99,7 +101,7 @@ export class PostgresRoleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } return APIResponse.success( @@ -107,7 +109,7 @@ export class PostgresRoleService { apiId, { successCount: roles.length, errorCount: errors.length, roles, errors }, HttpStatus.OK, - "Role successfully Created" + "Role successfully Created", ); } @@ -122,7 +124,7 @@ export class PostgresRoleService { apiId, { roles, totalCount }, HttpStatus.OK, - "Roles fetched successfully" + "Roles fetched successfully", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -131,7 +133,7 @@ export class PostgresRoleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -140,7 +142,7 @@ export class PostgresRoleService { roleId: string, request: any, roleDto: RoleDto, - response: Response + response: Response, ) { const apiId = APIID.ROLE_UPDATE; try { @@ -152,7 +154,7 @@ export class PostgresRoleService { apiId, { rowCount: result.affected }, HttpStatus.OK, - "Roles Updated successful" + "Roles Updated successful", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -161,7 +163,7 @@ export class PostgresRoleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -193,7 +195,7 @@ export class PostgresRoleService { APIID.ROLE_SEARCH, `Please Enter Tenenat id or Valid Filter`, "Invalid Tenant Id or Valid Filter", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } if (whereClause.field && !["Privilege"].includes(whereClause?.field)) { @@ -202,7 +204,7 @@ export class PostgresRoleService { APIID.ROLE_SEARCH, `Please Enter valid field value.`, "Invalid field value.", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } if ( @@ -212,7 +214,7 @@ export class PostgresRoleService { ) { const userRoleMappingData = await this.findUserRoleData( whereClause.userId, - whereClause.tenantId + whereClause.tenantId, ); const roleIds = userRoleMappingData.map((data) => data.roleid); @@ -220,7 +222,7 @@ export class PostgresRoleService { const roles = userRoleMappingData.map((data) => { const roleResult = result.find( - (privilegeData) => privilegeData.roleid === data.roleid + (privilegeData) => privilegeData.roleid === data.roleid, ); return { roleId: data.roleid, @@ -234,7 +236,7 @@ export class PostgresRoleService { apiId, roles, HttpStatus.OK, - "Role For User with Privileges fetched successfully." + "Role For User with Privileges fetched successfully.", ); } else if ( whereClause.userId && @@ -243,23 +245,23 @@ export class PostgresRoleService { ) { const data = await this.findUserRoleData( whereClause.userId, - whereClause.tenantId + whereClause.tenantId, ); return APIResponse.success( response, apiId, data, HttpStatus.OK, - "Role For User Id fetched successfully." + "Role For User Id fetched successfully.", ); } else if (whereClause.tenantId && whereClause.field === "Privilege") { const userRoleData = await this.findRoleData(whereClause.tenantId); const result = await this.findPrivilegeByRoleId( - userRoleData.map((data) => data.roleId) + userRoleData.map((data) => data.roleId), ); const roles = userRoleData.map((data) => { const roleResult = result.find( - (privilegeData) => privilegeData.roleid === data.roleId + (privilegeData) => privilegeData.roleid === data.roleId, ); return { roleId: data.roleId, @@ -273,7 +275,7 @@ export class PostgresRoleService { apiId, roles, HttpStatus.OK, - "Role For Tenant with Privileges fetched successfully." + "Role For Tenant with Privileges fetched successfully.", ); } else if (whereClause.tenantId && !whereClause.field) { const data = await this.findRoleData(whereClause.tenantId); @@ -282,7 +284,7 @@ export class PostgresRoleService { apiId, data, HttpStatus.OK, - "Role For Tenant fetched successfully." + "Role For Tenant fetched successfully.", ); } else { return APIResponse.error( @@ -290,7 +292,7 @@ export class PostgresRoleService { APIID.ROLE_SEARCH, `Please Enter Valid Filter`, "Invalid Filter", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } catch (e) { @@ -300,7 +302,7 @@ export class PostgresRoleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -314,7 +316,7 @@ export class PostgresRoleService { apiId, `Please Enter valid (UUID)`, "Invalid UUID", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -328,7 +330,7 @@ export class PostgresRoleService { apiId, `Role not found`, "Not found", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } // Delete the role @@ -349,7 +351,7 @@ export class PostgresRoleService { apiId, { rowCount: response.affected }, HttpStatus.OK, - "Role deleted successfully." + "Role deleted successfully.", ); } catch (e) { const errorMessage = e.message || "Internal server error"; @@ -358,7 +360,7 @@ export class PostgresRoleService { apiId, "Internal Server Error", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/adapters/postgres/user-adapter.ts b/src/adapters/postgres/user-adapter.ts index 516380b5..3c12d51d 100644 --- a/src/adapters/postgres/user-adapter.ts +++ b/src/adapters/postgres/user-adapter.ts @@ -3,7 +3,10 @@ import { User } from "../../user/entities/user-entity"; import { FieldValues } from "src/fields/entities/fields-values.entity"; import { InjectRepository } from "@nestjs/typeorm"; import { DataSource, ILike, In, Repository } from "typeorm"; -import { tenantRoleMappingDto, UserCreateDto } from "../../user/dto/user-create.dto"; +import { + tenantRoleMappingDto, + UserCreateDto, +} from "../../user/dto/user-create.dto"; import jwt_decode from "jwt-decode"; import { getKeycloakAdminToken, @@ -16,7 +19,11 @@ import { ErrorResponse } from "src/error-response"; import { SuccessResponse } from "src/success-response"; import { CohortMembers } from "src/cohortMembers/entities/cohort-member.entity"; import { isUUID } from "class-validator"; -import { ExistUserDto, SuggestUserDto, UserSearchDto } from "src/user/dto/user-search.dto"; +import { + ExistUserDto, + SuggestUserDto, + UserSearchDto, +} from "src/user/dto/user-search.dto"; import { UserTenantMapping } from "src/userTenantMapping/entities/user-tenant-mapping.entity"; import { UserRoleMapping } from "src/rbac/assign-role/entities/assign-role.entity"; import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; @@ -44,7 +51,7 @@ import { OtpSendDTO } from "src/user/dto/otpSend.dto"; import { OtpVerifyDTO } from "src/user/dto/otpVerify.dto"; import { SendPasswordResetOTPDto } from "src/user/dto/passwordReset.dto"; import { ActionType, UserUpdateDTO } from "src/user/dto/user-update.dto"; -import { randomInt } from 'crypto'; +import { randomInt } from "crypto"; import { UUID } from "aws-sdk/clients/cloudtrail"; import { AutomaticMemberService } from "src/automatic-member/automatic-member.service"; import { KafkaService } from "src/kafka/kafka.service"; @@ -95,34 +102,35 @@ export class PostgresUserService implements IServicelocator { private readonly authUtils: AuthUtils, private readonly automaticMemberService: AutomaticMemberService, private readonly kafkaService: KafkaService, - dataSource: DataSource + dataSource: DataSource, ) { this.jwt_secret = this.configService.get("RBAC_JWT_SECRET"); this.jwt_password_reset_expires_In = this.configService.get( - "PASSWORD_RESET_JWT_EXPIRES_IN" + "PASSWORD_RESET_JWT_EXPIRES_IN", ); this.reset_frontEnd_url = this.configService.get("RESET_FRONTEND_URL"); - this.otpExpiry = this.configService.get('OTP_EXPIRY') || 10; // default: 10 minutes - this.otpDigits = this.configService.get('OTP_DIGITS') || 6; - this.smsKey = this.configService.get('SMS_KEY'); - this.msg91TemplateKey = this.configService.get('MSG91_TEMPLATE_KEY'); + this.otpExpiry = this.configService.get("OTP_EXPIRY") || 10; // default: 10 minutes + this.otpDigits = this.configService.get("OTP_DIGITS") || 6; + this.smsKey = this.configService.get("SMS_KEY"); + this.msg91TemplateKey = + this.configService.get("MSG91_TEMPLATE_KEY"); this.dataSource = dataSource; // Store dataSource in class property } - public async getCoreColumnNames() { const userMetadata = this.dataSource.getMetadata(User); - const columnNames = userMetadata.columns.map((column) => column.propertyName); + const columnNames = userMetadata.columns.map( + (column) => column.propertyName, + ); return columnNames; } - public async sendPasswordResetLink( request: any, username: string, redirectUrl: string, - response: Response + response: Response, ) { const apiId = APIID.USER_RESET_PASSWORD_LINK; try { @@ -134,7 +142,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USERNAME_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } // Determine email address @@ -151,7 +159,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.EMAIL_NOT_FOUND_FOR_RESET, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -166,7 +174,7 @@ export class PostgresUserService implements IServicelocator { const resetToken = await this.jwtUtil.generateTokenForForgotPassword( tokenPayload, jwtExpireTime, - jwtSecretKey + jwtSecretKey, ); // Format expiration time @@ -194,22 +202,21 @@ export class PostgresUserService implements IServicelocator { }, }; - const mailSend = await this.notificationRequest.sendNotification( - notificationPayload - ); + const mailSend = + await this.notificationRequest.sendNotification(notificationPayload); if (mailSend?.result?.email?.errors.length > 0) { LoggerUtil.error( `${API_RESPONSES.BAD_REQUEST}`, `Error: ${API_RESPONSES.RESET_PASSWORD_LINK_FAILED}`, - apiId + apiId, ); return APIResponse.error( response, apiId, mailSend?.result?.email?.errors, API_RESPONSES.RESET_PASSWORD_LINK_FAILED, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -218,20 +225,20 @@ export class PostgresUserService implements IServicelocator { apiId, { email: emailOfUser }, HttpStatus.OK, - API_RESPONSES.RESET_PASSWORD_LINK_SUCCESS + API_RESPONSES.RESET_PASSWORD_LINK_SUCCESS, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.INTERNAL_SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, `Error : ${e.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -239,14 +246,14 @@ export class PostgresUserService implements IServicelocator { async forgotPassword( request: any, body: any, - response: Response> + response: Response>, ) { const apiId = APIID.USER_FORGOT_PASSWORD; try { const jwtSecretKey = this.jwt_secret; const decoded = await this.jwtUtil.validateToken( body.token, - jwtSecretKey + jwtSecretKey, ); const userDetail = await this.usersRepository.findOne({ where: { userId: decoded.sub }, @@ -255,19 +262,19 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.error( `${API_RESPONSES.NOT_FOUND}`, API_RESPONSES.USERNAME_NOT_FOUND, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USER_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } const userData: any = await this.findUserDetails( null, - userDetail.username + userDetail.username, ); const keycloakResponse = await getKeycloakAdminToken(); const keyClocktoken = keycloakResponse.data.access_token; @@ -278,7 +285,7 @@ export class PostgresUserService implements IServicelocator { userData, keyClocktoken, body.newPassword, - userDetail.userId + userDetail.userId, ); //update tempPassword status if (apiResponse?.statusCode === 204) { @@ -292,7 +299,7 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.error( `${API_RESPONSES.INTERNAL_SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( @@ -300,7 +307,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, `Error : ${e?.response?.data.error}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } @@ -309,7 +316,7 @@ export class PostgresUserService implements IServicelocator { apiId, {}, HttpStatus.OK, - API_RESPONSES.FORGOT_PASSWORD_SUCCESS + API_RESPONSES.FORGOT_PASSWORD_SUCCESS, ); } catch (e) { if (e instanceof TokenExpiredError) { @@ -319,7 +326,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.LINK_EXPIRED, API_RESPONSES.INVALID_LINK, - HttpStatus.UNAUTHORIZED + HttpStatus.UNAUTHORIZED, ); } else if (e.name === "InvalidTokenError") { // Handle the case where the token is invalid @@ -328,7 +335,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.INVALID_TOKEN, API_RESPONSES.UNAUTHORIZED, - HttpStatus.UNAUTHORIZED + HttpStatus.UNAUTHORIZED, ); } else if (e instanceof JsonWebTokenError) { // Handle the case where the token is invalid @@ -337,7 +344,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.INVALID_TOKEN, API_RESPONSES.UNAUTHORIZED, - HttpStatus.UNAUTHORIZED + HttpStatus.UNAUTHORIZED, ); } return APIResponse.error( @@ -345,7 +352,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, `Error : ${e?.response?.data.error}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -354,7 +361,7 @@ export class PostgresUserService implements IServicelocator { tenantId: string, request: any, response: any, - userSearchDto: UserSearchDto + userSearchDto: UserSearchDto, ) { const apiId = APIID.USER_LIST; try { @@ -364,14 +371,14 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.error( `${API_RESPONSES.NOT_FOUND}: ${request.url}`, API_RESPONSES.USER_NOT_FOUND, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.USER_NOT_FOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } LoggerUtil.log(API_RESPONSES.USER_GET_SUCCESSFULLY, apiId); @@ -380,13 +387,13 @@ export class PostgresUserService implements IServicelocator { apiId, findData, HttpStatus.OK, - API_RESPONSES.USER_GET_SUCCESSFULLY + API_RESPONSES.USER_GET_SUCCESSFULLY, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, `Error: ${e.message}`, - apiId + apiId, ); const errorMessage = e.message || API_RESPONSES.SERVER_ERROR; @@ -395,12 +402,11 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } - async findAllUserDetails(userSearchDto) { let { limit, offset, filters, exclude, sort } = userSearchDto; let excludeCohortIdes; @@ -418,16 +424,22 @@ export class PostgresUserService implements IServicelocator { const searchCustomFields: any = {}; const userAllKeys = this.usersRepository.metadata.columns.map( - (column) => column.propertyName + (column) => column.propertyName, ); const userKeys = userAllKeys.filter( - (key) => key !== "district" && key !== "state" + (key) => key !== "district" && key !== "state", ); if (filters && Object.keys(filters).length > 0) { //Fwtch all core fields - let coreFields = await this.getCoreColumnNames(); - const allCoreField = [...coreFields, 'fromDate', 'toDate', 'role', 'tenantId']; + const coreFields = await this.getCoreColumnNames(); + const allCoreField = [ + ...coreFields, + "fromDate", + "toDate", + "role", + "tenantId", + ]; for (const [key, value] of Object.entries(filters)) { //Check request filter are proesent on core file or cutom fields @@ -445,8 +457,13 @@ export class PostgresUserService implements IServicelocator { case "email": case "username": case "userId": - if (Array.isArray(value) && value.every((item) => typeof item === "string")) { - const status = value.map((item) => `'${item.trim().toLowerCase()}'`).join(","); + if ( + Array.isArray(value) && + value.every((item) => typeof item === "string") + ) { + const status = value + .map((item) => `'${item.trim().toLowerCase()}'`) + .join(","); whereCondition += ` U."${key}" IN(${status})`; } else { whereCondition += ` U."${key}" = '${value}'`; @@ -510,12 +527,11 @@ export class PostgresUserService implements IServicelocator { //If source config in source details from fields table is not exist then return false if (Object.keys(searchCustomFields).length > 0) { - const context = "USERS"; getUserIdUsingCustomFields = await this.fieldsService.filterUserUsingCustomFields( context, - searchCustomFields + searchCustomFields, ); if (getUserIdUsingCustomFields == null) { @@ -573,16 +589,17 @@ export class PostgresUserService implements IServicelocator { // Get user custom field data for (const userData of userDetails) { const customFields = await this.fieldsService.getCustomFieldDetails( - userData.userId, 'Users' + userData.userId, + "Users", ); userData["customFields"] = Array.isArray(customFields) ? customFields.map((data) => ({ - fieldId: data?.fieldId, - label: data?.label, - selectedValues: data?.selectedValues, - type: data?.type, - })) + fieldId: data?.fieldId, + label: data?.label, + selectedValues: data?.selectedValues, + type: data?.type, + })) : []; result.getUserDetails.push(userData); @@ -602,7 +619,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, `Error: ${API_RESPONSES.UUID_VALIDATION}`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const checkExistUser = await this.usersRepository.find({ @@ -610,14 +627,14 @@ export class PostgresUserService implements IServicelocator { userId: userData.userId, }, }); - + if (checkExistUser.length == 0) { return APIResponse.error( response, apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USERID_NOT_FOUND(userData.userId), - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -644,7 +661,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USERNAME_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } if (!userData.fieldValue) { @@ -654,7 +671,7 @@ export class PostgresUserService implements IServicelocator { apiId, { userData: userDetails }, HttpStatus.OK, - API_RESPONSES.USER_GET_SUCCESSFULLY + API_RESPONSES.USER_GET_SUCCESSFULLY, ); } @@ -665,7 +682,8 @@ export class PostgresUserService implements IServicelocator { const contextType = roleInUpper; // customFields = await this.fieldsService.getFieldValuesData(userData.userId, context, contextType, ['All'], true); customFields = await this.fieldsService.getCustomFieldDetails( - userData.userId, 'Users' + userData.userId, + "Users", ); } @@ -675,7 +693,7 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.log( API_RESPONSES.USER_GET_SUCCESSFULLY, apiId, - userData?.userId + userData?.userId, ); return await APIResponse.success( @@ -683,20 +701,20 @@ export class PostgresUserService implements IServicelocator { apiId, { ...result }, HttpStatus.OK, - API_RESPONSES.USER_GET_SUCCESSFULLY + API_RESPONSES.USER_GET_SUCCESSFULLY, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -774,7 +792,7 @@ export class PostgresUserService implements IServicelocator { } const tenantData = tenantId ? tenentDetails.filter((item) => item.tenantId === tenantId) - : tenentDetails; + : tenentDetails; userDetails["tenantData"] = tenantData; return userDetails; @@ -802,16 +820,16 @@ export class PostgresUserService implements IServicelocator { UTM."userId" = $1 ORDER BY T."tenantId", UTM."Id";`; - + const result = await this.usersRepository.query(query, [userId]); const combinedResult = []; const roleArray = []; for (const data of result) { const roleData = await this.postgresRoleService.findUserRoleData( userId, - data.tenantId + data.tenantId, ); - + if (roleData.length > 0) { roleArray.push(roleData[0].roleid); const roleId = roleData[0].roleid; @@ -846,14 +864,16 @@ export class PostgresUserService implements IServicelocator { const updatedData = {}; const editIssues = {}; - const user = await this.usersRepository.findOne({ where: { userId: userDto.userId } }); + const user = await this.usersRepository.findOne({ + where: { userId: userDto.userId }, + }); if (!user) { return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.USER_NOT_FOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -862,17 +882,23 @@ export class PostgresUserService implements IServicelocator { let deviceIds: any; if (userDto.userData.action === ActionType.ADD) { // add deviceId - deviceIds = await this.loginDeviceIdAction(userDto.userData.deviceId, userDto.userId, user.deviceId) + deviceIds = await this.loginDeviceIdAction( + userDto.userData.deviceId, + userDto.userId, + user.deviceId, + ); userDto.userData.deviceId = deviceIds; - } else if (userDto.userData.action === ActionType.REMOVE) { //remove deviceId - deviceIds = await this.onLogoutDeviceId(userDto.userData.deviceId, userDto.userId, user.deviceId) + deviceIds = await this.onLogoutDeviceId( + userDto.userData.deviceId, + userDto.userId, + user.deviceId, + ); userDto.userData.deviceId = deviceIds; } } - const { username, firstName, lastName, email } = userDto.userData; const userId = userDto.userId; const keycloakReqBody = { username, firstName, lastName, userId, email }; @@ -880,15 +906,16 @@ export class PostgresUserService implements IServicelocator { //Update userdetails on keycloak if (username || firstName || lastName || email) { try { - const keycloakUpdateResult = await this.updateUsernameInKeycloak(keycloakReqBody); + const keycloakUpdateResult = + await this.updateUsernameInKeycloak(keycloakReqBody); - if (keycloakUpdateResult === 'exists') { + if (keycloakUpdateResult === "exists") { return APIResponse.error( response, apiId, API_RESPONSES.USERNAME_EXISTS_KEYCLOAK, API_RESPONSES.USERNAME_EXISTS_KEYCLOAK, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } @@ -898,21 +925,21 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.UPDATE_USER_KEYCLOAK_ERROR, API_RESPONSES.UPDATE_USER_KEYCLOAK_ERROR, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } catch (error) { LoggerUtil.error( API_RESPONSES.SERVER_ERROR, `Keycloak update failed: ${error.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, API_RESPONSES.UPDATE_USER_KEYCLOAK_ERROR, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -925,12 +952,14 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.log( API_RESPONSES.USER_BASIC_DETAILS_UPDATE, apiId, - userDto?.userId + userDto?.userId, ); if (userDto?.customFields?.length > 0) { const getFieldsAttributes = - await this.fieldsService.getEditableFieldsAttributes(userDto.userData.tenantId); + await this.fieldsService.getEditableFieldsAttributes( + userDto.userData.tenantId, + ); const isEditableFieldId = []; const fieldIdAndAttributes = {}; @@ -946,7 +975,7 @@ export class PostgresUserService implements IServicelocator { const result = await this.fieldsService.updateCustomFields( userDto.userId, data, - fieldIdAndAttributes[data.fieldId] + fieldIdAndAttributes[data.fieldId], ); if (result.correctValue) { if (!updatedData["customFields"]) @@ -954,7 +983,7 @@ export class PostgresUserService implements IServicelocator { updatedData["customFields"].push(result); } else { editFailures.push( - `${data.fieldId}: ${result?.valueIssue} - ${result.fieldName}` + `${data.fieldId}: ${result?.valueIssue} - ${result.fieldName}`, ); } } else { @@ -970,54 +999,84 @@ export class PostgresUserService implements IServicelocator { } if (userDto.automaticMember && userDto?.automaticMember?.value === true) { - let assignTo; //Find Assign field value from custom fields - let foundField = userDto.customFields.find(field => field.fieldId === userDto.automaticMember.fieldId); + const foundField = userDto.customFields.find( + (field) => field.fieldId === userDto.automaticMember.fieldId, + ); if (foundField) { assignTo = foundField.value; } // Check if an active automated member exists for the given userId, tenantId, and assigned ID. - const checkAutomaticMemberExists = await this.automaticMemberService.checkAutomaticMemberExists(userId, userDto.userData.tenantId, foundField.value[0]); + const checkAutomaticMemberExists = + await this.automaticMemberService.checkAutomaticMemberExists( + userId, + userDto.userData.tenantId, + foundField.value[0], + ); - if (checkAutomaticMemberExists.length > 0 && checkAutomaticMemberExists[0].isActive === true) { + if ( + checkAutomaticMemberExists.length > 0 && + checkAutomaticMemberExists[0].isActive === true + ) { return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, `User already assign to that ${userDto.automaticMember.fieldName}`, // which uuid is needed ? - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - - if (checkAutomaticMemberExists.length > 0 && checkAutomaticMemberExists[0].isActive === false) { + if ( + checkAutomaticMemberExists.length > 0 && + checkAutomaticMemberExists[0].isActive === false + ) { // deactivate the current active automatic membership for the user in tenantId. - const getActiveAutomaticMembershipId = await this.automaticMemberService.getUserbyUserIdAndTenantId(userId, userDto.userData.tenantId, true); + const getActiveAutomaticMembershipId = + await this.automaticMemberService.getUserbyUserIdAndTenantId( + userId, + userDto.userData.tenantId, + true, + ); - if (getActiveAutomaticMembershipId && getActiveAutomaticMembershipId.isActive === true) { - await this.automaticMemberService.update(getActiveAutomaticMembershipId.id, { isActive: false }) + if ( + getActiveAutomaticMembershipId && + getActiveAutomaticMembershipId.isActive === true + ) { + await this.automaticMemberService.update( + getActiveAutomaticMembershipId.id, + { isActive: false }, + ); } // Activate the old inactive automatic membership for the user in tenantId and assigned ID. - await this.automaticMemberService.update(checkAutomaticMemberExists[0].id, { isActive: true }) + await this.automaticMemberService.update( + checkAutomaticMemberExists[0].id, + { isActive: true }, + ); return await APIResponse.success( response, apiId, { ...updatedData, editIssues }, HttpStatus.OK, - API_RESPONSES.USER_UPDATED_SUCCESSFULLY + API_RESPONSES.USER_UPDATED_SUCCESSFULLY, ); } - await this.updateAutomaticMemberMapping(userDto.automaticMember, assignTo, userId, userDto.userData.tenantId) + await this.updateAutomaticMemberMapping( + userDto.automaticMember, + assignTo, + userId, + userDto.userData.tenantId, + ); } LoggerUtil.log( API_RESPONSES.USER_UPDATED_SUCCESSFULLY, apiId, - userDto?.userId + userDto?.userId, ); // Send response to the client @@ -1026,23 +1085,24 @@ export class PostgresUserService implements IServicelocator { apiId, { ...updatedData, editIssues }, HttpStatus.OK, - API_RESPONSES.USER_UPDATED_SUCCESSFULLY + API_RESPONSES.USER_UPDATED_SUCCESSFULLY, ); // Produce user updated event to Kafka asynchronously - after response is sent to client - this.publishUserEvent('updated', userDto.userId, apiId) - .catch(error => LoggerUtil.error( + this.publishUserEvent("updated", userDto.userId, apiId).catch((error) => + LoggerUtil.error( `Failed to publish user updated event to Kafka`, `Error: ${error.message}`, - apiId - )); - + apiId, + ), + ); + return apiResponse; } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( @@ -1050,7 +1110,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.SERVER_ERROR, API_RESPONSES.SOMETHING_WRONG, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1058,17 +1118,32 @@ export class PostgresUserService implements IServicelocator { throw new Error("Method not implemented."); } - async updateAutomaticMemberMapping(automaticMember: any, fieldValue: any, userId: UUID, tenantId: UUID) { - + async updateAutomaticMemberMapping( + automaticMember: any, + fieldValue: any, + userId: UUID, + tenantId: UUID, + ) { try { // deactivate the current active automatic membership for the user in tenantId. - const getActiveAutomaticMembershipId = await this.automaticMemberService.getUserbyUserIdAndTenantId(userId, tenantId, true); + const getActiveAutomaticMembershipId = + await this.automaticMemberService.getUserbyUserIdAndTenantId( + userId, + tenantId, + true, + ); - if (getActiveAutomaticMembershipId && getActiveAutomaticMembershipId.isActive === true) { - await this.automaticMemberService.update(getActiveAutomaticMembershipId.id, { isActive: false }) + if ( + getActiveAutomaticMembershipId && + getActiveAutomaticMembershipId.isActive === true + ) { + await this.automaticMemberService.update( + getActiveAutomaticMembershipId.id, + { isActive: false }, + ); } - let createAutomaticMember = { + const createAutomaticMember = { userId: userId, rules: { condition: { @@ -1083,40 +1158,40 @@ export class PostgresUserService implements IServicelocator { // } }, tenantId: tenantId, - isActive: true - } + isActive: true, + }; //Assgn member to sdb - await this.automaticMemberService.create(createAutomaticMember) - + await this.automaticMemberService.create(createAutomaticMember); } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${error.message}` + `Error: ${error.message}`, ); throw new Error(error); } } - async updateUsernameInKeycloak(updateField: UpdateField): Promise<'exists' | false | true> { + async updateUsernameInKeycloak( + updateField: UpdateField, + ): Promise<"exists" | false | true> { try { - const keycloakResponse = await getKeycloakAdminToken(); const token = keycloakResponse.data.access_token; //Check user is exist in keycloakDB or not - const checkUserinKeyCloakandDb = await this.checkUserinKeyCloakandDb(updateField); + const checkUserinKeyCloakandDb = + await this.checkUserinKeyCloakandDb(updateField); if (checkUserinKeyCloakandDb) { - return 'exists'; + return "exists"; } //Update user in keyCloakService - let updateResult = await updateUserInKeyCloak(updateField, token) + const updateResult = await updateUserInKeyCloak(updateField, token); if (updateResult.success === false) { return false; } return true; - } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, @@ -1126,8 +1201,12 @@ export class PostgresUserService implements IServicelocator { } } - async loginDeviceIdAction(userDeviceId: string, userId: string, existingDeviceId: string[]): Promise { - let deviceIds = existingDeviceId || []; + async loginDeviceIdAction( + userDeviceId: string, + userId: string, + existingDeviceId: string[], + ): Promise { + const deviceIds = existingDeviceId || []; // Check if the device ID already exists if (deviceIds.includes(userDeviceId)) { return deviceIds; // No action if device ID already exists @@ -1141,18 +1220,25 @@ export class PostgresUserService implements IServicelocator { return deviceIds; // Return the updated device list } - async onLogoutDeviceId(deviceIdforRemove: string, userId: string, existingDeviceId: string[]) { + async onLogoutDeviceId( + deviceIdforRemove: string, + userId: string, + existingDeviceId: string[], + ) { let deviceIds = existingDeviceId || []; // Check if the device ID exists if (!deviceIds.includes(deviceIdforRemove)) { return deviceIds; // No action if device ID does not exist } // Remove the device ID - deviceIds = deviceIds.filter(id => id !== deviceIdforRemove); + deviceIds = deviceIds.filter((id) => id !== deviceIdforRemove); return deviceIds; } - async updateBasicUserDetails(userId: string, userData: Partial): Promise { + async updateBasicUserDetails( + userId: string, + userData: Partial, + ): Promise { try { // Fetch the user by ID const user = await this.usersRepository.findOne({ where: { userId } }); @@ -1163,36 +1249,34 @@ export class PostgresUserService implements IServicelocator { await Object.assign(user, userData); return this.usersRepository.save(user); - } catch (error) { // Re-throw or handle the error as needed - throw new Error('An error occurred while updating user details'); + throw new Error("An error occurred while updating user details"); } } - async createUser( request: any, userCreateDto: UserCreateDto, academicYearId: string, - response: Response + response: Response, ) { const apiId = APIID.USER_CREATE; const startTime = Date.now(); const stepTimings = {}; - + const userContext = { username: userCreateDto?.username, email: userCreateDto?.email, firstName: userCreateDto?.firstName, - lastName: userCreateDto?.lastName + lastName: userCreateDto?.lastName, }; // Log user creation attempt with context LoggerUtil.log( `User creation attempt started for ${userContext.username}`, apiId, - userContext.username + userContext.username, ); try { @@ -1203,7 +1287,7 @@ export class PostgresUserService implements IServicelocator { userCreateDto.createdBy = decoded?.sub; userCreateDto.updatedBy = decoded?.sub; } - stepTimings['jwt_extraction'] = Date.now() - jwtStartTime; + stepTimings["jwt_extraction"] = Date.now() - jwtStartTime; // Step 2: Validate custom fields const customFieldStartTime = Date.now(); @@ -1212,7 +1296,7 @@ export class PostgresUserService implements IServicelocator { customFieldError = await this.validateCustomField( userCreateDto, response, - apiId + apiId, ); if (customFieldError) { @@ -1221,17 +1305,18 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, `${customFieldError}`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } - stepTimings['custom_field_validation'] = Date.now() - customFieldStartTime; + stepTimings["custom_field_validation"] = + Date.now() - customFieldStartTime; // Step 3: Validate request body and roles const validationStartTime = Date.now(); const validatedRoles: any = await this.validateRequestBody( userCreateDto, - academicYearId + academicYearId, ); // check if roles are invalid and academic year is provided @@ -1243,36 +1328,40 @@ export class PostgresUserService implements IServicelocator { `Role validation failed for ${userContext.username}`, validatedRoles.join("; "), apiId, - userContext.username + userContext.username, ); return APIResponse.error( response, apiId, "BAD_REQUEST", validatedRoles.join("; "), - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - stepTimings['request_validation'] = Date.now() - validationStartTime; + stepTimings["request_validation"] = Date.now() - validationStartTime; // Step 4: Validate automatic member vs cohort assignment const businessLogicStartTime = Date.now(); - if (userCreateDto.automaticMember?.value === true && userCreateDto.tenantCohortRoleMapping?.[0]?.cohortIds?.length > 0) { + if ( + userCreateDto.automaticMember?.value === true && + userCreateDto.tenantCohortRoleMapping?.[0]?.cohortIds?.length > 0 + ) { LoggerUtil.error( `Invalid operation for ${userContext.username}: Cannot assign automatic member with cohort`, `User cannot be assigned as automatic member while also being assigned to a center`, apiId, - userContext.username + userContext.username, ); return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, `Error : Invalid operation: A user cannot be assigned as an automatic member while also being assigned to a center simultaneously. Please select only one option.`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - stepTimings['business_logic_validation'] = Date.now() - businessLogicStartTime; + stepTimings["business_logic_validation"] = + Date.now() - businessLogicStartTime; // Step 5: Prepare username and check Keycloak const keycloakCheckStartTime = Date.now(); @@ -1281,54 +1370,58 @@ export class PostgresUserService implements IServicelocator { const keycloakResponse = await getKeycloakAdminToken(); const token = keycloakResponse.data.access_token; - const checkUserinKeyCloakandDb = await this.checkUserinKeyCloakandDb( - userCreateDto - ); - + const checkUserinKeyCloakandDb = + await this.checkUserinKeyCloakandDb(userCreateDto); + if (checkUserinKeyCloakandDb) { LoggerUtil.error( `User ${userContext.username} already exists`, `User with username ${userCreateDto.username} or email ${userCreateDto.email} already exists`, apiId, - userContext.username + userContext.username, ); return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.USER_EXISTS, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - stepTimings['keycloak_user_check'] = Date.now() - keycloakCheckStartTime; + stepTimings["keycloak_user_check"] = Date.now() - keycloakCheckStartTime; // Step 6: Create user in Keycloak const keycloakCreateStartTime = Date.now(); LoggerUtil.log( `Creating user ${userContext.username} in Keycloak`, apiId, - userContext.username + userContext.username, ); - const resKeycloak = await createUserInKeyCloak(userSchema, token, validatedRoles[0]?.title) + const resKeycloak = await createUserInKeyCloak( + userSchema, + token, + validatedRoles[0]?.title, + ); // Capture Keycloak creation timing immediately after the call - stepTimings['keycloak_user_creation'] = Date.now() - keycloakCreateStartTime; + stepTimings["keycloak_user_creation"] = + Date.now() - keycloakCreateStartTime; // Handle the case where createUserInKeyCloak returns a string (error) - if (typeof resKeycloak === 'string') { + if (typeof resKeycloak === "string") { LoggerUtil.error( `Keycloak user creation failed for ${userContext.username}`, resKeycloak, apiId, - userContext.username + userContext.username, ); return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, resKeycloak, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } @@ -1338,7 +1431,7 @@ export class PostgresUserService implements IServicelocator { `Email already exists in Keycloak for ${userContext.username}`, `${resKeycloak.message} ${resKeycloak.email}`, apiId, - userContext.username + userContext.username, ); return APIResponse.error( @@ -1346,21 +1439,21 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.EMAIL_EXIST, `${resKeycloak.message} ${resKeycloak.email}`, - HttpStatus.CONFLICT + HttpStatus.CONFLICT, ); } else { LoggerUtil.error( `Keycloak user creation failed for ${userContext.username}`, `${resKeycloak.message}`, apiId, - userContext.username + userContext.username, ); return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, `${resKeycloak.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1368,7 +1461,7 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.log( `User ${userContext.username} created successfully in Keycloak`, apiId, - userContext.username + userContext.username, ); userCreateDto.userId = resKeycloak.userId; @@ -1378,21 +1471,21 @@ export class PostgresUserService implements IServicelocator { LoggerUtil.log( `Creating user ${userContext.username} in database`, apiId, - userContext.username + userContext.username, ); const result = await this.createUserInDatabase( request, userCreateDto, academicYearId, - response + response, ); - stepTimings['database_user_creation'] = Date.now() - dbCreateStartTime; + stepTimings["database_user_creation"] = Date.now() - dbCreateStartTime; LoggerUtil.log( `User ${userContext.username} created successfully in database`, apiId, - userContext.username + userContext.username, ); // Step 8: Handle custom fields @@ -1412,7 +1505,7 @@ export class PostgresUserService implements IServicelocator { const customFields = await this.fieldsService.findCustomFields( "USERS", - roles + roles, ); if (customFields) { @@ -1421,10 +1514,10 @@ export class PostgresUserService implements IServicelocator { fieldDetail[`${fieldId}`] ? fieldDetail : { - ...fieldDetail, - [`${fieldId}`]: { fieldAttributes, fieldParams, name }, - }, - {} + ...fieldDetail, + [`${fieldId}`]: { fieldAttributes, fieldParams, name }, + }, + {}, ); for (const fieldValues of userCreateDto.customFields) { @@ -1436,7 +1529,7 @@ export class PostgresUserService implements IServicelocator { const res = await this.fieldsService.updateUserCustomFields( userId, fieldData, - customFieldAttributes[fieldData.fieldId] + customFieldAttributes[fieldData.fieldId], ); // if (res.correctValue) { @@ -1450,47 +1543,48 @@ export class PostgresUserService implements IServicelocator { } } } - stepTimings['custom_fields_processing'] = Date.now() - customFieldsStartTime; + stepTimings["custom_fields_processing"] = + Date.now() - customFieldsStartTime; // Step 9: Log performance metrics const totalTime = Date.now() - startTime; LoggerUtil.log( `User ${userContext.username} created successfully with ID: ${result.userId}`, apiId, - userContext.username + userContext.username, ); - + // Log performance breakdown LoggerUtil.log( - `Performance breakdown for user creation (${userContext.username}): Total: ${totalTime}ms | JWT: ${stepTimings['jwt_extraction']}ms | Custom Fields Validation: ${stepTimings['custom_field_validation']}ms | Request Validation: ${stepTimings['request_validation']}ms | Business Logic: ${stepTimings['business_logic_validation']}ms | Keycloak Check: ${stepTimings['keycloak_user_check']}ms | Keycloak Creation: ${stepTimings['keycloak_user_creation']}ms | Database Creation: ${stepTimings['database_user_creation']}ms | Custom Fields Processing: ${stepTimings['custom_fields_processing']}ms`, + `Performance breakdown for user creation (${userContext.username}): Total: ${totalTime}ms | JWT: ${stepTimings["jwt_extraction"]}ms | Custom Fields Validation: ${stepTimings["custom_field_validation"]}ms | Request Validation: ${stepTimings["request_validation"]}ms | Business Logic: ${stepTimings["business_logic_validation"]}ms | Keycloak Check: ${stepTimings["keycloak_user_check"]}ms | Keycloak Creation: ${stepTimings["keycloak_user_creation"]}ms | Database Creation: ${stepTimings["database_user_creation"]}ms | Custom Fields Processing: ${stepTimings["custom_fields_processing"]}ms`, apiId, - userContext.username + userContext.username, ); - + // Send response to the client APIResponse.success( response, apiId, { userData: { ...result, createFailures } }, HttpStatus.CREATED, - API_RESPONSES.USER_CREATE_SUCCESSFULLY + API_RESPONSES.USER_CREATE_SUCCESSFULLY, ); - + // Produce user created event to Kafka asynchronously - after response is sent to client - this.publishUserEvent('created', result.userId, apiId) - .catch(error => LoggerUtil.error( + this.publishUserEvent("created", result.userId, apiId).catch((error) => + LoggerUtil.error( `Failed to publish user created event to Kafka for ${userContext.username}`, `Error: ${error.message}`, apiId, - userContext.username - )); + userContext.username, + ), + ); } catch (e) { - LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, `Error: ${e.message}`, apiId, - userContext.username + userContext.username, ); const errorMessage = e.message || API_RESPONSES.INTERNAL_SERVER_ERROR; return APIResponse.error( @@ -1498,7 +1592,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1532,7 +1626,7 @@ export class PostgresUserService implements IServicelocator { if (key === "email") { const checkValidEmail = CustomFieldsValidation.validate( "email", - userCreateDto.email + userCreateDto.email, ); if (!checkValidEmail) { errorCollector.addError(`Invalid email address`); @@ -1542,7 +1636,7 @@ export class PostgresUserService implements IServicelocator { if (key === "mobile") { const checkValidMobile = CustomFieldsValidation.validate( "mobile", - userCreateDto.mobile + userCreateDto.mobile, ); if (!checkValidMobile) { errorCollector.addError(`Mobile number must be 10 digits long`); @@ -1552,11 +1646,11 @@ export class PostgresUserService implements IServicelocator { if (key === "dob") { const checkValidDob = CustomFieldsValidation.validate( "date", - userCreateDto.dob + userCreateDto.dob, ); if (!checkValidDob) { errorCollector.addError( - `Date of birth must be in the format yyyy-mm-dd` + `Date of birth must be in the format yyyy-mm-dd`, ); } } @@ -1568,7 +1662,7 @@ export class PostgresUserService implements IServicelocator { if (!academicYearId && cohortIds) { errorCollector.addError( - "Academic Year ID is required when a Cohort ID is provided." + "Academic Year ID is required when a Cohort ID is provided.", ); } @@ -1576,7 +1670,7 @@ export class PostgresUserService implements IServicelocator { const checkAcadmicYear = await this.postgresAcademicYearService.getActiveAcademicYear( academicYearId, - tenantId + tenantId, ); if (!checkAcadmicYear && cohortIds) { @@ -1609,20 +1703,19 @@ export class PostgresUserService implements IServicelocator { if (notExistCohort.length > 0) { errorCollector.addError( - `Cohort Id '${notExistCohort}' does not exist for this tenant '${tenantId}'.` + `Cohort Id '${notExistCohort}' does not exist for this tenant '${tenantId}'.`, ); } - - if (roleExists && roleExists?.length === 0) { - errorCollector.addError( - `Role Id '${roleId}' does not exist.` - ); + errorCollector.addError(`Role Id '${roleId}' does not exist.`); } else if (roleExists) { - if ((roleExists[0].tenantId || roleExists[0].tenantId !== null) && roleExists[0].tenantId !== tenantId) { + if ( + (roleExists[0].tenantId || roleExists[0].tenantId !== null) && + roleExists[0].tenantId !== tenantId + ) { errorCollector.addError( - `Role Id '${roleId}' does not exist for this tenant '${tenantId}'.` + `Role Id '${roleId}' does not exist for this tenant '${tenantId}'.`, ); } else { roleData = [...roleData, ...roleExists]; @@ -1637,7 +1730,7 @@ export class PostgresUserService implements IServicelocator { async checkCohortExistsInAcademicYear( academicYearId: any, - cohortData: any[] + cohortData: any[], ) { // The method ensures that all cohorts provided in the cohortData array are associated with the given academicYearId. If any cohort does not exist in the academic year, it collects their IDs and returns them as a list. @@ -1646,7 +1739,7 @@ export class PostgresUserService implements IServicelocator { const findCohortData = await this.cohortAcademicYearService.isCohortExistForYear( academicYearId, - cohortId + cohortId, ); if (!findCohortData?.length) { notExistCohort.push(cohortId); @@ -1656,7 +1749,6 @@ export class PostgresUserService implements IServicelocator { return notExistCohort.length > 0 ? notExistCohort : []; } - // Can be Implemented after we know what are the unique entities async checkUserinKeyCloakandDb(userDto) { const keycloakResponse = await getKeycloakAdminToken(); @@ -1665,7 +1757,7 @@ export class PostgresUserService implements IServicelocator { if (userDto?.username) { const usernameExistsInKeycloak = await checkIfUsernameExistsInKeycloak( userDto?.username, - token + token, ); if (usernameExistsInKeycloak?.data?.length > 0) { return usernameExistsInKeycloak; @@ -1674,7 +1766,7 @@ export class PostgresUserService implements IServicelocator { } else { const usernameExistsInKeycloak = await checkIfEmailExistsInKeycloak( userDto?.email, - token + token, ); if (usernameExistsInKeycloak.data.length > 0) { return usernameExistsInKeycloak; @@ -1687,18 +1779,18 @@ export class PostgresUserService implements IServicelocator { request: any, userCreateDto: UserCreateDto, academicYearId: string, - response: Response + response: Response, ): Promise { const user = new User(); - user.userId = userCreateDto?.userId, - user.username = userCreateDto?.username, - user.firstName = userCreateDto?.firstName, - user.middleName = userCreateDto?.middleName, - user.lastName = userCreateDto?.lastName, - user.gender = userCreateDto?.gender, - user.email = userCreateDto?.email, - user.mobile = Number(userCreateDto?.mobile) || null, - user.createdBy = userCreateDto?.createdBy || userCreateDto?.createdBy; + ((user.userId = userCreateDto?.userId), + (user.username = userCreateDto?.username), + (user.firstName = userCreateDto?.firstName), + (user.middleName = userCreateDto?.middleName), + (user.lastName = userCreateDto?.lastName), + (user.gender = userCreateDto?.gender), + (user.email = userCreateDto?.email), + (user.mobile = Number(userCreateDto?.mobile) || null), + (user.createdBy = userCreateDto?.createdBy || userCreateDto?.createdBy)); if (userCreateDto?.dob) { user.dob = new Date(userCreateDto.dob); @@ -1707,28 +1799,46 @@ export class PostgresUserService implements IServicelocator { const createdBy = request.user?.userId || result.userId; if (userCreateDto.tenantCohortRoleMapping) { - if (userCreateDto.automaticMember && userCreateDto?.automaticMember?.value === true) { - await this.automaticMemberMapping(userCreateDto.automaticMember, userCreateDto.customFields, userCreateDto.tenantCohortRoleMapping, result.userId, createdBy) + if ( + userCreateDto.automaticMember && + userCreateDto?.automaticMember?.value === true + ) { + await this.automaticMemberMapping( + userCreateDto.automaticMember, + userCreateDto.customFields, + userCreateDto.tenantCohortRoleMapping, + result.userId, + createdBy, + ); } else { - await this.tenantCohortRollMapping(userCreateDto.tenantCohortRoleMapping, academicYearId, result.userId, createdBy); + await this.tenantCohortRollMapping( + userCreateDto.tenantCohortRoleMapping, + academicYearId, + result.userId, + createdBy, + ); } } return result; } - async tenantCohortRollMapping(tenantCohortRoleMapping: tenantRoleMappingDto[], academicYearId: UUID, userId: UUID, createdBy: UUID): Promise { + async tenantCohortRollMapping( + tenantCohortRoleMapping: tenantRoleMappingDto[], + academicYearId: UUID, + userId: UUID, + createdBy: UUID, + ): Promise { try { for (const mapData of tenantCohortRoleMapping) { if (mapData.cohortIds) { for (const cohortIds of mapData.cohortIds) { - let query = `SELECT * FROM public."CohortAcademicYear" WHERE "cohortId"= '${cohortIds}' AND "academicYearId" = '${academicYearId}'`; + const query = `SELECT * FROM public."CohortAcademicYear" WHERE "cohortId"= '${cohortIds}' AND "academicYearId" = '${academicYearId}'`; - let getCohortAcademicYearId = await this.usersRepository.query( - query - ); + const getCohortAcademicYearId = + await this.usersRepository.query(query); // will add data only if cohort is found with academic year - let cohortData = { + const cohortData = { userId: userId, cohortId: cohortIds, cohortAcademicYearId: @@ -1748,15 +1858,19 @@ export class PostgresUserService implements IServicelocator { } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${error.message}` + `Error: ${error.message}`, ); throw new Error(error); } } - - async automaticMemberMapping(automaticMember: any, customFields: any, tenantCohortRoleMapping: tenantRoleMappingDto[], userId: UUID, createdBy: UUID): Promise { - + async automaticMemberMapping( + automaticMember: any, + customFields: any, + tenantCohortRoleMapping: tenantRoleMappingDto[], + userId: UUID, + createdBy: UUID, + ): Promise { try { // Tenant and role mapping for (const mapData of tenantCohortRoleMapping) { @@ -1767,12 +1881,14 @@ export class PostgresUserService implements IServicelocator { await this.assignUserToTenantAndRoll(tenantRoleMappingData, createdBy); } let fieldValue; - let foundField = customFields.find(field => field.fieldId === automaticMember.fieldId); + const foundField = customFields.find( + (field) => field.fieldId === automaticMember.fieldId, + ); if (foundField) { fieldValue = foundField.value; } - let createAutomaticMember = { + const createAutomaticMember = { userId: userId, rules: { condition: { @@ -1787,21 +1903,20 @@ export class PostgresUserService implements IServicelocator { // } }, tenantId: tenantCohortRoleMapping[0].tenantId, - isActive: true - } + isActive: true, + }; //Assgn member to sdb - await this.automaticMemberService.create(createAutomaticMember) + await this.automaticMemberService.create(createAutomaticMember); } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${error.message}` + `Error: ${error.message}`, ); throw new Error(error); } } - async assignUserToTenantAndRoll(tenantsData, createdBy) { try { const tenantId = tenantsData?.tenantRoleMapping?.tenantId; @@ -1829,7 +1944,7 @@ export class PostgresUserService implements IServicelocator { } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${error.message}` + `Error: ${error.message}`, ); throw new Error(error); } @@ -1857,7 +1972,7 @@ export class PostgresUserService implements IServicelocator { request: any, extraField: string, newPassword: string, - response: Response + response: Response, ) { const apiId = APIID.USER_RESET_PASSWORD; try { @@ -1874,7 +1989,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USERID_NOT_FOUND(userId), - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -1894,20 +2009,20 @@ export class PostgresUserService implements IServicelocator { userData, resToken, newPassword, - userId + userId, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, `Error : ${e?.response?.data.error}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } @@ -1922,7 +2037,7 @@ export class PostgresUserService implements IServicelocator { apiId, {}, HttpStatus.OK, - API_RESPONSES.USER_PASSWORD_UPDATE + API_RESPONSES.USER_PASSWORD_UPDATE, ); } else { return APIResponse.error( @@ -1930,21 +2045,21 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, `Error : ${apiResponse?.errors}`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.INTERNAL_SERVER_ERROR, `Error : ${e?.response?.data.error}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -1954,7 +2069,7 @@ export class PostgresUserService implements IServicelocator { userData: any, token: string, newPassword: string, - userId: string + userId: string, ) { const data = JSON.stringify({ temporary: "false", @@ -1989,7 +2104,7 @@ export class PostgresUserService implements IServicelocator { } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, - `Error: ${e.message}` + `Error: ${e.message}`, ); return new ErrorResponse({ errorCode: `${e.response.status}`, @@ -2008,7 +2123,7 @@ export class PostgresUserService implements IServicelocator { "{username}": userData?.name, "{programName}": userData?.tenantData?.[0]?.tenantName ? userData.tenantData[0].tenantName.charAt(0).toUpperCase() + - userData.tenantData[0].tenantName.slice(1) + userData.tenantData[0].tenantName.slice(1) : "", }, email: { @@ -2016,16 +2131,17 @@ export class PostgresUserService implements IServicelocator { }, }; try { - const mailSend = await this.notificationRequest.sendNotification( - notificationPayload - ); + const mailSend = + await this.notificationRequest.sendNotification( + notificationPayload, + ); if (mailSend?.result?.email?.errors.length > 0) { // error messgae if generated by notification service } } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, - `Error: ${error.message}` + `Error: ${error.message}`, ); } } @@ -2052,9 +2168,8 @@ export class PostgresUserService implements IServicelocator { let error = ""; for (const fieldsData of fieldValues) { const fieldId = fieldsData["fieldId"]; - const getFieldDetails: any = await this.fieldsService.getFieldByIds( - fieldId - ); + const getFieldDetails: any = + await this.fieldsService.getFieldByIds(fieldId); if (getFieldDetails == null) { return API_RESPONSES.FIELD_NOT_FOUND; @@ -2067,7 +2182,7 @@ export class PostgresUserService implements IServicelocator { } const fieldAttributes = getFieldDetails?.fieldAttributes || {}; // getFieldDetails["fieldAttributes"] = fieldAttributes[tenantId] || fieldAttributes["default"]; - getFieldDetails["fieldAttributes"] = fieldAttributes; + getFieldDetails["fieldAttributes"] = fieldAttributes; if ( (getFieldDetails.type == "checkbox" || @@ -2075,7 +2190,7 @@ export class PostgresUserService implements IServicelocator { getFieldDetails.type == "radio") && getFieldDetails?.sourceDetails?.source == "table" ) { - let fieldValue = fieldsData["value"][0]; + const fieldValue = fieldsData["value"][0]; const getOption = await this.fieldsService.findDynamicOptions( getFieldDetails.sourceDetails.table, `"${getFieldDetails?.sourceDetails?.table}_id"='${fieldValue}'`, @@ -2086,7 +2201,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.UUID_VALIDATION, // which uuid is needed ? - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const transformedFieldParams = { @@ -2110,12 +2225,12 @@ export class PostgresUserService implements IServicelocator { } const checkValidation = this.fieldsService.validateFieldValue( getFieldDetails, - fieldsData["value"] + fieldsData["value"], ); if (typeof checkValidation === "object" && "error" in checkValidation) { invalidateFields.push( - `${fieldId}: ${getFieldDetails["name"]} - ${checkValidation?.error?.message}` + `${fieldId}: ${getFieldDetails["name"]} - ${checkValidation?.error?.message}`, ); } } @@ -2136,8 +2251,8 @@ export class PostgresUserService implements IServicelocator { const roleIds = userCreateDto && userCreateDto.tenantCohortRoleMapping ? userCreateDto.tenantCohortRoleMapping.map( - (userRole) => userRole.roleId - ) + (userRole) => userRole.roleId, + ) : []; let contextType; @@ -2154,7 +2269,7 @@ export class PostgresUserService implements IServicelocator { const context = "USERS"; const getFieldIds = await this.fieldsService.getFieldIds( context, - contextType + contextType, ); const validFieldIds = new Set(getFieldIds.map((field) => field.fieldId)); @@ -2167,12 +2282,12 @@ export class PostgresUserService implements IServicelocator { // Log the invalid field validation error with role context LoggerUtil.error( `Invalid custom fields provided for role`, - `Role: ${contextType || 'Unknown'}, Invalid Field IDs: ${invalidFieldIds.join(", ")}, User: ${userCreateDto.username || 'Unknown'}`, + `Role: ${contextType || "Unknown"}, Invalid Field IDs: ${invalidFieldIds.join(", ")}, User: ${userCreateDto.username || "Unknown"}`, apiId, - userCreateDto.username + userCreateDto.username, ); return `The following fields are not valid for this user: ${invalidFieldIds.join( - ", " + ", ", )}.`; } } @@ -2187,7 +2302,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.UUID_VALIDATION, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -2202,7 +2317,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USERNAME_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -2220,7 +2335,7 @@ export class PostgresUserService implements IServicelocator { // Delete from UserRoleMapping table const userRoleMappingResult = await this.userRoleMappingRepository.delete( - { userId: userId } + { userId: userId }, ); // Delete from FieldValues table where ItemId matches userId @@ -2240,7 +2355,7 @@ export class PostgresUserService implements IServicelocator { // Prepare and format user data for Kafka event const kafkaUserData = { userId: userId, - deletedAt: new Date().toISOString() + deletedAt: new Date().toISOString(), }; // Send response to the client @@ -2249,29 +2364,30 @@ export class PostgresUserService implements IServicelocator { apiId, userResult, HttpStatus.OK, - API_RESPONSES.USER_RELATEDENTITY_DELETE + API_RESPONSES.USER_RELATEDENTITY_DELETE, ); // Produce user deleted event to Kafka asynchronously - after response is sent to client - this.publishUserEvent('deleted', userId, apiId) - .catch(error => LoggerUtil.error( + this.publishUserEvent("deleted", userId, apiId).catch((error) => + LoggerUtil.error( `Failed to publish user deleted event to Kafka`, `Error: ${error.message}`, - apiId - )); + apiId, + ), + ); return apiResponse; } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, `Error : ${e?.response?.data.error}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -2280,7 +2396,11 @@ export class PostgresUserService implements IServicelocator { } //Generate Has code as per username or mobile Number - private generateOtpHash(mobileOrUsername: string, otp: string, reason: string) { + private generateOtpHash( + mobileOrUsername: string, + otp: string, + reason: string, + ) { const ttl = this.otpExpiry * 60 * 1000; // Expiration in milliseconds const expires = Date.now() + ttl; const expiresInMinutes = ttl / (60 * 1000); @@ -2300,40 +2420,42 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.MOBILE_VALID, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } // Step 1: Prepare data for OTP generation and send on Mobile - const { notificationPayload, hash, expires } = await this.sendOTPOnMobile(mobile, reason); + const { notificationPayload, hash, expires } = await this.sendOTPOnMobile( + mobile, + reason, + ); // Step 2: Send success response const result = { data: { message: `OTP sent to ${mobile}`, hash: `${hash}.${expires}`, - sendStatus: notificationPayload.result?.sms?.data[0] + sendStatus: notificationPayload.result?.sms?.data[0], // sid: message.sid, // Twilio Message SID - } + }, }; return await APIResponse.success( response, apiId, result, HttpStatus.OK, - API_RESPONSES.OTP_SEND_SUCCESSFULLY + API_RESPONSES.OTP_SEND_SUCCESSFULLY, ); - } - catch (e) { + } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error: ${e.message}`, - apiId + apiId, ); return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, `Error : ${e.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -2343,16 +2465,24 @@ export class PostgresUserService implements IServicelocator { // Step 1: Format mobile number and generate OTP const mobileWithCode = this.formatMobileNumber(mobile); const otp = this.authUtils.generateOtp(this.otpDigits).toString(); - const { hash, expires, expiresInMinutes } = this.generateOtpHash(mobileWithCode, otp, reason); + const { hash, expires, expiresInMinutes } = this.generateOtpHash( + mobileWithCode, + otp, + reason, + ); const replacements = { "{OTP}": otp, - "{otpExpiry}": expiresInMinutes + "{otpExpiry}": expiresInMinutes, }; // Step 2:send SMS notification - const notificationPayload = await this.smsNotification("OTP", "SEND_OTP", replacements, [mobile]); + const notificationPayload = await this.smsNotification( + "OTP", + "SEND_OTP", + replacements, + [mobile], + ); return { notificationPayload, hash, expires, expiresInMinutes }; - } - catch (error) { + } catch (error) { throw new Error(`Failed to send OTP: ${error.message}`); } } @@ -2361,7 +2491,7 @@ export class PostgresUserService implements IServicelocator { const apiId = APIID.VERIFY_OTP; try { const { mobile, otp, hash, reason, username } = body; - + // Validate required fields for all requests if (!otp || !hash || !reason) { return APIResponse.error( @@ -2369,22 +2499,22 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.OTP_VALIDED_REQUIRED_KEY, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - + // Validate hash format - const [hashValue, expires] = hash.split('.'); + const [hashValue, expires] = hash.split("."); if (!hashValue || !expires || isNaN(parseInt(expires))) { return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.INVALID_HASH_FORMAT, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - + // Check for OTP expiration if (Date.now() > parseInt(expires)) { return APIResponse.error( @@ -2392,88 +2522,86 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.OTP_EXPIRED, API_RESPONSES.OTP_EXPIRED, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - + let identifier: string; let resetToken: string | null = null; - + // Process based on reason - if (reason === 'signup') { + if (reason === "signup") { if (!mobile) { return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.MOBILE_REQUIRED, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } identifier = this.formatMobileNumber(mobile); - } - else if (reason === 'forgot') { + } else if (reason === "forgot") { if (!username) { return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.USERNAME_REQUIRED, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - + identifier = this.formatMobileNumber(mobile); const userData = await this.findUserDetails(null, username); - + if (!userData) { return APIResponse.error( response, apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USERNAME_NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } - + // Generate reset token for forgot password flow const tokenPayload = { sub: userData.userId, email: userData.email, }; - + resetToken = await this.jwtUtil.generateTokenForForgotPassword( tokenPayload, this.jwt_password_reset_expires_In, - this.jwt_secret + this.jwt_secret, ); - } - else { + } else { return APIResponse.error( response, apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.INVALID_REASON, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - + // Verify OTP hash const data = `${identifier}.${otp}.${reason}.${expires}`; const calculatedHash = this.authUtils.calculateHash(data, this.smsKey); if (calculatedHash === hashValue) { // For forgot password flow, include the reset token in response const responseData = { success: true }; - if (reason === 'forgot' && resetToken) { - responseData['token'] = resetToken; + if (reason === "forgot" && resetToken) { + responseData["token"] = resetToken; } - + return APIResponse.success( response, apiId, responseData, HttpStatus.OK, - API_RESPONSES.OTP_VALID + API_RESPONSES.OTP_VALID, ); } else { return APIResponse.error( @@ -2481,29 +2609,33 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.OTP_INVALID, API_RESPONSES.OTP_INVALID, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, `Error during OTP verification: ${error.message}`, - apiId + apiId, ); - + return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, `Error : ${error?.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } - // send Mobile Notification - async smsNotification(context: string, key: string, replacements: object, receipients: string[]) { + async smsNotification( + context: string, + key: string, + replacements: object, + receipients: string[], + ) { try { //sms notification Body const notificationPayload = { @@ -2516,30 +2648,38 @@ export class PostgresUserService implements IServicelocator { }, }; // send Axios request - const mailSend = await this.notificationRequest.sendNotification( - notificationPayload - ); + const mailSend = + await this.notificationRequest.sendNotification(notificationPayload); // Check for errors in the response - if (mailSend?.result?.sms?.errors && mailSend.result.sms.errors.length > 0) { - const errorMessages = mailSend.result.sms.errors.map((error: { error: string; }) => error.error); + if ( + mailSend?.result?.sms?.errors && + mailSend.result.sms.errors.length > 0 + ) { + const errorMessages = mailSend.result.sms.errors.map( + (error: { error: string }) => error.error, + ); const combinedErrorMessage = errorMessages.join(", "); // Combine all error messages into one string throw new Error(`${API_RESPONSES.SMS_ERROR} :${combinedErrorMessage}`); } return mailSend; - } - catch (error) { + } catch (error) { LoggerUtil.error(API_RESPONSES.SMS_ERROR, error.message); - throw new Error(`${API_RESPONSES.SMS_NOTIFICATION_ERROR}: ${error.message}`); + throw new Error( + `${API_RESPONSES.SMS_NOTIFICATION_ERROR}: ${error.message}`, + ); } } //send OTP on mobile and email for forgot password reset - async sendPasswordResetOTP(body: SendPasswordResetOTPDto, response: Response): Promise { + async sendPasswordResetOTP( + body: SendPasswordResetOTPDto, + response: Response, + ): Promise { const apiId = APIID.SEND_RESET_OTP; try { const username = body.username; - let error = []; - let success = []; + const error = []; + const success = []; const userData: any = await this.findUserDetails(null, username); if (!userData) { return APIResponse.error( @@ -2547,7 +2687,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.USER_NOT_EXISTS, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -2557,24 +2697,33 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.BAD_REQUEST, API_RESPONSES.MOBILE_EMAIL_NOT_FOUND, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - const programName = userData?.tenantData[0]?.tenantName ?? ''; + const programName = userData?.tenantData[0]?.tenantName ?? ""; const reason = "forgot"; const otp = this.authUtils.generateOtp(this.otpDigits).toString(); - const { hash, expires, expiresInMinutes } = this.generateOtpHash(username, otp, reason); + const { hash, expires, expiresInMinutes } = this.generateOtpHash( + username, + otp, + reason, + ); if (userData.mobile) { const replacements = { "{OTP}": otp, - "{otpExpiry}": expiresInMinutes + "{otpExpiry}": expiresInMinutes, }; try { - await this.smsNotification("OTP", "Reset_OTP", replacements, [userData.mobile]); - success.push({ type: 'SMS', message: API_RESPONSES.MOBILE_SENT_OTP }); + await this.smsNotification("OTP", "Reset_OTP", replacements, [ + userData.mobile, + ]); + success.push({ type: "SMS", message: API_RESPONSES.MOBILE_SENT_OTP }); } catch (e) { - error.push({ type: 'SMS', message: `${API_RESPONSES.MOBILE_OTP_SEND_FAILED} ${e.message}` }) + error.push({ + type: "SMS", + message: `${API_RESPONSES.MOBILE_OTP_SEND_FAILED} ${e.message}`, + }); } } @@ -2583,23 +2732,38 @@ export class PostgresUserService implements IServicelocator { "{OTP}": otp, "{otpExpiry}": expiresInMinutes, "{programName}": programName, - "{username}": username + "{username}": username, }; try { - await this.sendEmailNotification("OTP", "Reset_OTP", replacements, [userData.email]); - success.push({ type: 'Email', message: API_RESPONSES.EMAIL_SENT_OTP }) + await this.sendEmailNotification("OTP", "Reset_OTP", replacements, [ + userData.email, + ]); + success.push({ + type: "Email", + message: API_RESPONSES.EMAIL_SENT_OTP, + }); } catch (e) { - error.push({ type: 'Email', message: `${API_RESPONSES.EMAIL_OTP_SEND_FAILED}: ${e.message}` }) + error.push({ + type: "Email", + message: `${API_RESPONSES.EMAIL_OTP_SEND_FAILED}: ${e.message}`, + }); } } - // Error - if (error.length === 2) { // if both SMS and Email notification fail to sent - let errorMessage = ''; - if (error.some(e => e.type === 'SMS')) { - errorMessage += `SMS Error: ${error.filter(e => e.type === 'SMS').map(e => e.message).join(", ")}. `; + // Error + if (error.length === 2) { + // if both SMS and Email notification fail to sent + let errorMessage = ""; + if (error.some((e) => e.type === "SMS")) { + errorMessage += `SMS Error: ${error + .filter((e) => e.type === "SMS") + .map((e) => e.message) + .join(", ")}. `; } - if (error.some(e => e.type === 'Email')) { - errorMessage += `Email Error: ${error.filter(e => e.type === 'Email').map(e => e.message).join(", ")}.`; + if (error.some((e) => e.type === "Email")) { + errorMessage += `Email Error: ${error + .filter((e) => e.type === "Email") + .map((e) => e.message) + .join(", ")}.`; } return APIResponse.error( @@ -2607,36 +2771,39 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.NOTIFICATION_ERROR, errorMessage.trim(), - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } const result = { hash: `${hash}.${expires}`, success: success, - Error: error - } + Error: error, + }; return await APIResponse.success( response, apiId, result, HttpStatus.OK, - API_RESPONSES.SEND_OTP + API_RESPONSES.SEND_OTP, ); - } - catch (e) { + } catch (e) { return APIResponse.error( response, apiId, API_RESPONSES.SERVER_ERROR, `Error : ${e?.message}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } - } //send Email Notification - async sendEmailNotification(context: string, key: string, replacements: object, emailReceipt) { + async sendEmailNotification( + context: string, + key: string, + replacements: object, + emailReceipt, + ) { try { //Send Notification const notificationPayload = { @@ -2649,20 +2816,25 @@ export class PostgresUserService implements IServicelocator { }, }; // console.log("notificationPayload",notificationPayload); - - const mailSend = await this.notificationRequest.sendNotification( - notificationPayload - ); - if (mailSend?.result?.email?.errors && mailSend.result.email.errors.length > 0) { - const errorMessages = mailSend.result.email.errors.map((error: { error: string; }) => error.error); + + const mailSend = + await this.notificationRequest.sendNotification(notificationPayload); + if ( + mailSend?.result?.email?.errors && + mailSend.result.email.errors.length > 0 + ) { + const errorMessages = mailSend.result.email.errors.map( + (error: { error: string }) => error.error, + ); const combinedErrorMessage = errorMessages.join(", "); // Combine all error messages into one string throw new Error(`error :${combinedErrorMessage}`); } return mailSend; - } - catch (e) { + } catch (e) { LoggerUtil.error(API_RESPONSES.EMAIL_ERROR, e.message); - throw new Error(`${API_RESPONSES.EMAIL_NOTIFICATION_ERROR}: ${e.message}`); + throw new Error( + `${API_RESPONSES.EMAIL_NOTIFICATION_ERROR}: ${e.message}`, + ); } } @@ -2670,11 +2842,16 @@ export class PostgresUserService implements IServicelocator { try { // Step 1: Generate OTP and hash const otp = this.authUtils.generateOtp(this.otpDigits).toString(); - const { hash, expires, expiresInMinutes } = this.generateOtpHash(email, otp, reason); + const { hash, expires, expiresInMinutes } = this.generateOtpHash( + email, + otp, + reason, + ); // Step 2: Get program name from user's tenant data const userData: any = await this.findUserDetails(null, username); - const programName = userData?.tenantData?.[0]?.tenantName ?? 'Shiksha Graha'; + const programName = + userData?.tenantData?.[0]?.tenantName ?? "Shiksha Graha"; // Step 3: Prepare email replacements const replacements = { @@ -2683,25 +2860,25 @@ export class PostgresUserService implements IServicelocator { "{programName}": programName, "{username}": username, "{eventName}": "Shiksha Graha OTP", - "{action}": "register" + "{action}": "register", }; // console.log("hii",replacements,email) // Step 4: Send email notification - const notificationPayload = await this.sendEmailNotification("OTP", "SendOtpOnMail", replacements, [email]); + const notificationPayload = await this.sendEmailNotification( + "OTP", + "SendOtpOnMail", + replacements, + [email], + ); return { notificationPayload, hash, expires, expiresInMinutes }; - } - catch (error) { + } catch (error) { throw new Error(`Failed to send OTP via email: ${error.message}`); } } - async checkUser( - request: any, - response: any, - filters: ExistUserDto - ) { + async checkUser(request: any, response: any, filters: ExistUserDto) { const apiId = APIID.USER_LIST; try { const whereClause: any = {}; @@ -2709,7 +2886,11 @@ export class PostgresUserService implements IServicelocator { if (filters && Object.keys(filters).length > 0) { Object.entries(filters).forEach(([key, value]) => { if (value !== undefined && value !== null) { - if (key === 'firstName' || key === 'middleName' || key === 'lastName') { + if ( + key === "firstName" || + key === "middleName" || + key === "lastName" + ) { const sanitizedValue = this.sanitizeInput(value); whereClause[key] = ILike(`%${sanitizedValue}%`); } else { @@ -2721,7 +2902,7 @@ export class PostgresUserService implements IServicelocator { // Use the dynamic where clause to fetch matching data const findData = await this.usersRepository.find({ where: whereClause, - select: ['username', 'firstName', 'middleName', 'lastName','mobile'], // Select only these fields + select: ["username", "firstName", "middleName", "lastName", "mobile"], // Select only these fields }); if (findData.length === 0) { @@ -2730,7 +2911,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.USER_NOT_FOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } @@ -2739,13 +2920,13 @@ export class PostgresUserService implements IServicelocator { apiId, findData, HttpStatus.OK, - API_RESPONSES.USER_GET_SUCCESSFULLY + API_RESPONSES.USER_GET_SUCCESSFULLY, ); } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}: ${request.url}`, `Error: ${e.message}`, - apiId + apiId, ); const errorMessage = e.message || API_RESPONSES.SERVER_ERROR; @@ -2754,21 +2935,24 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } sanitizeInput(value) { - if (typeof value === 'string') { + if (typeof value === "string") { // Escape special characters for SQL - return value.replace(/[%_\\]/g, '\\$&'); + return value.replace(/[%_\\]/g, "\\$&"); } // For other types, return the value as is or implement specific sanitization logic return value; } - - async suggestUsername(request: Request, response: Response, suggestUserDto: SuggestUserDto) { + async suggestUsername( + request: Request, + response: Response, + suggestUserDto: SuggestUserDto, + ) { const apiId = APIID.USER_LIST; try { // Fetch user data from the database to check if the username already exists @@ -2777,7 +2961,7 @@ export class PostgresUserService implements IServicelocator { }); if (findData) { - // Define a function to generate a username + // Define a function to generate a username const generateUsername = (): string => { const randomNum = randomInt(100, 1000); // Secure random 3-digit number return `${suggestUserDto.firstName}${suggestUserDto.lastName}${randomNum}`; @@ -2806,7 +2990,7 @@ export class PostgresUserService implements IServicelocator { apiId, { suggestedUsername: newUsername }, HttpStatus.OK, - API_RESPONSES.USERNAME_SUGGEST_SUCCESSFULLY + API_RESPONSES.USERNAME_SUGGEST_SUCCESSFULLY, ); } @@ -2816,9 +3000,8 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.USER_NOT_FOUND, API_RESPONSES.NOT_FOUND, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); - } catch (error) { // Handle errors gracefully const errorMessage = error.message || API_RESPONSES.SERVER_ERROR; @@ -2827,7 +3010,7 @@ export class PostgresUserService implements IServicelocator { apiId, API_RESPONSES.SERVER_ERROR, errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -2839,18 +3022,18 @@ export class PostgresUserService implements IServicelocator { * @param apiId API ID for logging */ private async publishUserEvent( - eventType: 'created' | 'updated' | 'deleted', + eventType: "created" | "updated" | "deleted", userId: string, - apiId: string + apiId: string, ): Promise { try { // For delete events, we may want to include just basic information since the user might already be removed let userData: any; - - if (eventType === 'deleted') { + + if (eventType === "deleted") { userData = { userId: userId, - deletedAt: new Date().toISOString() + deletedAt: new Date().toISOString(), }; } else { // For create and update, fetch complete data from DB @@ -2870,19 +3053,37 @@ export class PostgresUserService implements IServicelocator { "email", "createdAt", "updatedAt", - "status" - ] + "status", + ], }); if (!user) { - LoggerUtil.error(`Failed to fetch user data for Kafka event`, `User with ID ${userId} not found`); + LoggerUtil.error( + `Failed to fetch user data for Kafka event`, + `User with ID ${userId} not found`, + ); userData = { userId }; } else { // Get tenant and role information const tenantRoleData = await this.userTenantRoleData(userId); - + // Get custom fields if any - const customFields = await this.fieldsService.getCustomFieldDetails(userId, 'Users'); + // const customFieldsRows = await this.usersRepository.query(` + // SELECT fv."fieldId", f.name, f.type, fv.value + // FROM public."FieldValues" fv + // JOIN public."Fields" f ON fv."fieldId" = f."fieldId" + // WHERE fv."itemId" = $1 + // `, [userId]); + // const customFields = customFieldsRows.reduce((acc, row) => { + // acc[row.name] = { type: row.type, value: row.value }; + // return acc; + // }, {}); + + const customFields = await this.fieldsService.getCustomFieldDetails( + userId, + "Users", + ); + console.log("customFields", customFields); // Get cohort information for the user let cohorts = []; @@ -2914,10 +3115,13 @@ export class PostgresUserService implements IServicelocator { LEFT JOIN public."CohortAcademicYear" cay ON bd."cohortId":: UUID = cay."cohortId" LEFT JOIN public."AcademicYears" ay ON cay."academicYearId" = ay."id" `; - - const cohortResults = await this.usersRepository.query(cohortQuery, [userId]); + + const cohortResults = await this.usersRepository.query( + cohortQuery, + [userId], + ); if (cohortResults && cohortResults.length > 0) { - cohorts = cohortResults.map(result => ({ + cohorts = cohortResults.map((result) => ({ // Batch details batchId: result.batchId, batchName: result.batchName, @@ -2925,22 +3129,22 @@ export class PostgresUserService implements IServicelocator { joinedAt: result.joinedAt, cohortMemberStatus: result.cohortMemberStatus, tenantId: result.tenantId, - + // Parent Cohort details cohortId: result.cohortId, cohortName: result.cohortName, cohortType: result.cohortType, - + // Academic Year details academicYearId: result.academicYearId, - academicYearSession: result.academicYearSession + academicYearSession: result.academicYearSession, })); } } catch (cohortError) { LoggerUtil.error( `Failed to fetch cohort data for Kafka event`, `Error: ${cohortError.message}`, - apiId + apiId, ); // Don't fail the entire operation if cohort fetching fails cohorts = []; @@ -2952,25 +3156,28 @@ export class PostgresUserService implements IServicelocator { tenantData: tenantRoleData, customFields: customFields || [], cohorts: cohorts, - eventTimestamp: new Date().toISOString() + eventTimestamp: new Date().toISOString(), }; } } catch (error) { LoggerUtil.error( `Failed to fetch user data for Kafka event`, - `Error: ${error.message}` + `Error: ${error.message}`, ); // Return at least the userId if we can't fetch complete data userData = { userId }; } } await this.kafkaService.publishUserEvent(eventType, userData, userId); - LoggerUtil.log(`User ${eventType} event published to Kafka for user ${userId}`, apiId); + LoggerUtil.log( + `User ${eventType} event published to Kafka for user ${userId}`, + apiId, + ); } catch (error) { LoggerUtil.error( `Failed to publish user ${eventType} event to Kafka`, `Error: ${error.message}`, - apiId + apiId, ); // Don't throw the error to avoid affecting the main operation } diff --git a/src/adapters/postgres/userTenantMapping-adapter.ts b/src/adapters/postgres/userTenantMapping-adapter.ts index 4af66091..de481333 100644 --- a/src/adapters/postgres/userTenantMapping-adapter.ts +++ b/src/adapters/postgres/userTenantMapping-adapter.ts @@ -25,13 +25,13 @@ export class PostgresAssignTenantService @InjectRepository(User) private userRepository: Repository, @InjectRepository(Tenants) - private tenantsRepository: Repository + private tenantsRepository: Repository, ) {} public async validateUserTenantMapping( userId: string, tenantId: string, - errors: any[] + errors: any[], ) { // check if user tenant mapping exists. const existingMapping = await this.userTenantMappingRepository.findOne({ @@ -66,7 +66,7 @@ export class PostgresAssignTenantService public async userTenantMapping( request: any, assignTenantMappingDto: UserTenantMappingDto, - response: Response + response: Response, ) { const apiId = APIID.ASSIGN_TENANT_CREATE; try { @@ -80,7 +80,7 @@ export class PostgresAssignTenantService apiId, "Bad Request", "Please provide at least one tenant Id", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -91,7 +91,7 @@ export class PostgresAssignTenantService const isValid = await this.validateUserTenantMapping( userId, tenantId, - errors + errors, ); if (!isValid) { @@ -108,8 +108,8 @@ export class PostgresAssignTenantService result.push( new ResponseAssignTenantDto( data, - `User is successfully added to the Tenants.` - ) + `User is successfully added to the Tenants.`, + ), ); } @@ -119,7 +119,7 @@ export class PostgresAssignTenantService apiId, "Bad Request", `User not added to tenants ${JSON.stringify(errors)}`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const res = { @@ -134,7 +134,7 @@ export class PostgresAssignTenantService apiId, res, HttpStatus.OK, - "User added to tenants successfully." + "User added to tenants successfully.", ); } catch (error) { const errorMessage = error?.message || "Something went wrong"; @@ -143,7 +143,7 @@ export class PostgresAssignTenantService apiId, "Internal Server Error", `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/adapters/privilegeservicelocator.ts b/src/adapters/privilegeservicelocator.ts index 4062edc5..9bc66018 100644 --- a/src/adapters/privilegeservicelocator.ts +++ b/src/adapters/privilegeservicelocator.ts @@ -8,7 +8,7 @@ export interface IServicelocator { createPrivilege( loggedinUser: any, createPrivileges: CreatePrivilegesDto, - response?: Response + response?: Response, ); getPrivilege(privilegeId?: string, request?: any, response?: Response); // updatePrivilege(privilegeId, request, privilegeDto) @@ -17,7 +17,7 @@ export interface IServicelocator { tenantId: string, roleId: string, request: any, - response?: Response + response?: Response, ); // updatePrivilege(privilegeId, request, privilegeDto) deletePrivilege(privilegeId, response?: Response); diff --git a/src/adapters/userservicelocator.ts b/src/adapters/userservicelocator.ts index 2bfeace4..e9dd103e 100644 --- a/src/adapters/userservicelocator.ts +++ b/src/adapters/userservicelocator.ts @@ -1,7 +1,11 @@ import { Request, Response } from "express"; import { OtpSendDTO } from "src/user/dto/otpSend.dto"; import { UserCreateDto } from "src/user/dto/user-create.dto"; -import { ExistUserDto, SuggestUserDto, UserSearchDto } from "src/user/dto/user-search.dto"; +import { + ExistUserDto, + SuggestUserDto, + UserSearchDto, +} from "src/user/dto/user-search.dto"; import { OtpVerifyDTO } from "src/user/dto/otpVerify.dto"; import { UserData } from "src/user/user.controller"; import { SendPasswordResetOTPDto } from "src/user/dto/passwordReset.dto"; @@ -18,26 +22,43 @@ export interface IServicelocator { // ); getUsersDetailsById(userData: UserData, response: any); updateUser(userDto?: UserUpdateDTO, response?: Response): Promise; - createUser(request: any, userDto: UserCreateDto, academicYearId: string, response: Response); + createUser( + request: any, + userDto: UserCreateDto, + academicYearId: string, + response: Response, + ); findUserDetails(userID: any, username: string, tenantId?: string); searchUser( tenantId: string, request: any, response: any, - userSearchDto: UserSearchDto + userSearchDto: UserSearchDto, ); resetUserPassword( request: any, username: string, newPassword: string, - response: Response + response: Response, ); checkUser(request: Request, response: Response, existUserDto: ExistUserDto); - suggestUsername(request: Request, response:Response, suggestUserDto: SuggestUserDto); + suggestUsername( + request: Request, + response: Response, + suggestUserDto: SuggestUserDto, + ); deleteUserById(userId: string, response: Response): Promise; - sendPasswordResetLink(request: any, username: string, redirectUrl: string, response: Response); + sendPasswordResetLink( + request: any, + username: string, + redirectUrl: string, + response: Response, + ); forgotPassword(request: any, body: any, response: Response); sendOtp(body: OtpSendDTO, response: Response): Promise; verifyOtp(body: OtpVerifyDTO, response: Response): Promise; - sendPasswordResetOTP(body: SendPasswordResetOTPDto, response: Response): Promise; + sendPasswordResetOTP( + body: SendPasswordResetOTPDto, + response: Response, + ): Promise; } diff --git a/src/adapters/usertenantmappinglocator.ts b/src/adapters/usertenantmappinglocator.ts index 5ac9b57c..973701f2 100644 --- a/src/adapters/usertenantmappinglocator.ts +++ b/src/adapters/usertenantmappinglocator.ts @@ -4,6 +4,6 @@ export interface IServicelocatorAssignTenant { userTenantMapping( request: any, assignTenantMappingDto: UserTenantMappingDto, - response: Response + response: Response, ); } diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index d199f9c3..63433a45 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -68,7 +68,7 @@ export class AuthController { @UsePipes(ValidationPipe) refreshToken( @Body() body: RefreshTokenRequestBody, - @Res() response: Response + @Res() response: Response, ) { const { refresh_token: refreshToken } = body; diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 3bf80634..884c3cb9 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -22,8 +22,8 @@ type LoginResponse = { export class AuthService { constructor( private readonly useradapter: UserAdapter, - private readonly keycloakService: KeycloakService - ) { } + private readonly keycloakService: KeycloakService, + ) {} async login(authDto, response: Response) { const apiId = APIID.LOGIN; @@ -50,7 +50,7 @@ export class AuthService { apiId, res, HttpStatus.OK, - "Auth Token fetched Successfully." + "Auth Token fetched Successfully.", ); } catch (error) { if (error.response && error.response.status === 401) { @@ -62,7 +62,7 @@ export class AuthService { apiId, "Internal Server Error", `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -82,7 +82,7 @@ export class AuthService { apiId, data, HttpStatus.OK, - "User fetched by auth token Successfully." + "User fetched by auth token Successfully.", ); } catch (e) { const errorMessage = e?.message || "Something went wrong"; @@ -91,14 +91,14 @@ export class AuthService { apiId, "Internal Server Error", `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } async refreshToken( refreshToken: string, - response: Response + response: Response, ): Promise { const apiId = APIID.REFRESH; const { access_token, expires_in, refresh_token, refresh_expires_in } = @@ -117,7 +117,7 @@ export class AuthService { apiId, res, HttpStatus.OK, - "Refresh Token fetched Successfully." + "Refresh Token fetched Successfully.", ); } @@ -130,7 +130,7 @@ export class AuthService { apiId, logout, HttpStatus.OK, - "Logged Out Successfully." + "Logged Out Successfully.", ); } catch (error) { if (error.response && error.response.status === 400) { @@ -142,7 +142,7 @@ export class AuthService { apiId, "Internal Server Error", `Error : ${errorMessage}`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/authRbac/authRbac.service.ts b/src/authRbac/authRbac.service.ts index 0dc4e6fd..61d87da1 100644 --- a/src/authRbac/authRbac.service.ts +++ b/src/authRbac/authRbac.service.ts @@ -22,7 +22,7 @@ export class AuthRbacService { private jwtService: JwtService, private configService: ConfigService, private readonly userAdapter: UserAdapter, - private readonly postgresRoleService: PostgresRoleService + private readonly postgresRoleService: PostgresRoleService, ) { this.issuer = this.configService.get("ISSUER"); this.audience = this.configService.get("AUDIENCE"); @@ -42,7 +42,7 @@ export class AuthRbacService { async signInRbac( username: string, tenantId: string, - response: Response + response: Response, ): Promise { const apiId = APIID.RBAC_TOKEN; const userData = await this.userAdapter @@ -55,13 +55,13 @@ export class AuthRbacService { apiId, "Bad Request", "User details or tenant not found for user", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const userRoles = await this.postgresRoleService.findUserRoleData( userData?.userId, - tenantId + tenantId, ); if (!userRoles?.length) { @@ -70,7 +70,7 @@ export class AuthRbacService { apiId, "Bad Request", "Roles not found for user", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -95,7 +95,7 @@ export class AuthRbacService { apiId, result, HttpStatus.OK, - "User and related entries deleted Successfully." + "User and related entries deleted Successfully.", ); } @@ -104,9 +104,8 @@ export class AuthRbacService { if (!roleIds.length) { return []; } - const privilegesData = await this.postgresRoleService.findPrivilegeByRoleId( - roleIds - ); + const privilegesData = + await this.postgresRoleService.findPrivilegeByRoleId(roleIds); const privileges = privilegesData.map(({ code }) => code); return privileges; diff --git a/src/automatic-member/automatic-member.controller.spec.ts b/src/automatic-member/automatic-member.controller.spec.ts index 93501780..cb7ed479 100644 --- a/src/automatic-member/automatic-member.controller.spec.ts +++ b/src/automatic-member/automatic-member.controller.spec.ts @@ -1,8 +1,8 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AutomaticMemberController } from './automatic-member.controller'; -import { AutomaticMemberService } from './automatic-member.service'; +import { Test, TestingModule } from "@nestjs/testing"; +import { AutomaticMemberController } from "./automatic-member.controller"; +import { AutomaticMemberService } from "./automatic-member.service"; -describe('AutomaticMemberController', () => { +describe("AutomaticMemberController", () => { let controller: AutomaticMemberController; beforeEach(async () => { @@ -11,10 +11,12 @@ describe('AutomaticMemberController', () => { providers: [AutomaticMemberService], }).compile(); - controller = module.get(AutomaticMemberController); + controller = module.get( + AutomaticMemberController, + ); }); - it('should be defined', () => { + it("should be defined", () => { expect(controller).toBeDefined(); }); }); diff --git a/src/automatic-member/automatic-member.controller.ts b/src/automatic-member/automatic-member.controller.ts index b73a0b8d..65c64654 100644 --- a/src/automatic-member/automatic-member.controller.ts +++ b/src/automatic-member/automatic-member.controller.ts @@ -1,14 +1,26 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, UsePipes, ValidationPipe } from '@nestjs/common'; -import { AutomaticMemberService } from './automatic-member.service'; -import { CreateAutomaticMemberDto } from './dto/create-automatic-member.dto'; -import { UpdateAutomaticMemberDto } from './dto/update-automatic-member.dto'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + UsePipes, + ValidationPipe, +} from "@nestjs/common"; +import { AutomaticMemberService } from "./automatic-member.service"; +import { CreateAutomaticMemberDto } from "./dto/create-automatic-member.dto"; +import { UpdateAutomaticMemberDto } from "./dto/update-automatic-member.dto"; -@Controller('automaticMember') +@Controller("automaticMember") export class AutomaticMemberController { - constructor(private readonly automaticMemberService: AutomaticMemberService) {} + constructor( + private readonly automaticMemberService: AutomaticMemberService, + ) {} @Post() - @UsePipes(new ValidationPipe()) + @UsePipes(new ValidationPipe()) create(@Body() createDto: CreateAutomaticMemberDto) { return this.automaticMemberService.create(createDto); } @@ -18,18 +30,18 @@ export class AutomaticMemberController { return this.automaticMemberService.findAll(); } - @Get(':id') - findOne(@Param('id') id: string) { + @Get(":id") + findOne(@Param("id") id: string) { return this.automaticMemberService.findOne(id); } - @Patch(':id') - update(@Param('id') id: string, @Body() updateDto: UpdateAutomaticMemberDto) { + @Patch(":id") + update(@Param("id") id: string, @Body() updateDto: UpdateAutomaticMemberDto) { return this.automaticMemberService.update(id, updateDto); } - @Delete(':id') - remove(@Param('id') id: string) { + @Delete(":id") + remove(@Param("id") id: string) { return this.automaticMemberService.remove(id); } } diff --git a/src/automatic-member/automatic-member.module.ts b/src/automatic-member/automatic-member.module.ts index 32cd3545..d1b95b79 100644 --- a/src/automatic-member/automatic-member.module.ts +++ b/src/automatic-member/automatic-member.module.ts @@ -1,14 +1,14 @@ -import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { AutomaticMember } from './entity/automatic-member.entity'; -import { AutomaticMemberService } from './automatic-member.service'; -import { AutomaticMemberController } from './automatic-member.controller'; -import { User } from 'src/user/entities/user-entity'; +import { Module } from "@nestjs/common"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { AutomaticMember } from "./entity/automatic-member.entity"; +import { AutomaticMemberService } from "./automatic-member.service"; +import { AutomaticMemberController } from "./automatic-member.controller"; +import { User } from "src/user/entities/user-entity"; @Module({ - imports: [TypeOrmModule.forFeature([AutomaticMember,User])], + imports: [TypeOrmModule.forFeature([AutomaticMember, User])], controllers: [AutomaticMemberController], providers: [AutomaticMemberService], - exports: [AutomaticMemberService], + exports: [AutomaticMemberService], }) export class AutomaticMemberModule {} diff --git a/src/automatic-member/automatic-member.service.spec.ts b/src/automatic-member/automatic-member.service.spec.ts index b89e2c9e..07228a96 100644 --- a/src/automatic-member/automatic-member.service.spec.ts +++ b/src/automatic-member/automatic-member.service.spec.ts @@ -1,7 +1,7 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AutomaticMemberService } from './automatic-member.service'; +import { Test, TestingModule } from "@nestjs/testing"; +import { AutomaticMemberService } from "./automatic-member.service"; -describe('AutomaticMemberService', () => { +describe("AutomaticMemberService", () => { let service: AutomaticMemberService; beforeEach(async () => { @@ -12,7 +12,7 @@ describe('AutomaticMemberService', () => { service = module.get(AutomaticMemberService); }); - it('should be defined', () => { + it("should be defined", () => { expect(service).toBeDefined(); }); }); diff --git a/src/automatic-member/automatic-member.service.ts b/src/automatic-member/automatic-member.service.ts index 1662984d..64644b1a 100644 --- a/src/automatic-member/automatic-member.service.ts +++ b/src/automatic-member/automatic-member.service.ts @@ -1,12 +1,16 @@ -import { Injectable, NotFoundException, ConflictException } from '@nestjs/common'; -import { Repository } from 'typeorm'; -import { InjectRepository } from '@nestjs/typeorm'; -import { AutomaticMember } from './entity/automatic-member.entity'; -import { CreateAutomaticMemberDto } from './dto/create-automatic-member.dto'; -import { UpdateAutomaticMemberDto } from './dto/update-automatic-member.dto'; -import { User } from 'src/user/entities/user-entity'; -import { String } from 'aws-sdk/clients/apigateway'; -import { UUID } from 'aws-sdk/clients/cloudtrail'; +import { + Injectable, + NotFoundException, + ConflictException, +} from "@nestjs/common"; +import { Repository } from "typeorm"; +import { InjectRepository } from "@nestjs/typeorm"; +import { AutomaticMember } from "./entity/automatic-member.entity"; +import { CreateAutomaticMemberDto } from "./dto/create-automatic-member.dto"; +import { UpdateAutomaticMemberDto } from "./dto/update-automatic-member.dto"; +import { User } from "src/user/entities/user-entity"; +import { String } from "aws-sdk/clients/apigateway"; +import { UUID } from "aws-sdk/clients/cloudtrail"; @Injectable() export class AutomaticMemberService { @@ -14,30 +18,36 @@ export class AutomaticMemberService { @InjectRepository(AutomaticMember) private automaticMemberRepository: Repository, @InjectRepository(User) - private userRepository: Repository - ) { } + private userRepository: Repository, + ) {} async create(dto: CreateAutomaticMemberDto) { - try { + try { const checkExistUser = await this.userRepository.find({ - where: { - userId: dto.userId, - }, - }); + where: { + userId: dto.userId, + }, + }); if (!checkExistUser) { - throw new ConflictException('User id is not Valid.'); + throw new ConflictException("User id is not Valid."); } - const exists = await this.checkAutomaticMemberExists(dto.userId, dto.tenantId, dto.rules.condition.value[0]); + const exists = await this.checkAutomaticMemberExists( + dto.userId, + dto.tenantId, + dto.rules.condition.value[0], + ); if (exists.length > 0 && exists[0].isActive === true) { - throw new ConflictException('AutomaticMember already exists for this user and tenant.'); + throw new ConflictException( + "AutomaticMember already exists for this user and tenant.", + ); } - + const newMember = this.automaticMemberRepository.create(dto); return this.automaticMemberRepository.save(newMember); } catch (error) { - return error + return error; } } @@ -46,7 +56,9 @@ export class AutomaticMemberService { } async findOne(id: string) { - const member = await this.automaticMemberRepository.findOne({ where: { id } }); + const member = await this.automaticMemberRepository.findOne({ + where: { id }, + }); if (!member) { throw new NotFoundException(`AutomaticMember with ID ${id} not found`); @@ -54,13 +66,14 @@ export class AutomaticMemberService { return { ...member, - status: member.isActive ? 'Active' : 'Inactive', + status: member.isActive ? "Active" : "Inactive", }; } async checkMemberById(id: string) { - const member = await this.automaticMemberRepository.findOne({ where: { userId:id,isActive:true } }); - + const member = await this.automaticMemberRepository.findOne({ + where: { userId: id, isActive: true }, + }); if (!member) { return false; @@ -69,7 +82,11 @@ export class AutomaticMemberService { return member; } - async checkAutomaticMemberExists(userId: UUID, tenantId: UUID, assignTo: String) { + async checkAutomaticMemberExists( + userId: UUID, + tenantId: UUID, + assignTo: string, + ) { const query = ` SELECT * FROM "AutomaticMember" "automaticMember" WHERE "automaticMember"."userId" = $1 @@ -82,11 +99,15 @@ export class AutomaticMemberService { return await this.automaticMemberRepository.query(query, [ userId, tenantId, - assignTo.toString() + assignTo.toString(), ]); } - async getUserbyUserIdAndTenantId(userId: UUID, tenantId: UUID, status: boolean): Promise { + async getUserbyUserIdAndTenantId( + userId: UUID, + tenantId: UUID, + status: boolean, + ): Promise { return await this.automaticMemberRepository.findOne({ where: { userId: userId, tenantId: tenantId, isActive: status }, }); @@ -97,7 +118,7 @@ export class AutomaticMemberService { throw new NotFoundException(`AutomaticMember with ID ${id} not found`); } - Object.assign(member) + Object.assign(member); Object.assign(member, dto); return this.automaticMemberRepository.save(member); } @@ -105,6 +126,6 @@ export class AutomaticMemberService { async remove(id: string) { const member = await this.findOne(id); await this.automaticMemberRepository.remove(member); - return { message: 'AutomaticMember deleted successfully' }; + return { message: "AutomaticMember deleted successfully" }; } } diff --git a/src/automatic-member/dto/create-automatic-member.dto.ts b/src/automatic-member/dto/create-automatic-member.dto.ts index 693c2087..cfca292f 100644 --- a/src/automatic-member/dto/create-automatic-member.dto.ts +++ b/src/automatic-member/dto/create-automatic-member.dto.ts @@ -1,7 +1,14 @@ // import { IsUUID,IsObject, IsBoolean, IsOptional } from 'class-validator'; import { Expose, Type } from "class-transformer"; -import { IsBoolean, IsUUID, IsObject, IsOptional, IsString, IsArray } from "class-validator"; +import { + IsBoolean, + IsUUID, + IsObject, + IsOptional, + IsString, + IsArray, +} from "class-validator"; import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; import { PrimaryGeneratedColumn } from "typeorm"; @@ -16,22 +23,31 @@ class ConditionDto { @IsUUID(undefined, { message: "Field ID must be a valid UUID" }) fieldId: string; - @ApiPropertyOptional({ type: String, description: "The operator for the condition (e.g., '=', '!=')" }) + @ApiPropertyOptional({ + type: String, + description: "The operator for the condition (e.g., '=', '!=')", + }) @Expose() @IsString() - operator ?: string; + operator?: string; } class AllowedActionsDto { - @ApiPropertyOptional({ type: [String], description: "Allowed actions for users" }) + @ApiPropertyOptional({ + type: [String], + description: "Allowed actions for users", + }) @Expose() @IsArray() - user ?: string[]; + user?: string[]; - @ApiPropertyOptional({ type: [String], description: "Allowed actions for cohorts" }) + @ApiPropertyOptional({ + type: [String], + description: "Allowed actions for cohorts", + }) @Expose() @IsArray() - cohort ?: string[]; + cohort?: string[]; } export class RulesDto { @@ -46,11 +62,14 @@ export class RulesDto { @IsString() cohortField: string; - @ApiPropertyOptional({ type: () => AllowedActionsDto, description: "Allowed actions for user and cohort" }) + @ApiPropertyOptional({ + type: () => AllowedActionsDto, + description: "Allowed actions for user and cohort", + }) @Expose() @IsObject() @Type(() => AllowedActionsDto) - allowedActions ?: AllowedActionsDto; + allowedActions?: AllowedActionsDto; } export class CreateAutomaticMemberDto { diff --git a/src/automatic-member/dto/update-automatic-member.dto.ts b/src/automatic-member/dto/update-automatic-member.dto.ts index 6b886e1a..c5586441 100644 --- a/src/automatic-member/dto/update-automatic-member.dto.ts +++ b/src/automatic-member/dto/update-automatic-member.dto.ts @@ -1,4 +1,6 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateAutomaticMemberDto } from './create-automatic-member.dto'; +import { PartialType } from "@nestjs/mapped-types"; +import { CreateAutomaticMemberDto } from "./create-automatic-member.dto"; -export class UpdateAutomaticMemberDto extends PartialType(CreateAutomaticMemberDto) {} +export class UpdateAutomaticMemberDto extends PartialType( + CreateAutomaticMemberDto, +) {} diff --git a/src/automatic-member/entity/automatic-member.entity.ts b/src/automatic-member/entity/automatic-member.entity.ts index f962f714..bd48bbb4 100644 --- a/src/automatic-member/entity/automatic-member.entity.ts +++ b/src/automatic-member/entity/automatic-member.entity.ts @@ -1,17 +1,22 @@ -import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn } from 'typeorm'; +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, +} from "typeorm"; -@Entity({ name: 'AutomaticMember' }) +@Entity({ name: "AutomaticMember" }) export class AutomaticMember { - @PrimaryGeneratedColumn('uuid') + @PrimaryGeneratedColumn("uuid") id: string; - @Column('uuid') + @Column("uuid") userId: string; - @Column('jsonb') + @Column("jsonb") rules: any; - @Column('uuid') + @Column("uuid") tenantId: string; @Column({ default: true }) diff --git a/src/cohort/cohort.controller.ts b/src/cohort/cohort.controller.ts index f9f5cb1d..c7188e3b 100644 --- a/src/cohort/cohort.controller.ts +++ b/src/cohort/cohort.controller.ts @@ -69,7 +69,7 @@ export class CohortController { @Param("cohortId") cohortId: string, @Res() response: Response, @Query("children") children: string, - @Query("customField") customField: string + @Query("customField") customField: string, ) { const academicYearId = headers["academicyearid"]; const getChildDataValueBoolean = children === "true"; @@ -106,9 +106,8 @@ export class CohortController { @Body() cohortCreateDto: CohortCreateDto, @UploadedFile() image, @Res() response: Response, - @GetUserId("userId", ParseUUIDPipe) userId: string + @GetUserId("userId", ParseUUIDPipe) userId: string, ) { - const tenantId = headers["tenantid"]; const academicYearId = headers["academicyearid"]; if (!tenantId || !isUUID(tenantId)) { @@ -149,7 +148,7 @@ export class CohortController { @Headers() headers, @Req() request: Request, @Body() cohortSearchDto: CohortSearchDto, - @Res() response: Response + @Res() response: Response, ) { const tenantId = headers["tenantid"]; const academicYearId = headers["academicyearid"]; @@ -173,7 +172,7 @@ export class CohortController { filename: editFileName, }), fileFilter: imageFileFilter, - }) + }), ) @ApiBody({ type: CohortUpdateDto }) @ApiOkResponse({ description: "Cohort has been updated successfully" }) @@ -186,7 +185,7 @@ export class CohortController { @Body() cohortUpdateDto: CohortUpdateDto, @UploadedFile() image, @Res() response: Response, - @GetUserId("userId", ParseUUIDPipe) userId: string + @GetUserId("userId", ParseUUIDPipe) userId: string, ) { cohortUpdateDto.updatedBy = userId; return await this.cohortAdapter @@ -202,7 +201,7 @@ export class CohortController { public async updateCohortStatus( @Param("cohortId") cohortId: string, @Res() response: Response, - @GetUserId("userId", ParseUUIDPipe) userId: string + @GetUserId("userId", ParseUUIDPipe) userId: string, ) { return await this.cohortAdapter .buildCohortAdapter() @@ -226,7 +225,7 @@ export class CohortController { @Param("userId", ParseUUIDPipe) userId: string, @Query("children") children: string, @Query("customField") customField: string | null = null, - @Res() response: Response + @Res() response: Response, ) { const tenantId = headers["tenantid"]; const academicYearId = headers["academicyearid"]; diff --git a/src/cohort/cohort.module.ts b/src/cohort/cohort.module.ts index 38afa97d..5eee1678 100644 --- a/src/cohort/cohort.module.ts +++ b/src/cohort/cohort.module.ts @@ -24,7 +24,6 @@ import { AutomaticMember } from "src/automatic-member/entity/automatic-member.en import { AutomaticMemberService } from "src/automatic-member/automatic-member.service"; import { KafkaService } from "../kafka/kafka.service"; - @Module({ imports: [ TypeOrmModule.forFeature([ @@ -38,7 +37,7 @@ import { KafkaService } from "../kafka/kafka.service"; AcademicYear, User, Tenants, - AutomaticMember + AutomaticMember, ]), HttpModule, PostgresModule, @@ -53,7 +52,7 @@ import { KafkaService } from "../kafka/kafka.service"; PostgresAcademicYearService, PostgresCohortMembersService, AutomaticMemberService, - KafkaService + KafkaService, ], }) -export class CohortModule { } +export class CohortModule {} diff --git a/src/cohort/dto/cohort-create.dto.ts b/src/cohort/dto/cohort-create.dto.ts index fc470958..1d7add01 100644 --- a/src/cohort/dto/cohort-create.dto.ts +++ b/src/cohort/dto/cohort-create.dto.ts @@ -88,7 +88,7 @@ export class CohortCreateDto { //file path @ApiPropertyOptional({ type: () => [String] }) @IsArray() - @IsString({ each: true }) + @IsString({ each: true }) @IsOptional() image: string[]; diff --git a/src/cohort/dto/cohort-search.dto.ts b/src/cohort/dto/cohort-search.dto.ts index 033e0dd5..34d6a1c4 100644 --- a/src/cohort/dto/cohort-search.dto.ts +++ b/src/cohort/dto/cohort-search.dto.ts @@ -133,7 +133,6 @@ export class filtersProperty { @IsNotEmpty({ each: true }) block: string[]; - @ApiPropertyOptional({ type: [String], description: "Block", diff --git a/src/cohortAcademicYear/cohortAcademicYear.controller.ts b/src/cohortAcademicYear/cohortAcademicYear.controller.ts index f3cc92d0..5c385517 100644 --- a/src/cohortAcademicYear/cohortAcademicYear.controller.ts +++ b/src/cohortAcademicYear/cohortAcademicYear.controller.ts @@ -1,25 +1,40 @@ import { - Controller, Headers, Post, UseFilters, UsePipes, Req, - Res, ValidationPipe, + Controller, + Headers, + Post, + UseFilters, + UsePipes, + Req, + Res, + ValidationPipe, BadRequestException, Body, - ParseUUIDPipe -} from '@nestjs/common'; -import { ApiBadRequestResponse, ApiBasicAuth, ApiBody, ApiCreatedResponse, ApiHeader, ApiInternalServerErrorResponse, ApiTags } from '@nestjs/swagger'; -import { APIID } from '@utils/api-id.config'; -import { API_RESPONSES } from '@utils/response.messages'; -import { isUUID } from 'class-validator'; -import { Response, Request } from 'express'; -import { AllExceptionsFilter } from 'src/common/filters/exception.filter'; -import { CohortAcademicYearDto } from './dto/cohort-academicyear.dto'; -import { CohortAcademicYearAdapter } from './cohortacademicyearsadaptor'; -import { GetUserId } from 'src/common/decorators/getUserId.decorator'; + ParseUUIDPipe, +} from "@nestjs/common"; +import { + ApiBadRequestResponse, + ApiBasicAuth, + ApiBody, + ApiCreatedResponse, + ApiHeader, + ApiInternalServerErrorResponse, + ApiTags, +} from "@nestjs/swagger"; +import { APIID } from "@utils/api-id.config"; +import { API_RESPONSES } from "@utils/response.messages"; +import { isUUID } from "class-validator"; +import { Response, Request } from "express"; +import { AllExceptionsFilter } from "src/common/filters/exception.filter"; +import { CohortAcademicYearDto } from "./dto/cohort-academicyear.dto"; +import { CohortAcademicYearAdapter } from "./cohortacademicyearsadaptor"; +import { GetUserId } from "src/common/decorators/getUserId.decorator"; @ApiTags("CohortAcademicYear") -@Controller('cohort-academic-year') +@Controller("cohort-academic-year") export class CohortAcademicYearController { - - constructor(private readonly cohortAcademicYearAdapter: CohortAcademicYearAdapter) { } + constructor( + private readonly cohortAcademicYearAdapter: CohortAcademicYearAdapter, + ) {} @UseFilters(new AllExceptionsFilter(APIID.ADD_COHORT_TO_ACADEMIC_YEAR)) @Post("/create") @@ -39,11 +54,18 @@ export class CohortAcademicYearController { @Res() response: Response, @GetUserId("userId", ParseUUIDPipe) userId: string, ) { - let tenantId = headers["tenantid"]; + const tenantId = headers["tenantid"]; if (tenantId && !isUUID(tenantId)) { throw new BadRequestException(API_RESPONSES.TENANTID_VALIDATION); } cohortAcademicYearDto.createdBy = userId; - return this.cohortAcademicYearAdapter.buildAcademicYears().createCohortAcademicYear(tenantId, request, cohortAcademicYearDto, response); + return this.cohortAcademicYearAdapter + .buildAcademicYears() + .createCohortAcademicYear( + tenantId, + request, + cohortAcademicYearDto, + response, + ); } } diff --git a/src/cohortAcademicYear/cohortAcademicYear.module.ts b/src/cohortAcademicYear/cohortAcademicYear.module.ts index 414be833..6e08806b 100644 --- a/src/cohortAcademicYear/cohortAcademicYear.module.ts +++ b/src/cohortAcademicYear/cohortAcademicYear.module.ts @@ -10,7 +10,6 @@ import { Cohort } from "src/cohort/entities/cohort.entity"; import { AcademicYear } from "src/academicyears/entities/academicyears-entity"; import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; - @Module({ imports: [ PostgresModule, @@ -18,11 +17,15 @@ import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; CohortAcademicYear, Cohort, AcademicYear, - Tenants + Tenants, ]), ], controllers: [CohortAcademicYearController], - providers: [CohortAcademicYearAdapter, CohortAcademicYearService, PostgresAcademicYearService], - exports: [CohortAcademicYearService] + providers: [ + CohortAcademicYearAdapter, + CohortAcademicYearService, + PostgresAcademicYearService, + ], + exports: [CohortAcademicYearService], }) -export class CohortAcademicYearModule { } +export class CohortAcademicYearModule {} diff --git a/src/cohortAcademicYear/cohortacademicyearsadaptor.ts b/src/cohortAcademicYear/cohortacademicyearsadaptor.ts index f5a6edca..a2037a3c 100644 --- a/src/cohortAcademicYear/cohortacademicyearsadaptor.ts +++ b/src/cohortAcademicYear/cohortacademicyearsadaptor.ts @@ -4,9 +4,7 @@ import { CohortAcademicYearService } from "src/adapters/postgres/cohortAcademicY @Injectable() export class CohortAcademicYearAdapter { - constructor( - private readonly postgresProviders: CohortAcademicYearService - ) {} + constructor(private readonly postgresProviders: CohortAcademicYearService) {} buildAcademicYears(): IServiceLocatorCohortAcademicYear { let adapter: IServiceLocatorCohortAcademicYear; switch (process.env.ADAPTERSOURCE) { diff --git a/src/cohortAcademicYear/dto/cohort-academicyear.dto.ts b/src/cohortAcademicYear/dto/cohort-academicyear.dto.ts index 0919af1c..31f23529 100644 --- a/src/cohortAcademicYear/dto/cohort-academicyear.dto.ts +++ b/src/cohortAcademicYear/dto/cohort-academicyear.dto.ts @@ -1,34 +1,29 @@ -import { - IsNotEmpty, - IsUUID, -} from "class-validator"; +import { IsNotEmpty, IsUUID } from "class-validator"; import { ApiProperty } from "@nestjs/swagger"; import { Expose } from "class-transformer"; export class CohortAcademicYearDto { + @ApiProperty({ + type: String, + description: "cohortId", + default: "", + }) + @Expose() + @IsNotEmpty() + @IsUUID(undefined, { message: "Cohort Id must be a valid UUID" }) + cohortId: string; - @ApiProperty({ - type: String, - description: "cohortId", - default: "", - }) - @Expose() - @IsNotEmpty() - @IsUUID(undefined, { message: "Cohort Id must be a valid UUID" }) - cohortId: string; + @ApiProperty({ + type: String, + description: "academicYearId", + default: "", + }) + @Expose() + @IsNotEmpty() + @IsUUID(undefined, { message: "Academic Year Id must be a valid UUID" }) + academicYearId: string; - @ApiProperty({ - type: String, - description: "academicYearId", - default: "", - }) - @Expose() - @IsNotEmpty() - @IsUUID(undefined, { message: "Academic Year Id must be a valid UUID" }) - academicYearId: string; + createdBy: string; - createdBy: string; - - updatedBy: string; - -} \ No newline at end of file + updatedBy: string; +} diff --git a/src/cohortMembers/cohortMembers.controller.ts b/src/cohortMembers/cohortMembers.controller.ts index 04aeca91..9e8ae9db 100644 --- a/src/cohortMembers/cohortMembers.controller.ts +++ b/src/cohortMembers/cohortMembers.controller.ts @@ -48,7 +48,7 @@ import { GetUserId } from "src/common/decorators/getUserId.decorator"; @Controller("cohortmember") @UseGuards(JwtAuthGuard) export class CohortMembersController { - constructor(private readonly cohortMemberAdapter: CohortMembersAdapter) { } + constructor(private readonly cohortMemberAdapter: CohortMembersAdapter) {} //create cohort members @UseFilters(new AllExceptionsFilter(APIID.COHORT_MEMBER_CREATE)) @@ -73,7 +73,7 @@ export class CohortMembersController { @Req() request, @GetUserId("userId", ParseUUIDPipe) userId: string, @Body() cohortMembersDto: CohortMembersDto, - @Res() response: Response + @Res() response: Response, ) { const loginUser = userId; const tenantId = headers["tenantid"]; @@ -84,7 +84,7 @@ export class CohortMembersController { } if (!academicyearId || !isUUID(academicyearId)) { throw new BadRequestException( - "academicyearId is required and academicyearId must be a valid UUID." + "academicyearId is required and academicyearId must be a valid UUID.", ); } @@ -96,7 +96,7 @@ export class CohortMembersController { response, tenantId, deviceId, - academicyearId + academicyearId, ); return response.status(result.statusCode).json(result); } @@ -123,13 +123,13 @@ export class CohortMembersController { @Param("cohortId") cohortId: string, @Req() request: Request, @Res() response: Response, - @Query("fieldvalue") fieldvalue: string | null = null + @Query("fieldvalue") fieldvalue: string | null = null, ) { const tenantId = headers["tenantid"]; const academicyearId = headers["academicyearid"]; if (!academicyearId || !isUUID(academicyearId)) { throw new BadRequestException( - "academicyearId is required and academicyearId must be a valid UUID." + "academicyearId is required and academicyearId must be a valid UUID.", ); } const result = await this.cohortMemberAdapter @@ -139,7 +139,7 @@ export class CohortMembersController { tenantId, fieldvalue, academicyearId, - response + response, ); } @@ -165,13 +165,13 @@ export class CohortMembersController { @Headers() headers, @Req() request: Request, @Res() response: Response, - @Body() cohortMembersSearchDto: CohortMembersSearchDto + @Body() cohortMembersSearchDto: CohortMembersSearchDto, ) { const tenantId = headers["tenantid"]; const academicyearId = headers["academicyearid"]; if (!academicyearId || !isUUID(academicyearId)) { throw new BadRequestException( - "academicyearId is required and must be a valid UUID." + "academicyearId is required and must be a valid UUID.", ); } const result = await this.cohortMemberAdapter @@ -180,7 +180,7 @@ export class CohortMembersController { cohortMembersSearchDto, tenantId, academicyearId, - response + response, ); } @@ -194,20 +194,18 @@ export class CohortMembersController { @ApiNotFoundResponse({ description: "Data not found" }) @ApiBadRequestResponse({ description: "Bad request" }) @ApiBody({ type: CohortMembersUpdateDto }) - @UsePipes(new ValidationPipe()) + @UsePipes(new ValidationPipe()) public async updateCohortMembers( @Param("cohortmembershipid") cohortMembersId: string, @Req() request, @Body() cohortMemberUpdateDto: CohortMembersUpdateDto, @Res() response: Response, // @Query('userId') userId: string - @GetUserId("userId", ParseUUIDPipe) userId: string + @GetUserId("userId", ParseUUIDPipe) userId: string, ) { const loginUser = userId; if (!loginUser || !isUUID(loginUser)) { - throw new BadRequestException( - "unauthorized!" - ); + throw new BadRequestException("unauthorized!"); } const result = await this.cohortMemberAdapter .buildCohortMembersAdapter() @@ -215,7 +213,7 @@ export class CohortMembersController { cohortMembersId, loginUser, cohortMemberUpdateDto, - response + response, ); } @@ -235,7 +233,7 @@ export class CohortMembersController { @Headers() headers, @Param("id") cohortMembershipId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { const tenantid = headers["tenantid"]; @@ -250,14 +248,19 @@ export class CohortMembersController { @UsePipes(new ValidationPipe()) // @ApiBasicAuth("access-token") @ApiHeader({ - name: "tenantid", required: true + name: "tenantid", + required: true, }) @ApiHeader({ - name: "academicyearid", required: true + name: "academicyearid", + required: true, }) @ApiQuery({ - name: 'userId', required: true, type: 'string', description: 'userId required', - example: '123e4567-e89b-12d3-a456-426614174000', + name: "userId", + required: true, + type: "string", + description: "userId required", + example: "123e4567-e89b-12d3-a456-426614174000", }) @ApiCreatedResponse({ description: "Cohort Member has been created successfully.", @@ -267,22 +270,20 @@ export class CohortMembersController { @Req() request, @Body() bulkCohortMembersDto: BulkCohortMember, @GetUserId("userId", ParseUUIDPipe) userId: string, // Now using userId from query - @Res() response: Response + @Res() response: Response, ) { const loginUser = userId; const tenantId = headers["tenantid"]; const academicyearId = headers["academicyearid"]; if (!loginUser || !isUUID(loginUser)) { - throw new BadRequestException( - "unauthorized!" - ); + throw new BadRequestException("unauthorized!"); } if (!tenantId || !isUUID(tenantId)) { throw new BadRequestException(API_RESPONSES.TENANTID_VALIDATION); } if (!academicyearId || !isUUID(academicyearId)) { throw new BadRequestException( - "academicyearId is required and must be a valid UUID." + "academicyearId is required and must be a valid UUID.", ); } const result = await this.cohortMemberAdapter @@ -292,7 +293,7 @@ export class CohortMembersController { bulkCohortMembersDto, response, tenantId, - academicyearId + academicyearId, ); return result; } diff --git a/src/cohortMembers/cohortMembers.module.ts b/src/cohortMembers/cohortMembers.module.ts index 8609cb04..8e5467cc 100644 --- a/src/cohortMembers/cohortMembers.module.ts +++ b/src/cohortMembers/cohortMembers.module.ts @@ -23,7 +23,7 @@ import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; Cohort, CohortAcademicYear, AcademicYear, - Tenants + Tenants, ]), HttpModule, PostgresModule, @@ -34,6 +34,6 @@ import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; PostgresCohortMembersService, PostgresAcademicYearService, ], - exports: [PostgresCohortMembersService] + exports: [PostgresCohortMembersService], }) -export class CohortMembersModule { } +export class CohortMembersModule {} diff --git a/src/cohortMembers/dto/cohortMembers-search.dto.ts b/src/cohortMembers/dto/cohortMembers-search.dto.ts index bd218b63..43d32b3d 100644 --- a/src/cohortMembers/dto/cohortMembers-search.dto.ts +++ b/src/cohortMembers/dto/cohortMembers-search.dto.ts @@ -29,7 +29,7 @@ class FiltersDto { @IsString() @IsUUID() @ValidateIf((o) => !o.cohortId) - userId?: string; + userId?: string; @ApiPropertyOptional({ type: String, description: "Role", example: "" }) @IsOptional() diff --git a/src/cohortMembers/dto/cohortMembers.dto.ts b/src/cohortMembers/dto/cohortMembers.dto.ts index 9823e375..8ddd0216 100644 --- a/src/cohortMembers/dto/cohortMembers.dto.ts +++ b/src/cohortMembers/dto/cohortMembers.dto.ts @@ -35,7 +35,9 @@ export class CohortMembersDto { }) @Expose() @IsNotEmpty() - @IsUUID(undefined, { message: "cohortAcademicYearId Id must be a valid UUID" }) + @IsUUID(undefined, { + message: "cohortAcademicYearId Id must be a valid UUID", + }) cohortAcademicYearId: string; //userId diff --git a/src/common/decorators/getUserId.decorator.ts b/src/common/decorators/getUserId.decorator.ts index 9d13f0a7..6ab8c5c2 100644 --- a/src/common/decorators/getUserId.decorator.ts +++ b/src/common/decorators/getUserId.decorator.ts @@ -1,21 +1,25 @@ -import { createParamDecorator, ExecutionContext, UnauthorizedException } from '@nestjs/common'; -import jwt_decode from 'jwt-decode'; +import { + createParamDecorator, + ExecutionContext, + UnauthorizedException, +} from "@nestjs/common"; +import jwt_decode from "jwt-decode"; export const GetUserId = createParamDecorator( (data: unknown, ctx: ExecutionContext): string => { const request = ctx.switchToHttp().getRequest(); const authHeader = request.headers.authorization; - if (!authHeader || !authHeader.startsWith('Bearer ')) { - throw new UnauthorizedException('Invalid or missing token'); + if (!authHeader || !authHeader.startsWith("Bearer ")) { + throw new UnauthorizedException("Invalid or missing token"); } try { - const token = authHeader.split(' ')[1]; // Extract JWT token - const decoded: any = jwt_decode(token); // Decode token + const token = authHeader.split(" ")[1]; // Extract JWT token + const decoded: any = jwt_decode(token); // Decode token return decoded?.sub; // Assuming `sub` is where userId is stored } catch (error) { - throw new UnauthorizedException('Invalid token'); + throw new UnauthorizedException("Invalid token"); } }, -); \ No newline at end of file +); diff --git a/src/common/decorators/permission.decorator.ts b/src/common/decorators/permission.decorator.ts index a934c8a5..08fc97ae 100644 --- a/src/common/decorators/permission.decorator.ts +++ b/src/common/decorators/permission.decorator.ts @@ -13,5 +13,5 @@ export const PermissionsDecorator = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); return request.permissions; - } + }, ); diff --git a/src/common/filters/exception.filter.ts b/src/common/filters/exception.filter.ts index db0dde38..c033f8ab 100644 --- a/src/common/filters/exception.filter.ts +++ b/src/common/filters/exception.filter.ts @@ -30,7 +30,7 @@ export class AllExceptionsFilter implements ExceptionFilter { exception instanceof HttpException ? exception.name : "Internal Server Error", // error - status + status, ); } } diff --git a/src/common/guards/rbac.guard.ts b/src/common/guards/rbac.guard.ts index b8e6a586..f8d6132d 100644 --- a/src/common/guards/rbac.guard.ts +++ b/src/common/guards/rbac.guard.ts @@ -10,12 +10,12 @@ export class RbacAuthGuard extends AuthGuard("jwt-rbac") { } canActivate( - context: ExecutionContext + context: ExecutionContext, ): boolean | Promise | Observable { // Required permissions come from permission decorator for each API end point const requiredPermissions = this.reflector.get( "permissions", - context.getHandler() + context.getHandler(), ); const payload = super.getRequest(context).user; diff --git a/src/common/guards/rbac.strategy.ts b/src/common/guards/rbac.strategy.ts index 5a790f81..4fc944d3 100644 --- a/src/common/guards/rbac.strategy.ts +++ b/src/common/guards/rbac.strategy.ts @@ -35,7 +35,7 @@ export class RbacJwtStrategy extends PassportStrategy(Strategy, "jwt-rbac") { } const isAuthorized = requiredPermissions.every((permission: string) => - userPermissions.includes(permission) + userPermissions.includes(permission), ); if (isAuthorized) { diff --git a/src/common/logger/LoggerUtil.ts b/src/common/logger/LoggerUtil.ts index 55149f95..50b514eb 100644 --- a/src/common/logger/LoggerUtil.ts +++ b/src/common/logger/LoggerUtil.ts @@ -1,82 +1,83 @@ -import * as winston from 'winston'; +import * as winston from "winston"; export class LoggerUtil { - private static logger: winston.Logger; + private static logger: winston.Logger; - static getLogger() { - if (!this.logger) { - const customFormat = winston.format.printf( - ({ timestamp, level, message, context, user, error }) => { - return JSON.stringify({ - timestamp: timestamp, - context: context, - user: user, - level: level, - message: message, - error: error, - }); - }, - ); - - this.logger = winston.createLogger({ - level: 'info', - format: winston.format.combine(winston.format.timestamp(), customFormat), - transports: [ - new winston.transports.Console(), - ], - }); - } - return this.logger; - } - - // Method to reset logger (useful for testing or when files are deleted) - static resetLogger() { - this.logger = null; - } - - static log( - message: string, - context?: string, - user?: string, - level: string = 'info', - ) { - this.getLogger().log({ - level: level, - message: message, + static getLogger() { + if (!this.logger) { + const customFormat = winston.format.printf( + ({ timestamp, level, message, context, user, error }) => { + return JSON.stringify({ + timestamp: timestamp, context: context, user: user, - timestamp: new Date().toISOString(), - }); - } - - static error( - message: string, - error?: string, - context?: string, - user?: string, - ) { - this.getLogger().error({ + level: level, message: message, error: error, - context: context, - user: user, - timestamp: new Date().toISOString(), - }); - } + }); + }, + ); - static warn(message: string, context?: string) { - this.getLogger().warn({ - message: message, - context: context, - timestamp: new Date().toISOString(), - }); + this.logger = winston.createLogger({ + level: "info", + format: winston.format.combine( + winston.format.timestamp(), + customFormat, + ), + transports: [new winston.transports.Console()], + }); } + return this.logger; + } - static debug(message: string, context?: string) { - this.getLogger().debug({ - message: message, - context: context, - timestamp: new Date().toISOString(), - }); - } -} \ No newline at end of file + // Method to reset logger (useful for testing or when files are deleted) + static resetLogger() { + this.logger = null; + } + + static log( + message: string, + context?: string, + user?: string, + level: string = "info", + ) { + this.getLogger().log({ + level: level, + message: message, + context: context, + user: user, + timestamp: new Date().toISOString(), + }); + } + + static error( + message: string, + error?: string, + context?: string, + user?: string, + ) { + this.getLogger().error({ + message: message, + error: error, + context: context, + user: user, + timestamp: new Date().toISOString(), + }); + } + + static warn(message: string, context?: string) { + this.getLogger().warn({ + message: message, + context: context, + timestamp: new Date().toISOString(), + }); + } + + static debug(message: string, context?: string) { + this.getLogger().debug({ + message: message, + context: context, + timestamp: new Date().toISOString(), + }); + } +} diff --git a/src/common/responses/response.ts b/src/common/responses/response.ts index cead8d3b..8e8b015d 100644 --- a/src/common/responses/response.ts +++ b/src/common/responses/response.ts @@ -7,7 +7,7 @@ export default class APIResponse { id: string, result: Type, statusCode: number, - successmessage: string + successmessage: string, ) { try { const params: Params = { @@ -35,7 +35,7 @@ export default class APIResponse { id: string, errmsg: string, error: string, - statusCode: number + statusCode: number, ) { try { const params: Params = { diff --git a/src/common/services/cache-example.service.ts b/src/common/services/cache-example.service.ts new file mode 100644 index 00000000..5b2aa096 --- /dev/null +++ b/src/common/services/cache-example.service.ts @@ -0,0 +1,117 @@ +import { Injectable } from '@nestjs/common'; +import { CacheService } from './cache.service'; + +@Injectable() +export class CacheExampleService { + constructor(private readonly cacheService: CacheService) {} + + /** + * Example: Cache user data with automatic fallback to database + */ + async getUserWithCache(userId: string) { + const cacheKey = this.cacheService.generateKey('user', userId); + + return await this.cacheService.getOrSet( + cacheKey, + async () => { + // This function will only run if data is not in cache + console.log('Fetching user from database...'); + // Your actual database call here + return { id: userId, name: 'John Doe', email: 'john@example.com' }; + }, + 300 // Cache for 5 minutes + ); + } + + /** + * Example: Cache expensive database queries + */ + async getActiveUsersWithCache(tenantId: string) { + const cacheKey = this.cacheService.generateKey('active-users', tenantId); + + // Check if data exists in cache + const cachedData = await this.cacheService.get(cacheKey); + if (cachedData) { + console.log('Returning cached active users'); + return cachedData; + } + + // If not in cache, fetch from database + console.log('Fetching active users from database...'); + const activeUsers = [ + { id: '1', name: 'User 1', status: 'active' }, + { id: '2', name: 'User 2', status: 'active' } + ]; + + // Store in cache for 10 minutes + await this.cacheService.set(cacheKey, activeUsers, 600); + + return activeUsers; + } + + /** + * Example: Cache with invalidation + */ + async updateUser(userId: string, updateData: any) { + // Update user in database first + console.log('Updating user in database...'); + const updatedUser = { id: userId, ...updateData }; + + // Invalidate cache + const userCacheKey = this.cacheService.generateKey('user', userId); + await this.cacheService.del(userCacheKey); + + // Also invalidate related caches + const activeUsersCacheKey = this.cacheService.generateKey('active-users', updateData.tenantId); + await this.cacheService.del(activeUsersCacheKey); + + return updatedUser; + } + + /** + * Example: Bulk cache operations + */ + async cacheMultipleUsers(users: any[]) { + const cachePromises = users.map(user => { + const cacheKey = this.cacheService.generateKey('user', user.id); + return this.cacheService.set(cacheKey, user, 300); + }); + + await Promise.all(cachePromises); + console.log(`Cached ${users.length} users`); + } + + /** + * Example: Check if cache exists before expensive operation + */ + async getReportsWithCache(reportType: string, params: any) { + const cacheKey = this.cacheService.generateKey('report', reportType, JSON.stringify(params)); + + const exists = await this.cacheService.has(cacheKey); + if (exists) { + console.log('Report found in cache'); + return await this.cacheService.get(cacheKey); + } + + console.log('Generating report...'); + // Simulate expensive report generation + const report = { + type: reportType, + data: [1, 2, 3, 4, 5], + generatedAt: new Date().toISOString() + }; + + // Cache for 1 hour + await this.cacheService.set(cacheKey, report, 3600); + + return report; + } + + /** + * Example: Clear all cache (use with caution in production) + */ + async clearAllCache() { + await this.cacheService.reset(); + console.log('All cache cleared'); + } +} \ No newline at end of file diff --git a/src/common/services/cache.service.ts b/src/common/services/cache.service.ts new file mode 100644 index 00000000..e771add4 --- /dev/null +++ b/src/common/services/cache.service.ts @@ -0,0 +1,69 @@ +import { Injectable, Inject } from "@nestjs/common"; +import { CACHE_MANAGER } from "@nestjs/cache-manager"; +import { Cache } from "cache-manager"; + +@Injectable() +export class CacheService { + constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {} + + /** + * Get value from cache + */ + async get(key: string): Promise { + return await this.cacheManager.get(key); + } + + /** + * Set value in cache with TTL + */ + async set(key: string, value: T, ttl?: number): Promise { + await this.cacheManager.set(key, value, ttl); + } + + /** + * Delete value from cache + */ + async del(key: string): Promise { + await this.cacheManager.del(key); + } + + /** + * Clear all cache + */ + async reset(): Promise { + await this.cacheManager.reset(); + } + + /** + * Get or set cache with fallback function + */ + async getOrSet( + key: string, + fallback: () => Promise, + ttl?: number, + ): Promise { + let value = await this.get(key); + + if (value === undefined || value === null) { + value = await fallback(); + await this.set(key, value, ttl); + } + + return value; + } + + /** + * Check if key exists in cache + */ + async has(key: string): Promise { + const value = await this.get(key); + return value !== undefined && value !== null; + } + + /** + * Generate cache key with prefix + */ + generateKey(prefix: string, ...parts: string[]): string { + return `${prefix}:${parts.join(":")}`; + } +} diff --git a/src/common/services/upload-S3.service.ts b/src/common/services/upload-S3.service.ts index b1841e83..a8aa132a 100644 --- a/src/common/services/upload-S3.service.ts +++ b/src/common/services/upload-S3.service.ts @@ -6,10 +6,9 @@ import { S3Client } from "@aws-sdk/client-s3"; import APIResponse from "../responses/response"; import { API_RESPONSES } from "@utils/response.messages"; import { APIID } from "@utils/api-id.config"; -import { v4 as uuidv4 } from 'uuid'; +import { v4 as uuidv4 } from "uuid"; import { createPresignedPost } from "@aws-sdk/s3-presigned-post"; - @Injectable() export class UploadS3Service { private s3: S3; @@ -62,28 +61,40 @@ export class UploadS3Service { // } // } - - async getPresignedUrl(filename: string, fileType: string, response, foldername?: string): Promise { + async getPresignedUrl( + filename: string, + fileType: string, + response, + foldername?: string, + ): Promise { try { const allowedFileTypes = [ - '.jpg', '.jpeg', '.png', '.webp', // Images - '.pdf', '.doc', '.docx', // Documents - '.mp4', '.mov', // Videos - '.txt', '.csv' // Text files + ".jpg", + ".jpeg", + ".png", + ".webp", // Images + ".pdf", + ".doc", + ".docx", // Documents + ".mp4", + ".mov", // Videos + ".txt", + ".csv", // Text files ]; - + const mimeTypeMap = { - '.jpg': 'image/jpeg', - '.jpeg': 'image/jpeg', - '.png': 'image/png', - '.webp': 'image/webp', - '.pdf': 'application/pdf', - '.doc': 'application/msword', - '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - '.mp4': 'video/mp4', - '.mov': 'video/quicktime', - '.txt': 'text/plain', - '.csv': 'text/csv', + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".png": "image/png", + ".webp": "image/webp", + ".pdf": "application/pdf", + ".doc": "application/msword", + ".docx": + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".mp4": "video/mp4", + ".mov": "video/quicktime", + ".txt": "text/plain", + ".csv": "text/csv", }; // Validate file extension @@ -102,24 +113,23 @@ export class UploadS3Service { // Construct unique file key // const newKey = `${filename}-${uuidv4()}${fileType}`; const extension = fileType; - const folderPath = foldername ? `${foldername}/` : ''; + const folderPath = foldername ? `${foldername}/` : ""; const newKey = `${folderPath}${filename}-${uuidv4()}${extension}`; - const result = await createPresignedPost(this.s3Client, { Bucket: this.bucketName, Key: newKey, Conditions: [ - ['starts-with', '$Content-Type', 'image/'], + ["starts-with", "$Content-Type", "image/"], ["eq", "$Content-Type", contentType], // ✅ this enforces exact match ["eq", "$key", newKey], // ✅ makes sure they don't change key ["content-length-range", 0, 5 * 1024 * 1024], // max 5MB - ]as any[], + ] as any[], Fields: { key: newKey, - "Content-Type": contentType + "Content-Type": contentType, }, - Expires: 300 // 5 minutes + Expires: 300, // 5 minutes }); return APIResponse.success( @@ -127,11 +137,10 @@ export class UploadS3Service { APIID.SIGNED_URL, result, HttpStatus.OK, - API_RESPONSES.SIGNED_URL_SUCCESS + API_RESPONSES.SIGNED_URL_SUCCESS, ); } catch (error) { throw new Error(`Failed to generate presigned URL: ${error.message}`); } } - } diff --git a/src/common/services/upload-file.ts b/src/common/services/upload-file.ts index 834ae6bc..d2ae714e 100644 --- a/src/common/services/upload-file.ts +++ b/src/common/services/upload-file.ts @@ -1,64 +1,86 @@ -import { Injectable, BadRequestException, InternalServerErrorException } from '@nestjs/common'; -import { extname } from 'path'; -import { v4 as uuidv4 } from 'uuid'; -import { HeadObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; +import { + Injectable, + BadRequestException, + InternalServerErrorException, +} from "@nestjs/common"; +import { extname } from "path"; +import { v4 as uuidv4 } from "uuid"; +import { + HeadObjectCommand, + PutObjectCommand, + S3Client, +} from "@aws-sdk/client-s3"; import { ConfigService } from "@nestjs/config"; - @Injectable() export class FilesUploadService { - private readonly s3Client: S3Client; - private readonly bucketName: string = this.configService.get("AWS_BUCKET_NAME"); - - constructor( - private configService: ConfigService, - ) { - this.s3Client = new S3Client({ - region: this.configService.get("AWS_REGION"), - credentials: { - accessKeyId: this.configService.get("AWS_ACCESS_KEY_ID"), - secretAccessKey: this.configService.get("AWS_SECRET_ACCESS_KEY"), - }, - }); - } + private readonly s3Client: S3Client; + private readonly bucketName: string = + this.configService.get("AWS_BUCKET_NAME"); - async saveFile(file: Express.Multer.File): Promise<{ filePath: string; fileSize: number }> { - const allowedExtensions: string[] = ['.jpg', '.jpeg', '.png', '.gif', '.ico', '.webp']; - const fileExtension = extname(file.originalname).toLowerCase(); + constructor(private configService: ConfigService) { + this.s3Client = new S3Client({ + region: this.configService.get("AWS_REGION"), + credentials: { + accessKeyId: this.configService.get("AWS_ACCESS_KEY_ID"), + secretAccessKey: this.configService.get( + "AWS_SECRET_ACCESS_KEY", + ), + }, + }); + } - if (!allowedExtensions.includes(fileExtension)) { - throw new BadRequestException(`Invalid file type: '${fileExtension}'. Allowed file types are: '.jpg', '.jpeg', '.png', '.gif', '.ico', '.webp'.` - ); - } + async saveFile( + file: Express.Multer.File, + ): Promise<{ filePath: string; fileSize: number }> { + const allowedExtensions: string[] = [ + ".jpg", + ".jpeg", + ".png", + ".gif", + ".ico", + ".webp", + ]; + const fileExtension = extname(file.originalname).toLowerCase(); - const uniqueFileName = `${uuidv4()}${fileExtension}`; - const fileUrl = `https://${this.bucketName}.s3.${this.configService.get("AWS_REGION")}.amazonaws.com/${uniqueFileName}`; + if (!allowedExtensions.includes(fileExtension)) { + throw new BadRequestException( + `Invalid file type: '${fileExtension}'. Allowed file types are: '.jpg', '.jpeg', '.png', '.gif', '.ico', '.webp'.`, + ); + } - const params = { - Bucket: this.bucketName, - Key: uniqueFileName, - Body: file.buffer, - ContentType: file.mimetype, - }; + const uniqueFileName = `${uuidv4()}${fileExtension}`; + const fileUrl = `https://${this.bucketName}.s3.${this.configService.get("AWS_REGION")}.amazonaws.com/${uniqueFileName}`; - try { - await this.s3Client.send(new PutObjectCommand(params)); - } catch (error) { - throw new InternalServerErrorException(`Failed to upload file to S3. Error: ${error?.message || error}`); - } + const params = { + Bucket: this.bucketName, + Key: uniqueFileName, + Body: file.buffer, + ContentType: file.mimetype, + }; - const metadata = await this.s3Client.send(new HeadObjectCommand({ - Bucket: this.bucketName, - Key: uniqueFileName, - })); + try { + await this.s3Client.send(new PutObjectCommand(params)); + } catch (error) { + throw new InternalServerErrorException( + `Failed to upload file to S3. Error: ${error?.message || error}`, + ); + } - if (!metadata.ContentLength) { - throw new InternalServerErrorException('Failed to upload file to S3.'); - } + const metadata = await this.s3Client.send( + new HeadObjectCommand({ + Bucket: this.bucketName, + Key: uniqueFileName, + }), + ); - return { - filePath: fileUrl, - fileSize: file.size, - }; + if (!metadata.ContentLength) { + throw new InternalServerErrorException("Failed to upload file to S3."); } + + return { + filePath: fileUrl, + fileSize: file.size, + }; + } } diff --git a/src/common/utils/api-id.config.ts b/src/common/utils/api-id.config.ts index 1453928d..60884a27 100644 --- a/src/common/utils/api-id.config.ts +++ b/src/common/utils/api-id.config.ts @@ -57,6 +57,6 @@ export const APIID = { TENANT_LIST: "api.tenant.list", SEND_OTP: "api.send.OTP", VERIFY_OTP: "api.verify.OTP", - SEND_RESET_OTP: 'api.send.reset.otp', - SIGNED_URL: 'api.get.signedURL' + SEND_RESET_OTP: "api.send.reset.otp", + SIGNED_URL: "api.get.signedURL", }; diff --git a/src/common/utils/auth-util.ts b/src/common/utils/auth-util.ts index 6659ce52..31103842 100644 --- a/src/common/utils/auth-util.ts +++ b/src/common/utils/auth-util.ts @@ -1,15 +1,14 @@ -import * as crypto from 'crypto'; - +import * as crypto from "crypto"; export class AuthUtils { - generateOtp(otpDigits) { - const minValue = Math.pow(10, otpDigits - 1); - const maxValue = Math.pow(10, otpDigits) - 1; - return crypto.randomInt(minValue, maxValue); - } + generateOtp(otpDigits) { + const minValue = Math.pow(10, otpDigits - 1); + const maxValue = Math.pow(10, otpDigits) - 1; + return crypto.randomInt(minValue, maxValue); + } - calculateHash = (data, key) => { - const hash = crypto.createHmac('sha256', key).update(data).digest('hex'); - return hash; - }; -} \ No newline at end of file + calculateHash = (data, key) => { + const hash = crypto.createHmac("sha256", key).update(data).digest("hex"); + return hash; + }; +} diff --git a/src/common/utils/http-service.ts b/src/common/utils/http-service.ts index 0a538a5a..1c3b32da 100644 --- a/src/common/utils/http-service.ts +++ b/src/common/utils/http-service.ts @@ -19,7 +19,7 @@ export class HttpService { async get( url: string, - config?: AxiosRequestConfig + config?: AxiosRequestConfig, ): Promise> { return this.axiosInstance.get(url, config); } @@ -27,7 +27,7 @@ export class HttpService { async post( url: string, data?: any, - config?: AxiosRequestConfig + config?: AxiosRequestConfig, ): Promise> { try { return await this.axiosInstance.post(url, data, config); @@ -42,14 +42,14 @@ export class HttpService { async put( url: string, data?: any, - config?: AxiosRequestConfig + config?: AxiosRequestConfig, ): Promise> { return this.axiosInstance.put(url, data, config); } async delete( url: string, - config?: AxiosRequestConfig + config?: AxiosRequestConfig, ): Promise> { return this.axiosInstance.delete(url, config); } diff --git a/src/common/utils/jwt-token.ts b/src/common/utils/jwt-token.ts index 3588d5f9..b5cb6132 100644 --- a/src/common/utils/jwt-token.ts +++ b/src/common/utils/jwt-token.ts @@ -3,9 +3,13 @@ import { Injectable } from "@nestjs/common"; @Injectable() export class JwtUtil { - constructor(private readonly jwtService: JwtService) { } + constructor(private readonly jwtService: JwtService) {} - async generateTokenForForgotPassword(payload: any, passwordexpiresIn: any, jwtSecret: any) { + async generateTokenForForgotPassword( + payload: any, + passwordexpiresIn: any, + jwtSecret: any, + ) { const plainObject = JSON.parse(JSON.stringify(payload)); // Generating token const token = await this.jwtService.signAsync(plainObject, { diff --git a/src/common/utils/keycloak.adapter.util.ts b/src/common/utils/keycloak.adapter.util.ts index 9a939e04..5d98b623 100644 --- a/src/common/utils/keycloak.adapter.util.ts +++ b/src/common/utils/keycloak.adapter.util.ts @@ -49,14 +49,13 @@ async function getKeycloakAdminToken() { } catch (error) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${error.message},` - ) + `Error: ${error.message},`, + ); } return res; } - async function createUserInKeyCloak(query, token, role: string) { if (!query.password) { return "User cannot be created, Password missing"; @@ -75,10 +74,10 @@ async function createUserInKeyCloak(query, token, role: string) { value: query.password, }, ], - attributes : { + attributes: { // Multi tenant for roles is not currently supported in keycloak - user_roles: [role] // Added in attribute and mappers - } + user_roles: [role], // Added in attribute and mappers + }, }); const config = { @@ -97,13 +96,19 @@ async function createUserInKeyCloak(query, token, role: string) { // Log and return the created user's ID const userId = response.headers.location.split("/").pop(); // Extract user ID from the location header - return { statusCode: response.status, message: "User created successfully", userId : userId }; + return { + statusCode: response.status, + message: "User created successfully", + userId: userId, + }; } catch (error) { // Handle errors and log relevant details if (error.response) { return { statusCode: error.response.status, - message: error.response.data.errorMessage || "Error occurred during user creation", + message: + error.response.data.errorMessage || + "Error occurred during user creation", email: query.email || "No email provided", }; } else if (error.request) { @@ -122,7 +127,6 @@ async function createUserInKeyCloak(query, token, role: string) { } } - // Define the structure of the input query interface UpdateUserQuery { userId: string; // Required @@ -141,7 +145,7 @@ interface UpdateUserResponse { async function updateUserInKeyCloak( query: UpdateUserQuery, - token: string + token: string, ): Promise { // Validate required parameters if (!query.userId) { @@ -193,8 +197,11 @@ async function updateUserInKeyCloak( } catch (error: any) { // Extract error details const axiosError: AxiosError = error; + const errorData = axiosError.response?.data as any; const errorMessage = - axiosError.response?.data?.errorMessage || "Failed to update user in Keycloak"; + errorData?.errorMessage || + errorData?.error || + "Failed to update user in Keycloak"; return { success: false, @@ -204,7 +211,6 @@ async function updateUserInKeyCloak( } } - async function checkIfEmailExistsInKeycloak(email, token) { const axios = require("axios"); const config = { @@ -222,8 +228,8 @@ async function checkIfEmailExistsInKeycloak(email, token) { } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: "Keycloak error - email" ${e.message},` - ) + `Error: "Keycloak error - email" ${e.message},`, + ); return e; } @@ -250,8 +256,8 @@ async function checkIfUsernameExistsInKeycloak(username, token) { } catch (e) { LoggerUtil.error( `${API_RESPONSES.SERVER_ERROR}`, - `Error: "Keycloak error - username" ${e.message},` - ) + `Error: "Keycloak error - username" ${e.message},`, + ); return e; } diff --git a/src/common/utils/notification.axios.ts b/src/common/utils/notification.axios.ts index 789b427c..2fabd713 100644 --- a/src/common/utils/notification.axios.ts +++ b/src/common/utils/notification.axios.ts @@ -10,7 +10,7 @@ export class NotificationRequest { private readonly url: string; constructor( private readonly configService: ConfigService, - private readonly httpService: HttpService + private readonly httpService: HttpService, ) { this.url = this.configService.get("NOTIFICATION_URL"); } @@ -33,7 +33,7 @@ export class NotificationRequest { if (error.code === "ECONNREFUSED") { throw new HttpException( API_RESPONSES.SERVICE_UNAVAILABLE, - HttpStatus.SERVICE_UNAVAILABLE + HttpStatus.SERVICE_UNAVAILABLE, ); } if (error.response) { @@ -46,14 +46,14 @@ export class NotificationRequest { `Bad Request: ${ errorDetails.params?.errmsg || API_RESPONSES.BAD_REQUEST }`, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); case 404: throw new HttpException( `Not Found: ${ errorDetails.params?.errmsg || API_RESPONSES.NOT_FOUND }`, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); case 500: throw new HttpException( @@ -61,20 +61,20 @@ export class NotificationRequest { errorDetails.params?.errmsg || API_RESPONSES.INTERNAL_SERVER_ERROR }`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); default: throw new HttpException( `Unexpected Error: ${ errorDetails.params?.errmsg || API_RESPONSES.UNEXPECTED_ERROR }`, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } throw new HttpException( API_RESPONSES.INTERNAL_SERVER_ERROR, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/common/utils/response.messages.ts b/src/common/utils/response.messages.ts index 3d3da252..ba560688 100644 --- a/src/common/utils/response.messages.ts +++ b/src/common/utils/response.messages.ts @@ -80,7 +80,7 @@ export const API_RESPONSES = { `User with userId ${userId} does not exist for this academic year.`, UNAUTHORIZED: "Unauthorized", INVALID_TOKEN: "Token Invalid", - INVALID_OPTION: 'Invalid Option Selected', + INVALID_OPTION: "Invalid Option Selected", //User Api messages USER_UPDATED_SUCCESSFULLY: "User updated successfully.", @@ -109,9 +109,10 @@ export const API_RESPONSES = { USER_GET_BY_EMAIL_AND_TENANT_ID_SUCCESSFULLY: "User details fetched successfully by email and tenantId", USER_CREATE_KEYCLOAK: "User created successfully on keycloak", - USERNAME_EXISTS_KEYCLOAK: 'Username is already exists in keycloak', - UPDATE_USER_KEYCLOAK_ERROR:'Failed to update username details in Keycloak.', - USERNAME_SUGGEST_SUCCESSFULLY:'Username is already taken. Suggested a new unique username.', + USERNAME_EXISTS_KEYCLOAK: "Username is already exists in keycloak", + UPDATE_USER_KEYCLOAK_ERROR: "Failed to update username details in Keycloak.", + USERNAME_SUGGEST_SUCCESSFULLY: + "Username is already taken. Suggested a new unique username.", //Create user USER_CREATE_SUCCESSFULLY: `User created successfully`, @@ -213,7 +214,7 @@ export const API_RESPONSES = { EMAIL_ERROR: "Email notification failed", SIGNED_URL_SUCCESS: "Signed URL generated successfully", SIGNED_URL_FAILED: "Error while generating signed URL", - INVALID_FILE_TYPE: "Invalid file type. Allowed file types are: '.jpg','.jpeg','.png','.webp','.pdf','.doc','.docx','.mp4','.mov','.txt','.csv'", - FILE_SIZE_ERROR: "File too large. Maximum allowed file size is 10MB." + INVALID_FILE_TYPE: + "Invalid file type. Allowed file types are: '.jpg','.jpeg','.png','.webp','.pdf','.doc','.docx','.mp4','.mov','.txt','.csv'", + FILE_SIZE_ERROR: "File too large. Maximum allowed file size is 10MB.", }; - diff --git a/src/fields/dto/fields-update.dto.ts b/src/fields/dto/fields-update.dto.ts index 4387a5f7..4fdde4c5 100644 --- a/src/fields/dto/fields-update.dto.ts +++ b/src/fields/dto/fields-update.dto.ts @@ -84,12 +84,11 @@ export class FieldsUpdateDto { default: FieldType.TEXT, nullable: false, }) - @IsEnum(FieldType, { message: 'type must be a valid enum value' }) + @IsEnum(FieldType, { message: "type must be a valid enum value" }) @ValidateIf((o) => o.type !== undefined) // Validate only if type is defined @Expose() type: string; - // Ordering @ApiPropertyOptional({ type: Number, diff --git a/src/fields/fieldValidators/field.util.ts b/src/fields/fieldValidators/field.util.ts index a992816b..e44e4593 100644 --- a/src/fields/fieldValidators/field.util.ts +++ b/src/fields/fieldValidators/field.util.ts @@ -15,18 +15,18 @@ export function validateMultiSelect(value, fieldDetails) { ) ) { throw new Error( - `Maximum selections exceeded. Max: ${fieldDetails.fieldAttributes.maxSelections}` + `Maximum selections exceeded. Max: ${fieldDetails.fieldAttributes.maxSelections}`, ); } - - // value.every((val: any) => { - // console.log(fieldParamsOptions,String(val),"Type check") - // return fieldParamsOptions.includes(String(val)); - // }); - - // if (!value.every((val: any) => fieldParamsOptions.includes(String(val[0])))) { - // throw new Error("Invalid option selected."); - // } + + // value.every((val: any) => { + // console.log(fieldParamsOptions,String(val),"Type check") + // return fieldParamsOptions.includes(String(val)); + // }); + + // if (!value.every((val: any) => fieldParamsOptions.includes(String(val[0])))) { + // throw new Error("Invalid option selected."); + // } return true; } else { throw new Error("Field not of type multiselect"); diff --git a/src/fields/fieldValidators/fieldClass.ts b/src/fields/fieldValidators/fieldClass.ts index 7d943bd1..0a455945 100644 --- a/src/fields/fieldValidators/fieldClass.ts +++ b/src/fields/fieldValidators/fieldClass.ts @@ -47,7 +47,7 @@ export interface Option { export abstract class Field { constructor( protected fieldAttributes: FieldAttributes, - protected fieldParams?: FieldParams + protected fieldParams?: FieldParams, ) {} abstract validate(value: any): boolean; diff --git a/src/fields/fieldValidators/fieldFactory.ts b/src/fields/fieldValidators/fieldFactory.ts index 79e84e61..f63a2f1f 100644 --- a/src/fields/fieldValidators/fieldFactory.ts +++ b/src/fields/fieldValidators/fieldFactory.ts @@ -10,7 +10,7 @@ export class FieldFactory { static createField( type: string, fieldAttributes: FieldAttributes, - fieldParams: FieldParams + fieldParams: FieldParams, ): Field { switch (type) { case "drop_down": diff --git a/src/fields/fieldValidators/fieldTypeClasses.ts b/src/fields/fieldValidators/fieldTypeClasses.ts index a9b6b4aa..32646145 100644 --- a/src/fields/fieldValidators/fieldTypeClasses.ts +++ b/src/fields/fieldValidators/fieldTypeClasses.ts @@ -52,7 +52,7 @@ export class RadioField extends Field { validate(value: any): boolean { const fieldParamsOptions = this.fieldParams.options.map( - ({ value }) => value + ({ value }) => value, ); if (!fieldParamsOptions.includes(value)) { throw new Error("Invalid option selected."); diff --git a/src/fields/fields.controller.ts b/src/fields/fields.controller.ts index 42249aee..1474a4f8 100644 --- a/src/fields/fields.controller.ts +++ b/src/fields/fields.controller.ts @@ -61,7 +61,7 @@ export class FieldsController { @Headers() headers, @Req() request: Request, @Body() fieldsDto: FieldsDto, - @Res() response: Response + @Res() response: Response, ) { return await this.fieldsAdapter .buildFieldsAdapter() @@ -80,7 +80,7 @@ export class FieldsController { @Headers() headers, @Req() request: Request, @Body() fieldsUpdateDto: FieldsUpdateDto, - @Res() response: Response + @Res() response: Response, ) { return await this.fieldsAdapter .buildFieldsAdapter() @@ -104,7 +104,7 @@ export class FieldsController { @Headers() headers, @Req() request: Request, @Body() fieldsSearchDto: FieldsSearchDto, - @Res() response: Response + @Res() response: Response, ) { const tenantid = headers["tenantid"]; return await this.fieldsAdapter @@ -127,7 +127,7 @@ export class FieldsController { public async createFieldValues( @Req() request: Request, @Body() fieldValuesDto: FieldValuesDto, - @Res() response: Response + @Res() response: Response, ) { return await this.fieldsAdapter .buildFieldsAdapter() @@ -148,7 +148,7 @@ export class FieldsController { public async searchFieldValues( @Req() request: Request, @Body() fieldValuesSearchDto: FieldValuesSearchDto, - @Res() response: Response + @Res() response: Response, ) { return await this.fieldsAdapter .buildFieldsAdapter() @@ -169,7 +169,7 @@ export class FieldsController { @Headers() headers, @Req() request: Request, @Body() fieldsOptionsSearchDto: FieldsOptionsSearchDto, - @Res() response: Response + @Res() response: Response, ) { return await this.fieldsAdapter .buildFieldsAdapter() @@ -195,7 +195,7 @@ export class FieldsController { @Query("option") option: string | null = null, @Query("context") context: string | null = null, @Query("contextType") contextType: string | null = null, - @Res() response: Response + @Res() response: Response, ) { const requiredData = { fieldName: fieldName || null, @@ -221,7 +221,7 @@ export class FieldsController { @Req() request: Request, @Query("context") context: string | null = null, @Query("contextType") contextType: string | null = null, - @Res() response: Response + @Res() response: Response, ) { const requiredData = { context: context || false, @@ -240,7 +240,7 @@ export class FieldsController { @ApiBody({ type: FieldValuesDeleteDto }) public async deleteFieldValues( @Body() fieldValuesDeleteDto: FieldValuesDeleteDto, - @Res() response: Response + @Res() response: Response, ) { return await this.fieldsAdapter .buildFieldsAdapter() diff --git a/src/fields/fields.module.ts b/src/fields/fields.module.ts index fab68345..f8f62da7 100644 --- a/src/fields/fields.module.ts +++ b/src/fields/fields.module.ts @@ -1,4 +1,5 @@ -import { CacheModule, Module } from "@nestjs/common"; +import { Module } from "@nestjs/common"; +import { CacheModule } from "@nestjs/cache-manager"; import { FieldsController } from "./fields.controller"; import { HttpModule } from "@nestjs/axios"; import { FieldsAdapter } from "./fieldsadapter"; @@ -13,6 +14,10 @@ import { PostgresModule } from "src/adapters/postgres/postgres-module"; TypeOrmModule.forFeature([FieldValues]), HttpModule, PostgresModule, + CacheModule.register({ + ttl: 300, // Cache TTL in seconds (5 minutes) + max: 100, // Maximum number of items in cache + }), ], controllers: [FieldsController], providers: [FieldsAdapter], diff --git a/src/fields/fields.service.ts b/src/fields/fields.service.ts index a0c4eae7..45def111 100644 --- a/src/fields/fields.service.ts +++ b/src/fields/fields.service.ts @@ -20,7 +20,7 @@ export class FieldsService { @InjectRepository(Fields) private fieldsRepository: Repository, @InjectRepository(FieldValues) - private fieldsValuesRepository: Repository + private fieldsValuesRepository: Repository, ) {} //fields @@ -57,7 +57,7 @@ export class FieldsService { async searchFields( tenantId: string, request: any, - fieldsSearchDto: FieldsSearchDto + fieldsSearchDto: FieldsSearchDto, ) { try { const getConditionalData = APIResponse.search(fieldsSearchDto); @@ -68,7 +68,7 @@ export class FieldsService { const getFieldValue = await this.searchFieldData( offset, limit, - whereClause + whereClause, ); return new SuccessResponse({ @@ -98,9 +98,8 @@ export class FieldsService { queryOptions.take = parseInt(limit); } - const [results, totalCount] = await this.fieldsRepository.findAndCount( - queryOptions - ); + const [results, totalCount] = + await this.fieldsRepository.findAndCount(queryOptions); const mappedResponse = await this.mappedResponseField(results); return { mappedResponse, totalCount }; @@ -135,7 +134,7 @@ export class FieldsService { async searchFieldValues( request: any, - fieldValuesSearchDto: FieldValuesSearchDto + fieldValuesSearchDto: FieldValuesSearchDto, ) { try { const getConditionalData = APIResponse.search(fieldValuesSearchDto); @@ -146,7 +145,7 @@ export class FieldsService { const getFieldValue = await this.getSearchFieldValueData( offset, limit, - whereClause + whereClause, ); return new SuccessResponse({ @@ -166,7 +165,7 @@ export class FieldsService { async getSearchFieldValueData( offset: number, limit: string, - searchData: any + searchData: any, ) { const queryOptions: any = { where: searchData, @@ -208,7 +207,7 @@ export class FieldsService { }); const response = await this.fieldsValuesRepository.update( id, - fieldValuesDto + fieldValuesDto, ); return response; diff --git a/src/forms/dto/form-create.dto.ts b/src/forms/dto/form-create.dto.ts index 35240788..6c49ffce 100644 --- a/src/forms/dto/form-create.dto.ts +++ b/src/forms/dto/form-create.dto.ts @@ -12,8 +12,8 @@ export class FormCreateDto { @ApiProperty({ type: String, - description: 'title', - example: 'Sample Form', + description: "title", + example: "Sample Form", }) @IsString() @IsNotEmpty() @@ -21,8 +21,8 @@ export class FormCreateDto { @ApiProperty({ type: String, - description: 'context', - example: 'Context', + description: "context", + example: "Context", }) @IsString() @IsNotEmpty() @@ -30,15 +30,15 @@ export class FormCreateDto { @ApiProperty({ type: String, - description: 'context', - example: 'Context', + description: "context", + example: "Context", }) @IsString() @IsNotEmpty() contextType: string; @ApiProperty({ - description: 'fields', + description: "fields", }) @IsOptional() @IsObject() @@ -48,5 +48,4 @@ export class FormCreateDto { createdBy: string; updatedBy: string; - } diff --git a/src/forms/entities/form.entity.ts b/src/forms/entities/form.entity.ts index 37cfcdbc..078b6bf4 100644 --- a/src/forms/entities/form.entity.ts +++ b/src/forms/entities/form.entity.ts @@ -32,9 +32,9 @@ export class Form { @Column({ type: "jsonb", nullable: true }) fields: object; - @Column({ type: 'uuid'}) + @Column({ type: "uuid" }) createdBy: string; - @Column({ type: 'uuid'}) + @Column({ type: "uuid" }) updatedBy: string; } diff --git a/src/forms/forms.controller.ts b/src/forms/forms.controller.ts index e0e6ec43..6e950427 100644 --- a/src/forms/forms.controller.ts +++ b/src/forms/forms.controller.ts @@ -1,31 +1,39 @@ import { - BadRequestException, Headers,Body, Controller, + BadRequestException, + Headers, + Body, + Controller, Get, - Post, Query, + Post, + Query, Req, Res, SerializeOptions, - UseFilters, UsePipes, + UseFilters, + UsePipes, ValidationPipe, ParseUUIDPipe, } from "@nestjs/common"; import { FormsService } from "./forms.service"; import { - ApiBadRequestResponse, ApiBasicAuth, ApiBody, ApiCreatedResponse, + ApiBadRequestResponse, + ApiBasicAuth, + ApiBody, + ApiCreatedResponse, ApiForbiddenResponse, ApiHeader, - ApiInternalServerErrorResponse, ApiQuery, + ApiInternalServerErrorResponse, + ApiQuery, ApiTags, } from "@nestjs/swagger"; -import { AllExceptionsFilter } from 'src/common/filters/exception.filter'; -import { FormCreateDto } from './dto/form-create.dto'; -import { APIID } from '@utils/api-id.config'; -import { isUUID } from 'class-validator'; -import { API_RESPONSES } from '@utils/response.messages'; +import { AllExceptionsFilter } from "src/common/filters/exception.filter"; +import { FormCreateDto } from "./dto/form-create.dto"; +import { APIID } from "@utils/api-id.config"; +import { isUUID } from "class-validator"; +import { API_RESPONSES } from "@utils/response.messages"; import { GetUserId } from "src/common/decorators/getUserId.decorator"; import { Request, Response } from "express"; - @Controller("form") @ApiTags("Forms") export class FormsController { @@ -44,7 +52,7 @@ export class FormsController { public async getFormData( @Req() request: Request, @Query() query: Record, - @Res() response: Response + @Res() response: Response, ) { const tenantId = request.headers["tenantid"]; const normalizedQuery = { @@ -54,7 +62,7 @@ export class FormsController { }; const requiredData = { ...normalizedQuery, tenantId: tenantId || null }; - return await this.formsService.getForm(requiredData,response); + return await this.formsService.getForm(requiredData, response); } @UseFilters(new AllExceptionsFilter(APIID.FORM_CREATE)) @@ -75,13 +83,13 @@ export class FormsController { @Res() response: Response, @GetUserId("userId", ParseUUIDPipe) userId: string, ) { - let tenantId = headers["tenantid"]; + const tenantId = headers["tenantid"]; formCreateDto.createdBy = userId; - + if (tenantId && !isUUID(tenantId)) { throw new BadRequestException(API_RESPONSES.TENANTID_VALIDATION); } formCreateDto.tenantId = tenantId; - return await this.formsService.createForm(request,formCreateDto,response); + return await this.formsService.createForm(request, formCreateDto, response); } } diff --git a/src/forms/forms.service.spec.ts b/src/forms/forms.service.spec.ts index 9ffa8661..c3d23bd5 100644 --- a/src/forms/forms.service.spec.ts +++ b/src/forms/forms.service.spec.ts @@ -46,7 +46,7 @@ describe("Formservice", () => { "getFormData", "NOT_FOUND", "Fields not found for the search term", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); }); @@ -59,7 +59,7 @@ describe("Formservice", () => { "getFormData", "NOT_FOUND", "No Data found for this context and Context Type", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); }); @@ -88,14 +88,14 @@ describe("Formservice", () => { expect.objectContaining({ fieldId: "2", someData: "test", order: 2 }), ]), HttpStatus.OK, - "Fields fetched successfully." + "Fields fetched successfully.", ); }); it("should handle errors and return internal server error", async () => { const requiredData = { context: "test", contextType: "test" }; (service.getFormData as jest.Mock).mockRejectedValue( - new Error("Test error") + new Error("Test error"), ); await service.getForm(requiredData, mockResponse); @@ -105,7 +105,7 @@ describe("Formservice", () => { "getFormData", "Internal Server Error", "Test error", - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); }); }); diff --git a/src/forms/forms.service.ts b/src/forms/forms.service.ts index 0487aa0b..c1793309 100644 --- a/src/forms/forms.service.ts +++ b/src/forms/forms.service.ts @@ -15,23 +15,22 @@ export class FormsService { constructor( private readonly fieldsService: PostgresFieldsService, @InjectRepository(Form) - private readonly formRepository: Repository
- ) { } + private readonly formRepository: Repository, + ) {} async getForm(requiredData, response) { - let apiId = APIID.FORM_GET; - try { + const apiId = APIID.FORM_GET; + try { if (!requiredData.context && !requiredData.contextType) { return APIResponse.error( response, apiId, "BAD_REQUEST", "Context in Query Params is required", - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } - const { context, contextType, tenantId } = requiredData; const validationResult = await this.validateFormInput(requiredData); @@ -41,7 +40,7 @@ export class FormsService { apiId, "BAD_REQUEST", validationResult.error, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -63,26 +62,26 @@ export class FormsService { apiId, "NOT_FOUND", "No Data found for this context OR Context Type", - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } // console.log(formData); - + const mappedResponse = await Promise.all( formData.fields.result.map(async (data) => { if (!data.coreField) { - const whereClause = `"fieldId" = '${data.fieldId}'`; + const whereClause = `"fieldId" = '${data.fieldId}'`; const [customFieldData] = await this.fieldsService.getFieldData( whereClause, - tenantId + tenantId, ); customFieldData.validation = data.validation; - customFieldData.order = data.order; + customFieldData.order = data.order; return { ...data, ...customFieldData }; } return data; - }) + }), ); const result = { @@ -96,7 +95,7 @@ export class FormsService { apiId, result, HttpStatus.OK, - "Fields fetched successfully." + "Fields fetched successfully.", ); } catch (error) { const errorMessage = error.message || "Internal server error"; @@ -105,7 +104,7 @@ export class FormsService { apiId, "INTERNAL_SERVER_ERROR", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -148,18 +147,18 @@ export class FormsService { } private async validateFormInput( - requiredData: any + requiredData: any, ): Promise<{ error: string | null }> { delete requiredData.tenantId; const allowedKeys = ["context", "contextType", "userId"]; const extraKeys = Object.keys(requiredData).filter( - (key) => !allowedKeys.includes(key) + (key) => !allowedKeys.includes(key), ); if (extraKeys.length > 0) { return { error: `Invalid keys provided: ${extraKeys.join( - ", " + ", ", )}. Only 'context', 'contextType' is allowed.`, }; } @@ -175,7 +174,7 @@ export class FormsService { if (contextType && !validContextTypes.includes(contextType)) { return { error: `Invalid contextType. For the context '${context}', it must be one of: ${validContextTypes.join( - ", " + ", ", )}`, }; } @@ -184,7 +183,6 @@ export class FormsService { return { error: null }; } - private async getValidContextTypes(context: string): Promise { switch (context.toLowerCase()) { case "users": @@ -201,7 +199,7 @@ export class FormsService { } public async createForm(request, formCreateDto: FormCreateDto, response) { - let apiId = APIID.FORM_CREATE; + const apiId = APIID.FORM_CREATE; try { formCreateDto.contextType = formCreateDto.contextType.toUpperCase(); @@ -214,7 +212,7 @@ export class FormsService { const checkFormExists = await this.getFormDetail( formCreateDto.context, formCreateDto.contextType, - formCreateDto.tenantId + formCreateDto.tenantId, ); if (checkFormExists.length) { @@ -223,12 +221,12 @@ export class FormsService { apiId, "BAD_REQUEST", API_RESPONSES.FORM_EXISTS, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const validForm = await this.validateFormFields( - formCreateDto.fields?.result + formCreateDto.fields?.result, ); if (!validForm) { @@ -237,12 +235,12 @@ export class FormsService { apiId, "BAD_REQUEST", API_RESPONSES.INVALID_FORM, - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } const validContextTypes = await this.getValidContextTypes( - formCreateDto.context + formCreateDto.context, ); if (validContextTypes.length === 0) { return APIResponse.error( @@ -250,7 +248,7 @@ export class FormsService { apiId, "BAD_REQUEST", API_RESPONSES.INVALID_CONTEXT(formCreateDto.context), - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } if ( @@ -263,9 +261,9 @@ export class FormsService { "BAD_REQUEST", API_RESPONSES.INVALID_CONTEXTTYPE( formCreateDto.context, - validContextTypes.join(", ") + validContextTypes.join(", "), ), - HttpStatus.BAD_REQUEST + HttpStatus.BAD_REQUEST, ); } @@ -276,7 +274,7 @@ export class FormsService { apiId, result, HttpStatus.OK, - API_RESPONSES.FORM_CREATED_SUCCESSFULLY + API_RESPONSES.FORM_CREATED_SUCCESSFULLY, ); } catch (error) { const errorMessage = error.message || "Internal server error"; @@ -285,7 +283,7 @@ export class FormsService { apiId, "INTERNAL_SERVER_ERROR", errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/kafka/kafka.config.ts b/src/kafka/kafka.config.ts index 963d91e9..7cbf0a78 100644 --- a/src/kafka/kafka.config.ts +++ b/src/kafka/kafka.config.ts @@ -1,6 +1,5 @@ // config/kafka.config.ts export default () => ({ - kafkaEnabled: process.env.KAFKA_ENABLED === 'true', - kafkaHost: process.env.KAFKA_HOST || 'localhost:9092', - }); - \ No newline at end of file + kafkaEnabled: process.env.KAFKA_ENABLED === "true", + kafkaHost: process.env.KAFKA_HOST || "localhost:9092", +}); diff --git a/src/kafka/kafka.module.ts b/src/kafka/kafka.module.ts index 7fd74d2e..8f0b0d0f 100644 --- a/src/kafka/kafka.module.ts +++ b/src/kafka/kafka.module.ts @@ -1,10 +1,10 @@ -import { Module } from '@nestjs/common'; -import { ConfigModule } from '@nestjs/config'; -import { KafkaService } from './kafka.service'; +import { Module } from "@nestjs/common"; +import { ConfigModule } from "@nestjs/config"; +import { KafkaService } from "./kafka.service"; @Module({ imports: [ConfigModule], providers: [KafkaService], exports: [KafkaService], }) -export class KafkaModule {} \ No newline at end of file +export class KafkaModule {} diff --git a/src/kafka/kafka.service.ts b/src/kafka/kafka.service.ts index 6f60829f..59307472 100644 --- a/src/kafka/kafka.service.ts +++ b/src/kafka/kafka.service.ts @@ -1,6 +1,11 @@ -import { Injectable, OnModuleInit, OnModuleDestroy, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { Kafka, Producer, Admin } from 'kafkajs'; +import { + Injectable, + OnModuleInit, + OnModuleDestroy, + Logger, +} from "@nestjs/common"; +import { ConfigService } from "@nestjs/config"; +import { Kafka, Producer, Admin } from "kafkajs"; @Injectable() export class KafkaService implements OnModuleInit, OnModuleDestroy { @@ -13,9 +18,17 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { constructor(private configService: ConfigService) { // Retrieve Kafka config from the configuration - this.isKafkaEnabled = this.configService.get('kafkaEnabled', false); // Default to true if not specified - const brokers = this.configService.get('KAFKA_BROKERS', 'localhost:9092').split(','); - const clientId = this.configService.get('KAFKA_CLIENT_ID', 'user-service'); + this.isKafkaEnabled = this.configService.get( + "kafkaEnabled", + false, + ); // Default to true if not specified + const brokers = this.configService + .get("KAFKA_BROKERS", "localhost:9092") + .split(","); + const clientId = this.configService.get( + "KAFKA_CLIENT_ID", + "user-service", + ); // Initialize Kafka client if enabled if (this.isKafkaEnabled) { @@ -38,12 +51,12 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { try { await this.connectAdmin(); await this.connectProducer(); - this.logger.log('Kafka producer and admin initialized successfully'); + this.logger.log("Kafka producer and admin initialized successfully"); } catch (error) { - this.logger.error('Failed to initialize Kafka services', error); + this.logger.error("Failed to initialize Kafka services", error); } } else { - this.logger.log('Kafka is disabled. Skipping producer initialization.'); + this.logger.log("Kafka is disabled. Skipping producer initialization."); } } @@ -57,9 +70,12 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { private async connectProducer() { try { await this.producer.connect(); - this.logger.log('Kafka producer connected'); + this.logger.log("Kafka producer connected"); } catch (error) { - this.logger.error(`Failed to connect Kafka producer: ${error.message}`, error.stack); + this.logger.error( + `Failed to connect Kafka producer: ${error.message}`, + error.stack, + ); throw error; // Throwing error to indicate connection failure } } @@ -67,18 +83,24 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { private async disconnectProducer() { try { await this.producer.disconnect(); - this.logger.log('Kafka producer disconnected'); + this.logger.log("Kafka producer disconnected"); } catch (error) { - this.logger.error(`Failed to disconnect Kafka producer: ${error.message}`, error.stack); + this.logger.error( + `Failed to disconnect Kafka producer: ${error.message}`, + error.stack, + ); } } private async connectAdmin() { try { await this.admin.connect(); - this.logger.log('Kafka admin connected'); + this.logger.log("Kafka admin connected"); } catch (error) { - this.logger.error(`Failed to connect Kafka admin: ${error.message}`, error.stack); + this.logger.error( + `Failed to connect Kafka admin: ${error.message}`, + error.stack, + ); throw error; } } @@ -86,15 +108,18 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { private async disconnectAdmin() { try { await this.admin.disconnect(); - this.logger.log('Kafka admin disconnected'); + this.logger.log("Kafka admin disconnected"); } catch (error) { - this.logger.error(`Failed to disconnect Kafka admin: ${error.message}`, error.stack); + this.logger.error( + `Failed to disconnect Kafka admin: ${error.message}`, + error.stack, + ); } } /** * Ensure a topic exists, creating it if necessary - * + * * @param topicName - The name of the topic to ensure exists * @returns A promise that resolves when the topic is confirmed to exist */ @@ -111,7 +136,7 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { try { // Get list of existing topics const existingTopics = await this.admin.listTopics(); - + // Check if topic exists if (existingTopics.includes(topicName)) { this.topicsCreated.add(topicName); @@ -134,28 +159,35 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { this.logger.log(`Topic ${topicName} created successfully`); } catch (error) { // Topic might already exist, check if it's a "topic already exists" error - if (error.message && error.message.includes('already exists')) { + if (error.message && error.message.includes("already exists")) { this.topicsCreated.add(topicName); this.logger.debug(`Topic ${topicName} already exists`); return; } - - this.logger.error(`Failed to ensure topic ${topicName} exists: ${error.message}`, error.stack); + + this.logger.error( + `Failed to ensure topic ${topicName} exists: ${error.message}`, + error.stack, + ); throw error; } } /** * Publish a message to a Kafka topic - * + * * @param topic - The Kafka topic to publish to * @param message - The message payload to publish * @param key - Optional message key for partitioning * @returns A promise that resolves when the message is sent */ - async publishMessage(topic: string, message: any, key?: string): Promise { + async publishMessage( + topic: string, + message: any, + key?: string, + ): Promise { if (!this.isKafkaEnabled) { - this.logger.warn('Kafka is disabled. Skipping message publish.'); + this.logger.warn("Kafka is disabled. Skipping message publish."); return; // Do nothing if Kafka is disabled } @@ -168,7 +200,8 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { messages: [ { key: key || undefined, - value: typeof message === 'string' ? message : JSON.stringify(message), + value: + typeof message === "string" ? message : JSON.stringify(message), }, ], }; @@ -176,45 +209,52 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { await this.producer.send(payload); this.logger.debug(`Message published to topic: ${topic}`); } catch (error) { - this.logger.error(`Failed to publish message to topic ${topic}: ${error.message}`, error.stack); + this.logger.error( + `Failed to publish message to topic ${topic}: ${error.message}`, + error.stack, + ); throw error; } } /** * Publish a user-related event to Kafka - * + * * @param eventType - The type of user event (created, updated, deleted) * @param userData - The user data to include in the event * @param userId - The ID of the user (used as the message key) */ - async publishUserEvent(eventType: 'created' | 'updated' | 'deleted', userData: any, userId: string): Promise { + async publishUserEvent( + eventType: "created" | "updated" | "deleted", + userData: any, + userId: string, + ): Promise { if (!this.isKafkaEnabled) { - this.logger.warn('Kafka is disabled. Skipping user event publish.'); + this.logger.warn("Kafka is disabled. Skipping user event publish."); return; // Do nothing if Kafka is disabled } - const topic = this.configService.get('KAFKA_TOPIC', 'user-topic'); - let fullEventType = ''; + const topic = this.configService.get("KAFKA_TOPIC", "user-topic"); + let fullEventType = ""; switch (eventType) { - case 'created': - fullEventType = 'USER_CREATED'; + case "created": + fullEventType = "USER_CREATED"; break; - case 'updated': - fullEventType = 'USER_UPDATED'; + case "updated": + fullEventType = "USER_UPDATED"; break; - case 'deleted': - fullEventType = 'USER_DELETED'; + case "deleted": + fullEventType = "USER_DELETED"; break; default: - fullEventType = 'UNKNOWN_EVENT'; + fullEventType = "UNKNOWN_EVENT"; break; } const payload = { eventType: fullEventType, timestamp: new Date().toISOString(), userId, - data: userData + data: userData, }; await this.publishMessage(topic, payload, userId); @@ -223,41 +263,47 @@ export class KafkaService implements OnModuleInit, OnModuleDestroy { /** * Publish a cohort-related event to Kafka - * + * * @param eventType - The type of cohort event (created, updatetrued, deleted) * @param cohortData - The cohort data to include in the event * @param cohortId - The ID of the cohort (used as the message key) */ - async publishCohortEvent(eventType: 'created' | 'updated' | 'deleted', cohortData: any, cohortId: string): Promise { + async publishCohortEvent( + eventType: "created" | "updated" | "deleted", + cohortData: any, + cohortId: string, + ): Promise { if (!this.isKafkaEnabled) { - this.logger.warn('Kafka is disabled. Skipping cohort event publish.'); + this.logger.warn("Kafka is disabled. Skipping cohort event publish."); return; // Do nothing if Kafka is disabled } - const topic = this.configService.get('KAFKA_TOPIC', 'user-topic'); - let fullEventType = ''; + const topic = this.configService.get("KAFKA_TOPIC", "user-topic"); + let fullEventType = ""; switch (eventType) { - case 'created': - fullEventType = 'COHORT_CREATED'; + case "created": + fullEventType = "COHORT_CREATED"; break; - case 'updated': - fullEventType = 'COHORT_UPDATED'; + case "updated": + fullEventType = "COHORT_UPDATED"; break; - case 'deleted': - fullEventType = 'COHORT_DELETED'; + case "deleted": + fullEventType = "COHORT_DELETED"; break; default: - fullEventType = 'UNKNOWN_EVENT'; + fullEventType = "UNKNOWN_EVENT"; break; } const payload = { eventType: fullEventType, timestamp: new Date().toISOString(), cohortId, - data: cohortData + data: cohortData, }; await this.publishMessage(topic, payload, cohortId); - this.logger.log(`Cohort ${eventType} event published for cohort ${cohortId}`); + this.logger.log( + `Cohort ${eventType} event published for cohort ${cohortId}`, + ); } } diff --git a/src/location/location.controller.ts b/src/location/location.controller.ts index b437a8b6..956b0cd5 100644 --- a/src/location/location.controller.ts +++ b/src/location/location.controller.ts @@ -19,7 +19,7 @@ export class LocationController { @Post() create( @Body() createLocationDto: CreateLocationDto, - @Res() response: Response + @Res() response: Response, ): Promise { return this.locationService.create(createLocationDto, response); } @@ -27,7 +27,7 @@ export class LocationController { @Get(":id") findOne( @Param("id") id: string, - @Res() response: Response + @Res() response: Response, ): Promise { return this.locationService.findLocation(id, response); } @@ -36,7 +36,7 @@ export class LocationController { update( @Param("id") id: string, @Body() updateLocationDto: any, - @Res() response: Response + @Res() response: Response, ): Promise { return this.locationService.update(id, updateLocationDto, response); } @@ -44,7 +44,7 @@ export class LocationController { @Delete("/delete/:id") remove( @Param("id") id: string, - @Res() response: Response + @Res() response: Response, ): Promise { return this.locationService.remove(id, response); } diff --git a/src/location/location.service.ts b/src/location/location.service.ts index 704e3bdf..05347c5a 100644 --- a/src/location/location.service.ts +++ b/src/location/location.service.ts @@ -11,12 +11,12 @@ import { Response } from "express"; export class LocationService { constructor( @InjectRepository(Location) - private locationRepository: Repository + private locationRepository: Repository, ) {} async create( createLocationDto: CreateLocationDto, - response: Response + response: Response, ): Promise { const apiId = "api.create.location"; try { @@ -27,7 +27,7 @@ export class LocationService { apiId, result, HttpStatus.OK, - "Location created successfully" + "Location created successfully", ); } catch (e) { return APIResponse.error( @@ -35,7 +35,7 @@ export class LocationService { apiId, "Internal Server Error", e, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -52,7 +52,7 @@ export class LocationService { apiId, "Location not found", null, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } return APIResponse.success( @@ -60,7 +60,7 @@ export class LocationService { apiId, location, HttpStatus.OK, - "Location found successfully" + "Location found successfully", ); } catch (e) { return APIResponse.error( @@ -68,7 +68,7 @@ export class LocationService { apiId, "Internal Server Error", e, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -77,7 +77,7 @@ export class LocationService { async update( id: string, updateLocationDto: any, - response + response, ): Promise { const apiId = "api.update.location"; try { @@ -90,7 +90,7 @@ export class LocationService { apiId, "Location not found", null, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } await this.locationRepository.update(id, updateLocationDto); @@ -99,7 +99,7 @@ export class LocationService { apiId, null, HttpStatus.OK, - "Location updated successfully" + "Location updated successfully", ); } catch (e) { return APIResponse.error( @@ -107,7 +107,7 @@ export class LocationService { apiId, "Internal Server Error", e, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -125,7 +125,7 @@ export class LocationService { apiId, "Location not found", null, - HttpStatus.NOT_FOUND + HttpStatus.NOT_FOUND, ); } await this.locationRepository.delete(id); @@ -134,7 +134,7 @@ export class LocationService { apiId, null, HttpStatus.OK, - "Location deleted successfully" + "Location deleted successfully", ); } catch (e) { return APIResponse.error( @@ -142,7 +142,7 @@ export class LocationService { apiId, "Internal Server Error", e, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -159,7 +159,7 @@ export class LocationService { apiId, allLocations, HttpStatus.OK, - "All locations retrieved successfully" + "All locations retrieved successfully", ); } @@ -177,7 +177,7 @@ export class LocationService { apiId, result, HttpStatus.OK, - "Location filtered successfully" + "Location filtered successfully", ); } catch (e) { return APIResponse.error( @@ -185,7 +185,7 @@ export class LocationService { apiId, "Internal Server Error", e, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/main.ts b/src/main.ts index 88a6b1d5..fb391491 100644 --- a/src/main.ts +++ b/src/main.ts @@ -41,7 +41,7 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); app.use( process.env.IMAGEPATH, - express.static(join(__dirname, "..", "uploads")) + express.static(join(__dirname, "..", "uploads")), ); app.setGlobalPrefix("user/v1", { exclude: [{ path: "health", method: RequestMethod.GET }], @@ -54,7 +54,7 @@ async function bootstrap() { // transform: true, // }), // ); - + const config = new DocumentBuilder() .setTitle("Shiksha Platform") .setDescription("CRUD API") @@ -62,7 +62,7 @@ async function bootstrap() { .addTag("V1") .addApiKey( { type: "apiKey", name: "Authorization", in: "header" }, - "access-token" + "access-token", ) .build(); const document = SwaggerModule.createDocument(app, config); diff --git a/src/middleware/permission.middleware.ts b/src/middleware/permission.middleware.ts index 888561a6..509a3268 100644 --- a/src/middleware/permission.middleware.ts +++ b/src/middleware/permission.middleware.ts @@ -6,7 +6,7 @@ import { RolePermissionService } from "src/permissionRbac/rolePermissionMapping/ @Injectable() export class PermissionMiddleware implements NestMiddleware { - constructor(private readonly rolePermissionService: RolePermissionService) { } + constructor(private readonly rolePermissionService: RolePermissionService) {} async use(req: Request, res: Response, next: NextFunction) { try { @@ -20,7 +20,7 @@ export class PermissionMiddleware implements NestMiddleware { const isPermissionValid = await this.checkPermissions( role, req.baseUrl, - req.method + req.method, ); if (isPermissionValid) next(); @@ -30,17 +30,23 @@ export class PermissionMiddleware implements NestMiddleware { "", "You do not have permission to access this resource", "You do not have permission to access this resource", - HttpStatus.FORBIDDEN + HttpStatus.FORBIDDEN, ); } } catch (e) { - return APIResponse.error(res, "Something went wrong", e, "Internal error", HttpStatus.INTERNAL_SERVER_ERROR) + return APIResponse.error( + res, + "Something went wrong", + e, + "Internal error", + HttpStatus.INTERNAL_SERVER_ERROR, + ); } } async checkPermissions( roleTitle: string, requestPath: string, - requestMethod: string + requestMethod: string, ) { const parts = requestPath.match(/[^/]+/g); let apiPath = ""; @@ -51,7 +57,7 @@ export class PermissionMiddleware implements NestMiddleware { } const allowedPermissions = await this.fetchPermissions(roleTitle, apiPath); return allowedPermissions.some((permission) => - permission.requestType.includes(requestMethod) + permission.requestType.includes(requestMethod), ); } getApiPaths(parts: string[]) { @@ -65,7 +71,7 @@ export class PermissionMiddleware implements NestMiddleware { async fetchPermissions(roleTitle: string, apiPath: string) { return await this.rolePermissionService.getPermissionForMiddleware( roleTitle, - apiPath + apiPath, ); } getRole(token: string) { diff --git a/src/permissionRbac/rolePermissionMapping/role-permission-mapping.controller.ts b/src/permissionRbac/rolePermissionMapping/role-permission-mapping.controller.ts index 8b722168..a13361a5 100644 --- a/src/permissionRbac/rolePermissionMapping/role-permission-mapping.controller.ts +++ b/src/permissionRbac/rolePermissionMapping/role-permission-mapping.controller.ts @@ -12,11 +12,11 @@ export class RolePermissionMappingController { @Post("/create") public async createPermission( @Res() response: Response, - @Body() permissionCreateDto: RolePermissionCreateDto + @Body() permissionCreateDto: RolePermissionCreateDto, ): Promise { return await this.rolePermissionService.createPermission( permissionCreateDto, - response + response, ); } @@ -25,34 +25,34 @@ export class RolePermissionMappingController { public async getPermission( @Res() response: Response, @Body() roleTitle: string, - @Body() apiPath: string + @Body() apiPath: string, ): Promise { return await this.rolePermissionService.getPermission( roleTitle, apiPath, - response + response, ); } //update permission @Post("/update") public async updatePermission( @Res() response: Response, - @Body() permissionCreateDto: RolePermissionCreateDto + @Body() permissionCreateDto: RolePermissionCreateDto, ): Promise { return await this.rolePermissionService.updatePermission( permissionCreateDto, - response + response, ); } //delete permission @Delete("/delete") public async deletePermission( @Res() response: Response, - @Body() rolePermissionId: string + @Body() rolePermissionId: string, ): Promise { return await this.rolePermissionService.deletePermission( rolePermissionId, - response + response, ); } } diff --git a/src/permissionRbac/rolePermissionMapping/role-permission-mapping.service.ts b/src/permissionRbac/rolePermissionMapping/role-permission-mapping.service.ts index 30c118c5..968609af 100644 --- a/src/permissionRbac/rolePermissionMapping/role-permission-mapping.service.ts +++ b/src/permissionRbac/rolePermissionMapping/role-permission-mapping.service.ts @@ -10,16 +10,16 @@ import { LoggerUtil } from "src/common/logger/LoggerUtil"; export class RolePermissionService { constructor( @InjectRepository(RolePermission) - private rolePermissionRepository: Repository + private rolePermissionRepository: Repository, ) {} //getPermission for middleware public async getPermissionForMiddleware( roleTitle: string, - apiPath: string + apiPath: string, ): Promise { try { - let result = await this.rolePermissionRepository.find({ + const result = await this.rolePermissionRepository.find({ where: { roleTitle: roleTitle, apiPath: apiPath }, }); LoggerUtil.log("Permission from DB: " + JSON.stringify(result)); @@ -31,11 +31,11 @@ export class RolePermissionService { public async getPermission( roleTitle: string, apiPath: string, - response: Response + response: Response, ): Promise { const apiId = "api.get.permission"; try { - let result = await this.rolePermissionRepository.find({ + const result = await this.rolePermissionRepository.find({ where: { roleTitle: roleTitle, apiPath: apiPath }, }); return APIResponse.success( @@ -43,7 +43,7 @@ export class RolePermissionService { apiId, result, HttpStatus.OK, - "Permission fetch successfully." + "Permission fetch successfully.", ); } catch (error) { return APIResponse.error( @@ -51,7 +51,7 @@ export class RolePermissionService { apiId, "Failed to fetch permission data.", error.message, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -59,11 +59,11 @@ export class RolePermissionService { //create permission public async createPermission( permissionCreateDto: RolePermissionCreateDto, - response: Response + response: Response, ): Promise { const apiId = "api.create.permission"; try { - let result = await this.rolePermissionRepository.save({ + const result = await this.rolePermissionRepository.save({ roleTitle: permissionCreateDto.roleTitle, apiPath: permissionCreateDto.apiPath, requestType: permissionCreateDto.requestType, @@ -74,7 +74,7 @@ export class RolePermissionService { apiId, result, HttpStatus.OK, - "Permission added succesfully." + "Permission added succesfully.", ); } catch (error) { return APIResponse.error( @@ -82,7 +82,7 @@ export class RolePermissionService { apiId, "Failed to add permission data.", error.message, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -90,25 +90,25 @@ export class RolePermissionService { //update permission by permissionId public async updatePermission( rolePermissionCreateDto: RolePermissionCreateDto, - response: Response + response: Response, ): Promise { const apiId = "api.update.permission"; try { - let result = await this.rolePermissionRepository.update( + const result = await this.rolePermissionRepository.update( rolePermissionCreateDto.rolePermissionId, { roleTitle: rolePermissionCreateDto.roleTitle, apiPath: rolePermissionCreateDto.apiPath, requestType: rolePermissionCreateDto.requestType, module: rolePermissionCreateDto.module, - } + }, ); return APIResponse.success( response, apiId, result, HttpStatus.OK, - "Permission updated succesfully." + "Permission updated succesfully.", ); } catch (error) { return APIResponse.error( @@ -116,7 +116,7 @@ export class RolePermissionService { apiId, "Failed to update permission data.", error.message, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } @@ -124,17 +124,18 @@ export class RolePermissionService { //delete permission by permissionId public async deletePermission( rolePermissionId: string, - response: Response + response: Response, ): Promise { const apiId = "api.delete.permission"; try { - let result = await this.rolePermissionRepository.delete(rolePermissionId); + const result = + await this.rolePermissionRepository.delete(rolePermissionId); return APIResponse.success( response, apiId, result, HttpStatus.OK, - "Permission deleted succesfully." + "Permission deleted succesfully.", ); } catch (error) { return APIResponse.error( @@ -142,7 +143,7 @@ export class RolePermissionService { apiId, "Failed to delete permission data.", error.message, - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.INTERNAL_SERVER_ERROR, ); } } diff --git a/src/rbac/assign-privilege/assign-privilege.apater.ts b/src/rbac/assign-privilege/assign-privilege.apater.ts index 87e6ac23..765b0535 100644 --- a/src/rbac/assign-privilege/assign-privilege.apater.ts +++ b/src/rbac/assign-privilege/assign-privilege.apater.ts @@ -14,7 +14,7 @@ export class AssignPrivilegeAdapter { break; default: throw new Error( - "Invalid ADAPTERSOURCE environment variable. Please specify either 'hasura' or 'postgres'." + "Invalid ADAPTERSOURCE environment variable. Please specify either 'hasura' or 'postgres'.", ); } return adapter; diff --git a/src/rbac/assign-privilege/assign-privilege.controller.ts b/src/rbac/assign-privilege/assign-privilege.controller.ts index 95c0c152..adec5035 100644 --- a/src/rbac/assign-privilege/assign-privilege.controller.ts +++ b/src/rbac/assign-privilege/assign-privilege.controller.ts @@ -32,7 +32,7 @@ import { JwtAuthGuard } from "src/common/guards/keycloak.guard"; @UseGuards(JwtAuthGuard) export class AssignPrivilegeController { constructor( - private readonly assignPrivilegeAdpater: AssignPrivilegeAdapter + private readonly assignPrivilegeAdpater: AssignPrivilegeAdapter, ) {} @Post() @@ -47,7 +47,7 @@ export class AssignPrivilegeController { public async create( @Req() request: Request, @Body() createAssignPrivilegeDto: CreatePrivilegeRoleDto, - @Res() response: Response + @Res() response: Response, ) { return await this.assignPrivilegeAdpater .buildPrivilegeRoleAdapter() @@ -63,7 +63,7 @@ export class AssignPrivilegeController { public async getRole( @Param("roleid") roleId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { return await this.assignPrivilegeAdpater .buildPrivilegeRoleAdapter() diff --git a/src/rbac/assign-role/assign-role.apater.ts b/src/rbac/assign-role/assign-role.apater.ts index f7460585..27c270a8 100644 --- a/src/rbac/assign-role/assign-role.apater.ts +++ b/src/rbac/assign-role/assign-role.apater.ts @@ -14,7 +14,7 @@ export class AssignRoleAdapter { break; default: throw new Error( - "Invalid ADAPTERSOURCE environment variable. Please specify either 'hasura' or 'postgres'." + "Invalid ADAPTERSOURCE environment variable. Please specify either 'hasura' or 'postgres'.", ); } return adapter; diff --git a/src/rbac/assign-role/assign-role.controller.ts b/src/rbac/assign-role/assign-role.controller.ts index 274a3ad9..7dacbf0e 100644 --- a/src/rbac/assign-role/assign-role.controller.ts +++ b/src/rbac/assign-role/assign-role.controller.ts @@ -61,7 +61,7 @@ export class AssignRoleController { @Req() request: Request, @Body() createAssignRoleDto: CreateAssignRoleDto, @Res() response: Response, - @Headers() headers + @Headers() headers, ) { return await this.assignRoleAdpater .buildassignroleAdapter() @@ -79,7 +79,7 @@ export class AssignRoleController { public async getRole( @Param("userId") userId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { return await this.assignRoleAdpater .buildassignroleAdapter() @@ -96,7 +96,7 @@ export class AssignRoleController { @ApiBadRequestResponse({ description: "Bad request" }) public async deleteRole( @Body() deleteAssignRoleDto: DeleteAssignRoleDto, // Modify this line to accept DeleteAssignRoleDto - @Res() response: Response + @Res() response: Response, ) { return await this.assignRoleAdpater .buildassignroleAdapter() diff --git a/src/rbac/assign-role/dto/create-assign-role.dto.ts b/src/rbac/assign-role/dto/create-assign-role.dto.ts index a040ad79..f62def04 100644 --- a/src/rbac/assign-role/dto/create-assign-role.dto.ts +++ b/src/rbac/assign-role/dto/create-assign-role.dto.ts @@ -52,7 +52,7 @@ export class ResponseAssignRoleDto { constructor( data: { userId: string; roleId: string; tenantId: string }, - message: string + message: string, ) { this.userId = data.userId; this.roleId = data.roleId; diff --git a/src/rbac/privilege/privilege.controller.ts b/src/rbac/privilege/privilege.controller.ts index fe318be8..41adc674 100644 --- a/src/rbac/privilege/privilege.controller.ts +++ b/src/rbac/privilege/privilege.controller.ts @@ -57,7 +57,7 @@ export class PrivilegeController { @Query("tenantId") tenantId: string, @Query("roleId") roleId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { return await this.privilegeAdapter .buildPrivilegeAdapter() @@ -75,7 +75,7 @@ export class PrivilegeController { public async getPrivilege( @Param("privilegeId") privilegeId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { return await this.privilegeAdapter .buildPrivilegeAdapter() @@ -97,7 +97,7 @@ export class PrivilegeController { public async createPrivilege( @Req() request, @Body() createPrivilegesDto: CreatePrivilegesDto, - @Res() response: Response + @Res() response: Response, ) { return await this.privilegeAdapter .buildPrivilegeAdapter() @@ -148,7 +148,7 @@ export class PrivilegeController { @ApiBadRequestResponse({ description: "Bad request" }) public async deleteRole( @Param("privilegeId", ParseUUIDPipe) privilegeId: string, - @Res() response: Response + @Res() response: Response, ) { return await this.privilegeAdapter .buildPrivilegeAdapter() diff --git a/src/rbac/role/dto/role.dto.ts b/src/rbac/role/dto/role.dto.ts index 3484cc3c..7012dc33 100644 --- a/src/rbac/role/dto/role.dto.ts +++ b/src/rbac/role/dto/role.dto.ts @@ -1,10 +1,6 @@ import { Expose, Type } from "class-transformer"; import { ApiProperty } from "@nestjs/swagger"; -import { - IsNotEmpty, - IsOptional, - ValidateNested, -} from "class-validator"; +import { IsNotEmpty, IsOptional, ValidateNested } from "class-validator"; export class RoleDto { @Expose() diff --git a/src/rbac/role/role.controller.ts b/src/rbac/role/role.controller.ts index 2c13eaa1..d5165171 100644 --- a/src/rbac/role/role.controller.ts +++ b/src/rbac/role/role.controller.ts @@ -52,7 +52,7 @@ export class RoleController { public async getRole( @Param("id", ParseUUIDPipe) roleId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { return await this.roleAdapter .buildRbacAdapter() @@ -71,7 +71,7 @@ export class RoleController { public async createRole( @Req() request: Request, @Body() createRolesDto: CreateRolesDto, - @Res() response: Response + @Res() response: Response, ) { return await this.roleAdapter .buildRbacAdapter() @@ -90,7 +90,7 @@ export class RoleController { @Param("id") roleId: string, @Req() request: Request, @Body() roleDto: RoleDto, - @Res() response: Response + @Res() response: Response, ) { return await this.roleAdapter .buildRbacAdapter() @@ -111,7 +111,7 @@ export class RoleController { @Headers() headers, @Req() request: Request, @Body() roleSearchDto: RoleSearchDto, - @Res() response: Response + @Res() response: Response, ) { // let tenantid = headers["tenantid"]; return await this.roleAdapter @@ -129,7 +129,7 @@ export class RoleController { @ApiBadRequestResponse({ description: "Bad request" }) public async deleteRole( @Param("roleId") roleId: string, - @Res() response: Response + @Res() response: Response, ) { return await this.roleAdapter .buildRbacAdapter() diff --git a/src/tenant/dto/tenant-create.dto.ts b/src/tenant/dto/tenant-create.dto.ts index 44e80f74..69f3c88d 100644 --- a/src/tenant/dto/tenant-create.dto.ts +++ b/src/tenant/dto/tenant-create.dto.ts @@ -1,64 +1,71 @@ import { Expose, Type } from "class-transformer"; import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; -import { ArrayMinSize, ArrayNotEmpty, IsArray, IsNotEmpty, IsOptional, IsString } from "class-validator"; +import { + ArrayMinSize, + ArrayNotEmpty, + IsArray, + IsNotEmpty, + IsOptional, + IsString, +} from "class-validator"; export class TenantCreateDto { + @Expose() + tenantId: string; - @Expose() - tenantId: string; + @Expose() + createdAt: string; - @Expose() - createdAt: string; + @Expose() + updatedAt: string; - @Expose() - updatedAt: string; + @Expose() + createdBy: string; - @Expose() - createdBy: string; + @Expose() + updatedBy: string; - @Expose() - updatedBy: string; + //tenant name + @ApiProperty({ type: () => String }) + @IsString() + @IsNotEmpty() + name: string; - //tenant name - @ApiProperty({ type: () => String }) - @IsString() - @IsNotEmpty() - name: string; + //domain + @ApiPropertyOptional({ type: () => String }) + @IsString() + @IsOptional() + domain?: string; - //domain - @ApiPropertyOptional({ type: () => String }) - @IsString() - @IsOptional() - domain?: string; + //params + @ApiPropertyOptional({ type: () => Object }) + @IsOptional() + params?: object; - //params - @ApiPropertyOptional({ type: () => Object }) - @IsOptional() - params?: object; + @ApiPropertyOptional({ type: () => Object }) + @IsOptional() + contentFilter?: object; - @ApiPropertyOptional({ type: () => Object }) - @IsOptional() - contentFilter?: object; - - //file path - @ApiPropertyOptional({ type: () => [String] }) - @IsArray() - @IsString({ each: true }) @IsOptional() - programImages: string[]; + //file path + @ApiPropertyOptional({ type: () => [String] }) + @IsArray() + @IsString({ each: true }) + @IsOptional() + programImages: string[]; - @ApiProperty({ type: () => String }) - @IsString() - @IsNotEmpty() - description: string; + @ApiProperty({ type: () => String }) + @IsString() + @IsNotEmpty() + description: string; - @ApiProperty({ type: () => String }) - @IsString() - @IsNotEmpty() - programHead: string; + @ApiProperty({ type: () => String }) + @IsString() + @IsNotEmpty() + programHead: string; - constructor(obj?: Partial) { - if (obj) { - Object.assign(this, obj); - } + constructor(obj?: Partial) { + if (obj) { + Object.assign(this, obj); } + } } diff --git a/src/tenant/dto/tenant-search.dto.ts b/src/tenant/dto/tenant-search.dto.ts index 1cbd6c21..8c80b40e 100644 --- a/src/tenant/dto/tenant-search.dto.ts +++ b/src/tenant/dto/tenant-search.dto.ts @@ -15,7 +15,10 @@ import { import { Expose } from "class-transformer"; export class TenantFilters { - @ApiPropertyOptional({ type: () => String, description: 'Tenant Id must be a (UUID)' }) + @ApiPropertyOptional({ + type: () => String, + description: "Tenant Id must be a (UUID)", + }) @IsString() @IsUUID() @IsOptional() @@ -34,25 +37,31 @@ export class TenantFilters { @ApiPropertyOptional({ type: [String], description: "Status of the tenant", - enum: ['published', 'draft', 'archived'], + enum: ["published", "draft", "archived"], isArray: true, - default: ['published'], + default: ["published"], }) @IsArray() @IsOptional() @ArrayNotEmpty() // Ensures the array is not empty (if provided) - @IsIn(['published', 'draft', 'archived'], { each: true }) // Validates each array element + @IsIn(["published", "draft", "archived"], { each: true }) // Validates each array element @IsNotEmpty({ each: true }) // Ensures no empty strings in the array @Expose() - status?: ('published' | 'draft' | 'archived')[]; + status?: ("published" | "draft" | "archived")[]; - @ApiPropertyOptional({ type: () => String, description: 'The ID of the creator (UUID)' }) + @ApiPropertyOptional({ + type: () => String, + description: "The ID of the creator (UUID)", + }) @IsString() @IsUUID() @IsOptional() createdBy?: string; - @ApiPropertyOptional({ type: () => String, description: 'The ID of the updater (UUID)' }) + @ApiPropertyOptional({ + type: () => String, + description: "The ID of the updater (UUID)", + }) @IsString() @IsUUID() @IsOptional() diff --git a/src/tenant/dto/tenant-update.dto.ts b/src/tenant/dto/tenant-update.dto.ts index 9f989274..8ab05a93 100644 --- a/src/tenant/dto/tenant-update.dto.ts +++ b/src/tenant/dto/tenant-update.dto.ts @@ -3,69 +3,67 @@ import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; import { IsIn, IsNotEmpty, IsOptional, IsString } from "class-validator"; export class TenantUpdateDto { - //tenant name - @ApiPropertyOptional({ type: () => String }) - @IsString() - @IsOptional() - name?: string; + //tenant name + @ApiPropertyOptional({ type: () => String }) + @IsString() + @IsOptional() + name?: string; - //domain - @ApiPropertyOptional({ type: () => String }) - @IsOptional() - @IsString() - domain?: string; + //domain + @ApiPropertyOptional({ type: () => String }) + @IsOptional() + @IsString() + domain?: string; - //params - @ApiPropertyOptional({ type: () => Object }) - @IsOptional() - params?: object; + //params + @ApiPropertyOptional({ type: () => Object }) + @IsOptional() + params?: object; - @ApiPropertyOptional({ type: () => Object }) - @IsOptional() - contentFilter?: object; + @ApiPropertyOptional({ type: () => Object }) + @IsOptional() + contentFilter?: object; - //file path - @ApiPropertyOptional({ type: () => [String] }) - @IsOptional() - @Expose() - programImages?: string[]; + //file path + @ApiPropertyOptional({ type: () => [String] }) + @IsOptional() + @Expose() + programImages?: string[]; + @ApiPropertyOptional({ type: () => String }) + @IsString() + @IsOptional() + description?: string; - @ApiPropertyOptional({ type: () => String }) - @IsString() - @IsOptional() - description?: string; + //status + @ApiPropertyOptional({ + type: String, + description: "Status of the tenant", + enum: ["published", "draft", "archived"], + default: "published", + }) + @IsString() + @IsOptional() + @IsIn(["published", "draft", "archived"]) + @Expose() + status?: "published" | "draft" | "archived"; + @ApiPropertyOptional({ type: () => String }) + @IsString() + @IsOptional() + createdBy?: string; - //status - @ApiPropertyOptional({ - type: String, - description: "Status of the tenant", - enum: ['published', 'draft', 'archived'], - default: 'published', - }) - @IsString() - @IsOptional() - @IsIn(['published', 'draft', 'archived']) - @Expose() - status?: 'published' | 'draft' | 'archived'; + @Expose() + updatedBy: string; - @ApiPropertyOptional({ type: () => String }) - @IsString() - @IsOptional() - createdBy?: string; + @ApiPropertyOptional({ type: () => String }) + @IsString() + @IsOptional() + programHead?: string; - @Expose() - updatedBy: string; - - @ApiPropertyOptional({ type: () => String }) - @IsString() - @IsOptional() - programHead?: string; - - constructor(obj?: Partial) { - if (obj) { - Object.assign(this, obj); - } + constructor(obj?: Partial) { + if (obj) { + Object.assign(this, obj); } + } } diff --git a/src/tenant/entities/tenent.entity.ts b/src/tenant/entities/tenent.entity.ts index acbb0e4b..fcfbf33f 100644 --- a/src/tenant/entities/tenent.entity.ts +++ b/src/tenant/entities/tenent.entity.ts @@ -48,9 +48,9 @@ export class Tenant { @Column({ type: "text", nullable: true }) programHead: string | null; // UUID of the user who created the tenant - @Column({ type: 'varchar', length: 255, nullable: true }) + @Column({ type: "varchar", length: 255, nullable: true }) templateId: string; - + @Column({ type: "text" }) contentFramework: string; @@ -66,6 +66,6 @@ export class Tenant { @Column({ type: "uuid", nullable: true }) updatedBy: string | null; // UUID of the user who last updated the tenant - @Column({ type: 'json', nullable: true }) + @Column({ type: "json", nullable: true }) contentFilter: any; } diff --git a/src/tenant/tenant.controller.spec.ts b/src/tenant/tenant.controller.spec.ts index 4a3fc925..e0bf3897 100644 --- a/src/tenant/tenant.controller.spec.ts +++ b/src/tenant/tenant.controller.spec.ts @@ -1,7 +1,7 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { TenantController } from './tenant.controller'; +import { Test, TestingModule } from "@nestjs/testing"; +import { TenantController } from "./tenant.controller"; -describe('TenantController', () => { +describe("TenantController", () => { let controller: TenantController; beforeEach(async () => { @@ -12,7 +12,7 @@ describe('TenantController', () => { controller = module.get(TenantController); }); - it('should be defined', () => { + it("should be defined", () => { expect(controller).toBeDefined(); }); }); diff --git a/src/tenant/tenant.controller.ts b/src/tenant/tenant.controller.ts index 340cad2c..dce94c5b 100644 --- a/src/tenant/tenant.controller.ts +++ b/src/tenant/tenant.controller.ts @@ -1,124 +1,152 @@ -import { BadRequestException, Body, Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Query, Req, Res, SerializeOptions, UploadedFiles, UseInterceptors, UsePipes, ValidationPipe } from '@nestjs/common'; -import { TenantService } from './tenant.service'; -import { ApiCreatedResponse, ApiForbiddenResponse, ApiQuery, ApiTags } from '@nestjs/swagger'; -import { TenantCreateDto } from './dto/tenant-create.dto'; -import { FilesInterceptor } from '@nestjs/platform-express'; -import { FilesUploadService } from 'src/common/services/upload-file'; -import { TenantUpdateDto } from './dto/tenant-update.dto'; +import { + BadRequestException, + Body, + Controller, + Delete, + Get, + Param, + ParseUUIDPipe, + Patch, + Post, + Query, + Req, + Res, + SerializeOptions, + UploadedFiles, + UseInterceptors, + UsePipes, + ValidationPipe, +} from "@nestjs/common"; +import { TenantService } from "./tenant.service"; +import { + ApiCreatedResponse, + ApiForbiddenResponse, + ApiQuery, + ApiTags, +} from "@nestjs/swagger"; +import { TenantCreateDto } from "./dto/tenant-create.dto"; +import { FilesInterceptor } from "@nestjs/platform-express"; +import { FilesUploadService } from "src/common/services/upload-file"; +import { TenantUpdateDto } from "./dto/tenant-update.dto"; import { Request, Response } from "express"; -import { TenantSearchDTO } from './dto/tenant-search.dto'; -import { API_RESPONSES } from '@utils/response.messages'; -import { isUUID } from 'class-validator'; -import { GetUserId } from 'src/common/decorators/getUserId.decorator'; +import { TenantSearchDTO } from "./dto/tenant-search.dto"; +import { API_RESPONSES } from "@utils/response.messages"; +import { isUUID } from "class-validator"; +import { GetUserId } from "src/common/decorators/getUserId.decorator"; @ApiTags("Tenant") -@Controller('tenant') +@Controller("tenant") export class TenantController { - constructor( - private tenantService: TenantService, - private readonly filesUploadService: FilesUploadService - ) { } - //Get tenant information - @Get("/read") - @ApiCreatedResponse({ description: API_RESPONSES.TENANT_SEARCH_SUCCESS }) - @ApiForbiddenResponse({ description: API_RESPONSES.FORBIDDEN }) - @UsePipes(ValidationPipe) - @SerializeOptions({ - strategy: "excludeAll", - }) - public async getTenants( - @Req() request: Request, - @Res() response: Response - ): Promise{ - return await this.tenantService.getTenants(request, response); - } - - //Search Tenanr deatils - @Post("/search") - @ApiCreatedResponse({ description: API_RESPONSES.TENANT_SEARCH_SUCCESS }) - @ApiForbiddenResponse({ description: API_RESPONSES.FORBIDDEN }) - @UsePipes(new ValidationPipe({ transform: true, whitelist: true })) - public async searchTenants( - @Body() tenantSearchDTO: TenantSearchDTO, - @Req() request: Request, - @Res() response: Response, - ): Promise { - return this.tenantService.searchTenants(request, tenantSearchDTO, response); - } - - - //Create a new tenant - @Post("/create") - @ApiCreatedResponse({ description: API_RESPONSES.TENANT_CREATE }) - @ApiForbiddenResponse({ description: API_RESPONSES.FORBIDDEN }) - @UseInterceptors(FilesInterceptor('programImages', 10)) - @UsePipes(ValidationPipe) - public async createTenants( - @Res() response: Response, - @Body() tenantCreateDto: TenantCreateDto, - @UploadedFiles() files: Express.Multer.File[], - @GetUserId("userId", ParseUUIDPipe) userId: string - ): Promise { - const uploadedFiles = []; - // Loop through each file and upload it - if (files && files.length > 0) { - for (const file of files) { - const uploadedFile = await this.filesUploadService.saveFile(file); - uploadedFiles.push(uploadedFile); - } - // Assuming tenantCreateDto needs an array of file paths - tenantCreateDto.programImages = uploadedFiles.map(file => file.filePath); // Adjust field as needed - } - tenantCreateDto.createdBy = userId; - return await this.tenantService.createTenants(tenantCreateDto, response); - } + constructor( + private tenantService: TenantService, + private readonly filesUploadService: FilesUploadService, + ) {} + //Get tenant information + @Get("/read") + @ApiCreatedResponse({ description: API_RESPONSES.TENANT_SEARCH_SUCCESS }) + @ApiForbiddenResponse({ description: API_RESPONSES.FORBIDDEN }) + @UsePipes(ValidationPipe) + @SerializeOptions({ + strategy: "excludeAll", + }) + public async getTenants( + @Req() request: Request, + @Res() response: Response, + ): Promise { + return await this.tenantService.getTenants(request, response); + } - //Update a tenant - @Patch("/update/:id") - @ApiCreatedResponse({ description: "Tenant Data Fetch" }) - @ApiForbiddenResponse({ description: "Forbidden" }) - @UseInterceptors(FilesInterceptor('programImages', 10)) - @UsePipes(ValidationPipe) - public async updateTenants( - @Res() response: Response, - @Param("id", new ParseUUIDPipe()) id: string, - @Body() tenantUpdateDto: TenantUpdateDto, - @UploadedFiles() files: Express.Multer.File[], - @GetUserId("userId", ParseUUIDPipe) userId: string, - ): Promise { - const tenantId = id; - const uploadedFiles = []; + //Search Tenanr deatils + @Post("/search") + @ApiCreatedResponse({ description: API_RESPONSES.TENANT_SEARCH_SUCCESS }) + @ApiForbiddenResponse({ description: API_RESPONSES.FORBIDDEN }) + @UsePipes(new ValidationPipe({ transform: true, whitelist: true })) + public async searchTenants( + @Body() tenantSearchDTO: TenantSearchDTO, + @Req() request: Request, + @Res() response: Response, + ): Promise { + return this.tenantService.searchTenants(request, tenantSearchDTO, response); + } - // Loop through each file and upload it - if (files && files.length > 0) { - for (const file of files) { - const uploadedFile = await this.filesUploadService.saveFile(file); - uploadedFiles.push(uploadedFile); - } - // Assuming tenantCreateDto needs an array of file paths - tenantUpdateDto.programImages = uploadedFiles.map(file => file.filePath); // Adjust field as needed - } - tenantUpdateDto.updatedBy = userId; - return await this.tenantService.updateTenants(tenantId, tenantUpdateDto, response); + //Create a new tenant + @Post("/create") + @ApiCreatedResponse({ description: API_RESPONSES.TENANT_CREATE }) + @ApiForbiddenResponse({ description: API_RESPONSES.FORBIDDEN }) + @UseInterceptors(FilesInterceptor("programImages", 10)) + @UsePipes(ValidationPipe) + public async createTenants( + @Res() response: Response, + @Body() tenantCreateDto: TenantCreateDto, + @UploadedFiles() files: Express.Multer.File[], + @GetUserId("userId", ParseUUIDPipe) userId: string, + ): Promise { + const uploadedFiles = []; + // Loop through each file and upload it + if (files && files.length > 0) { + for (const file of files) { + const uploadedFile = await this.filesUploadService.saveFile(file); + uploadedFiles.push(uploadedFile); + } + // Assuming tenantCreateDto needs an array of file paths + tenantCreateDto.programImages = uploadedFiles.map( + (file) => file.filePath, + ); // Adjust field as needed } + tenantCreateDto.createdBy = userId; + return await this.tenantService.createTenants(tenantCreateDto, response); + } + //Update a tenant + @Patch("/update/:id") + @ApiCreatedResponse({ description: "Tenant Data Fetch" }) + @ApiForbiddenResponse({ description: "Forbidden" }) + @UseInterceptors(FilesInterceptor("programImages", 10)) + @UsePipes(ValidationPipe) + public async updateTenants( + @Res() response: Response, + @Param("id", new ParseUUIDPipe()) id: string, + @Body() tenantUpdateDto: TenantUpdateDto, + @UploadedFiles() files: Express.Multer.File[], + @GetUserId("userId", ParseUUIDPipe) userId: string, + ): Promise { + const tenantId = id; + const uploadedFiles = []; - //Delete a tenant - @Delete("/delete") - @ApiCreatedResponse({ description: "Tenant Data Fetch" }) - @ApiForbiddenResponse({ description: "Forbidden" }) - @UsePipes(ValidationPipe) - @SerializeOptions({ - strategy: "excludeAll", - }) - public async deleteTenants( - @Req() request: Request, - @Res() response: Response, - @Param("id", new ParseUUIDPipe()) id: string, - @GetUserId("userId", ParseUUIDPipe) userId: string, - ) { - const tenantId = id; - return await this.tenantService.deleteTenants(request, tenantId, response); + // Loop through each file and upload it + if (files && files.length > 0) { + for (const file of files) { + const uploadedFile = await this.filesUploadService.saveFile(file); + uploadedFiles.push(uploadedFile); + } + // Assuming tenantCreateDto needs an array of file paths + tenantUpdateDto.programImages = uploadedFiles.map( + (file) => file.filePath, + ); // Adjust field as needed } + tenantUpdateDto.updatedBy = userId; + return await this.tenantService.updateTenants( + tenantId, + tenantUpdateDto, + response, + ); + } + //Delete a tenant + @Delete("/delete") + @ApiCreatedResponse({ description: "Tenant Data Fetch" }) + @ApiForbiddenResponse({ description: "Forbidden" }) + @UsePipes(ValidationPipe) + @SerializeOptions({ + strategy: "excludeAll", + }) + public async deleteTenants( + @Req() request: Request, + @Res() response: Response, + @Param("id", new ParseUUIDPipe()) id: string, + @GetUserId("userId", ParseUUIDPipe) userId: string, + ) { + const tenantId = id; + return await this.tenantService.deleteTenants(request, tenantId, response); + } } diff --git a/src/tenant/tenant.module.ts b/src/tenant/tenant.module.ts index 1f76a930..47183623 100644 --- a/src/tenant/tenant.module.ts +++ b/src/tenant/tenant.module.ts @@ -1,15 +1,13 @@ -import { Module } from '@nestjs/common'; -import { TenantController } from './tenant.controller'; -import { TenantService } from './tenant.service'; -import { Tenant } from 'src/tenant/entities/tenent.entity'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { FilesUploadService } from 'src/common/services/upload-file'; +import { Module } from "@nestjs/common"; +import { TenantController } from "./tenant.controller"; +import { TenantService } from "./tenant.service"; +import { Tenant } from "src/tenant/entities/tenent.entity"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { FilesUploadService } from "src/common/services/upload-file"; @Module({ - imports: [ - TypeOrmModule.forFeature([Tenant]) - ], + imports: [TypeOrmModule.forFeature([Tenant])], controllers: [TenantController], - providers: [TenantService, FilesUploadService] + providers: [TenantService, FilesUploadService], }) -export class TenantModule { } +export class TenantModule {} diff --git a/src/tenant/tenant.service.spec.ts b/src/tenant/tenant.service.spec.ts index 933e808f..02500f28 100644 --- a/src/tenant/tenant.service.spec.ts +++ b/src/tenant/tenant.service.spec.ts @@ -1,7 +1,7 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { TenantService } from './tenant.service'; +import { Test, TestingModule } from "@nestjs/testing"; +import { TenantService } from "./tenant.service"; -describe('TenantService', () => { +describe("TenantService", () => { let service: TenantService; beforeEach(async () => { @@ -12,7 +12,7 @@ describe('TenantService', () => { service = module.get(TenantService); }); - it('should be defined', () => { + it("should be defined", () => { expect(service).toBeDefined(); }); }); diff --git a/src/tenant/tenant.service.ts b/src/tenant/tenant.service.ts index 1b3dc53c..1ac13dd1 100644 --- a/src/tenant/tenant.service.ts +++ b/src/tenant/tenant.service.ts @@ -1,349 +1,395 @@ -import { HttpStatus, Injectable } from '@nestjs/common'; -import { Tenant } from './entities/tenent.entity'; -import { ILike, In, Repository } from 'typeorm'; +import { HttpStatus, Injectable } from "@nestjs/common"; +import { Tenant } from "./entities/tenent.entity"; +import { ILike, In, Repository } from "typeorm"; import APIResponse from "src/common/responses/response"; -import { InjectRepository } from '@nestjs/typeorm'; -import { API_RESPONSES } from '@utils/response.messages'; -import { APIID } from '@utils/api-id.config'; +import { InjectRepository } from "@nestjs/typeorm"; +import { API_RESPONSES } from "@utils/response.messages"; +import { APIID } from "@utils/api-id.config"; import { LoggerUtil } from "src/common/logger/LoggerUtil"; -import { TenantUpdateDto } from './dto/tenant-update.dto'; +import { TenantUpdateDto } from "./dto/tenant-update.dto"; import { Request, Response } from "express"; -import { TenantSearchDTO } from './dto/tenant-search.dto'; -import { TenantCreateDto } from './dto/tenant-create.dto'; +import { TenantSearchDTO } from "./dto/tenant-search.dto"; +import { TenantCreateDto } from "./dto/tenant-create.dto"; @Injectable() export class TenantService { - constructor( - @InjectRepository(Tenant) - private tenantRepository: Repository, - ) { } - - public async getTenants(request: Request, response: Response): Promise { - let apiId = APIID.TENANT_LIST; - try { - let result = await this.tenantRepository.find({ where: { status: "published" } }); - - if (result.length === 0) { - return APIResponse.error( - response, - apiId, - API_RESPONSES.NOT_FOUND, - API_RESPONSES.TENANT_NOT_FOUND, - HttpStatus.NOT_FOUND - ); - } - - for (let tenantData of result) { - - let query = `SELECT * FROM public."Roles" WHERE "tenantId" = '${tenantData.tenantId}'`; - let getRole = await this.tenantRepository.query(query); - - if (getRole.length == 0) { - let query = `SELECT * FROM public."Roles"`; - getRole = await this.tenantRepository.query(query); - } - - // Add role details to the tenantData object - let roleDetails = []; - if (getRole.length == 0) { - tenantData['role'] = null; - } - - for (let roleData of getRole) { - roleDetails.push({ - roleId: roleData.roleId, - name: roleData.name, - code: roleData.code - }); - tenantData['role'] = roleDetails; - } + constructor( + @InjectRepository(Tenant) + private tenantRepository: Repository, + ) {} + + public async getTenants( + request: Request, + response: Response, + ): Promise { + const apiId = APIID.TENANT_LIST; + try { + const result = await this.tenantRepository.find({ + where: { status: "published" }, + }); + + if (result.length === 0) { + return APIResponse.error( + response, + apiId, + API_RESPONSES.NOT_FOUND, + API_RESPONSES.TENANT_NOT_FOUND, + HttpStatus.NOT_FOUND, + ); + } + + for (const tenantData of result) { + const query = `SELECT * FROM public."Roles" WHERE "tenantId" = '${tenantData.tenantId}'`; + let getRole = await this.tenantRepository.query(query); + + if (getRole.length == 0) { + const query = `SELECT * FROM public."Roles"`; + getRole = await this.tenantRepository.query(query); + } - } + // Add role details to the tenantData object + const roleDetails = []; + if (getRole.length == 0) { + tenantData["role"] = null; + } - return APIResponse.success( - response, - apiId, - result, - HttpStatus.OK, - API_RESPONSES.TENANT_GET - ); - } catch (error) { - const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; - LoggerUtil.error( - `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${errorMessage}`, - apiId - ) - return APIResponse.error( - response, - apiId, - API_RESPONSES.INTERNAL_SERVER_ERROR, - errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR - ); + for (const roleData of getRole) { + roleDetails.push({ + roleId: roleData.roleId, + name: roleData.name, + code: roleData.code, + }); + tenantData["role"] = roleDetails; } + } + + return APIResponse.success( + response, + apiId, + result, + HttpStatus.OK, + API_RESPONSES.TENANT_GET, + ); + } catch (error) { + const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; + LoggerUtil.error( + `${API_RESPONSES.SERVER_ERROR}`, + `Error: ${errorMessage}`, + apiId, + ); + return APIResponse.error( + response, + apiId, + API_RESPONSES.INTERNAL_SERVER_ERROR, + errorMessage, + HttpStatus.INTERNAL_SERVER_ERROR, + ); } - - public async searchTenants(request: Request, tenantSearchDTO: TenantSearchDTO, response: Response): Promise { - let apiId = APIID.TENANT_SEARCH; + } + + public async searchTenants( + request: Request, + tenantSearchDTO: TenantSearchDTO, + response: Response, + ): Promise { + const apiId = APIID.TENANT_SEARCH; + try { + const { limit, offset, filters } = tenantSearchDTO; + + const whereClause: Record = {}; + if (filters && Object.keys(filters).length > 0) { + Object.entries(filters).forEach(([key, value]) => { + switch (key) { + case "name": + whereClause[key] = ILike(`%${value}%`); + break; + + case "status": + if (Array.isArray(value)) { + whereClause[key] = In(value); + } else { + whereClause[key] = value; + } + break; + + default: + if (value !== undefined && value !== null) { + whereClause[key] = value; + } + break; + } + }); + } + + const getTenantDetails = await this.tenantRepository.find({ + where: whereClause, + take: limit || 10, + skip: offset || 0, + }); + + const totalCount = await this.tenantRepository.count({ + where: whereClause, + }); + + if (totalCount === 0) { + return APIResponse.error( + response, + apiId, + API_RESPONSES.NOT_FOUND, + API_RESPONSES.TENANT_NOT_FOUND, + HttpStatus.NOT_FOUND, + ); + } + + return APIResponse.success( + response, + apiId, + { getTenantDetails, totalCount }, + HttpStatus.OK, + API_RESPONSES.TENANT_SEARCH_SUCCESS, + ); + } catch (error) { + const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; + LoggerUtil.error( + `${API_RESPONSES.SERVER_ERROR}`, + `Error: ${errorMessage}`, + apiId, + ); + return APIResponse.error( + response, + apiId, + API_RESPONSES.INTERNAL_SERVER_ERROR, + errorMessage, + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } + + public async createTenants( + tenantCreateDto: TenantCreateDto, + response: Response, + ): Promise { + const apiId = APIID.TENANT_CREATE; + try { + // Parse JSON strings for params and contentFilter fields + if ( + tenantCreateDto.params && + typeof tenantCreateDto.params === "string" + ) { try { - const { limit, offset, filters } = tenantSearchDTO; - - const whereClause: Record = {}; - if (filters && Object.keys(filters).length > 0) { - Object.entries(filters).forEach(([key, value]) => { - switch (key) { - case 'name': - whereClause[key] = ILike(`%${value}%`); - break; - - case 'status': - if (Array.isArray(value)) { - whereClause[key] = In(value); - } else { - whereClause[key] = value; - } - break; - - default: - if (value !== undefined && value !== null) { - whereClause[key] = value; - } - break; - } - }); - } - - const getTenantDetails = await this.tenantRepository.find({ - where: whereClause, - take: limit || 10, - skip: offset || 0, - }); - - const totalCount = await this.tenantRepository.count({ where: whereClause }); - - if (totalCount === 0) { - return APIResponse.error( - response, - apiId, - API_RESPONSES.NOT_FOUND, - API_RESPONSES.TENANT_NOT_FOUND, - HttpStatus.NOT_FOUND - ); - } - - return APIResponse.success( - response, - apiId, - { getTenantDetails, totalCount }, - HttpStatus.OK, - API_RESPONSES.TENANT_SEARCH_SUCCESS - ); - + tenantCreateDto.params = JSON.parse(tenantCreateDto.params); } catch (error) { - const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; - LoggerUtil.error( - `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${errorMessage}`, - apiId - ) - return APIResponse.error( - response, - apiId, - API_RESPONSES.INTERNAL_SERVER_ERROR, - errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR - ); + LoggerUtil.warn( + `Failed to parse params field: ${error.message}`, + apiId, + ); } - } + } - public async createTenants(tenantCreateDto: TenantCreateDto, response: Response): Promise { - let apiId = APIID.TENANT_CREATE; + if ( + tenantCreateDto.contentFilter && + typeof tenantCreateDto.contentFilter === "string" + ) { try { - // Parse JSON strings for params and contentFilter fields - if (tenantCreateDto.params && typeof tenantCreateDto.params === 'string') { - try { - tenantCreateDto.params = JSON.parse(tenantCreateDto.params); - } catch (error) { - LoggerUtil.warn(`Failed to parse params field: ${error.message}`, apiId); - } - } - - if (tenantCreateDto.contentFilter && typeof tenantCreateDto.contentFilter === 'string') { - try { - tenantCreateDto.contentFilter = JSON.parse(tenantCreateDto.contentFilter); - } catch (error) { - LoggerUtil.warn(`Failed to parse contentFilter field: ${error.message}`, apiId); - } - } - - let checkExitTenants = await this.tenantRepository.find({ - where: { - "name": tenantCreateDto?.name - } - } - ) - if (checkExitTenants.length > 0) { - return APIResponse.error( - response, - apiId, - API_RESPONSES.CONFLICT, - API_RESPONSES.TENANT_EXISTS, - HttpStatus.CONFLICT - ); - } - - let result = await this.tenantRepository.save(tenantCreateDto); - if (result) { - return APIResponse.success( - response, - apiId, - result, - HttpStatus.CREATED, - API_RESPONSES.TENANT_CREATE - ); - } + tenantCreateDto.contentFilter = JSON.parse( + tenantCreateDto.contentFilter, + ); } catch (error) { - const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; - LoggerUtil.error( - `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${errorMessage}`, - apiId - ) - return APIResponse.error( - response, - apiId, - API_RESPONSES.INTERNAL_SERVER_ERROR, - errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR - ); + LoggerUtil.warn( + `Failed to parse contentFilter field: ${error.message}`, + apiId, + ); } + } + + const checkExitTenants = await this.tenantRepository.find({ + where: { + name: tenantCreateDto?.name, + }, + }); + if (checkExitTenants.length > 0) { + return APIResponse.error( + response, + apiId, + API_RESPONSES.CONFLICT, + API_RESPONSES.TENANT_EXISTS, + HttpStatus.CONFLICT, + ); + } + + const result = await this.tenantRepository.save(tenantCreateDto); + if (result) { + return APIResponse.success( + response, + apiId, + result, + HttpStatus.CREATED, + API_RESPONSES.TENANT_CREATE, + ); + } + } catch (error) { + const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; + LoggerUtil.error( + `${API_RESPONSES.SERVER_ERROR}`, + `Error: ${errorMessage}`, + apiId, + ); + return APIResponse.error( + response, + apiId, + API_RESPONSES.INTERNAL_SERVER_ERROR, + errorMessage, + HttpStatus.INTERNAL_SERVER_ERROR, + ); } - - - public async deleteTenants(request: Request, tenantId: string, response: Response) { - let apiId = APIID.TENANT_DELETE; + } + + public async deleteTenants( + request: Request, + tenantId: string, + response: Response, + ) { + const apiId = APIID.TENANT_DELETE; + try { + const checkExitTenants = await this.tenantRepository.find({ + where: { + tenantId: tenantId, + }, + }); + if (checkExitTenants.length === 0) { + return APIResponse.error( + response, + apiId, + API_RESPONSES.CONFLICT, + API_RESPONSES.TENANT_EXISTS, + HttpStatus.CONFLICT, + ); + } + + const result = await this.tenantRepository.delete(tenantId); + + if (result && result.affected && result.affected > 0) { + return APIResponse.success( + response, + apiId, + result, + HttpStatus.OK, + API_RESPONSES.TENANT_DELETE, + ); + } + } catch (error) { + const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; + LoggerUtil.error( + `${API_RESPONSES.SERVER_ERROR}`, + `Error: ${errorMessage}`, + apiId, + ); + return APIResponse.error( + response, + apiId, + API_RESPONSES.INTERNAL_SERVER_ERROR, + errorMessage, + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } + + public async updateTenants( + tenantId: string, + tenantUpdateDto: TenantUpdateDto, + response: Response, + ) { + const apiId = APIID.TENANT_UPDATE; + try { + // Parse JSON strings for params and contentFilter fields + if ( + tenantUpdateDto.params && + typeof tenantUpdateDto.params === "string" + ) { try { - let checkExitTenants = await this.tenantRepository.find({ - where: { - "tenantId": tenantId - } - } - ) - if (checkExitTenants.length === 0) { - return APIResponse.error( - response, - apiId, - API_RESPONSES.CONFLICT, - API_RESPONSES.TENANT_EXISTS, - HttpStatus.CONFLICT - ); - } - - let result = await this.tenantRepository.delete(tenantId); - - if (result && result.affected && result.affected > 0) { - return APIResponse.success( - response, - apiId, - result, - HttpStatus.OK, - API_RESPONSES.TENANT_DELETE, - ); - } + tenantUpdateDto.params = JSON.parse(tenantUpdateDto.params); } catch (error) { - const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; - LoggerUtil.error( - `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${errorMessage}`, - apiId - ) - return APIResponse.error( - response, - apiId, - API_RESPONSES.INTERNAL_SERVER_ERROR, - errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR - ); + LoggerUtil.warn( + `Failed to parse params field: ${error.message}`, + apiId, + ); } - } + } - public async updateTenants(tenantId: string, tenantUpdateDto: TenantUpdateDto, response: Response) { - let apiId = APIID.TENANT_UPDATE; + if ( + tenantUpdateDto.contentFilter && + typeof tenantUpdateDto.contentFilter === "string" + ) { try { - // Parse JSON strings for params and contentFilter fields - if (tenantUpdateDto.params && typeof tenantUpdateDto.params === 'string') { - try { - tenantUpdateDto.params = JSON.parse(tenantUpdateDto.params); - } catch (error) { - LoggerUtil.warn(`Failed to parse params field: ${error.message}`, apiId); - } - } - - if (tenantUpdateDto.contentFilter && typeof tenantUpdateDto.contentFilter === 'string') { - try { - tenantUpdateDto.contentFilter = JSON.parse(tenantUpdateDto.contentFilter); - } catch (error) { - LoggerUtil.warn(`Failed to parse contentFilter field: ${error.message}`, apiId); - } - } - - let checkExistingTenant = await this.tenantRepository.findOne({ - where: { tenantId } - }) - - if (!checkExistingTenant) { - return APIResponse.error( - response, - apiId, - API_RESPONSES.NOT_FOUND, - API_RESPONSES.TENANT_NOTFOUND, - HttpStatus.NOT_FOUND - ); - } - - if (tenantUpdateDto.name) { - const checkExistingTenantName = await this.tenantRepository.findOne({ - where: { - "name": tenantUpdateDto.name - } - }) - if (checkExistingTenantName) { - return APIResponse.error( - response, - apiId, - API_RESPONSES.CONFLICT, - API_RESPONSES.TENANT_EXISTS, - HttpStatus.CONFLICT - ); - } - } - - let result = await this.tenantRepository.update(tenantId, tenantUpdateDto); - if (result && result.affected && result.affected > 0) { - return APIResponse.success( - response, - apiId, - { tenantId, updatedFields: tenantUpdateDto }, // Return updated tenant information - HttpStatus.OK, - API_RESPONSES.TENANT_UPDATE - ); - } - + tenantUpdateDto.contentFilter = JSON.parse( + tenantUpdateDto.contentFilter, + ); } catch (error) { - const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; - LoggerUtil.error( - `${API_RESPONSES.SERVER_ERROR}`, - `Error: ${errorMessage}`, - apiId - ) - return APIResponse.error( - response, - apiId, - API_RESPONSES.INTERNAL_SERVER_ERROR, - errorMessage, - HttpStatus.INTERNAL_SERVER_ERROR - ); + LoggerUtil.warn( + `Failed to parse contentFilter field: ${error.message}`, + apiId, + ); + } + } + + const checkExistingTenant = await this.tenantRepository.findOne({ + where: { tenantId }, + }); + + if (!checkExistingTenant) { + return APIResponse.error( + response, + apiId, + API_RESPONSES.NOT_FOUND, + API_RESPONSES.TENANT_NOTFOUND, + HttpStatus.NOT_FOUND, + ); + } + + if (tenantUpdateDto.name) { + const checkExistingTenantName = await this.tenantRepository.findOne({ + where: { + name: tenantUpdateDto.name, + }, + }); + if (checkExistingTenantName) { + return APIResponse.error( + response, + apiId, + API_RESPONSES.CONFLICT, + API_RESPONSES.TENANT_EXISTS, + HttpStatus.CONFLICT, + ); } + } + + const result = await this.tenantRepository.update( + tenantId, + tenantUpdateDto, + ); + if (result && result.affected && result.affected > 0) { + return APIResponse.success( + response, + apiId, + { tenantId, updatedFields: tenantUpdateDto }, // Return updated tenant information + HttpStatus.OK, + API_RESPONSES.TENANT_UPDATE, + ); + } + } catch (error) { + const errorMessage = error.message || API_RESPONSES.INTERNAL_SERVER_ERROR; + LoggerUtil.error( + `${API_RESPONSES.SERVER_ERROR}`, + `Error: ${errorMessage}`, + apiId, + ); + return APIResponse.error( + response, + apiId, + API_RESPONSES.INTERNAL_SERVER_ERROR, + errorMessage, + HttpStatus.INTERNAL_SERVER_ERROR, + ); } + } } diff --git a/src/user/dto/otpSend.dto.ts b/src/user/dto/otpSend.dto.ts index abe4c408..d095d681 100644 --- a/src/user/dto/otpSend.dto.ts +++ b/src/user/dto/otpSend.dto.ts @@ -1,16 +1,17 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsIn, IsMobilePhone, IsString, Matches } from 'class-validator'; +import { ApiProperty } from "@nestjs/swagger"; +import { IsIn, IsMobilePhone, IsString, Matches } from "class-validator"; export class OtpSendDTO { + @ApiProperty() + @IsString({ message: "Mobile number must be a string." }) + @IsMobilePhone() + @Matches(/^\d{10}$/, { message: "Mobile number must be exactly 10 digits." }) + mobile: string; - @ApiProperty() - @IsString({ message: 'Mobile number must be a string.' }) - @IsMobilePhone(null, { message: 'Invalid mobile phone number format.' }) - @Matches(/^\d{10}$/, { message: 'Mobile number must be exactly 10 digits.' }) - mobile: string; - - @ApiProperty() - @IsString({ message: 'Reason must be a string.' }) - @IsIn(['signup','login','forgot'], { message: 'Reason must be "signup,login or forgot".' }) - reason: string -} \ No newline at end of file + @ApiProperty() + @IsString({ message: "Reason must be a string." }) + @IsIn(["signup", "login", "forgot"], { + message: 'Reason must be "signup,login or forgot".', + }) + reason: string; +} diff --git a/src/user/dto/otpVerify.dto.ts b/src/user/dto/otpVerify.dto.ts index d8e1652f..c47647e4 100644 --- a/src/user/dto/otpVerify.dto.ts +++ b/src/user/dto/otpVerify.dto.ts @@ -1,53 +1,70 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsIn, IsString, Length, Matches, ValidateIf, registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator'; +import { ApiProperty } from "@nestjs/swagger"; +import { + IsIn, + IsString, + Length, + Matches, + ValidateIf, + registerDecorator, + ValidationOptions, + ValidationArguments, +} from "class-validator"; // Custom validator function function IsValidOtp(validationOptions?: ValidationOptions) { return function (object: Object, propertyName: string) { registerDecorator({ - name: 'isValidOtp', + name: "isValidOtp", target: object.constructor, propertyName: propertyName, options: validationOptions, validator: { validate(value: any, args: ValidationArguments) { - const otpDigits = process.env.OTP_DIGITS ? parseInt(process.env.OTP_DIGITS) : 6; + const otpDigits = process.env.OTP_DIGITS + ? parseInt(process.env.OTP_DIGITS) + : 6; const regex = new RegExp(`^\\d{${otpDigits}}$`); - return typeof value === 'string' && regex.test(value); + return typeof value === "string" && regex.test(value); }, defaultMessage(args: ValidationArguments) { - const otpDigits = process.env.OTP_DIGITS ? parseInt(process.env.OTP_DIGITS) : 6; + const otpDigits = process.env.OTP_DIGITS + ? parseInt(process.env.OTP_DIGITS) + : 6; return `OTP must be exactly ${otpDigits} digits.`; - } - } + }, + }, }); }; } export class OtpVerifyDTO { - @ApiProperty() - @ValidateIf(o => o.reason === 'signup') - @IsString({ message: 'Mobile number must be a string.' }) - @Matches(/^\d{10}$/, { message: 'Mobile number must be exactly 10 digits.' }) - mobile: string; - - @ApiProperty() - @IsString({ message: 'OTP must be a string.' }) - @IsValidOtp() // Use the custom validator - otp: string; - - @ApiProperty() - @IsString({ message: 'Hash must be a string.' }) - @Length(10, 256, { message: 'Hash must be between 10 and 256 characters long.' }) - hash: string; - - @ApiProperty() - @IsString({ message: 'Reason must be a string.' }) - @IsIn(['signup', 'forgot'], { message: 'Reason must be either "signup" or "forgot".' }) - reason: string; - - @ApiProperty() - @ValidateIf(o => o.reason === 'forgot') - @IsString({ message: 'Username must be a string.' }) - username: string; -} \ No newline at end of file + @ApiProperty() + @ValidateIf((o) => o.reason === "signup") + @IsString({ message: "Mobile number must be a string." }) + @Matches(/^\d{10}$/, { message: "Mobile number must be exactly 10 digits." }) + mobile: string; + + @ApiProperty() + @IsString({ message: "OTP must be a string." }) + @IsValidOtp() // Use the custom validator + otp: string; + + @ApiProperty() + @IsString({ message: "Hash must be a string." }) + @Length(10, 256, { + message: "Hash must be between 10 and 256 characters long.", + }) + hash: string; + + @ApiProperty() + @IsString({ message: "Reason must be a string." }) + @IsIn(["signup", "forgot"], { + message: 'Reason must be either "signup" or "forgot".', + }) + reason: string; + + @ApiProperty() + @ValidateIf((o) => o.reason === "forgot") + @IsString({ message: "Username must be a string." }) + username: string; +} diff --git a/src/user/dto/passwordReset.dto.ts b/src/user/dto/passwordReset.dto.ts index 7e01b3e8..1dbba543 100644 --- a/src/user/dto/passwordReset.dto.ts +++ b/src/user/dto/passwordReset.dto.ts @@ -1,17 +1,16 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; +import { ApiProperty } from "@nestjs/swagger"; +import { IsNotEmpty, IsString } from "class-validator"; export class SendPasswordResetLinkDto { - - @ApiProperty({ type: () => String, example: 'John' }) + @ApiProperty({ type: () => String, example: "John" }) @IsString() @IsNotEmpty() username: string; - @ApiProperty({ type: () => String, example: 'https://example.com' }) + @ApiProperty({ type: () => String, example: "https://example.com" }) @IsString() @IsNotEmpty() - redirectUrl: string + redirectUrl: string; } export class ResetUserPasswordDto { @@ -25,7 +24,6 @@ export class ResetUserPasswordDto { } export class ForgotPasswordDto { - @ApiProperty() @IsString() @IsNotEmpty() @@ -37,10 +35,8 @@ export class ForgotPasswordDto { token: string; } - export class SendPasswordResetOTPDto { - - @ApiProperty({ type: () => String, example: 'John' }) + @ApiProperty({ type: () => String, example: "John" }) @IsString() @IsNotEmpty() username: string; diff --git a/src/user/dto/user-create.dto.ts b/src/user/dto/user-create.dto.ts index f93272f8..fa2a836e 100644 --- a/src/user/dto/user-create.dto.ts +++ b/src/user/dto/user-create.dto.ts @@ -63,16 +63,19 @@ export class FieldValuesOptionDto { } export class AutomaticMemberDto { - @ApiProperty({ type: Boolean, description: 'Indicates whether the member is automatic or not' }) + @ApiProperty({ + type: Boolean, + description: "Indicates whether the member is automatic or not", + }) @Expose() value: boolean; - @ApiProperty({ type: String}) + @ApiProperty({ type: String }) @Expose() @IsUUID(undefined, { message: "Field Id must be a valid UUID" }) fieldId: string; - @ApiProperty({ type: String}) + @ApiProperty({ type: String }) @Expose() @IsString() fieldName: string; @@ -87,20 +90,33 @@ export class UserCreateDto { @IsNotEmpty() username: string; - @ApiProperty({ type: String, description: 'First name of the user', maxLength: 50 }) + @ApiProperty({ + type: String, + description: "First name of the user", + maxLength: 50, + }) @Expose() @IsString() @Length(1, 50) firstName: string; - @ApiPropertyOptional({ type: String, description: 'Middle name of the user (optional)', maxLength: 50, required: false }) + @ApiPropertyOptional({ + type: String, + description: "Middle name of the user (optional)", + maxLength: 50, + required: false, + }) @Expose() @IsOptional() @IsString() @Length(0, 50) middleName?: string; - @ApiProperty({ type: String, description: 'Last name of the user', maxLength: 50 }) + @ApiProperty({ + type: String, + description: "Last name of the user", + maxLength: 50, + }) @Expose() @IsString() @Length(1, 50) @@ -108,14 +124,13 @@ export class UserCreateDto { @ApiProperty({ type: String, - description: 'Gender of the user', - enum: ['male', 'female', 'transgender'] + description: "Gender of the user", + enum: ["male", "female", "transgender"], }) @Expose() - @IsEnum(['male', 'female', 'transgender']) + @IsEnum(["male", "female", "transgender"]) gender: string; - @ApiPropertyOptional({ type: String, description: "The date of Birth of the user", @@ -123,7 +138,7 @@ export class UserCreateDto { @Expose() @IsOptional() @IsDateString() // Ensures it's a valid date format - @NotInFuture({ message: 'The birth date cannot be in the future' }) + @NotInFuture({ message: "The birth date cannot be in the future" }) dob: string; @ApiPropertyOptional({ @@ -188,9 +203,12 @@ export class UserCreateDto { @Expose() updatedBy: string; - @ApiPropertyOptional({ type: () => AutomaticMemberDto, description: 'Details of automatic membership' }) + @ApiPropertyOptional({ + type: () => AutomaticMemberDto, + description: "Details of automatic membership", + }) @Expose() - automaticMember ?: AutomaticMemberDto; + automaticMember?: AutomaticMemberDto; @ApiProperty({ type: [tenantRoleMappingDto], diff --git a/src/user/dto/user-search.dto.ts b/src/user/dto/user-search.dto.ts index d7406477..7e929f6e 100644 --- a/src/user/dto/user-search.dto.ts +++ b/src/user/dto/user-search.dto.ts @@ -60,7 +60,6 @@ export class setFilters { @IsArray() username: string[]; - @ApiProperty({ type: [String], description: " User IDs", @@ -87,17 +86,29 @@ export class setFilters { }) @IsOptional() @IsArray() - @IsEnum(['active', 'inactive'], { each: true }) + @IsEnum(["active", "inactive"], { each: true }) status: string[]; - @ApiPropertyOptional({ type: String, description: 'Start date in YYYY-MM-DD format' }) + @ApiPropertyOptional({ + type: String, + description: "Start date in YYYY-MM-DD format", + }) @IsOptional() - @IsDateString({}, { message: 'fromDate must be a valid date string (YYYY-MM-DD)' }) + @IsDateString( + {}, + { message: "fromDate must be a valid date string (YYYY-MM-DD)" }, + ) fromDate?: string; - @ApiPropertyOptional({ type: String, description: 'End date in YYYY-MM-DD format' }) + @ApiPropertyOptional({ + type: String, + description: "End date in YYYY-MM-DD format", + }) @IsOptional() - @IsDateString({}, { message: 'toDate must be a valid date string (YYYY-MM-DD)' }) + @IsDateString( + {}, + { message: "toDate must be a valid date string (YYYY-MM-DD)" }, + ) toDate?: string; @ApiPropertyOptional({ @@ -169,61 +180,93 @@ export class tenantCohortRoleMappingDto { roleId: string; } -export class SuggestUserDto{ - @ApiProperty({ type: String, description: 'First name of the user', maxLength: 50 }) +export class SuggestUserDto { + @ApiProperty({ + type: String, + description: "First name of the user", + maxLength: 50, + }) @Expose() @IsNotEmpty() @Length(1, 50) firstName: string; - @ApiProperty({ type: String, description: 'Middle name of the user (optional)', maxLength: 50, required: false }) + @ApiProperty({ + type: String, + description: "Middle name of the user (optional)", + maxLength: 50, + required: false, + }) @Expose() @IsOptional() @Length(0, 50) middleName?: string; - @ApiProperty({ type: String, description: 'Last name of the user', maxLength: 50 }) + @ApiProperty({ + type: String, + description: "Last name of the user", + maxLength: 50, + }) @Expose() @IsNotEmpty() @Length(1, 50) lastName: string; - + @ApiPropertyOptional({ type: String, description: "User Name" }) @Expose() @IsNotEmpty() username: string; } -export class ExistUserDto { - @ApiProperty({ type: String, description: 'First name of the user', maxLength: 50 }) - @Expose() - @IsOptional() - @Length(1, 50) - firstName?: string; - - @ApiProperty({ type: String, description: 'Middle name of the user (optional)', maxLength: 50, required: false }) - @Expose() - @IsOptional() - @Length(0, 50) - middleName?: string; - - @ApiProperty({ type: String, description: 'Middle name of the user (optional)', maxLength: 50, required: false }) - @Expose() - @IsOptional() - @Length(0, 50) - lastName?: string; - - @ApiProperty({ type: () => String }) - @IsOptional() - @IsEmail() - email?: string; - - @ApiProperty({ type: () => String, description: 'Mobile number of the user (optional)' }) - @Expose() - @IsOptional() - @IsString({ message: 'Mobile number must be a string' }) - @Matches(/^[0-9]{10}$/, { message: 'Mobile number must be between 10 digits and contain only numbers' }) - mobile?: string; +export class ExistUserDto { + @ApiProperty({ + type: String, + description: "First name of the user", + maxLength: 50, + }) + @Expose() + @IsOptional() + @Length(1, 50) + firstName?: string; + + @ApiProperty({ + type: String, + description: "Middle name of the user (optional)", + maxLength: 50, + required: false, + }) + @Expose() + @IsOptional() + @Length(0, 50) + middleName?: string; + + @ApiProperty({ + type: String, + description: "Middle name of the user (optional)", + maxLength: 50, + required: false, + }) + @Expose() + @IsOptional() + @Length(0, 50) + lastName?: string; + + @ApiProperty({ type: () => String }) + @IsOptional() + @IsEmail() + email?: string; + + @ApiProperty({ + type: () => String, + description: "Mobile number of the user (optional)", + }) + @Expose() + @IsOptional() + @IsString({ message: "Mobile number must be a string" }) + @Matches(/^[0-9]{10}$/, { + message: "Mobile number must be between 10 digits and contain only numbers", + }) + mobile?: string; } export class UserSearchDto { diff --git a/src/user/dto/user-update.dto.ts b/src/user/dto/user-update.dto.ts index 4dc616b3..539bf89c 100644 --- a/src/user/dto/user-update.dto.ts +++ b/src/user/dto/user-update.dto.ts @@ -12,11 +12,11 @@ import { import { Expose, Type } from "class-transformer"; import { UserStatus } from "../entities/user-entity"; import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; -import {AutomaticMemberDto} from "src/user/dto/user-create.dto"; +import { AutomaticMemberDto } from "src/user/dto/user-create.dto"; export enum ActionType { - ADD = 'add', - REMOVE = 'remove', + ADD = "add", + REMOVE = "remove", } class UserDataDTO { @@ -25,21 +25,34 @@ class UserDataDTO { @IsOptional() username: string; - @ApiProperty({ type: String, description: 'First name of the user', maxLength: 50 }) + @ApiProperty({ + type: String, + description: "First name of the user", + maxLength: 50, + }) @Expose() @IsOptional() @IsString() @Length(1, 50) firstName?: string; - @ApiProperty({ type: String, description: 'Middle name of the user (optional)', maxLength: 50, required: false }) + @ApiProperty({ + type: String, + description: "Middle name of the user (optional)", + maxLength: 50, + required: false, + }) @Expose() @IsOptional() @IsString() @Length(0, 50) middleName?: string; - @ApiProperty({ type: String, description: 'Last name of the user', maxLength: 50 }) + @ApiProperty({ + type: String, + description: "Last name of the user", + maxLength: 50, + }) @Expose() @IsOptional() @IsString() @@ -48,11 +61,11 @@ class UserDataDTO { @ApiProperty({ type: String, - description: 'Gender of the user', - enum: ['male', 'female', 'transgender'] + description: "Gender of the user", + enum: ["male", "female", "transgender"], }) @Expose() - @IsEnum(['male', 'female', 'transgender']) + @IsEnum(["male", "female", "transgender"]) @IsOptional() gender?: string; @@ -61,7 +74,11 @@ class UserDataDTO { @IsOptional() role: string; - @ApiProperty({ type: () => String, format: 'date-time', example: '1990-01-01' }) + @ApiProperty({ + type: () => String, + format: "date-time", + example: "1990-01-01", + }) @IsOptional() @Type(() => Date) // Ensures validation correctly parses strings into Date objects @IsDate() @@ -92,13 +109,13 @@ class UserDataDTO { @IsString() pincode: string | null; - @ApiProperty({ type: () => Date, format: 'date-time' }) + @ApiProperty({ type: () => Date, format: "date-time" }) @IsOptional() @Type(() => Date) @IsDate() createdAt: Date; - @ApiProperty({ type: () => Date, format: 'date-time' }) + @ApiProperty({ type: () => Date, format: "date-time" }) @IsOptional() @Type(() => Date) @IsDate() @@ -134,12 +151,14 @@ class UserDataDTO { @IsString() @IsOptional() @ValidateIf((o) => o.action) - @IsNotEmpty({ message: 'deviceId is required when action is provided' }) + @IsNotEmpty({ message: "deviceId is required when action is provided" }) deviceId: string; @ApiProperty({ enum: ActionType, required: false }) @ValidateIf((o) => o.deviceId) - @IsEnum(ActionType, { message: `Action must be either ${Object.values(ActionType).join(' or ')}` }) // Restrict to "add" or "remove" + @IsEnum(ActionType, { + message: `Action must be either ${Object.values(ActionType).join(" or ")}`, + }) // Restrict to "add" or "remove" action: ActionType; } class CustomFieldDTO { @@ -156,7 +175,6 @@ class CustomFieldDTO { value: string | string[]; } - export class UserUpdateDTO { userId: string; @@ -167,7 +185,10 @@ export class UserUpdateDTO { @Type(() => UserDataDTO) userData: UserDataDTO; - @ApiPropertyOptional({ type: () => AutomaticMemberDto, description: 'Details of automatic membership' }) + @ApiPropertyOptional({ + type: () => AutomaticMemberDto, + description: "Details of automatic membership", + }) @Expose() automaticMember?: AutomaticMemberDto; diff --git a/src/user/entities/user-entity.ts b/src/user/entities/user-entity.ts index 25197c40..3c48377e 100644 --- a/src/user/entities/user-entity.ts +++ b/src/user/entities/user-entity.ts @@ -22,19 +22,23 @@ export class User { @Column({ unique: true }) username: string; - @Column({ type: 'varchar', length: 50, nullable: false }) + @Column({ type: "varchar", length: 50, nullable: false }) firstName: string; - @Column({ type: 'varchar', length: 50, nullable: true }) + @Column({ type: "varchar", length: 50, nullable: true }) middleName: string; - @Column({ type: 'varchar', length: 50, nullable: false }) + @Column({ type: "varchar", length: 50, nullable: false }) lastName: string; - @Column({ type: 'enum', enum: ['male', 'female', 'transgender'], nullable: false }) + @Column({ + type: "enum", + enum: ["male", "female", "transgender"], + nullable: false, + }) gender: string; - @Column({ type: 'varchar', length: 50, nullable: false }) + @Column({ type: "varchar", length: 50, nullable: false }) enrollmentId: string; @Column({ type: "date", nullable: true }) @@ -70,7 +74,7 @@ export class User { @Column({ nullable: true }) mobile: number; - @Column('text', { array: true, nullable: true }) + @Column("text", { array: true, nullable: true }) deviceId: string[]; @Column({ nullable: false, default: true }) @@ -99,7 +103,7 @@ export class User { @OneToMany( () => UserTenantMapping, - (userTenantMapping) => userTenantMapping.user + (userTenantMapping) => userTenantMapping.user, ) userTenantMapping: UserTenantMapping[]; } diff --git a/src/user/user.controller.ts b/src/user/user.controller.ts index fbd0fb3b..74993054 100644 --- a/src/user/user.controller.ts +++ b/src/user/user.controller.ts @@ -33,7 +33,11 @@ import { ApiConflictResponse, } from "@nestjs/swagger"; -import { ExistUserDto, SuggestUserDto, UserSearchDto } from "./dto/user-search.dto"; +import { + ExistUserDto, + SuggestUserDto, + UserSearchDto, +} from "./dto/user-search.dto"; import { UserAdapter } from "./useradapter"; import { UserCreateDto } from "./dto/user-create.dto"; import { UserUpdateDTO } from "./dto/user-update.dto"; @@ -66,7 +70,7 @@ export interface UserData { export class UserController { constructor( private userAdapter: UserAdapter, - private readonly uploadS3Service: UploadS3Service + private readonly uploadS3Service: UploadS3Service, ) {} @UseFilters(new AllExceptionsFilter(APIID.USER_GET)) @@ -91,13 +95,13 @@ export class UserController { @Req() request: Request, @Res() response: Response, @Param("userId", ParseUUIDPipe) userId: string, - @Query("fieldvalue") fieldvalue: string | null = null + @Query("fieldvalue") fieldvalue: string | null = null, ) { const tenantId = headers["tenantid"]; if (!tenantId) { LoggerUtil.warn( `${API_RESPONSES.BAD_REQUEST}`, - `Error: Missing tenantId in request headers for user ${userId}` + `Error: Missing tenantId in request headers for user ${userId}`, ); return response .status(400) @@ -137,7 +141,7 @@ export class UserController { @Headers() headers, @Req() request: Request, @Body() userCreateDto: UserCreateDto, - @Res() response: Response + @Res() response: Response, ) { const academicYearId = headers["academicyearid"]; // if (!academicYearId || !isUUID(academicYearId)) { @@ -165,7 +169,7 @@ export class UserController { @Param("userid") userId: string, @GetUserId("loginUserId", ParseUUIDPipe) loginUserId: string, @Body() userUpdateDto: UserUpdateDTO, - @Res() response: Response + @Res() response: Response, ) { userUpdateDto.userData.updatedBy = loginUserId; userUpdateDto.userId = userId; @@ -194,7 +198,7 @@ export class UserController { @Headers() headers, @Req() request: Request, @Res() response: Response, - @Body() userSearchDto: UserSearchDto + @Body() userSearchDto: UserSearchDto, ) { const tenantId = headers["tenantid"]; return await this.userAdapter @@ -209,7 +213,7 @@ export class UserController { public async sendPasswordResetLink( @Req() request: Request, @Res() response: Response, - @Body() reqBody: SendPasswordResetLinkDto + @Body() reqBody: SendPasswordResetLinkDto, ) { return await this.userAdapter .buildUserAdapter() @@ -217,7 +221,7 @@ export class UserController { request, reqBody.username, reqBody.redirectUrl, - response + response, ); } @@ -228,7 +232,7 @@ export class UserController { public async forgotPassword( @Req() request: Request, @Res() response: Response, - @Body() reqBody: ForgotPasswordDto + @Body() reqBody: ForgotPasswordDto, ) { return await this.userAdapter .buildUserAdapter() @@ -246,7 +250,7 @@ export class UserController { public async resetUserPassword( @Req() request: Request, @Res() response: Response, - @Body() reqBody: ResetUserPasswordDto + @Body() reqBody: ResetUserPasswordDto, ) { return await this.userAdapter .buildUserAdapter() @@ -254,7 +258,7 @@ export class UserController { request, reqBody.userName, reqBody.newPassword, - response + response, ); } @@ -266,7 +270,7 @@ export class UserController { async checkUser( @Req() request: Request, @Body() existUserDto: ExistUserDto, - @Res() response: Response + @Res() response: Response, ) { const result = await this.userAdapter .buildUserAdapter() @@ -274,7 +278,6 @@ export class UserController { return response.status(result.statusCode).json(result); } - // required for FTL @UseFilters(new AllExceptionsFilter(APIID.SUGGEST_USERNAME)) @Post("/suggestUsername") @@ -285,7 +288,7 @@ export class UserController { async suggestUsername( @Req() request: Request, @Body() suggestUserDto: SuggestUserDto, - @Res() response: Response + @Res() response: Response, ) { const result = await this.userAdapter .buildUserAdapter() @@ -293,7 +296,6 @@ export class UserController { return response.status(result.statusCode).json(result); } - //delete @UseFilters(new AllExceptionsFilter(APIID.USER_DELETE)) @Delete("delete/:userId") @@ -308,7 +310,7 @@ export class UserController { @Headers() headers, @Param("userId") userId: string, @Req() request: Request, - @Res() response: Response + @Res() response: Response, ) { return await this.userAdapter .buildUserAdapter() @@ -340,7 +342,7 @@ export class UserController { public async sendPasswordResetOTP( @Req() request: Request, @Res() response: Response, - @Body() reqBody: SendPasswordResetOTPDto + @Body() reqBody: SendPasswordResetOTPDto, ) { return await this.userAdapter .buildUserAdapter() @@ -351,13 +353,13 @@ export class UserController { @Query("filename") filename: string, @Query("foldername") foldername: string, @Query("fileType") fileType: string, - @Res() response + @Res() response, ) { const url = await this.uploadS3Service.getPresignedUrl( filename, fileType, response, - foldername + foldername, ); return { url }; } diff --git a/src/userTenantMapping/user-tenant-mapping.adapter.ts b/src/userTenantMapping/user-tenant-mapping.adapter.ts index 59ccf4f7..c389b14a 100644 --- a/src/userTenantMapping/user-tenant-mapping.adapter.ts +++ b/src/userTenantMapping/user-tenant-mapping.adapter.ts @@ -14,7 +14,7 @@ export class AssignTenantAdapter { break; default: throw new Error( - "Invalid ADAPTERSOURCE environment variable. Please specify either 'hasura' or 'postgres'." + "Invalid ADAPTERSOURCE environment variable. Please specify either 'hasura' or 'postgres'.", ); } return adapter; diff --git a/src/userTenantMapping/user-tenant-mapping.controller.ts b/src/userTenantMapping/user-tenant-mapping.controller.ts index 833f46f9..c62954e0 100644 --- a/src/userTenantMapping/user-tenant-mapping.controller.ts +++ b/src/userTenantMapping/user-tenant-mapping.controller.ts @@ -58,7 +58,7 @@ export class AssignTenantController { @Headers() headers, @Req() request: Request, @Body() userTenantMappingDto: UserTenantMappingDto, - @Res() response: Response + @Res() response: Response, ) { return await this.assignTenantAdapter .buildAssignTenantAdapter() diff --git a/src/userTenantMapping/user-tenant-mapping.module.ts b/src/userTenantMapping/user-tenant-mapping.module.ts index 2dee9169..92e4af1b 100644 --- a/src/userTenantMapping/user-tenant-mapping.module.ts +++ b/src/userTenantMapping/user-tenant-mapping.module.ts @@ -1,4 +1,5 @@ -import { HttpModule, Module } from "@nestjs/common"; +import { Module,} from "@nestjs/common"; +import { HttpModule } from "@nestjs/axios"; import { AssignTenantController } from "./user-tenant-mapping.controller"; import { TypeOrmModule } from "@nestjs/typeorm"; import { UserTenantMapping } from "./entities/user-tenant-mapping.entity"; diff --git a/src/utils/dob-not-in-future.validator.ts b/src/utils/dob-not-in-future.validator.ts index 80143bc9..d3c2695f 100644 --- a/src/utils/dob-not-in-future.validator.ts +++ b/src/utils/dob-not-in-future.validator.ts @@ -1,28 +1,33 @@ -import { registerDecorator, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'; +import { + registerDecorator, + ValidationOptions, + ValidatorConstraint, + ValidatorConstraintInterface, +} from "class-validator"; @ValidatorConstraint({ async: false }) export class NotInFutureConstraint implements ValidatorConstraintInterface { - validate(value: any): boolean { - if (!value) return false; // Ensure value exists - const today = new Date(); - today.setHours(0, 0, 0, 0); // Normalize to start of the day - const inputDate = new Date(value); - return inputDate <= today; // Must be today or in the past - } + validate(value: any): boolean { + if (!value) return false; // Ensure value exists + const today = new Date(); + today.setHours(0, 0, 0, 0); // Normalize to start of the day + const inputDate = new Date(value); + return inputDate <= today; // Must be today or in the past + } - defaultMessage(): string { - return 'Date cannot be in the future'; - } + defaultMessage(): string { + return "Date cannot be in the future"; + } } export function NotInFuture(validationOptions?: ValidationOptions) { - return function (object: Object, propertyName: string) { - registerDecorator({ - target: object.constructor, - propertyName: propertyName, - options: validationOptions, - constraints: [], - validator: NotInFutureConstraint, - }); - }; + return function (object: Object, propertyName: string) { + registerDecorator({ + target: object.constructor, + propertyName: propertyName, + options: validationOptions, + constraints: [], + validator: NotInFutureConstraint, + }); + }; } diff --git a/src/utils/response.ts b/src/utils/response.ts index 6e26d0d1..b1901d7c 100644 --- a/src/utils/response.ts +++ b/src/utils/response.ts @@ -1,7 +1,6 @@ import { v4 as uuidv4 } from "uuid"; import { HttpStatus } from "@nestjs/common"; - // Response structure interface export interface ServerResponse { id: string; @@ -43,7 +42,11 @@ export default class APIResponse { } private static readonly API_VERSION = "1.0"; // Set version as a constant - public static success(id: string, result: T, statusCode: HttpStatus = HttpStatus.OK): ServerResponse { + public static success( + id: string, + result: T, + statusCode: HttpStatus = HttpStatus.OK, + ): ServerResponse { return { id, ver: APIResponse.API_VERSION, @@ -59,7 +62,12 @@ export default class APIResponse { }; } - public static error(id: string, errmsg: string, errorCode: string, statusCode: HttpStatus): ServerResponse { + public static error( + id: string, + errmsg: string, + errorCode: string, + statusCode: HttpStatus, + ): ServerResponse { return { id, ver: APIResponse.API_VERSION,