diff --git a/package.json b/package.json index 946ef5c9..4fcdb011 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,8 @@ "orm": "npx mikro-orm" }, "dependencies": { - "@aws-sdk/client-s3": "^3.405.0", - "@aws-sdk/client-ses": "^3.405.0", + "@aws-sdk/client-s3": "^3.409.0", + "@aws-sdk/client-ses": "^3.409.0", "@casl/ability": "^6.5.0", "@golevelup/nestjs-rabbitmq": "^4.0.0", "@golevelup/nestjs-stripe": "^0.6.3", @@ -77,12 +77,12 @@ "@nestjs/serve-static": "^4.0.0", "@nestjs/swagger": "^7.1.10", "@nestjs/terminus": "^10.0.1", - "@nestjs/throttler": "^4.2.1", + "@nestjs/throttler": "^5.0.0", "@nestjs/websockets": "^10.2.4", "@ntegral/nestjs-sentry": "^4.0.0", "@paralleldrive/cuid2": "^2.2.2", - "@sentry/hub": "^7.66.0", - "@sentry/node": "^7.66.0", + "@sentry/hub": "^7.68.0", + "@sentry/node": "^7.68.0", "@socket.io/redis-adapter": "^8.2.1", "@supercharge/request-ip": "^1.2.0", "argon2": "^0.31.1", @@ -97,7 +97,7 @@ "firebase-admin": "^11.10.1", "handlebars": "^4.7.8", "helmet": "^7.0.0", - "helper-fns": "^2.6.18", + "helper-fns": "^2.6.21", "ioredis": "^5.3.2", "isomorphic-dompurify": "^1.8.0", "joi": "^17.10.1", @@ -108,8 +108,8 @@ "nestjs-i18n": "^10.3.1", "nestjs-minio": "^2.5.0", "nestjs-pino": "^3.4.0", - "nestjs-throttler-storage-redis": "^0.3.3", - "nodemailer": "^6.9.4", + "nestjs-throttler-storage-redis": "^0.4.0", + "nodemailer": "^6.9.5", "otplib": "^12.0.1", "passport": "0.6.0", "passport-facebook": "^3.0.0", @@ -118,7 +118,7 @@ "passport-magic-login": "^1.2.2", "pino-http": "^8.5.0", "pino-pretty": "^10.2.0", - "poolifier": "^2.6.41", + "poolifier": "^2.6.44", "preview-email": "^3.0.19", "prom-client": "^14.2.0", "pug": "^3.0.2", @@ -128,10 +128,10 @@ "reflect-metadata": "0.1.13", "rxjs": "^7.8.1", "socket.io": "^4.7.2", - "stripe": "^13.4.0", + "stripe": "^13.5.0", "swagger-stats": "^0.99.7", - "twilio": "4.16.0", - "unprofane": "^1.0.3", + "twilio": "4.17.0", + "unprofane": "^1.0.4", "url-minify": "^2.8.4" }, "devDependencies": { @@ -145,9 +145,9 @@ "@nestjs/testing": "10.2.4", "@rubiin/eslint-config-typescript": "^1.0.26", "@rubiin/tsconfig": "^1.0.2", - "@sentry/types": "^7.66.0", + "@sentry/types": "^7.68.0", "@side/jest-runtime": "^1.1.0", - "@swc/core": "^1.3.82", + "@swc/core": "^1.3.83", "@swc/jest": "^0.2.29", "@total-typescript/ts-reset": "^0.5.1", "@types/cache-manager": "^4.0.3", @@ -156,7 +156,7 @@ "@types/jest": "^29.5.4", "@types/mime-types": "^2.1.1", "@types/multer": "^1.4.7", - "@types/node": "^20.5.9", + "@types/node": "^20.6.0", "@types/nodemailer": "^6.4.9", "@types/passport": "^1.0.12", "@types/passport-facebook": "^3.0.0", @@ -174,7 +174,7 @@ "@typescript-eslint/parser": "^6.6.0", "cross-env": "^7.0.3", "cz-conventional-changelog": "3.3.0", - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-define-config": "^1.23.0", "eslint-import-resolver-typescript": "^3.6.0", "eslint-plugin-deprecation": "^1.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ebda13a..878f26d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,11 +6,11 @@ settings: dependencies: '@aws-sdk/client-s3': - specifier: ^3.405.0 - version: 3.405.0 + specifier: ^3.409.0 + version: 3.409.0 '@aws-sdk/client-ses': - specifier: ^3.405.0 - version: 3.405.0 + specifier: ^3.409.0 + version: 3.409.0 '@casl/ability': specifier: ^6.5.0 version: 6.5.0 @@ -19,7 +19,7 @@ dependencies: version: 4.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@golevelup/nestjs-stripe': specifier: ^0.6.3 - version: 0.6.3(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(rxjs@7.8.1)(stripe@13.4.0) + version: 0.6.3(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(rxjs@7.8.1)(stripe@13.5.0) '@golevelup/nestjs-webhooks': specifier: ^0.2.16 version: 0.2.16(@nestjs/common@10.2.4)(body-parser@1.20.2)(rxjs@7.8.1) @@ -84,23 +84,23 @@ dependencies: specifier: ^10.0.1 version: 10.0.1(@mikro-orm/core@5.7.14)(@mikro-orm/nestjs@5.2.1)(@nestjs/axios@3.0.0)(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/throttler': - specifier: ^4.2.1 - version: 4.2.1(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13) + specifier: ^5.0.0 + version: 5.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13) '@nestjs/websockets': specifier: ^10.2.4 version: 10.2.4(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@nestjs/platform-socket.io@10.2.4)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@ntegral/nestjs-sentry': specifier: ^4.0.0 - version: 4.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@sentry/hub@7.66.0)(@sentry/node@7.66.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.8.0)(reflect-metadata@0.1.13)(rimraf@3.0.2)(rxjs@7.8.1) + version: 4.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@sentry/hub@7.68.0)(@sentry/node@7.68.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.8.0)(reflect-metadata@0.1.13)(rimraf@3.0.2)(rxjs@7.8.1) '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 '@sentry/hub': - specifier: ^7.66.0 - version: 7.66.0 + specifier: ^7.68.0 + version: 7.68.0 '@sentry/node': - specifier: ^7.66.0 - version: 7.66.0 + specifier: ^7.68.0 + version: 7.68.0 '@socket.io/redis-adapter': specifier: ^8.2.1 version: 8.2.1(socket.io-adapter@2.5.2) @@ -144,8 +144,8 @@ dependencies: specifier: ^7.0.0 version: 7.0.0 helper-fns: - specifier: ^2.6.18 - version: 2.6.18 + specifier: ^2.6.21 + version: 2.6.21 ioredis: specifier: ^5.3.2 version: 5.3.2 @@ -177,11 +177,11 @@ dependencies: specifier: ^3.4.0 version: 3.4.0(@nestjs/common@10.2.4)(pino-http@8.5.0) nestjs-throttler-storage-redis: - specifier: ^0.3.3 - version: 0.3.3(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@nestjs/throttler@4.2.1)(ioredis@5.3.2)(reflect-metadata@0.1.13) + specifier: ^0.4.0 + version: 0.4.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@nestjs/throttler@5.0.0)(ioredis@5.3.2)(reflect-metadata@0.1.13) nodemailer: - specifier: ^6.9.4 - version: 6.9.4 + specifier: ^6.9.5 + version: 6.9.5 otplib: specifier: ^12.0.1 version: 12.0.1 @@ -207,8 +207,8 @@ dependencies: specifier: ^10.2.0 version: 10.2.0 poolifier: - specifier: ^2.6.41 - version: 2.6.41 + specifier: ^2.6.44 + version: 2.6.44 preview-email: specifier: ^3.0.19 version: 3.0.19 @@ -237,17 +237,17 @@ dependencies: specifier: ^4.7.2 version: 4.7.2 stripe: - specifier: ^13.4.0 - version: 13.4.0 + specifier: ^13.5.0 + version: 13.5.0 swagger-stats: specifier: ^0.99.7 version: 0.99.7(prom-client@14.2.0) twilio: - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 unprofane: - specifier: ^1.0.3 - version: 1.0.3 + specifier: ^1.0.4 + version: 1.0.4 url-minify: specifier: ^2.8.4 version: 2.8.4 @@ -270,7 +270,7 @@ devDependencies: version: 5.7.14(@mikro-orm/core@5.7.14) '@nestjs/cli': specifier: 10.1.17 - version: 10.1.17(@swc/core@1.3.82) + version: 10.1.17(@swc/core@1.3.83) '@nestjs/schematics': specifier: 10.0.2 version: 10.0.2(typescript@5.2.2) @@ -284,17 +284,17 @@ devDependencies: specifier: ^1.0.2 version: 1.0.2 '@sentry/types': - specifier: ^7.66.0 - version: 7.66.0 + specifier: ^7.68.0 + version: 7.68.0 '@side/jest-runtime': specifier: ^1.1.0 version: 1.1.0(@jest/transform@29.6.4)(jest-runtime@29.6.4)(jest@29.6.4) '@swc/core': - specifier: ^1.3.82 - version: 1.3.82 + specifier: ^1.3.83 + version: 1.3.83 '@swc/jest': specifier: ^0.2.29 - version: 0.2.29(@swc/core@1.3.82) + version: 0.2.29(@swc/core@1.3.83) '@total-typescript/ts-reset': specifier: ^0.5.1 version: 0.5.1 @@ -317,8 +317,8 @@ devDependencies: specifier: ^1.4.7 version: 1.4.7 '@types/node': - specifier: ^20.5.9 - version: 20.5.9 + specifier: ^20.6.0 + version: 20.6.0 '@types/nodemailer': specifier: ^6.4.9 version: 6.4.9 @@ -360,37 +360,37 @@ devDependencies: version: 4.1.3 '@typescript-eslint/eslint-plugin': specifier: ^6.6.0 - version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2) + version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2) '@typescript-eslint/parser': specifier: ^6.6.0 - version: 6.6.0(eslint@8.48.0)(typescript@5.2.2) + version: 6.6.0(eslint@8.49.0)(typescript@5.2.2) cross-env: specifier: ^7.0.3 version: 7.0.3 cz-conventional-changelog: specifier: 3.3.0 - version: 3.3.0(@swc/core@1.3.82) + version: 3.3.0(@swc/core@1.3.83) eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.49.0 + version: 8.49.0 eslint-define-config: specifier: ^1.23.0 version: 1.23.0 eslint-import-resolver-typescript: specifier: ^3.6.0 - version: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0) + version: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0) eslint-plugin-deprecation: specifier: ^1.5.0 - version: 1.5.0(eslint@8.48.0)(typescript@5.2.2) + version: 1.5.0(eslint@8.49.0)(typescript@5.2.2) eslint-plugin-import: specifier: ^2.28.1 - version: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + version: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) eslint-plugin-jest: specifier: ^27.2.3 - version: 27.2.3(@typescript-eslint/eslint-plugin@6.6.0)(eslint@8.48.0)(jest@29.6.4)(typescript@5.2.2) + version: 27.2.3(@typescript-eslint/eslint-plugin@6.6.0)(eslint@8.49.0)(jest@29.6.4)(typescript@5.2.2) eslint-plugin-unicorn: specifier: ^48.0.1 - version: 48.0.1(eslint@8.48.0) + version: 48.0.1(eslint@8.49.0) eslint_d: specifier: ^12.2.1 version: 12.2.1 @@ -399,7 +399,7 @@ devDependencies: version: 8.0.3 jest: specifier: 29.6.4 - version: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + version: 29.6.4(@types/node@20.6.0)(ts-node@10.9.1) lint-staged: specifier: ^14.0.1 version: 14.0.1 @@ -417,7 +417,7 @@ devDependencies: version: 9.4.4(typescript@5.2.2)(webpack@5.88.2) ts-node: specifier: 10.9.1 - version: 10.9.1(@swc/core@1.3.82)(@types/node@20.5.9)(typescript@5.2.2) + version: 10.9.1(@swc/core@1.3.83)(@types/node@20.6.0)(typescript@5.2.2) tsconfig-paths: specifier: 4.2.0 version: 4.2.0 @@ -426,7 +426,7 @@ devDependencies: version: 5.2.2 webpack: specifier: ^5.88.2 - version: 5.88.2(@swc/core@1.3.82) + version: 5.88.2(@swc/core@1.3.83) webpack-node-externals: specifier: ^3.0.0 version: 3.0.0 @@ -525,7 +525,7 @@ packages: resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 tslib: 1.14.1 dev: false @@ -533,7 +533,7 @@ packages: resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 tslib: 1.14.1 dev: false @@ -549,7 +549,7 @@ packages: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@aws-sdk/util-locate-window': 3.310.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -562,7 +562,7 @@ packages: '@aws-crypto/sha256-js': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@aws-sdk/util-locate-window': 3.310.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -572,7 +572,7 @@ packages: resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 tslib: 1.14.1 dev: false @@ -585,67 +585,67 @@ packages: /@aws-crypto/util@3.0.0: resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: false - /@aws-sdk/client-s3@3.405.0: - resolution: {integrity: sha512-+LK6OCbKplR51zBZAtK/+RxaPsXcEklsA1+mmUA3M1h4KHl6GMiK5r/D9dlKht5DRntmmjCn3SI99QbfckqKXg==} + /@aws-sdk/client-s3@3.409.0: + resolution: {integrity: sha512-Skko8MOYx7ou6drisZjyQNU7DzPJulKQQHjQiCsfHQaePeBRvn0FH9yreRy0PupJ8QG+Y6sIeXxvOA0Gt0RfAQ==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.405.0 - '@aws-sdk/credential-provider-node': 3.405.0 - '@aws-sdk/middleware-bucket-endpoint': 3.405.0 - '@aws-sdk/middleware-expect-continue': 3.398.0 - '@aws-sdk/middleware-flexible-checksums': 3.400.0 - '@aws-sdk/middleware-host-header': 3.398.0 - '@aws-sdk/middleware-location-constraint': 3.398.0 - '@aws-sdk/middleware-logger': 3.398.0 - '@aws-sdk/middleware-recursion-detection': 3.398.0 - '@aws-sdk/middleware-sdk-s3': 3.398.0 - '@aws-sdk/middleware-signing': 3.398.0 - '@aws-sdk/middleware-ssec': 3.398.0 - '@aws-sdk/middleware-user-agent': 3.398.0 - '@aws-sdk/signature-v4-multi-region': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@aws-sdk/util-endpoints': 3.398.0 - '@aws-sdk/util-user-agent-browser': 3.398.0 - '@aws-sdk/util-user-agent-node': 3.405.0 + '@aws-sdk/client-sts': 3.409.0 + '@aws-sdk/credential-provider-node': 3.409.0 + '@aws-sdk/middleware-bucket-endpoint': 3.409.0 + '@aws-sdk/middleware-expect-continue': 3.408.0 + '@aws-sdk/middleware-flexible-checksums': 3.408.0 + '@aws-sdk/middleware-host-header': 3.408.0 + '@aws-sdk/middleware-location-constraint': 3.408.0 + '@aws-sdk/middleware-logger': 3.408.0 + '@aws-sdk/middleware-recursion-detection': 3.408.0 + '@aws-sdk/middleware-sdk-s3': 3.408.0 + '@aws-sdk/middleware-signing': 3.408.0 + '@aws-sdk/middleware-ssec': 3.408.0 + '@aws-sdk/middleware-user-agent': 3.408.0 + '@aws-sdk/signature-v4-multi-region': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@aws-sdk/util-endpoints': 3.408.0 + '@aws-sdk/util-user-agent-browser': 3.408.0 + '@aws-sdk/util-user-agent-node': 3.408.0 '@aws-sdk/xml-builder': 3.310.0 - '@smithy/config-resolver': 2.0.5 - '@smithy/eventstream-serde-browser': 2.0.5 - '@smithy/eventstream-serde-config-resolver': 2.0.5 - '@smithy/eventstream-serde-node': 2.0.5 - '@smithy/fetch-http-handler': 2.0.5 - '@smithy/hash-blob-browser': 2.0.5 - '@smithy/hash-node': 2.0.5 - '@smithy/hash-stream-node': 2.0.5 - '@smithy/invalid-dependency': 2.0.5 - '@smithy/md5-js': 2.0.5 - '@smithy/middleware-content-length': 2.0.5 - '@smithy/middleware-endpoint': 2.0.5 - '@smithy/middleware-retry': 2.0.5 - '@smithy/middleware-serde': 2.0.5 + '@smithy/config-resolver': 2.0.7 + '@smithy/eventstream-serde-browser': 2.0.6 + '@smithy/eventstream-serde-config-resolver': 2.0.6 + '@smithy/eventstream-serde-node': 2.0.6 + '@smithy/fetch-http-handler': 2.1.2 + '@smithy/hash-blob-browser': 2.0.6 + '@smithy/hash-node': 2.0.6 + '@smithy/hash-stream-node': 2.0.6 + '@smithy/invalid-dependency': 2.0.6 + '@smithy/md5-js': 2.0.6 + '@smithy/middleware-content-length': 2.0.8 + '@smithy/middleware-endpoint': 2.0.6 + '@smithy/middleware-retry': 2.0.9 + '@smithy/middleware-serde': 2.0.6 '@smithy/middleware-stack': 2.0.0 - '@smithy/node-config-provider': 2.0.7 - '@smithy/node-http-handler': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/node-http-handler': 2.1.2 '@smithy/protocol-http': 2.0.5 - '@smithy/smithy-client': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/smithy-client': 2.1.3 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.6 - '@smithy/util-defaults-mode-node': 2.0.7 + '@smithy/util-defaults-mode-browser': 2.0.7 + '@smithy/util-defaults-mode-node': 2.0.9 '@smithy/util-retry': 2.0.0 - '@smithy/util-stream': 2.0.5 + '@smithy/util-stream': 2.0.9 '@smithy/util-utf8': 2.0.0 - '@smithy/util-waiter': 2.0.5 + '@smithy/util-waiter': 2.0.6 fast-xml-parser: 4.2.5 tslib: 2.6.2 transitivePeerDependencies: @@ -653,86 +653,86 @@ packages: - aws-crt dev: false - /@aws-sdk/client-ses@3.405.0: - resolution: {integrity: sha512-kaK3jJNjPSddjDThm7HoMDP/852eiwF9+OPTsOcds0XhMKiUipfnUW6NisMkcnDwrH/1A4xqEJVxn22cTNx+Tg==} + /@aws-sdk/client-ses@3.409.0: + resolution: {integrity: sha512-ON9TBGRl/DZ41zxTaplYpswDth9jEbVkxsy74nCaIfJ6VjJJ7MyEuZLeicK71qycdlnc0Fg9cmvY1qB+0jc3/Q==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.405.0 - '@aws-sdk/credential-provider-node': 3.405.0 - '@aws-sdk/middleware-host-header': 3.398.0 - '@aws-sdk/middleware-logger': 3.398.0 - '@aws-sdk/middleware-recursion-detection': 3.398.0 - '@aws-sdk/middleware-signing': 3.398.0 - '@aws-sdk/middleware-user-agent': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@aws-sdk/util-endpoints': 3.398.0 - '@aws-sdk/util-user-agent-browser': 3.398.0 - '@aws-sdk/util-user-agent-node': 3.405.0 - '@smithy/config-resolver': 2.0.5 - '@smithy/fetch-http-handler': 2.0.5 - '@smithy/hash-node': 2.0.5 - '@smithy/invalid-dependency': 2.0.5 - '@smithy/middleware-content-length': 2.0.5 - '@smithy/middleware-endpoint': 2.0.5 - '@smithy/middleware-retry': 2.0.5 - '@smithy/middleware-serde': 2.0.5 + '@aws-sdk/client-sts': 3.409.0 + '@aws-sdk/credential-provider-node': 3.409.0 + '@aws-sdk/middleware-host-header': 3.408.0 + '@aws-sdk/middleware-logger': 3.408.0 + '@aws-sdk/middleware-recursion-detection': 3.408.0 + '@aws-sdk/middleware-signing': 3.408.0 + '@aws-sdk/middleware-user-agent': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@aws-sdk/util-endpoints': 3.408.0 + '@aws-sdk/util-user-agent-browser': 3.408.0 + '@aws-sdk/util-user-agent-node': 3.408.0 + '@smithy/config-resolver': 2.0.7 + '@smithy/fetch-http-handler': 2.1.2 + '@smithy/hash-node': 2.0.6 + '@smithy/invalid-dependency': 2.0.6 + '@smithy/middleware-content-length': 2.0.8 + '@smithy/middleware-endpoint': 2.0.6 + '@smithy/middleware-retry': 2.0.9 + '@smithy/middleware-serde': 2.0.6 '@smithy/middleware-stack': 2.0.0 - '@smithy/node-config-provider': 2.0.7 - '@smithy/node-http-handler': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/node-http-handler': 2.1.2 '@smithy/protocol-http': 2.0.5 - '@smithy/smithy-client': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/smithy-client': 2.1.3 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.6 - '@smithy/util-defaults-mode-node': 2.0.7 + '@smithy/util-defaults-mode-browser': 2.0.7 + '@smithy/util-defaults-mode-node': 2.0.9 '@smithy/util-retry': 2.0.0 '@smithy/util-utf8': 2.0.0 - '@smithy/util-waiter': 2.0.5 + '@smithy/util-waiter': 2.0.6 fast-xml-parser: 4.2.5 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/client-sso@3.405.0: - resolution: {integrity: sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==} + /@aws-sdk/client-sso@3.409.0: + resolution: {integrity: sha512-vlXcIzcmUhObuEJ6q3lsp1ZHeDeD9bUrG3dmdSTeII4U6A9imgvaXONWI9GFEUsgzCrrCxtCqBX2RqMfZDhylw==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/middleware-host-header': 3.398.0 - '@aws-sdk/middleware-logger': 3.398.0 - '@aws-sdk/middleware-recursion-detection': 3.398.0 - '@aws-sdk/middleware-user-agent': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@aws-sdk/util-endpoints': 3.398.0 - '@aws-sdk/util-user-agent-browser': 3.398.0 - '@aws-sdk/util-user-agent-node': 3.405.0 - '@smithy/config-resolver': 2.0.5 - '@smithy/fetch-http-handler': 2.0.5 - '@smithy/hash-node': 2.0.5 - '@smithy/invalid-dependency': 2.0.5 - '@smithy/middleware-content-length': 2.0.5 - '@smithy/middleware-endpoint': 2.0.5 - '@smithy/middleware-retry': 2.0.5 - '@smithy/middleware-serde': 2.0.5 + '@aws-sdk/middleware-host-header': 3.408.0 + '@aws-sdk/middleware-logger': 3.408.0 + '@aws-sdk/middleware-recursion-detection': 3.408.0 + '@aws-sdk/middleware-user-agent': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@aws-sdk/util-endpoints': 3.408.0 + '@aws-sdk/util-user-agent-browser': 3.408.0 + '@aws-sdk/util-user-agent-node': 3.408.0 + '@smithy/config-resolver': 2.0.7 + '@smithy/fetch-http-handler': 2.1.2 + '@smithy/hash-node': 2.0.6 + '@smithy/invalid-dependency': 2.0.6 + '@smithy/middleware-content-length': 2.0.8 + '@smithy/middleware-endpoint': 2.0.6 + '@smithy/middleware-retry': 2.0.9 + '@smithy/middleware-serde': 2.0.6 '@smithy/middleware-stack': 2.0.0 - '@smithy/node-config-provider': 2.0.7 - '@smithy/node-http-handler': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/node-http-handler': 2.1.2 '@smithy/protocol-http': 2.0.5 - '@smithy/smithy-client': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/smithy-client': 2.1.3 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.6 - '@smithy/util-defaults-mode-node': 2.0.7 + '@smithy/util-defaults-mode-browser': 2.0.7 + '@smithy/util-defaults-mode-node': 2.0.9 '@smithy/util-retry': 2.0.0 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 @@ -740,43 +740,43 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sts@3.405.0: - resolution: {integrity: sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==} + /@aws-sdk/client-sts@3.409.0: + resolution: {integrity: sha512-yNL9zYWDVIOWZhIlsy2tiHetSYvio5ZVJ3nvR4xWPTwqOQveZx/K0PTK+nh6T6w5R3w5IOSKvd+vPCpY4bGx8Q==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/credential-provider-node': 3.405.0 - '@aws-sdk/middleware-host-header': 3.398.0 - '@aws-sdk/middleware-logger': 3.398.0 - '@aws-sdk/middleware-recursion-detection': 3.398.0 - '@aws-sdk/middleware-sdk-sts': 3.398.0 - '@aws-sdk/middleware-signing': 3.398.0 - '@aws-sdk/middleware-user-agent': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@aws-sdk/util-endpoints': 3.398.0 - '@aws-sdk/util-user-agent-browser': 3.398.0 - '@aws-sdk/util-user-agent-node': 3.405.0 - '@smithy/config-resolver': 2.0.5 - '@smithy/fetch-http-handler': 2.0.5 - '@smithy/hash-node': 2.0.5 - '@smithy/invalid-dependency': 2.0.5 - '@smithy/middleware-content-length': 2.0.5 - '@smithy/middleware-endpoint': 2.0.5 - '@smithy/middleware-retry': 2.0.5 - '@smithy/middleware-serde': 2.0.5 + '@aws-sdk/credential-provider-node': 3.409.0 + '@aws-sdk/middleware-host-header': 3.408.0 + '@aws-sdk/middleware-logger': 3.408.0 + '@aws-sdk/middleware-recursion-detection': 3.408.0 + '@aws-sdk/middleware-sdk-sts': 3.408.0 + '@aws-sdk/middleware-signing': 3.408.0 + '@aws-sdk/middleware-user-agent': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@aws-sdk/util-endpoints': 3.408.0 + '@aws-sdk/util-user-agent-browser': 3.408.0 + '@aws-sdk/util-user-agent-node': 3.408.0 + '@smithy/config-resolver': 2.0.7 + '@smithy/fetch-http-handler': 2.1.2 + '@smithy/hash-node': 2.0.6 + '@smithy/invalid-dependency': 2.0.6 + '@smithy/middleware-content-length': 2.0.8 + '@smithy/middleware-endpoint': 2.0.6 + '@smithy/middleware-retry': 2.0.9 + '@smithy/middleware-serde': 2.0.6 '@smithy/middleware-stack': 2.0.0 - '@smithy/node-config-provider': 2.0.7 - '@smithy/node-http-handler': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/node-http-handler': 2.1.2 '@smithy/protocol-http': 2.0.5 - '@smithy/smithy-client': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/smithy-client': 2.1.3 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.6 - '@smithy/util-defaults-mode-node': 2.0.7 + '@smithy/util-defaults-mode-browser': 2.0.7 + '@smithy/util-defaults-mode-node': 2.0.9 '@smithy/util-retry': 2.0.0 '@smithy/util-utf8': 2.0.0 fast-xml-parser: 4.2.5 @@ -785,219 +785,220 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-env@3.398.0: - resolution: {integrity: sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==} + /@aws-sdk/credential-provider-env@3.408.0: + resolution: {integrity: sha512-GCpgHEHxRTzKaMkwDC2gLb3xlD+ZxhKPUJ1DVcO7I9E3eCGJsYVedIi0/2XE+NP+HVoy8LyW2qH8QQWh64JKow==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/property-provider': 2.0.5 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/property-provider': 2.0.7 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/credential-provider-ini@3.405.0: - resolution: {integrity: sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==} + /@aws-sdk/credential-provider-ini@3.409.0: + resolution: {integrity: sha512-Z7hb0Kj0FuqD5HimDrtt0LRjKBHA5pvLcTYYdVorJovaBxEvfDpISSDVRIUmvhMGAlv7XezbvqESOU5cn0Gpzw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/credential-provider-env': 3.398.0 - '@aws-sdk/credential-provider-process': 3.405.0 - '@aws-sdk/credential-provider-sso': 3.405.0 - '@aws-sdk/credential-provider-web-identity': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@smithy/credential-provider-imds': 2.0.5 - '@smithy/property-provider': 2.0.5 - '@smithy/shared-ini-file-loader': 2.0.6 - '@smithy/types': 2.2.2 + '@aws-sdk/credential-provider-env': 3.408.0 + '@aws-sdk/credential-provider-process': 3.408.0 + '@aws-sdk/credential-provider-sso': 3.409.0 + '@aws-sdk/credential-provider-web-identity': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@smithy/credential-provider-imds': 2.0.9 + '@smithy/property-provider': 2.0.7 + '@smithy/shared-ini-file-loader': 2.0.8 + '@smithy/types': 2.3.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/credential-provider-node@3.405.0: - resolution: {integrity: sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==} + /@aws-sdk/credential-provider-node@3.409.0: + resolution: {integrity: sha512-kXmfBVYnHoEAACo6zskEryDSgMSo1QYiv6P8n6Go/RsJHe4Ec+YtrOMLg3hTOptiIGHOTWZ1ANaU/IfIxmqumA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/credential-provider-env': 3.398.0 - '@aws-sdk/credential-provider-ini': 3.405.0 - '@aws-sdk/credential-provider-process': 3.405.0 - '@aws-sdk/credential-provider-sso': 3.405.0 - '@aws-sdk/credential-provider-web-identity': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@smithy/credential-provider-imds': 2.0.5 - '@smithy/property-provider': 2.0.5 - '@smithy/shared-ini-file-loader': 2.0.6 - '@smithy/types': 2.2.2 + '@aws-sdk/credential-provider-env': 3.408.0 + '@aws-sdk/credential-provider-ini': 3.409.0 + '@aws-sdk/credential-provider-process': 3.408.0 + '@aws-sdk/credential-provider-sso': 3.409.0 + '@aws-sdk/credential-provider-web-identity': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@smithy/credential-provider-imds': 2.0.9 + '@smithy/property-provider': 2.0.7 + '@smithy/shared-ini-file-loader': 2.0.8 + '@smithy/types': 2.3.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/credential-provider-process@3.405.0: - resolution: {integrity: sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==} + /@aws-sdk/credential-provider-process@3.408.0: + resolution: {integrity: sha512-qCTf9tr6+I2s3+v5zP4YRQQrGlYw/jyZ7u/k6bGshhlvgwGPfjNuHrM8uK/W1kv4ng1myxaL1/tAY6RVVdXz4Q==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/property-provider': 2.0.5 - '@smithy/shared-ini-file-loader': 2.0.6 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/property-provider': 2.0.7 + '@smithy/shared-ini-file-loader': 2.0.8 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/credential-provider-sso@3.405.0: - resolution: {integrity: sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==} + /@aws-sdk/credential-provider-sso@3.409.0: + resolution: {integrity: sha512-Bh0ykbDpnUK4W8sQMEpRA/TlZxwpPLl4aU8eBLlbEcTL2M8or2nr0dQzOOvabZo8hbaPM6yfOl+vLTvWGs75zg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/client-sso': 3.405.0 - '@aws-sdk/token-providers': 3.405.0 - '@aws-sdk/types': 3.398.0 - '@smithy/property-provider': 2.0.5 - '@smithy/shared-ini-file-loader': 2.0.6 - '@smithy/types': 2.2.2 + '@aws-sdk/client-sso': 3.409.0 + '@aws-sdk/token-providers': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@smithy/property-provider': 2.0.7 + '@smithy/shared-ini-file-loader': 2.0.8 + '@smithy/types': 2.3.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/credential-provider-web-identity@3.398.0: - resolution: {integrity: sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==} + /@aws-sdk/credential-provider-web-identity@3.408.0: + resolution: {integrity: sha512-5FbDPF/zY/1t6k1zRI/HnrxcH2v7SwsEYu2SThI2qbzaP/K7MTnTanV5vNFcdQOpuQ7x3PrzTlH3AWZueCr3Vw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/property-provider': 2.0.5 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/property-provider': 2.0.7 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-bucket-endpoint@3.405.0: - resolution: {integrity: sha512-wKmHZi44NkbaGXXbMwassUm06/wDtSYucPbM4paU2cMbBUOnwFpndHWlrRYCNmj5Ty5A2HjdkGlhgla8nifHzQ==} + /@aws-sdk/middleware-bucket-endpoint@3.409.0: + resolution: {integrity: sha512-o808DWauLiWGDsCV1tIahq498FTPsWwL9McyNTqveHt24tMGrb4b/RHxu6Qq5g69P2RoYXadeHluQeA6yio7rA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@aws-sdk/util-arn-parser': 3.310.0 + '@smithy/node-config-provider': 2.0.9 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-config-provider': 2.0.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-expect-continue@3.398.0: - resolution: {integrity: sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==} + /@aws-sdk/middleware-expect-continue@3.408.0: + resolution: {integrity: sha512-getv/MSPQnouOtpG8UIpTqpS/ecw4G0B2ctRktg+MhxUVqZM/0EF9nZZxsAHiHEF3dv06xTRuN27x/6WWFISSA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-flexible-checksums@3.400.0: - resolution: {integrity: sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==} + /@aws-sdk/middleware-flexible-checksums@3.408.0: + resolution: {integrity: sha512-rZeThuEma72W8RGs8ZiaLmbptuZF0Varu/01aI5NLUeWMs1QpJEWePbC7pbVtjEBrvh1WEU7PudGzt8NNXEaBw==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/crc32': 3.0.0 '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@smithy/is-array-buffer': 2.0.0 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-host-header@3.398.0: - resolution: {integrity: sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==} + /@aws-sdk/middleware-host-header@3.408.0: + resolution: {integrity: sha512-eofCXuSZ+ntbLzeCRdHzraXzgWqAplXU7W2qFFVC4O9lZBhADwNPI8n8x98TH0mftnmvZxh5Bo5U8WvEolIDkw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-location-constraint@3.398.0: - resolution: {integrity: sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==} + /@aws-sdk/middleware-location-constraint@3.408.0: + resolution: {integrity: sha512-zUfUuhM91K1XLtBDAsFy6hs8egdI1KW2b8roAeHPCt4M3G8W1NP3NX5WLoS8yPe/gm3LHTpR8MgS5ZTtoV8Kvw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-logger@3.398.0: - resolution: {integrity: sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==} + /@aws-sdk/middleware-logger@3.408.0: + resolution: {integrity: sha512-otwXPCubsGRFv8Hb6nKw6Vvnu4dC8CcPk05buStj42nF8QdjWrKGb2rDCvLph5lr576LF5HN+Y2moyOi7z/I7g==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-recursion-detection@3.398.0: - resolution: {integrity: sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==} + /@aws-sdk/middleware-recursion-detection@3.408.0: + resolution: {integrity: sha512-QfZwmX5z0IRC2c8pBi9VozSqbJw19V5oxyykSTqdjGe3CG3yNujXObV6xQesK67CWSnPb9wDgVGKUoYuIXwOxw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-sdk-s3@3.398.0: - resolution: {integrity: sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==} + /@aws-sdk/middleware-sdk-s3@3.408.0: + resolution: {integrity: sha512-7mEHtBeotQOXRmjK9HtZ4DifhdUMLEvNJzs6gZ4oFHI2VxC6S4uXe9uUTlO3qoeg/r+MbOaBknSVmxr71rTFeQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@aws-sdk/util-arn-parser': 3.310.0 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-sdk-sts@3.398.0: - resolution: {integrity: sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==} + /@aws-sdk/middleware-sdk-sts@3.408.0: + resolution: {integrity: sha512-dIO9BTX049P2PwaeAK2lxJeA2rZi9/bWzMP1GIE60VrMDHmN5Ljvh1lLActECLAqNQIqN5Ub0bKV2tC/jMn+CA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/middleware-signing': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@smithy/types': 2.2.2 + '@aws-sdk/middleware-signing': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-signing@3.398.0: - resolution: {integrity: sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==} + /@aws-sdk/middleware-signing@3.408.0: + resolution: {integrity: sha512-flLiLKATJ4NLcLb7lPojyQ6NvLSyQ3axqIClqwMRnhSRxvREB7OgBKwmPecSl0I5JxsNEqo+mjARdMjUHadgWQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/property-provider': 2.0.5 + '@aws-sdk/types': 3.408.0 + '@smithy/property-provider': 2.0.7 '@smithy/protocol-http': 2.0.5 - '@smithy/signature-v4': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/signature-v4': 2.0.6 + '@smithy/types': 2.3.0 '@smithy/util-middleware': 2.0.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-ssec@3.398.0: - resolution: {integrity: sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==} + /@aws-sdk/middleware-ssec@3.408.0: + resolution: {integrity: sha512-bxPob/FXtb2m7PywNkW5kn08SVDsS/eAOZ8p61OiPh5VxlsPIaWUyjfA1a0jWMZALb6X6rTHAIeF93ywFiPxJg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/middleware-user-agent@3.398.0: - resolution: {integrity: sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==} + /@aws-sdk/middleware-user-agent@3.408.0: + resolution: {integrity: sha512-UvlKri8/Mgf5W+tFU6ZJ65fC6HljcysIqfRFts/8Wurl322IS1I4j+pyjV2P6eK1054bzynfi3Trv+tRYHtVcA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 - '@aws-sdk/util-endpoints': 3.398.0 + '@aws-sdk/types': 3.408.0 + '@aws-sdk/util-endpoints': 3.408.0 '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/signature-v4-multi-region@3.398.0: - resolution: {integrity: sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==} + /@aws-sdk/signature-v4-multi-region@3.408.0: + resolution: {integrity: sha512-lFfQAG4ZO8Q7tYFDt9x7Hs1v45DjGTcXC/9c8g3Y6FS6WM/OScYtPXP0WDqQQt4BToHiDzcSxx4Ezxqvt3vJEA==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/signature-v4-crt': ^3.118.0 @@ -1005,49 +1006,49 @@ packages: '@aws-sdk/signature-v4-crt': optional: true dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 '@smithy/protocol-http': 2.0.5 - '@smithy/signature-v4': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/signature-v4': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@aws-sdk/token-providers@3.405.0: - resolution: {integrity: sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==} + /@aws-sdk/token-providers@3.408.0: + resolution: {integrity: sha512-D//BjUrVtDzDdCz1mRdZZSAc822fh75Ssq46smeS6S6NKq3vJeHhfrQJMyVU1GclXu1tn9AwykaQW5Jwb5im+g==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/middleware-host-header': 3.398.0 - '@aws-sdk/middleware-logger': 3.398.0 - '@aws-sdk/middleware-recursion-detection': 3.398.0 - '@aws-sdk/middleware-user-agent': 3.398.0 - '@aws-sdk/types': 3.398.0 - '@aws-sdk/util-endpoints': 3.398.0 - '@aws-sdk/util-user-agent-browser': 3.398.0 - '@aws-sdk/util-user-agent-node': 3.405.0 - '@smithy/config-resolver': 2.0.5 - '@smithy/fetch-http-handler': 2.0.5 - '@smithy/hash-node': 2.0.5 - '@smithy/invalid-dependency': 2.0.5 - '@smithy/middleware-content-length': 2.0.5 - '@smithy/middleware-endpoint': 2.0.5 - '@smithy/middleware-retry': 2.0.5 - '@smithy/middleware-serde': 2.0.5 + '@aws-sdk/middleware-host-header': 3.408.0 + '@aws-sdk/middleware-logger': 3.408.0 + '@aws-sdk/middleware-recursion-detection': 3.408.0 + '@aws-sdk/middleware-user-agent': 3.408.0 + '@aws-sdk/types': 3.408.0 + '@aws-sdk/util-endpoints': 3.408.0 + '@aws-sdk/util-user-agent-browser': 3.408.0 + '@aws-sdk/util-user-agent-node': 3.408.0 + '@smithy/config-resolver': 2.0.7 + '@smithy/fetch-http-handler': 2.1.2 + '@smithy/hash-node': 2.0.6 + '@smithy/invalid-dependency': 2.0.6 + '@smithy/middleware-content-length': 2.0.8 + '@smithy/middleware-endpoint': 2.0.6 + '@smithy/middleware-retry': 2.0.9 + '@smithy/middleware-serde': 2.0.6 '@smithy/middleware-stack': 2.0.0 - '@smithy/node-config-provider': 2.0.7 - '@smithy/node-http-handler': 2.0.5 - '@smithy/property-provider': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/node-http-handler': 2.1.2 + '@smithy/property-provider': 2.0.7 '@smithy/protocol-http': 2.0.5 - '@smithy/shared-ini-file-loader': 2.0.6 - '@smithy/smithy-client': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/shared-ini-file-loader': 2.0.8 + '@smithy/smithy-client': 2.1.3 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.6 - '@smithy/util-defaults-mode-node': 2.0.7 + '@smithy/util-defaults-mode-browser': 2.0.7 + '@smithy/util-defaults-mode-node': 2.0.9 '@smithy/util-retry': 2.0.0 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 @@ -1055,11 +1056,11 @@ packages: - aws-crt dev: false - /@aws-sdk/types@3.398.0: - resolution: {integrity: sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==} + /@aws-sdk/types@3.408.0: + resolution: {integrity: sha512-sIsR5224xWQTW7O6h4V0S7DMWs4bK4DCunwOo7Avpq7ZVmH2YyLTs0n4NGL186j8xTosycF1ACQgpM48SLIvaA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -1070,11 +1071,11 @@ packages: tslib: 2.6.2 dev: false - /@aws-sdk/util-endpoints@3.398.0: - resolution: {integrity: sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==} + /@aws-sdk/util-endpoints@3.408.0: + resolution: {integrity: sha512-N1D5cKEkCqf5Q7IF/pI9kfcNrT+/5ctZ6cQo4Ex6xaOcnUzdOZcXdPqaMRZVZRn8enjK2SpoLlRpXGISOugPaw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.398.0 + '@aws-sdk/types': 3.408.0 tslib: 2.6.2 dev: false @@ -1085,17 +1086,17 @@ packages: tslib: 2.6.2 dev: false - /@aws-sdk/util-user-agent-browser@3.398.0: - resolution: {integrity: sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==} + /@aws-sdk/util-user-agent-browser@3.408.0: + resolution: {integrity: sha512-wOVjDprG5h6kM8aJZk/tRX/RgxNxr73d6kIsUePlAgil13q62M9lcFMcIXduqtDsa1B6FfVB2wx/pyUuOZri5g==} dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/types': 2.3.0 bowser: 2.11.0 tslib: 2.6.2 dev: false - /@aws-sdk/util-user-agent-node@3.405.0: - resolution: {integrity: sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==} + /@aws-sdk/util-user-agent-node@3.408.0: + resolution: {integrity: sha512-BzMFV+cIXrtfcfJk3GpXnkANFkzZisvAtD306TMgIscn5FF26K1jD5DU+h5Q5WMq7gx+oXh9kJ3Lu3hi7hahKQ==} engines: {node: '>=14.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1103,9 +1104,9 @@ packages: aws-crt: optional: true dependencies: - '@aws-sdk/types': 3.398.0 - '@smithy/node-config-provider': 2.0.7 - '@smithy/types': 2.2.2 + '@aws-sdk/types': 3.408.0 + '@smithy/node-config-provider': 2.0.9 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -1122,11 +1123,11 @@ packages: tslib: 2.6.2 dev: false - /@babel/code-frame@7.22.10: - resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.10 + '@babel/highlight': 7.22.13 chalk: 2.4.2 /@babel/compat-data@7.22.9: @@ -1134,20 +1135,20 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.22.11: - resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} + /@babel/core@7.22.17: + resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.10 - '@babel/generator': 7.22.10 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) - '@babel/helpers': 7.22.11 - '@babel/parser': 7.22.11 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.11 - '@babel/types': 7.22.11 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17) + '@babel/helpers': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.17 + '@babel/types': 7.22.17 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -1157,22 +1158,22 @@ packages: - supports-color dev: true - /@babel/generator@7.22.10: - resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} + /@babel/generator@7.22.15: + resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.22.10: - resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.5 + '@babel/helper-validator-option': 7.22.15 browserslist: 4.21.10 lru-cache: 5.1.1 semver: 6.3.1 @@ -1187,36 +1188,36 @@ packages: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.11 + '@babel/template': 7.22.15 + '@babel/types': 7.22.17 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: true - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: true - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11): - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17): + resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -1228,224 +1229,224 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + /@babel/helper-validator-identifier@7.22.15: + resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.22.11: - resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} + /@babel/helpers@7.22.15: + resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.11 - '@babel/types': 7.22.11 + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.17 + '@babel/types': 7.22.17 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.22.10: - resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} + /@babel/highlight@7.22.13: + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.22.11: - resolution: {integrity: sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==} + /@babel/parser@7.22.16: + resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.11): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.17): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.11): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.11): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.17): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.11): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.17): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.11): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.11): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.17): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.11): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.17): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.11): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.11): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.17): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.11): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.11): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.11): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.11): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.17): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.11): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.17): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/runtime@7.22.11: - resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==} + /@babel/runtime@7.22.15: + resolution: {integrity: sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 dev: false - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.10 - '@babel/parser': 7.22.11 - '@babel/types': 7.22.11 + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 dev: true - /@babel/traverse@7.22.11: - resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} + /@babel/traverse@7.22.17: + resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.10 - '@babel/generator': 7.22.10 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.11 - '@babel/types': 7.22.11 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.22.11: - resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} + /@babel/types@7.22.17: + resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 to-fast-properties: 2.0.0 /@bcoe/v8-coverage@0.2.3: @@ -1482,7 +1483,7 @@ packages: dev: true optional: true - /@commitlint/load@17.7.1(@swc/core@1.3.82): + /@commitlint/load@17.7.1(@swc/core@1.3.83): resolution: {integrity: sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==} engines: {node: '>=v14'} requiresBuild: true @@ -1493,13 +1494,13 @@ packages: '@commitlint/types': 17.4.4 '@types/node': 20.4.7 chalk: 4.1.2 - cosmiconfig: 8.2.0 - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.4.7)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.2.2) + cosmiconfig: 8.3.5(typescript@5.2.2) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.5)(ts-node@10.9.1)(typescript@5.2.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@20.4.7)(typescript@5.2.2) + ts-node: 10.9.1(@swc/core@1.3.83)(@types/node@20.4.7)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@swc/core' @@ -1546,13 +1547,13 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.48.0 + eslint: 8.49.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1578,8 +1579,8 @@ packages: - supports-color dev: true - /@eslint/js@8.48.0: - resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} + /@eslint/js@8.49.0: + resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1730,7 +1731,7 @@ packages: - supports-color dev: false - /@golevelup/nestjs-stripe@0.6.3(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(rxjs@7.8.1)(stripe@13.4.0): + /@golevelup/nestjs-stripe@0.6.3(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(rxjs@7.8.1)(stripe@13.5.0): resolution: {integrity: sha512-1h9VBwZIpw/xN5iuzpA1YtQq2ezOP7dVEUnB4xtGTWX3/3KjUm2DlBawQ5YN8aTK+FJMCHTg839rq4FryEj12w==} peerDependencies: stripe: ^11.12.0 @@ -1738,7 +1739,7 @@ packages: '@golevelup/nestjs-common': 2.0.0(@nestjs/common@10.2.4) '@golevelup/nestjs-discovery': 4.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4) '@golevelup/nestjs-modules': 0.7.0(@nestjs/common@10.2.4)(rxjs@7.8.1) - stripe: 13.4.0 + stripe: 13.5.0 transitivePeerDependencies: - '@nestjs/common' - '@nestjs/core' @@ -1838,7 +1839,7 @@ packages: dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.8.0) graphql: 16.8.0 - tslib: 2.6.2 + tslib: 2.5.0 dev: false optional: true @@ -1851,7 +1852,7 @@ packages: '@graphql-tools/merge': 8.3.18(graphql@16.8.0) '@graphql-tools/utils': 9.2.1(graphql@16.8.0) graphql: 16.8.0 - tslib: 2.6.2 + tslib: 2.5.0 value-or-promise: 1.0.12 dev: false optional: true @@ -1864,7 +1865,7 @@ packages: dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.0) graphql: 16.8.0 - tslib: 2.6.2 + tslib: 2.5.0 dev: false optional: true @@ -1884,7 +1885,7 @@ packages: requiresBuild: true dependencies: '@grpc/proto-loader': 0.7.9 - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: false optional: true @@ -2138,8 +2139,8 @@ packages: '@hapi/hoek': 11.0.2 dev: true - /@humanwhocodes/config-array@0.11.10: - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + /@humanwhocodes/config-array@0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -2191,7 +2192,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 jest-message-util: 29.6.3 jest-util: 29.6.3 @@ -2212,14 +2213,14 @@ packages: '@jest/test-result': 29.6.4 '@jest/transform': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.6.3 - jest-config: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + jest-config: 29.6.4(@types/node@20.6.0)(ts-node@10.9.1) jest-haste-map: 29.6.4 jest-message-util: 29.6.3 jest-regex-util: 29.6.3 @@ -2254,7 +2255,7 @@ packages: dependencies: '@jest/fake-timers': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 jest-mock: 29.6.3 dev: true @@ -2281,7 +2282,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.5.9 + '@types/node': 20.6.0 jest-message-util: 29.6.3 jest-mock: 29.6.3 jest-util: 29.6.3 @@ -2314,7 +2315,7 @@ packages: '@jest/transform': 29.6.4 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2376,7 +2377,7 @@ packages: resolution: {integrity: sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1 @@ -2401,7 +2402,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.5.9 + '@types/node': 20.6.0 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -2413,7 +2414,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.5.9 + '@types/node': 20.6.0 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -2492,7 +2493,7 @@ packages: npmlog: 5.0.1 rimraf: 3.0.2 semver: 7.5.4 - tar: 6.1.15 + tar: 6.2.0 transitivePeerDependencies: - encoding - supports-color @@ -2771,7 +2772,7 @@ packages: rxjs: 7.8.1 dev: false - /@nestjs/cli@10.1.17(@swc/core@1.3.82): + /@nestjs/cli@10.1.17(@swc/core@1.3.83): resolution: {integrity: sha512-jUEnR2DgC15Op+IhcRWb6cyJrhec9CUQO+GtxCF2Dv9MwLcr4sTDq1UOkfs09HAhpuI8otgF2LoWGTlW3qRuqg==} engines: {node: '>= 16'} hasBin: true @@ -2788,7 +2789,7 @@ packages: '@angular-devkit/schematics': 16.2.0(chokidar@3.5.3) '@angular-devkit/schematics-cli': 16.2.0(chokidar@3.5.3) '@nestjs/schematics': 10.0.2(chokidar@3.5.3)(typescript@5.1.6) - '@swc/core': 1.3.82 + '@swc/core': 1.3.83 chalk: 4.1.2 chokidar: 3.5.3 cli-table3: 0.6.3 @@ -2805,7 +2806,7 @@ packages: tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.1.6 - webpack: 5.88.2(@swc/core@1.3.82) + webpack: 5.88.2(@swc/core@1.3.83) webpack-node-externals: 3.0.0 transitivePeerDependencies: - esbuild @@ -3193,8 +3194,8 @@ packages: tslib: 2.6.2 dev: true - /@nestjs/throttler@4.2.1(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13): - resolution: {integrity: sha512-wVPMuIyr0KdrK1RVVQceWVNesogCm9IgYC1V5EkaTZ+usIE4qxEyzdwU5IqQLgOO/Loiq98MLwReDxazX7i9Uw==} + /@nestjs/throttler@5.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13): + resolution: {integrity: sha512-TKf+bpjYpRnSOu8dqi0TmQAPxyvLoO6jFldTq3ToevYDfLtAxBXDTJs8qRRfmHv3wORaJhIbVDtW1dDQuP5wCQ==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 '@nestjs/core': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 @@ -3250,7 +3251,7 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - /@ntegral/nestjs-sentry@4.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@sentry/hub@7.66.0)(@sentry/node@7.66.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.8.0)(reflect-metadata@0.1.13)(rimraf@3.0.2)(rxjs@7.8.1): + /@ntegral/nestjs-sentry@4.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@sentry/hub@7.68.0)(@sentry/node@7.68.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.8.0)(reflect-metadata@0.1.13)(rimraf@3.0.2)(rxjs@7.8.1): resolution: {integrity: sha512-6WHZcK7NLeg7ue1y3Z61msEBzCGZeXQ0hWhliH1ddQH0kPbZ6lXLxduGMWYb0N/fPjXAX1Astz8urqnoTOZBQw==} peerDependencies: '@nestjs/common': ^9.0.4 @@ -3263,8 +3264,8 @@ packages: dependencies: '@nestjs/common': 10.2.4(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/core': 10.2.4(@nestjs/common@10.2.4)(@nestjs/platform-express@10.2.4)(@nestjs/websockets@10.2.4)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@sentry/hub': 7.66.0 - '@sentry/node': 7.66.0 + '@sentry/hub': 7.68.0 + '@sentry/node': 7.68.0 reflect-metadata: 0.1.13 rimraf: 3.0.2 rxjs: 7.8.1 @@ -3450,15 +3451,15 @@ packages: /@rubiin/eslint-config-typescript@1.0.26(jest@29.6.4)(typescript@5.2.2): resolution: {integrity: sha512-ieFM1Wwmw6rY8pPTY2DTgDZTvSJ842bwC3S2xynqh6LYZdXhNnYj8rFWJgiaf2hQX3PD6jVYvcl71ldQgtGVtQ==} dependencies: - '@typescript-eslint/eslint-plugin': 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) - eslint: 8.48.0 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0) - eslint-plugin-deprecation: 1.5.0(eslint@8.48.0)(typescript@5.2.2) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.6.0)(eslint@8.48.0)(jest@29.6.4)(typescript@5.2.2) - eslint-plugin-jsdoc: 46.5.1(eslint@8.48.0) - eslint-plugin-unicorn: 48.0.1(eslint@8.48.0) + '@typescript-eslint/eslint-plugin': 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.6.0(eslint@8.49.0)(typescript@5.2.2) + eslint: 8.49.0 + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0) + eslint-plugin-deprecation: 1.5.0(eslint@8.49.0)(typescript@5.2.2) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.6.0)(eslint@8.49.0)(jest@29.6.4)(typescript@5.2.2) + eslint-plugin-jsdoc: 46.5.1(eslint@8.49.0) + eslint-plugin-unicorn: 48.0.1(eslint@8.49.0) transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -3487,43 +3488,43 @@ packages: selderee: 0.11.0 dev: false - /@sentry-internal/tracing@7.66.0: - resolution: {integrity: sha512-3vCgC2hC3T45pn53yTDVcRpHoJTBxelDPPZVsipAbZnoOVPkj7n6dNfDhj3I3kwWCBPahPkXmE+R4xViR8VqJg==} + /@sentry-internal/tracing@7.68.0: + resolution: {integrity: sha512-nNKS/q21+Iqzxs2K7T/l3dZi8Z9s/uxsAazpk2AYhFzx9mFnPj1Xfe3dgbFoygNifE+IrpUuldr6D5HQamTDPQ==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.66.0 - '@sentry/types': 7.66.0 - '@sentry/utils': 7.66.0 + '@sentry/core': 7.68.0 + '@sentry/types': 7.68.0 + '@sentry/utils': 7.68.0 tslib: 2.6.2 dev: false - /@sentry/core@7.66.0: - resolution: {integrity: sha512-WMAEPN86NeCJ1IT48Lqiz4MS5gdDjBwP4M63XP4msZn9aujSf2Qb6My5uT87AJr9zBtgk8MyJsuHr35F0P3q1w==} + /@sentry/core@7.68.0: + resolution: {integrity: sha512-mT3ObBWgvAky/QF3dZy4KBoXbRXbNsD6evn+mYi9UEeIZQ5NpnQYDEp78mapiEjI/TAHZIhTIuaBhj1Jk0qUUA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.66.0 - '@sentry/utils': 7.66.0 + '@sentry/types': 7.68.0 + '@sentry/utils': 7.68.0 tslib: 2.6.2 dev: false - /@sentry/hub@7.66.0: - resolution: {integrity: sha512-T+xtxbZm+ZjZxzCKubI4GzYEju2PBK6jYLOk+E/5xVUX029H4qkDLwqk+NlEH7KzgaJIZBRos5CC0+wWCem6PQ==} + /@sentry/hub@7.68.0: + resolution: {integrity: sha512-MfXGFR1idRnVMnRvuGzrIFmY3DLjytje4gZJ1pT29gTArpMth68ujJ+61Ptj9QZBSJH7vBlVSdF4UuNBJEI6Dg==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.66.0 - '@sentry/types': 7.66.0 - '@sentry/utils': 7.66.0 + '@sentry/core': 7.68.0 + '@sentry/types': 7.68.0 + '@sentry/utils': 7.68.0 tslib: 2.6.2 dev: false - /@sentry/node@7.66.0: - resolution: {integrity: sha512-PxqIqLr4Sh5xcDfECiBQ4PuZ7v8yTgLhaRkruWrZPYxQrcJFPkwbFkw/IskzVnhT2VwXUmeWEIlRMQKBJ0t83A==} + /@sentry/node@7.68.0: + resolution: {integrity: sha512-gtcHoi6Xu6Iu8MpPgKJA4E0nozqLvYF0fKtt+27T0QBzWioO6lkxSQkKGWMyJGL0AmpLCex0E28fck/rlbt0LA==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.66.0 - '@sentry/core': 7.66.0 - '@sentry/types': 7.66.0 - '@sentry/utils': 7.66.0 + '@sentry-internal/tracing': 7.68.0 + '@sentry/core': 7.68.0 + '@sentry/types': 7.68.0 + '@sentry/utils': 7.68.0 cookie: 0.4.2 https-proxy-agent: 5.0.1 lru_map: 0.3.3 @@ -3532,15 +3533,15 @@ packages: - supports-color dev: false - /@sentry/types@7.66.0: - resolution: {integrity: sha512-uUMSoSiar6JhuD8p7ON/Ddp4JYvrVd2RpwXJRPH1A4H4Bd4DVt1mKJy1OLG6HdeQv39XyhB1lPZckKJg4tATPw==} + /@sentry/types@7.68.0: + resolution: {integrity: sha512-5J2pH1Pjx/029zTm3CNY9MaE8Aui81nG7JCtlMp7uEfQ//9Ja4d4Sliz/kV4ARbkIKUZerSgaRAm3xCy5XOXLg==} engines: {node: '>=8'} - /@sentry/utils@7.66.0: - resolution: {integrity: sha512-9GYUVgXjK66uXXcLXVMXVzlptqMtq1eJENCuDeezQiEFrNA71KkLDg00wESp+LL+bl3wpVTBApArpbF6UEG5hQ==} + /@sentry/utils@7.68.0: + resolution: {integrity: sha512-NecnQegvKARyeFmBx7mYmbI17mTvjARWs1nfzY5jhPyNc3Zk4M3bQsgIdnJ1t+jo93UYudlNND7hxhDzjcBAVg==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.66.0 + '@sentry/types': 7.68.0 tslib: 2.6.2 dev: false @@ -3553,7 +3554,7 @@ packages: jest-runtime: '>=28' dependencies: '@jest/transform': 29.6.4 - jest: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + jest: 29.6.4(@types/node@20.6.0)(ts-node@10.9.1) jest-runtime: 29.6.4 dev: true @@ -3584,11 +3585,11 @@ packages: '@sinonjs/commons': 3.0.0 dev: true - /@smithy/abort-controller@2.0.5: - resolution: {integrity: sha512-byVZ2KWLMPYAZGKjRpniAzLcygJO4ruClZKdJTuB0eCB76ONFTdptBHlviHpAZXknRz7skYWPfcgO9v30A1SyA==} + /@smithy/abort-controller@2.0.6: + resolution: {integrity: sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -3605,124 +3606,114 @@ packages: tslib: 2.6.2 dev: false - /@smithy/config-resolver@2.0.5: - resolution: {integrity: sha512-n0c2AXz+kjALY2FQr7Zy9zhYigXzboIh1AuUUVCqFBKFtdEvTwnwPXrTDoEehLiRTUHNL+4yzZ3s+D0kKYSLSg==} + /@smithy/config-resolver@2.0.7: + resolution: {integrity: sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/node-config-provider': 2.0.9 + '@smithy/types': 2.3.0 '@smithy/util-config-provider': 2.0.0 '@smithy/util-middleware': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/credential-provider-imds@2.0.5: - resolution: {integrity: sha512-KFcf/e0meFkQNyteJ65f1G19sgUEY1e5zL7hyAEUPz2SEfBmC9B37WyRq87G3MEEsvmAWwCRu7nFFYUKtR3svQ==} - engines: {node: '>=14.0.0'} - dependencies: - '@smithy/node-config-provider': 2.0.7 - '@smithy/property-provider': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 - tslib: 2.6.2 - dev: false - - /@smithy/credential-provider-imds@2.0.7: - resolution: {integrity: sha512-XivkZj/pipzpQPxgleE1odwJQ6oDsVViB4VUO/HRDI4EdEfZjud44USupOUOa/xOjS39/75DYB4zgTbyV+totw==} + /@smithy/credential-provider-imds@2.0.9: + resolution: {integrity: sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/node-config-provider': 2.0.7 - '@smithy/property-provider': 2.0.6 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/property-provider': 2.0.7 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 tslib: 2.6.2 dev: false - /@smithy/eventstream-codec@2.0.5: - resolution: {integrity: sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==} + /@smithy/eventstream-codec@2.0.6: + resolution: {integrity: sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==} dependencies: '@aws-crypto/crc32': 3.0.0 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-hex-encoding': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/eventstream-serde-browser@2.0.5: - resolution: {integrity: sha512-8NU51y94qFJbxL6SmvgWDfITHO/svvbAigkLYk2pckX17TGCSf4EXuGpGLliJp5Ljh5+vASC7mUH2jYX7MWBxA==} + /@smithy/eventstream-serde-browser@2.0.6: + resolution: {integrity: sha512-cNJqAkmArHytV0CjBka3CKnU/J6zNlOZynvo2Txj98a0cxKeug8gL6SQTpoTyGk+M4LicjcrzQtDs06mU8U0Ag==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/eventstream-serde-universal': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/eventstream-serde-config-resolver@2.0.5: - resolution: {integrity: sha512-u3gvukRaTH4X6tsryuZ4T1WGIEP34fPaTTzphFDJe8GJz/k11oBW1MPnkcaucBMxLnObK9swCF85j5cp1Kj1oA==} + /@smithy/eventstream-serde-config-resolver@2.0.6: + resolution: {integrity: sha512-jODu0MWaP06kzBMUtSd4Ga3S2DnTp3tfjPgdjaw9K/Z4yI7J9rUB73aNGo6ZxxH/vl/k66b5NZJ/3O1AzZ4ggw==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/eventstream-serde-node@2.0.5: - resolution: {integrity: sha512-/C8jb+k/vKUBIe80D30vzjvRXlJf76kG2AJY7/NwiqWuD2usRuuDFCDaswXdVsSh9P1+FeaxZ48chsK10yDryQ==} + /@smithy/eventstream-serde-node@2.0.6: + resolution: {integrity: sha512-ua7ok1g16p7OGAVZntn1l3wegN8RtsyPBl9ebqEDeSxdm+iuEfkAS1E/JFs6S6UBfr8Z0tbql5jTT9iVwIFGGA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/eventstream-serde-universal': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/eventstream-serde-universal@2.0.5: - resolution: {integrity: sha512-+vHvbQtlSVYTQ/20tNpVaKi0EpTR7E8GoEUHJypRZIRgiT03b3h2MAWk+SNaqMrCJrYG9vKLkJFzDylRlUvDWg==} + /@smithy/eventstream-serde-universal@2.0.6: + resolution: {integrity: sha512-bH1TElelS8tlqll6cJAWKM11Es+pE9htRzjiiFG1+xcyKaM90UFNRX5oKZIrJugZlmP37pvfRwSJ/3ZaaqSBIA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-codec': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/eventstream-codec': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/fetch-http-handler@2.0.5: - resolution: {integrity: sha512-EzFoMowdBNy1VqtvkiXgPFEdosIAt4/4bgZ8uiDiUyfhmNXq/3bV+CagPFFBsgFOR/X2XK4zFZHRsoa7PNHVVg==} + /@smithy/fetch-http-handler@2.1.2: + resolution: {integrity: sha512-3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==} dependencies: - '@smithy/protocol-http': 2.0.5 - '@smithy/querystring-builder': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/protocol-http': 3.0.2 + '@smithy/querystring-builder': 2.0.6 + '@smithy/types': 2.3.0 '@smithy/util-base64': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/hash-blob-browser@2.0.5: - resolution: {integrity: sha512-ZVAUBtJXGf9bEko4/RwWcTK6d3b/ZmQMxJMrxOOcQhVDiqny9zI0mzgstO4Oxz3135R7S3V/bbGw3w3woCYpQg==} + /@smithy/hash-blob-browser@2.0.6: + resolution: {integrity: sha512-zmJCRb80WDthCZqQ9LiKeFUEmyPM9WUcd0jYa7tlU3p0LsDnaFKuUS+MT0uJehPGyUEicbi1KBdUmtoqEAQr1A==} dependencies: '@smithy/chunked-blob-reader': 2.0.0 '@smithy/chunked-blob-reader-native': 2.0.0 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/hash-node@2.0.5: - resolution: {integrity: sha512-mk551hIywBITT+kXruRNXk7f8Fy7DTzBjZJSr/V6nolYKmUHIG3w5QU6nO9qPYEQGKc/yEPtkpdS28ndeG93lA==} + /@smithy/hash-node@2.0.6: + resolution: {integrity: sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-buffer-from': 2.0.0 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/hash-stream-node@2.0.5: - resolution: {integrity: sha512-XiR4Aoux5kXy8OWPLQisKy3GPmm0l6deHepvPvr4MUzIwa5XWazG3JdbZXy+mk93CvEZrOwKPHU5Kul6QybJiQ==} + /@smithy/hash-stream-node@2.0.6: + resolution: {integrity: sha512-BWtWJ8Ppc8z+Rz9XBu4Hcl+pC+9BKV5GvbQpXZf4IsQX6oTwqo0qJK7Lwe5mYM0hRnqgwjn2mhQ303fIRN7AMw==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/invalid-dependency@2.0.5: - resolution: {integrity: sha512-0wEi+JT0hM+UUwrJVYbqjuGFhy5agY/zXyiN7BNAJ1XoCDjU5uaNSj8ekPWsXd/d4yM6NSe8UbPd8cOc1+3oBQ==} + /@smithy/invalid-dependency@2.0.6: + resolution: {integrity: sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -3733,52 +3724,53 @@ packages: tslib: 2.6.2 dev: false - /@smithy/md5-js@2.0.5: - resolution: {integrity: sha512-k5EOte/Ye2r7XBVaXv2rhiehk6l3T4uRiPF+pnxKEc+G9Fwd1xAXBDZrtOq1syFPBKBmVfNszG4nevngST7NKg==} + /@smithy/md5-js@2.0.6: + resolution: {integrity: sha512-Ek2qSFFICJa2E0RRVsIkQ6c1jeJTESwF24SMh3liKFNbr2Ax4uJiWsLhDBDQFOhJwjp1mbC4lN85isfGS+KhQg==} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/middleware-content-length@2.0.5: - resolution: {integrity: sha512-E7VwV5H02fgZIUGRli4GevBCAPvkyEI/fgl9SU47nPPi3DAAX3nEtUb8xfGbXjOcJ5BdSUoWWZn42tEd/blOqA==} + /@smithy/middleware-content-length@2.0.8: + resolution: {integrity: sha512-fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/protocol-http': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/protocol-http': 3.0.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/middleware-endpoint@2.0.5: - resolution: {integrity: sha512-tyzDuoNTbsMQCq5Xkc4QOt6e2GACUllQIV8SQ5fc59FtOIV9/vbf58/GxVjZm2o8+MMbdDBANjTDZe/ijZKfyA==} + /@smithy/middleware-endpoint@2.0.6: + resolution: {integrity: sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/middleware-serde': 2.0.5 - '@smithy/types': 2.2.2 - '@smithy/url-parser': 2.0.5 + '@smithy/middleware-serde': 2.0.6 + '@smithy/types': 2.3.0 + '@smithy/url-parser': 2.0.6 '@smithy/util-middleware': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/middleware-retry@2.0.5: - resolution: {integrity: sha512-ulIfbFyzQTVnJbLjUl1CTSi0etg6tej/ekwaLp0Gn8ybUkDkKYa+uB6CF/m2J5B6meRwyJlsryR+DjaOVyiicg==} + /@smithy/middleware-retry@2.0.9: + resolution: {integrity: sha512-gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/protocol-http': 2.0.5 + '@smithy/node-config-provider': 2.0.9 + '@smithy/protocol-http': 3.0.2 '@smithy/service-error-classification': 2.0.0 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-middleware': 2.0.0 '@smithy/util-retry': 2.0.0 tslib: 2.6.2 uuid: 8.3.2 dev: false - /@smithy/middleware-serde@2.0.5: - resolution: {integrity: sha512-in0AA5sous74dOfTGU9rMJBXJ0bDVNxwdXtEt5lh3FVd2sEyjhI+rqpLLRF1E4ixbw3RSEf80hfRpcPdjg4vvQ==} + /@smithy/middleware-serde@2.0.6: + resolution: {integrity: sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -3789,65 +3781,65 @@ packages: tslib: 2.6.2 dev: false - /@smithy/node-config-provider@2.0.7: - resolution: {integrity: sha512-GuLxhnf0aVQsfQp4ZWaM1TRCIndpQjAswyFcmDFRNf4yFqpxpLPDeV540+O0Z21Hmu3deoQm/dCPXbVn90PYzg==} + /@smithy/node-config-provider@2.0.9: + resolution: {integrity: sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/property-provider': 2.0.6 - '@smithy/shared-ini-file-loader': 2.0.6 - '@smithy/types': 2.2.2 + '@smithy/property-provider': 2.0.7 + '@smithy/shared-ini-file-loader': 2.0.8 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/node-http-handler@2.0.5: - resolution: {integrity: sha512-lZm5DZf4b3V0saUw9WTC4/du887P6cy2fUyQgQQKRRV6OseButyD5yTzeMmXE53CaXJBMBsUvvIQ0hRVxIq56w==} + /@smithy/node-http-handler@2.1.2: + resolution: {integrity: sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/abort-controller': 2.0.5 - '@smithy/protocol-http': 2.0.5 - '@smithy/querystring-builder': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/abort-controller': 2.0.6 + '@smithy/protocol-http': 3.0.2 + '@smithy/querystring-builder': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/property-provider@2.0.5: - resolution: {integrity: sha512-cAFSUhX6aiHcmpWfrCLKvwBtgN1F6A0N8qY/8yeSi0LRLmhGqsY1/YTxFE185MCVzYbqBGXVr9TBv4RUcIV4rA==} + /@smithy/property-provider@2.0.7: + resolution: {integrity: sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/property-provider@2.0.6: - resolution: {integrity: sha512-CVem6ZkkWxbTnhjDLyLESY0oLA6IUZYtdqrCpGQKUXaFBOuc/izjm7fIFGBxEbjZ1EGcH9hHxrjqX36RWULNRg==} + /@smithy/protocol-http@2.0.5: + resolution: {integrity: sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/protocol-http@2.0.5: - resolution: {integrity: sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==} + /@smithy/protocol-http@3.0.2: + resolution: {integrity: sha512-LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/querystring-builder@2.0.5: - resolution: {integrity: sha512-4DCX9krxLzATj+HdFPC3i8pb7XTAWzzKqSw8aTZMjXjtQY+vhe4azMAqIvbb6g7JKwIkmkRAjK6EXO3YWSnJVQ==} + /@smithy/querystring-builder@2.0.6: + resolution: {integrity: sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-uri-escape': 2.0.0 tslib: 2.6.2 dev: false - /@smithy/querystring-parser@2.0.5: - resolution: {integrity: sha512-C2stCULH0r54KBksv3AWcN8CLS3u9+WsEW8nBrvctrJ5rQTNa1waHkffpVaiKvcW2nP0aIMBPCobD/kYf/q9mA==} + /@smithy/querystring-parser@2.0.6: + resolution: {integrity: sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -3856,21 +3848,21 @@ packages: engines: {node: '>=14.0.0'} dev: false - /@smithy/shared-ini-file-loader@2.0.6: - resolution: {integrity: sha512-NO6dHqho6APbVR0DxPtYoL4KXBqUeSM3Slsd103MOgL50YbzzsQmMLtDMZ87W8MlvvCN0tuiq+OrAO/rM7hTQg==} + /@smithy/shared-ini-file-loader@2.0.8: + resolution: {integrity: sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false - /@smithy/signature-v4@2.0.5: - resolution: {integrity: sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==} + /@smithy/signature-v4@2.0.6: + resolution: {integrity: sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-codec': 2.0.5 + '@smithy/eventstream-codec': 2.0.6 '@smithy/is-array-buffer': 2.0.0 - '@smithy/types': 2.2.2 + '@smithy/types': 2.3.0 '@smithy/util-hex-encoding': 2.0.0 '@smithy/util-middleware': 2.0.0 '@smithy/util-uri-escape': 2.0.0 @@ -3878,28 +3870,28 @@ packages: tslib: 2.6.2 dev: false - /@smithy/smithy-client@2.0.5: - resolution: {integrity: sha512-kCTFr8wfOAWKDzGvfBElc6shHigWtHNhMQ1IbosjC4jOlayFyZMSs2PysKB+Ox/dhQ41KqOzgVjgiQ+PyWqHMQ==} + /@smithy/smithy-client@2.1.3: + resolution: {integrity: sha512-nSMMp2AKqcG/ruzCY01ogrMdbq/WS1cvGStTsw7yd6bTpp/bGtlOgXvy3h7e0zP7w2DH1AtvIwzYBD6ejZePsQ==} engines: {node: '>=14.0.0'} dependencies: '@smithy/middleware-stack': 2.0.0 - '@smithy/types': 2.2.2 - '@smithy/util-stream': 2.0.5 + '@smithy/types': 2.3.0 + '@smithy/util-stream': 2.0.9 tslib: 2.6.2 dev: false - /@smithy/types@2.2.2: - resolution: {integrity: sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==} + /@smithy/types@2.3.0: + resolution: {integrity: sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 dev: false - /@smithy/url-parser@2.0.5: - resolution: {integrity: sha512-OdMBvZhpckQSkugCXNJQCvqJ71wE7Ftxce92UOQLQ9pwF6hoS5PLL7wEfpnuEXtStzBqJYkzu1C1ZfjuFGOXAA==} + /@smithy/url-parser@2.0.6: + resolution: {integrity: sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==} dependencies: - '@smithy/querystring-parser': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/querystring-parser': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -3939,25 +3931,25 @@ packages: tslib: 2.6.2 dev: false - /@smithy/util-defaults-mode-browser@2.0.6: - resolution: {integrity: sha512-h8xyKTZIIom62DN4xbPUmL+RL1deZcK1qJGmCr4c2yXjOrs5/iZ1VtQQcl+xP78620ga/565AikZE1sktdg2yA==} + /@smithy/util-defaults-mode-browser@2.0.7: + resolution: {integrity: sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==} engines: {node: '>= 10.0.0'} dependencies: - '@smithy/property-provider': 2.0.6 - '@smithy/types': 2.2.2 + '@smithy/property-provider': 2.0.7 + '@smithy/types': 2.3.0 bowser: 2.11.0 tslib: 2.6.2 dev: false - /@smithy/util-defaults-mode-node@2.0.7: - resolution: {integrity: sha512-2C1YfmYJj9bpM/cRAgQppYNzPd8gDEXZ5XIVDuEQg3TmmIiinZaFf/HsHYo9NK/PMy5oawJVdIuR7SVriIo1AQ==} + /@smithy/util-defaults-mode-node@2.0.9: + resolution: {integrity: sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==} engines: {node: '>= 10.0.0'} dependencies: - '@smithy/config-resolver': 2.0.5 - '@smithy/credential-provider-imds': 2.0.7 - '@smithy/node-config-provider': 2.0.7 - '@smithy/property-provider': 2.0.6 - '@smithy/types': 2.2.2 + '@smithy/config-resolver': 2.0.7 + '@smithy/credential-provider-imds': 2.0.9 + '@smithy/node-config-provider': 2.0.9 + '@smithy/property-provider': 2.0.7 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -3983,13 +3975,13 @@ packages: tslib: 2.6.2 dev: false - /@smithy/util-stream@2.0.5: - resolution: {integrity: sha512-ylx27GwI05xLpYQ4hDIfS15vm+wYjNN0Sc2P0FxuzgRe8v0BOLHppGIQ+Bezcynk8C9nUzsUue3TmtRhjut43g==} + /@smithy/util-stream@2.0.9: + resolution: {integrity: sha512-Fn2/3IMwqu0l2hOC7K3bbtSqFEJ6nOzMLoPVIhuH84yw/95itNkFBwVbIIiAfDaout0ZfZ26+5ch86E2q3avww==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/fetch-http-handler': 2.0.5 - '@smithy/node-http-handler': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/fetch-http-handler': 2.1.2 + '@smithy/node-http-handler': 2.1.2 + '@smithy/types': 2.3.0 '@smithy/util-base64': 2.0.0 '@smithy/util-buffer-from': 2.0.0 '@smithy/util-hex-encoding': 2.0.0 @@ -4012,12 +4004,12 @@ packages: tslib: 2.6.2 dev: false - /@smithy/util-waiter@2.0.5: - resolution: {integrity: sha512-1lkkUmI/bhaDX+LIT3RiUNAn+NzPmsWjE7beMq0oQ3H1/CffaILIN67riDA0aE1YBj6xll7uWMIy4tJqc+peXw==} + /@smithy/util-waiter@2.0.6: + resolution: {integrity: sha512-wjxvKB4XSfgpOg3lr4RulnVhd21fMMC4CPARBwrSN7+3U28fwOifv8f7T+Ibay9DAQTj9qXxmd8ag6WXBRgNhg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/abort-controller': 2.0.5 - '@smithy/types': 2.2.2 + '@smithy/abort-controller': 2.0.6 + '@smithy/types': 2.3.0 tslib: 2.6.2 dev: false @@ -4042,8 +4034,8 @@ packages: resolution: {integrity: sha512-wlt6JW69MHqLY2M6Sm/jVyCojNRKq2CBvwH0Hbx24SFhDQQGkgEjeKxVutDxHSyrWixFaOSLXC27euzxijhyMQ==} dev: false - /@swc/core-darwin-arm64@1.3.82: - resolution: {integrity: sha512-JfsyDW34gVKD3uE0OUpUqYvAD3yseEaicnFP6pB292THtLJb0IKBBnK50vV/RzEJtc1bR3g1kNfxo2PeurZTrA==} + /@swc/core-darwin-arm64@1.3.83: + resolution: {integrity: sha512-Plz2IKeveVLivbXTSCC3OZjD2MojyKYllhPrn9RotkDIZEFRYJZtW5/Ik1tJW/2rzu5HVKuGYrDKdScVVTbOxQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -4051,8 +4043,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.82: - resolution: {integrity: sha512-ogQWgNMq7qTpITjcP3dnzkFNj7bh6SwMr859GvtOTrE75H7L7jDWxESfH4f8foB/LGxBKiDNmxKhitCuAsZK4A==} + /@swc/core-darwin-x64@1.3.83: + resolution: {integrity: sha512-FBGVg5IPF/8jQ6FbK60iDUHjv0H5+LwfpJHKH6wZnRaYWFtm7+pzYgreLu3NTsm3m7/1a7t0+7KURwBGUaJCCw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -4060,8 +4052,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.82: - resolution: {integrity: sha512-7TMXG1lXlNhD0kUiEqs+YlGV4irAdBa2quuy+XI3oJf2fBK6dQfEq4xBy65B3khrorzQS3O0oDGQ+cmdpHExHA==} + /@swc/core-linux-arm-gnueabihf@1.3.83: + resolution: {integrity: sha512-EZcsuRYhGkzofXtzwDjuuBC/suiX9s7zeg2YYXOVjWwyebb6BUhB1yad3mcykFQ20rTLO9JUyIaiaMYDHGobqw==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -4069,8 +4061,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.82: - resolution: {integrity: sha512-26JkOujbzcItPAmIbD5vHJxQVy5ihcSu3YHTKwope1h28sApZdtE7S3e2G3gsZRTIdsCQkXUtAQeqHxGWWR3pw==} + /@swc/core-linux-arm64-gnu@1.3.83: + resolution: {integrity: sha512-khI41szLHrCD/cFOcN4p2SYvZgHjhhHlcMHz5BksRrDyteSJKu0qtWRZITVom0N/9jWoAleoFhMnFTUs0H8IWA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4078,8 +4070,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.82: - resolution: {integrity: sha512-8Izj9tuuMpoc3cqiPBRtwqpO1BZ/+sfZVsEhLxrbOFlcSb8LnKyMle1g3JMMUwI4EU75RGVIzZMn8A6GOKdJbA==} + /@swc/core-linux-arm64-musl@1.3.83: + resolution: {integrity: sha512-zgT7yNOdbjHcGAwvys79mbfNLK65KBlPJWzeig+Yk7I8TVzmaQge7B6ZS/gwF9/p+8TiLYo/tZ5aF2lqlgdSVw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4087,8 +4079,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.82: - resolution: {integrity: sha512-0GSrIBScQwTaPv46T2qB7XnDYxndRCpwH4HMjh6FN+I+lfPUhTSJKW8AonqrqT1TbpFIgvzQs7EnTsD7AnSCow==} + /@swc/core-linux-x64-gnu@1.3.83: + resolution: {integrity: sha512-x+mH0Y3NC/G0YNlFmGi3vGD4VOm7IPDhh+tGrx6WtJp0BsShAbOpxtfU885rp1QweZe4qYoEmGqiEjE2WrPIdA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4096,8 +4088,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.82: - resolution: {integrity: sha512-KJUnaaepDKNzrEbwz4jv0iC3/t9x0NSoe06fnkAlhh2+NFKWKKJhVCOBTrpds8n7eylBDIXUlK34XQafjVMUdg==} + /@swc/core-linux-x64-musl@1.3.83: + resolution: {integrity: sha512-s5AYhAOmetUwUZwS5g9qb92IYgNHHBGiY2mTLImtEgpAeBwe0LPDj6WrujxCBuZnaS55mKRLLOuiMZE5TpjBNA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4105,8 +4097,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.82: - resolution: {integrity: sha512-TR3MHKhDYIyGyFcyl2d/p1ftceXcubAhX5wRSOdtOyr5+K/v3jbyCCqN7bbqO5o43wQVCwwR/drHleYyDZvg8Q==} + /@swc/core-win32-arm64-msvc@1.3.83: + resolution: {integrity: sha512-yw2rd/KVOGs95lRRB+killLWNaO1dy4uVa8Q3/4wb5txlLru07W1m041fZLzwOg/1Sh0TMjJgGxj0XHGR3ZXhQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -4114,8 +4106,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.82: - resolution: {integrity: sha512-ZX4HzVVt6hs84YUg70UvyBJnBOIspmQQM0iXSzBvOikk3zRoN7BnDwQH4GScvevCEBuou60+i4I6d5kHLOfh8Q==} + /@swc/core-win32-ia32-msvc@1.3.83: + resolution: {integrity: sha512-POW+rgZ6KWqBpwPGIRd2/3pcf46P+UrKBm4HLt5IwbHvekJ4avIM8ixJa9kK0muJNVJcDpaZgxaU1ELxtJ1j8w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -4123,8 +4115,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.82: - resolution: {integrity: sha512-4mJMnex21kbQoaHeAmHnVwQN9/XAfPszJ6n9HI7SVH+aAHnbBIR0M59/b50/CJMjTj5niUGk7EwQ3nhVNOG32g==} + /@swc/core-win32-x64-msvc@1.3.83: + resolution: {integrity: sha512-CiWQtkFnZElXQUalaHp+Wacw0Jd+24ncRYhqaJ9YKnEQP1H82CxIIuQqLM8IFaLpn5dpY6SgzaeubWF46hjcLA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -4132,8 +4124,8 @@ packages: dev: true optional: true - /@swc/core@1.3.82: - resolution: {integrity: sha512-jpC1a18HMH67018Ij2jh+hT7JBFu7ZKcQVfrZ8K6JuEY+kjXmbea07P9MbQUZbAe0FB+xi3CqEVCP73MebodJQ==} + /@swc/core@1.3.83: + resolution: {integrity: sha512-PccHDgGQlFjpExgJxH91qA3a4aifR+axCFJ4RieCoiI0m5gURE4nBhxzTBY5YU/YKTBmPO8Gc5Q6inE3+NquWg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -4144,26 +4136,26 @@ packages: dependencies: '@swc/types': 0.1.4 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.82 - '@swc/core-darwin-x64': 1.3.82 - '@swc/core-linux-arm-gnueabihf': 1.3.82 - '@swc/core-linux-arm64-gnu': 1.3.82 - '@swc/core-linux-arm64-musl': 1.3.82 - '@swc/core-linux-x64-gnu': 1.3.82 - '@swc/core-linux-x64-musl': 1.3.82 - '@swc/core-win32-arm64-msvc': 1.3.82 - '@swc/core-win32-ia32-msvc': 1.3.82 - '@swc/core-win32-x64-msvc': 1.3.82 - dev: true - - /@swc/jest@0.2.29(@swc/core@1.3.82): + '@swc/core-darwin-arm64': 1.3.83 + '@swc/core-darwin-x64': 1.3.83 + '@swc/core-linux-arm-gnueabihf': 1.3.83 + '@swc/core-linux-arm64-gnu': 1.3.83 + '@swc/core-linux-arm64-musl': 1.3.83 + '@swc/core-linux-x64-gnu': 1.3.83 + '@swc/core-linux-x64-musl': 1.3.83 + '@swc/core-win32-arm64-msvc': 1.3.83 + '@swc/core-win32-ia32-msvc': 1.3.83 + '@swc/core-win32-x64-msvc': 1.3.83 + dev: true + + /@swc/jest@0.2.29(@swc/core@1.3.83): resolution: {integrity: sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 27.5.1 - '@swc/core': 1.3.82 + '@swc/core': 1.3.83 jsonc-parser: 3.2.0 dev: true @@ -4211,8 +4203,8 @@ packages: /@types/babel__core@7.20.1: resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.22.11 - '@babel/types': 7.22.11 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 @@ -4221,27 +4213,27 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.22.11 - '@babel/types': 7.22.11 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 dev: true /@types/babel__traverse@7.20.1: resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: true /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: - '@types/connect': 3.4.35 - '@types/node': 20.5.9 + '@types/connect': 3.4.36 + '@types/node': 20.6.0 /@types/cache-manager-redis-store@2.0.2: resolution: {integrity: sha512-Y9AkjU/y3If0nlJI/8k3mMmr/1FIuZ8U7biI5vQH0uP5mOb1Xycru6NcOiVKyUe/adHYUoY/EpnvWZ8NoBqRKQ==} @@ -4260,10 +4252,10 @@ packages: '@types/express': 4.17.17 dev: true - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} @@ -4272,10 +4264,10 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true - /@types/cors@2.8.13: - resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} + /@types/cors@2.8.14: + resolution: {integrity: sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 /@types/dompurify@3.0.2: resolution: {integrity: sha512-YBL4ziFebbbfQfH5mlC+QTJsvh0oJUrWbmxKMyEdL7emlHJqGR2Qb34TEFKj+VCayBvjKy3xczMFNhugThUsfQ==} @@ -4304,7 +4296,7 @@ packages: /@types/express-serve-static-core@4.17.36: resolution: {integrity: sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 '@types/qs': 6.9.8 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -4322,14 +4314,14 @@ packages: requiresBuild: true dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: false optional: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/http-errors@2.0.1: @@ -4369,10 +4361,10 @@ packages: /@types/jsonwebtoken@9.0.2: resolution: {integrity: sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 - /@types/linkify-it@3.0.2: - resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} + /@types/linkify-it@3.0.3: + resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} requiresBuild: true dev: false optional: true @@ -4386,7 +4378,7 @@ packages: /@types/mailparser@3.4.0: resolution: {integrity: sha512-MotFinA1sT2nPFtQw1WpaF3X6I1OdbEloaixMmk924BOYqwHmlZkoi7XcVUXHI+7i0to8JguHqYj5k/E6c9Chw==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 iconv-lite: 0.6.3 dev: true @@ -4394,7 +4386,7 @@ packages: resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} requiresBuild: true dependencies: - '@types/linkify-it': 3.0.2 + '@types/linkify-it': 3.0.3 '@types/mdurl': 1.0.2 dev: false optional: true @@ -4427,8 +4419,8 @@ packages: '@types/express': 4.17.17 dev: true - /@types/node@14.18.56: - resolution: {integrity: sha512-+k+57NVS9opgrEn5l9c0gvD1r6C+PtyhVE4BTnMMRwiEA8ZO8uFcs6Yy2sXIy0eC95ZurBtRSvhZiHXBysbl6w==} + /@types/node@14.18.59: + resolution: {integrity: sha512-NWJMpBL2Xs3MY93yrD6YrrTKep8eIA6iMnfG4oIc6LrTRlBZgiSCGiY3V/Owlp6umIBLyKb4F8Q7hxWatjYH5A==} dev: false /@types/node@20.4.7: @@ -4437,22 +4429,22 @@ packages: dev: true optional: true - /@types/node@20.5.9: - resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} + /@types/node@20.6.0: + resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==} /@types/nodemailer@6.4.9: resolution: {integrity: sha512-XYG8Gv+sHjaOtUpiuytahMy2mM3rectgroNbs6R3djZEKmPNiIJwe9KqOJBGzKKnNZNKvnuvmugBgpq3w/S0ig==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - /@types/oauth@0.9.1: - resolution: {integrity: sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==} + /@types/oauth@0.9.2: + resolution: {integrity: sha512-Nu3/abQ6yR9VlsCdX3aiGsWFkj6OJvJqDvg/36t8Gwf2mFXdBZXPDN3K+2yfeA6Lo2m1Q12F8Qil9TZ48nWhOQ==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/parse-json@4.0.0: @@ -4487,7 +4479,7 @@ packages: resolution: {integrity: sha512-RZg6cYTyEGinrZn/7REYQds6zrTxoBorX1/fdaz5UHzkG8xdFE7QQxkJagCr2ETzGII58FAFDmnmbTUVMrltNA==} dependencies: '@types/express': 4.17.17 - '@types/oauth': 0.9.1 + '@types/oauth': 0.9.2 '@types/passport': 1.0.12 dev: true @@ -4508,7 +4500,7 @@ packages: resolution: {integrity: sha512-ctA5USWHqFokICj74fLx9M7T1ClqA5kshfJwU0SGLfYqkVIR9sC34CBuuRlNjTiP9NRWv4qx9jVm6kIBQZQjpQ==} dependencies: '@types/mailparser': 3.4.0 - '@types/node': 20.5.9 + '@types/node': 20.6.0 '@types/nodemailer': 6.4.9 dev: true @@ -4519,7 +4511,7 @@ packages: /@types/qrcode@1.5.2: resolution: {integrity: sha512-W4KDz75m7rJjFbyCctzCtRzZUj+PrUHV+YjqDp50sSRezTbrtEAIq2iTzC6lISARl3qw+8IlcCyljdcVJE0Wug==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/qs@6.9.8: @@ -4537,7 +4529,7 @@ packages: /@types/redis@2.8.32: resolution: {integrity: sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/rimraf@3.0.2: @@ -4545,31 +4537,31 @@ packages: requiresBuild: true dependencies: '@types/glob': 8.1.0 - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: false optional: true - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.1: + resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} dev: true /@types/send@0.17.1: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 20.5.9 + '@types/node': 20.6.0 /@types/serve-static@1.15.2: resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 - '@types/node': 20.5.9 + '@types/node': 20.6.0 /@types/sharp@0.31.1: resolution: {integrity: sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/stack-utils@2.0.1: @@ -4580,7 +4572,7 @@ packages: resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/supertest@2.0.12: @@ -4594,7 +4586,7 @@ packages: dependencies: '@hapi/hapi': 21.1.0 '@types/express': 4.17.17 - '@types/node': 20.5.9 + '@types/node': 20.6.0 fastify: 3.29.5 joi: 17.10.1 prom-client: 14.2.0 @@ -4632,7 +4624,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -4644,24 +4636,24 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.6.0(eslint@8.49.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/type-utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.6.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.6.0(eslint@8.49.0)(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.6.0 debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.49.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.6.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.6.0(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -4676,7 +4668,7 @@ packages: '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.6.0 debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.49.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -4698,7 +4690,7 @@ packages: '@typescript-eslint/visitor-keys': 6.6.0 dev: true - /@typescript-eslint/type-utils@6.6.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@6.6.0(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -4709,10 +4701,10 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.6.0(eslint@8.49.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.48.0 - ts-api-utils: 1.0.2(typescript@5.2.2) + eslint: 8.49.0 + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -4764,25 +4756,25 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 + '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.48.0 + eslint: 8.49.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -4790,19 +4782,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.6.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/utils@6.6.0(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 + '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 6.6.0 '@typescript-eslint/types': 6.6.0 '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - eslint: 8.48.0 + eslint: 8.49.0 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -5234,8 +5226,8 @@ packages: /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -5253,8 +5245,8 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /array.prototype.findlastindex@1.2.2: - resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -5264,8 +5256,8 @@ packages: get-intrinsic: 1.2.1 dev: true - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -5274,8 +5266,8 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -5284,13 +5276,14 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 define-properties: 1.2.0 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -5382,17 +5375,17 @@ packages: - debug dev: false - /babel-jest@29.6.4(@babel/core@7.22.11): + /babel-jest@29.6.4(@babel/core@7.22.17): resolution: {integrity: sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@jest/transform': 29.6.4 '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.22.11) + babel-preset-jest: 29.6.3(@babel/core@7.22.17) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -5417,48 +5410,48 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.11 + '@babel/template': 7.22.15 + '@babel/types': 7.22.17 '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.20.1 dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.11): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.17): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.11 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.11) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.11) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.11) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.11) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.11) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.22.11): + '@babel/core': 7.22.17 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.17) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.17) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.17) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.22.17): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.11) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.17) dev: true /babel-walk@3.0.0-canary-5: resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} engines: {node: '>= 10.0.0'} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.22.17 dev: false /backo2@1.0.2: @@ -5496,8 +5489,8 @@ packages: safe-buffer: 5.1.2 dev: false - /bignumber.js@9.1.1: - resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} requiresBuild: true dev: false optional: true @@ -5623,8 +5616,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001524 - electron-to-chromium: 1.4.503 + caniuse-lite: 1.0.30001532 + electron-to-chromium: 1.4.513 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true @@ -5729,8 +5722,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001524: - resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} + /caniuse-lite@1.0.30001532: + resolution: {integrity: sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==} dev: true /canvg@3.0.10: @@ -5738,9 +5731,9 @@ packages: engines: {node: '>=10.0.0'} requiresBuild: true dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.22.15 '@types/raf': 3.4.0 - core-js: 3.32.1 + core-js: 3.32.2 raf: 3.4.1 regenerator-runtime: 0.13.11 rgbcolor: 1.0.1 @@ -5853,7 +5846,7 @@ packages: resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} dependencies: '@types/validator': 13.11.1 - libphonenumber-js: 1.10.42 + libphonenumber-js: 1.10.44 validator: 13.11.0 /clean-regexp@1.0.0: @@ -5943,7 +5936,7 @@ packages: engines: {node: '>=0.6'} dependencies: cloudinary-core: 2.13.0(lodash@4.17.21) - core-js: 3.32.1 + core-js: 3.32.2 lodash: 4.17.21 q: 1.5.1 dev: false @@ -6053,13 +6046,13 @@ packages: engines: {node: '>= 12.0.0'} dev: true - /commitizen@4.3.0(@swc/core@1.3.82): + /commitizen@4.3.0(@swc/core@1.3.83): resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@swc/core@1.3.82) + cz-conventional-changelog: 3.3.0(@swc/core@1.3.83) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -6112,8 +6105,8 @@ packages: /constantinople@4.0.1: resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} dependencies: - '@babel/parser': 7.22.11 - '@babel/types': 7.22.11 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 dev: false /content-disposition@0.5.4: @@ -6161,8 +6154,8 @@ packages: keygrip: 1.1.0 dev: false - /core-js@3.32.1: - resolution: {integrity: sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==} + /core-js@3.32.2: + resolution: {integrity: sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==} requiresBuild: true dev: false @@ -6182,7 +6175,7 @@ packages: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@4.4.0(@types/node@20.4.7)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.2.2): + /cosmiconfig-typescript-loader@4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.5)(ts-node@10.9.1)(typescript@5.2.2): resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} requiresBuild: true @@ -6193,8 +6186,8 @@ packages: typescript: '>=4' dependencies: '@types/node': 20.4.7 - cosmiconfig: 8.2.0 - ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@20.4.7)(typescript@5.2.2) + cosmiconfig: 8.3.5(typescript@5.2.2) + ts-node: 10.9.1(@swc/core@1.3.83)(@types/node@20.4.7)(typescript@5.2.2) typescript: 5.2.2 dev: true optional: true @@ -6210,15 +6203,21 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@8.2.0: - resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + /cosmiconfig@8.3.5(typescript@5.2.2): + resolution: {integrity: sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw==} engines: {node: '>=14'} requiresBuild: true + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + typescript: 5.2.2 dev: true optional: true @@ -6229,7 +6228,7 @@ packages: /cron@2.4.1: resolution: {integrity: sha512-ty0hUSPuENwDtIShDFxUxWEIsqiu2vhoFtt6Vwrbg4lHGtJX2/cV2p0hH6/qaEM9Pj+i6mQoau48BO5wBpkP4w==} dependencies: - luxon: 3.4.2 + luxon: 3.4.3 dev: false /cross-env@7.0.3: @@ -6279,18 +6278,18 @@ packages: rrweb-cssom: 0.6.0 dev: false - /cz-conventional-changelog@3.3.0(@swc/core@1.3.82): + /cz-conventional-changelog@3.3.0(@swc/core@1.3.83): resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0(@swc/core@1.3.82) + commitizen: 4.3.0(@swc/core@1.3.83) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 17.7.1(@swc/core@1.3.82) + '@commitlint/load': 17.7.1(@swc/core@1.3.83) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -6317,7 +6316,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.22.15 dev: false /dateformat@4.6.3: @@ -6589,8 +6588,8 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.503: - resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==} + /electron-to-chromium@1.4.513: + resolution: {integrity: sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==} dev: true /emittery@0.12.1: @@ -6636,8 +6635,8 @@ packages: engines: {node: '>=10.2.0'} dependencies: '@types/cookie': 0.4.1 - '@types/cors': 2.8.13 - '@types/node': 20.5.9 + '@types/cors': 2.8.14 + '@types/node': 20.6.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -6685,12 +6684,12 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 + function.prototype.name: 1.1.6 get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 @@ -6712,11 +6711,11 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 @@ -6808,7 +6807,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6817,9 +6816,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 - eslint: 8.48.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + eslint: 8.49.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) fast-glob: 3.3.1 get-tsconfig: 4.7.0 is-core-module: 2.13.0 @@ -6831,7 +6830,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -6852,23 +6851,23 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.6.0(eslint@8.49.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.48.0 + eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-deprecation@1.5.0(eslint@8.48.0)(typescript@5.2.2): + /eslint-plugin-deprecation@1.5.0(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-mRcssI/tLROueBQ6yf4LnnGTijbMsTCPIpbRbPj5R5wGYVCpk1zDmAS0SEkgcUDXOPc22qMNFR24Qw7vSPrlTA==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: ^3.7.5 || ^4.0.0 || ^5.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) - eslint: 8.48.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.2.2) + eslint: 8.49.0 tslib: 2.6.2 tsutils: 3.21.0(typescript@5.2.2) typescript: 5.2.2 @@ -6876,7 +6875,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -6886,22 +6885,22 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) - array-includes: 3.1.6 - array.prototype.findlastindex: 1.2.2 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + '@typescript-eslint/parser': 6.6.0(eslint@8.49.0)(typescript@5.2.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.48.0 + eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.6 - object.groupby: 1.0.0 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.14.2 @@ -6911,7 +6910,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.6.0)(eslint@8.48.0)(jest@29.6.4)(typescript@5.2.2): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.6.0)(eslint@8.49.0)(jest@29.6.4)(typescript@5.2.2): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -6924,16 +6923,16 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) - eslint: 8.48.0 - jest: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + '@typescript-eslint/eslint-plugin': 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.2.2) + eslint: 8.49.0 + jest: 29.6.4(@types/node@20.6.0)(ts-node@10.9.1) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsdoc@46.5.1(eslint@8.48.0): + /eslint-plugin-jsdoc@46.5.1(eslint@8.49.0): resolution: {integrity: sha512-CPbvKprmEuJYoxMj5g8gXfPqUGgcqMM6jpH06Kp4pn5Uy5MrPkFKzoD7UFp2E4RBzfXbJz1+TeuEivwFVMkXBg==} engines: {node: '>=16'} peerDependencies: @@ -6944,7 +6943,7 @@ packages: comment-parser: 1.4.0 debug: 4.3.4 escape-string-regexp: 4.0.0 - eslint: 8.48.0 + eslint: 8.49.0 esquery: 1.5.0 is-builtin-module: 3.2.1 semver: 7.5.4 @@ -6953,17 +6952,17 @@ packages: - supports-color dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.48.0): + /eslint-plugin-unicorn@48.0.1(eslint@8.49.0): resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.44.0' dependencies: - '@babel/helper-validator-identifier': 7.22.5 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@babel/helper-validator-identifier': 7.22.15 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) ci-info: 3.8.0 clean-regexp: 1.0.0 - eslint: 8.48.0 + eslint: 8.49.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -6997,16 +6996,16 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint@8.48.0: - resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} + /eslint@8.49.0: + resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) '@eslint-community/regexpp': 4.8.0 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.48.0 - '@humanwhocodes/config-array': 0.11.10 + '@eslint/js': 8.49.0 + '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -7048,7 +7047,7 @@ packages: hasBin: true dependencies: core_d: 5.0.1 - eslint: 8.48.0 + eslint: 8.49.0 nanolru: 1.0.0 optionator: 0.9.3 transitivePeerDependencies: @@ -7522,8 +7521,8 @@ packages: '@fastify/busboy': 1.2.1 '@firebase/database-compat': 0.3.4 '@firebase/database-types': 0.10.4 - '@types/node': 20.5.9 - jsonwebtoken: 9.0.1 + '@types/node': 20.6.0 + jsonwebtoken: 9.0.2 jwks-rsa: 3.0.1 node-forge: 1.3.1 uuid: 9.0.0 @@ -7588,7 +7587,7 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.13 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 7.1.0 @@ -7601,7 +7600,7 @@ packages: semver: 7.5.4 tapable: 2.2.1 typescript: 5.1.6 - webpack: 5.88.2(@swc/core@1.3.82) + webpack: 5.88.2(@swc/core@1.3.83) dev: true /form-data@4.0.0: @@ -7690,8 +7689,8 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -8005,7 +8004,7 @@ packages: 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 dependencies: graphql: 16.8.0 - tslib: 2.6.2 + tslib: 2.5.0 dev: false optional: true @@ -8117,8 +8116,8 @@ packages: readable-stream: 3.6.2 dev: false - /helper-fns@2.6.18: - resolution: {integrity: sha512-MQaBjXjDvUB5PT3FAFmflOr7U0dcY4eu/Md7ax5Do5CeVfw0lyQiOIemAk9q5AYUatnlXX1xiUBULxdShoeAag==} + /helper-fns@2.6.21: + resolution: {integrity: sha512-l9y7YJEAs6xkl3JPsyk05NUw0k/vAJy4DkDCke6vATomgDesYRxIP0JJ2DC5jaeojUDU67vazFCuXvdN08m6RQ==} dev: false /hexoid@1.0.0: @@ -8428,7 +8427,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - requiresBuild: true /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -8675,8 +8673,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.22.11 - '@babel/parser': 7.22.11 + '@babel/core': 7.22.17 + '@babel/parser': 7.22.16 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -8688,8 +8686,8 @@ packages: resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.22.11 - '@babel/parser': 7.22.11 + '@babel/core': 7.22.17 + '@babel/parser': 7.22.16 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.5.4 @@ -8752,7 +8750,7 @@ packages: '@jest/expect': 29.6.4 '@jest/test-result': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -8765,7 +8763,7 @@ packages: jest-util: 29.6.3 p-limit: 3.1.0 pretty-format: 29.6.3 - pure-rand: 6.0.2 + pure-rand: 6.0.3 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -8773,7 +8771,7 @@ packages: - supports-color dev: true - /jest-cli@29.6.4(@types/node@20.5.9)(ts-node@10.9.1): + /jest-cli@29.6.4(@types/node@20.6.0)(ts-node@10.9.1): resolution: {integrity: sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -8790,7 +8788,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + jest-config: 29.6.4(@types/node@20.6.0)(ts-node@10.9.1) jest-util: 29.6.3 jest-validate: 29.6.3 prompts: 2.4.2 @@ -8802,7 +8800,7 @@ packages: - ts-node dev: true - /jest-config@29.6.4(@types/node@20.5.9)(ts-node@10.9.1): + /jest-config@29.6.4(@types/node@20.6.0)(ts-node@10.9.1): resolution: {integrity: sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -8814,11 +8812,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.22.17 '@jest/test-sequencer': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 - babel-jest: 29.6.4(@babel/core@7.22.11) + '@types/node': 20.6.0 + babel-jest: 29.6.4(@babel/core@7.22.17) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -8837,7 +8835,7 @@ packages: pretty-format: 29.6.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@20.5.9)(typescript@5.2.2) + ts-node: 10.9.1(@swc/core@1.3.83)(@types/node@20.6.0)(typescript@5.2.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -8878,7 +8876,7 @@ packages: '@jest/environment': 29.6.4 '@jest/fake-timers': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 jest-mock: 29.6.3 jest-util: 29.6.3 dev: true @@ -8894,7 +8892,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 20.5.9 + '@types/node': 20.6.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -8929,7 +8927,7 @@ packages: resolution: {integrity: sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.13 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -8945,7 +8943,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 jest-util: 29.6.3 dev: true @@ -9000,7 +8998,7 @@ packages: '@jest/test-result': 29.6.4 '@jest/transform': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -9031,7 +9029,7 @@ packages: '@jest/test-result': 29.6.4 '@jest/transform': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -9054,15 +9052,15 @@ packages: resolution: {integrity: sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.11 - '@babel/generator': 7.22.10 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.11) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.11) - '@babel/types': 7.22.11 + '@babel/core': 7.22.17 + '@babel/generator': 7.22.15 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17) + '@babel/types': 7.22.17 '@jest/expect-utils': 29.6.4 '@jest/transform': 29.6.4 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.11) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.17) chalk: 4.1.2 expect: 29.6.4 graceful-fs: 4.2.11 @@ -9083,7 +9081,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -9108,7 +9106,7 @@ packages: dependencies: '@jest/test-result': 29.6.4 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -9120,7 +9118,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -9129,13 +9127,13 @@ packages: resolution: {integrity: sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 jest-util: 29.6.3 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.6.4(@types/node@20.5.9)(ts-node@10.9.1): + /jest@29.6.4(@types/node@20.6.0)(ts-node@10.9.1): resolution: {integrity: sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -9148,7 +9146,7 @@ packages: '@jest/core': 29.6.4(ts-node@10.9.1) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + jest-cli: 29.6.4(@types/node@20.6.0)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -9165,8 +9163,8 @@ packages: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - /jose@4.14.4: - resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} + /jose@4.14.6: + resolution: {integrity: sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==} dev: false /joycon@3.1.1: @@ -9214,7 +9212,7 @@ packages: hasBin: true requiresBuild: true dependencies: - '@babel/parser': 7.22.11 + '@babel/parser': 7.22.16 '@jsdoc/salty': 0.2.5 '@types/markdown-it': 12.2.3 bluebird: 3.7.2 @@ -9262,7 +9260,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 - ws: 8.13.0 + ws: 8.14.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -9291,7 +9289,7 @@ packages: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} requiresBuild: true dependencies: - bignumber.js: 9.1.1 + bignumber.js: 9.1.2 dev: false optional: true @@ -9358,12 +9356,18 @@ packages: semver: 7.5.4 dev: false - /jsonwebtoken@9.0.1: - resolution: {integrity: sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==} + /jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 - lodash: 4.17.21 + 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.1.1 ms: 2.1.3 semver: 7.5.4 dev: false @@ -9371,13 +9375,13 @@ packages: /jspdf@2.5.1: resolution: {integrity: sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==} dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.22.15 atob: 2.1.2 btoa: 1.2.1 fflate: 0.4.8 optionalDependencies: canvg: 3.0.10 - core-js: 3.32.1 + core-js: 3.32.2 dompurify: 2.4.7 html2canvas: 1.4.1 dev: false @@ -9414,7 +9418,7 @@ packages: '@types/express': 4.17.17 '@types/jsonwebtoken': 9.0.2 debug: 4.3.4 - jose: 4.14.4 + jose: 4.14.6 limiter: 1.1.5 lru-memoizer: 2.2.0 transitivePeerDependencies: @@ -9558,8 +9562,8 @@ packages: libqp: 2.0.1 dev: false - /libphonenumber-js@1.10.42: - resolution: {integrity: sha512-/as6xI3D4Utfd28CCUPvMqX4oVXGMzk4ytzR52ju+sI/sN68LZpr9ED3Kh2kRfBbOALsLeeOSWdtyUPIbNWPrw==} + /libphonenumber-js@1.10.44: + resolution: {integrity: sha512-svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ==} /libqp@2.0.1: resolution: {integrity: sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==} @@ -9585,7 +9589,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - requiresBuild: true dev: true /lines-and-columns@2.0.3: @@ -9676,15 +9679,32 @@ packages: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} dev: false + /lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: false + /lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} dev: false + /lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: false + + /lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: false + + /lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: false + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - requiresBuild: true - dev: true - optional: true + + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: false /lodash.map@4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} @@ -9700,6 +9720,10 @@ packages: dev: true optional: true + /lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: false + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} requiresBuild: true @@ -9778,8 +9802,8 @@ packages: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: false - /luxon@3.4.2: - resolution: {integrity: sha512-uBoAVCVcajsrqy3pv7eo5jEUz1oeLmCcnMv8n4AJpT5hbpN9lUssAXibNElpbLce3Mhm9dyBzwYLs9zctM/0tA==} + /luxon@3.4.3: + resolution: {integrity: sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==} engines: {node: '>=12'} dev: false @@ -10021,8 +10045,8 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minio@7.1.1: - resolution: {integrity: sha512-HBLRFXs1CkNwAkahU+j1ilB9YS/Tmkdc6orpxVW1YN11NlEJyLjarIpBYu/inF+dj+tJIsA8PSKNnRmUNm+9qQ==} + /minio@7.1.3: + resolution: {integrity: sha512-xPrLjWkTT5E7H7VnzOjF//xBp9I40jYB4aWhb2xTFopXXfw+Wo82DDWngdUju7Doy3Wk7R8C4LAgwhLHHnf0wA==} engines: {node: ^16 || ^18 || >=20} dependencies: async: 3.2.4 @@ -10205,7 +10229,7 @@ packages: dependencies: '@nestjs/common': 10.2.4(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/core': 10.2.4(@nestjs/common@10.2.4)(@nestjs/platform-express@10.2.4)(@nestjs/websockets@10.2.4)(reflect-metadata@0.1.13)(rxjs@7.8.1) - minio: 7.1.1 + minio: 7.1.3 dev: false /nestjs-pino@3.4.0(@nestjs/common@10.2.4)(pino-http@8.5.0): @@ -10220,18 +10244,18 @@ packages: pino-http: 8.5.0 dev: false - /nestjs-throttler-storage-redis@0.3.3(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@nestjs/throttler@4.2.1)(ioredis@5.3.2)(reflect-metadata@0.1.13): - resolution: {integrity: sha512-AwiWgcugi3wfE0loWJhcubgxCWDfnPy9M2BQOQFZhozc7PGktjJRIMlydwhDQzWYtRrgZT92cSIup20iQ/x+lA==} + /nestjs-throttler-storage-redis@0.4.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(@nestjs/throttler@5.0.0)(ioredis@5.3.2)(reflect-metadata@0.1.13): + resolution: {integrity: sha512-1z6FR0jAaEQFlox56lyuU7lxtib3Vus/MGJyUipA2T7k/f+rB7qG3ll6MqfB3u6Cnx2X9VJ9OJkRu0C/kAZ/2g==} peerDependencies: - '@nestjs/common': '>=9.4.1' - '@nestjs/core': '>=9.4.1' + '@nestjs/common': '>=10.2.4' + '@nestjs/core': '>=10.2.4' '@nestjs/throttler': '>=4.0.0' ioredis: ^5.3.2 reflect-metadata: ^0.1.13 dependencies: '@nestjs/common': 10.2.4(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/core': 10.2.4(@nestjs/common@10.2.4)(@nestjs/platform-express@10.2.4)(@nestjs/websockets@10.2.4)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/throttler': 4.2.1(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13) + '@nestjs/throttler': 5.0.0(@nestjs/common@10.2.4)(@nestjs/core@10.2.4)(reflect-metadata@0.1.13) ioredis: 5.3.2 reflect-metadata: 0.1.13 dev: false @@ -10294,8 +10318,8 @@ packages: engines: {node: '>=6.0.0'} dev: false - /nodemailer@6.9.4: - resolution: {integrity: sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA==} + /nodemailer@6.9.5: + resolution: {integrity: sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==} engines: {node: '>=6.0.0'} dev: false @@ -10398,8 +10422,8 @@ packages: object-keys: 1.1.1 dev: true - /object.fromentries@2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -10407,8 +10431,8 @@ packages: es-abstract: 1.22.1 dev: true - /object.groupby@1.0.0: - resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -10602,17 +10626,17 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 dev: true - /parse-json@7.0.0: - resolution: {integrity: sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==} + /parse-json@7.1.0: + resolution: {integrity: sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==} engines: {node: '>=16'} dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 3.0.0 lines-and-columns: 2.0.3 @@ -10658,7 +10682,7 @@ packages: /passport-jwt@4.0.1: resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==} dependencies: - jsonwebtoken: 9.0.1 + jsonwebtoken: 9.0.2 passport-strategy: 1.0.0 dev: false @@ -10666,8 +10690,8 @@ packages: resolution: {integrity: sha512-KBzxei/qvt2UDkS1qXz2VR2XajbWB5808W+oDpeMsfGqMgBKicaDX7HOrgAVpvw2q+fWOuh21LWe+kYyZPogDA==} engines: {node: '>=10'} dependencies: - '@types/node': 14.18.56 - jsonwebtoken: 9.0.1 + '@types/node': 14.18.59 + jsonwebtoken: 9.0.2 dev: false /passport-oauth2@1.7.0: @@ -10838,8 +10862,8 @@ packages: hasBin: true dev: true - /pino-abstract-transport@1.0.0: - resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} + /pino-abstract-transport@1.1.0: + resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} dependencies: readable-stream: 4.4.2 split2: 4.2.0 @@ -10849,7 +10873,7 @@ packages: resolution: {integrity: sha512-kLGKNLyfWfdmrG1Ug0YdYpCTGbNcuD/YGC3g+elRU/Cm44UTs+tj/dZTxDN3bYauekxFxdLZhJuZdKKl0cml9w==} dependencies: get-caller-file: 2.0.5 - pino: 8.15.0 + pino: 8.15.1 pino-std-serializers: 6.2.2 process-warning: 2.2.0 dev: false @@ -10866,7 +10890,7 @@ packages: joycon: 3.1.1 minimist: 1.2.8 on-exit-leak-free: 2.1.0 - pino-abstract-transport: 1.0.0 + pino-abstract-transport: 1.1.0 pump: 3.0.0 readable-stream: 4.4.2 secure-json-parse: 2.7.0 @@ -10895,14 +10919,14 @@ packages: sonic-boom: 1.4.1 dev: true - /pino@8.15.0: - resolution: {integrity: sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==} + /pino@8.15.1: + resolution: {integrity: sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA==} hasBin: true dependencies: atomic-sleep: 1.0.0 fast-redact: 3.3.0 on-exit-leak-free: 2.1.0 - pino-abstract-transport: 1.0.0 + pino-abstract-transport: 1.1.0 pino-std-serializers: 6.2.2 process-warning: 2.2.0 quick-format-unescaped: 4.0.4 @@ -10938,8 +10962,8 @@ packages: resolution: {integrity: sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==} engines: {node: '>=12.0.0'} - /poolifier@2.6.41: - resolution: {integrity: sha512-HBKsWwrPAObND5rl5zpROZNxg74nvCBOny4/ThA0S0Ez+vC/QOnPpS24qUXJsiyKGFPm+NcoxemLYbhb17uYyg==} + /poolifier@2.6.44: + resolution: {integrity: sha512-e/EkC+DU52sZFeLXmXvjj/5wbae86Oe1Z1xJp20vjBjpMehlJwzUPO0asF4qDH+CxuHuSo662oHm/qFE8kqhNQ==} engines: {node: '>=16.14.0', pnpm: '>=8.6.0'} requiresBuild: true dev: false @@ -11011,7 +11035,7 @@ packages: fixpack: 4.0.0 get-port: 5.1.1 mailparser: 3.6.5 - nodemailer: 6.9.4 + nodemailer: 6.9.5 open: 7.4.2 p-event: 4.2.0 p-wait-for: 3.2.0 @@ -11105,7 +11129,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.5.9 + '@types/node': 20.6.0 long: 5.2.3 dev: false optional: true @@ -11125,7 +11149,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.5.9 + '@types/node': 20.6.0 long: 5.2.3 dev: false optional: true @@ -11250,8 +11274,8 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /pure-rand@6.0.2: - resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + /pure-rand@6.0.3: + resolution: {integrity: sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==} dev: true /q@1.5.1: @@ -11377,7 +11401,7 @@ packages: dependencies: '@types/normalize-package-data': 2.4.1 normalize-package-data: 6.0.0 - parse-json: 7.0.0 + parse-json: 7.1.0 type-fest: 4.3.1 dev: false @@ -11687,8 +11711,8 @@ packages: dependencies: tslib: 2.6.2 - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.2 @@ -12111,8 +12135,8 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -12120,16 +12144,16 @@ packages: es-abstract: 1.22.1 dev: true - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -12204,11 +12228,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stripe@13.4.0: - resolution: {integrity: sha512-UxvRzu46AJALIueMH3/jn++qJlOoM5s+uoHXagr36xTFOj7Knrh28WFiI73dMDkngBElK68cG3WI+LgRulHw6g==} + /stripe@13.5.0: + resolution: {integrity: sha512-odGQbvkDVxR7ldxXth7kWaUv6M31bsPMYKCBR8oIIRDoiR4MfxWaLdz5h7QQDsGtelZugqx7AEVoC6twST+0VQ==} engines: {node: '>=12.*'} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 qs: 6.11.2 dev: false @@ -12363,8 +12387,8 @@ packages: readable-stream: 3.6.2 dev: false - /tar@6.1.15: - resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -12400,7 +12424,7 @@ packages: dev: false optional: true - /terser-webpack-plugin@5.3.9(@swc/core@1.3.82)(webpack@5.88.2): + /terser-webpack-plugin@5.3.9(@swc/core@1.3.83)(webpack@5.88.2): resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -12417,16 +12441,16 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.19 - '@swc/core': 1.3.82 + '@swc/core': 1.3.83 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.19.2 - webpack: 5.88.2(@swc/core@1.3.82) + terser: 5.19.4 + webpack: 5.88.2(@swc/core@1.3.83) dev: true - /terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + /terser@5.19.4: + resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==} engines: {node: '>=10'} hasBin: true dependencies: @@ -12559,8 +12583,8 @@ packages: hasBin: true dev: true - /ts-api-utils@1.0.2(typescript@5.2.2): - resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' @@ -12580,7 +12604,7 @@ packages: micromatch: 4.0.5 semver: 7.5.4 typescript: 5.2.2 - webpack: 5.88.2(@swc/core@1.3.82) + webpack: 5.88.2(@swc/core@1.3.83) dev: true /ts-morph@19.0.0: @@ -12590,7 +12614,7 @@ packages: code-block-writer: 12.0.0 dev: false - /ts-node@10.9.1(@swc/core@1.3.82)(@types/node@20.4.7)(typescript@5.2.2): + /ts-node@10.9.1(@swc/core@1.3.83)(@types/node@20.4.7)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -12605,7 +12629,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.82 + '@swc/core': 1.3.83 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 @@ -12623,7 +12647,7 @@ packages: dev: true optional: true - /ts-node@10.9.1(@swc/core@1.3.82)(@types/node@20.5.9)(typescript@5.2.2): + /ts-node@10.9.1(@swc/core@1.3.83)(@types/node@20.6.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -12638,12 +12662,12 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.82 + '@swc/core': 1.3.83 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.5.9 + '@types/node': 20.6.0 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -12715,14 +12739,14 @@ packages: safe-buffer: 5.2.1 dev: false - /twilio@4.16.0: - resolution: {integrity: sha512-hY3ol03QrDKowKS4Px6BrCYyrQfv7IyCz4AjiwIZIes/iwievPGyewKHaAzKKLZp1hRWmhGu26aWyhPyfTXudA==} + /twilio@4.17.0: + resolution: {integrity: sha512-fjY/VbmbEipXJEbBE3Zc8IS0Fzk1vDjUAMtyJIT1VbTN6xl+hIhoZ4FnXrd13JlrqaoonwOxAUnSjJBoHyNtmw==} engines: {node: '>=14.0'} dependencies: axios: 0.26.1 dayjs: 1.11.9 https-proxy-agent: 5.0.1 - jsonwebtoken: 9.0.1 + jsonwebtoken: 9.0.2 qs: 6.11.2 scmp: 2.1.0 url-parse: 1.5.10 @@ -12917,8 +12941,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - /unprofane@1.0.3: - resolution: {integrity: sha512-iJiydgmiWjcOqhWD0hxy7qfp3sm1uQ8ozIXd7B5A2nu69uhedxwn3yMpaPNlJWsfnW8ql2ClekGy5WM8huwz3w==} + /unprofane@1.0.4: + resolution: {integrity: sha512-eF6wUOrus9rFJRq9vc6sCyYmbBxUfRn1s5gXENSfZOpTHSakWDbw52IpdSwargGXa/KgxwNCyDN8riQF2IuMgQ==} dev: false /update-browserslist-db@1.0.11(browserslist@4.21.10): @@ -13080,7 +13104,7 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.88.2(@swc/core@1.3.82): + /webpack@5.88.2(@swc/core@1.3.83): resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -13111,7 +13135,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(@swc/core@1.3.82)(webpack@5.88.2) + terser-webpack-plugin: 5.3.9(@swc/core@1.3.83)(webpack@5.88.2) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -13222,8 +13246,8 @@ packages: resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} engines: {node: '>= 10.0.0'} dependencies: - '@babel/parser': 7.22.11 - '@babel/types': 7.22.11 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 assert-never: 1.2.1 babel-walk: 3.0.0-canary-5 dev: false @@ -13314,8 +13338,8 @@ packages: dev: false optional: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.14.1: + resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 diff --git a/src/common/@types/classes/common.response.ts b/src/common/@types/classes/common.response.ts index 916e260e..c4d6265d 100644 --- a/src/common/@types/classes/common.response.ts +++ b/src/common/@types/classes/common.response.ts @@ -1,18 +1,18 @@ export class AuthenticationResponse { /** -* @example fb9eac5f-eb94-489b-8fca-24324558be18 -*/ + * @example fb9eac5f-eb94-489b-8fca-24324558be18 + */ user: { idx?: string; }; /** -* @example eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXKYjj.eyJ -*/ + * @example eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXKYjj.eyJ + */ accessToken: string; /** -* @example eyJh3d06e6e3e152ae839a6623c3cb6f961a.eyJ -*/ + * @example eyJh3d06e6e3e152ae839a6623c3cb6f961a.eyJ + */ refreshToken?: string; } diff --git a/src/common/@types/classes/cursor.response.ts b/src/common/@types/classes/cursor.response.ts index d9b1a382..87fbeea3 100644 --- a/src/common/@types/classes/cursor.response.ts +++ b/src/common/@types/classes/cursor.response.ts @@ -4,26 +4,26 @@ import type { PaginationAbstractResponse } from "../interfaces"; export class CursorMeta { /** -* @example AdVxY2F0ZWdvcnlfaWQ9MjMx -*/ + * @example AdVxY2F0ZWdvcnlfaWQ9MjMx + */ @ApiProperty() nextCursor: string; /** -* @example false -*/ + * @example false + */ @ApiProperty() hasNextPage: boolean; /** -* @example true -*/ + * @example true + */ @ApiProperty() hasPreviousPage: boolean; /** -* @example "lorem ipsum" -*/ + * @example "lorem ipsum" + */ @ApiProperty() search?: string; } diff --git a/src/common/@types/classes/offset.response.ts b/src/common/@types/classes/offset.response.ts index e8bbfd25..71b11e9d 100644 --- a/src/common/@types/classes/offset.response.ts +++ b/src/common/@types/classes/offset.response.ts @@ -6,38 +6,38 @@ import type { OffsetPaginationDto } from "@common/dtos/offset-pagination.dto"; export class OffsetMeta { /** -* @example 10 -*/ + * @example 10 + */ @ApiProperty() readonly page: number; /** -* @example 50 -*/ + * @example 50 + */ @ApiProperty() readonly limit: number; /** -* @example 20 -*/ + * @example 20 + */ @ApiProperty() readonly itemCount: number; /** -* @example 100 -*/ + * @example 100 + */ @ApiProperty() readonly pageCount: number; /** -* @example true -*/ + * @example true + */ @ApiProperty() readonly hasPreviousPage: boolean; /** -* @example true -*/ + * @example true + */ @ApiProperty() readonly hasNextPage: boolean; diff --git a/src/common/@types/interfaces/crud.interface.ts b/src/common/@types/interfaces/crud.interface.ts index 372b3e32..70f91811 100644 --- a/src/common/@types/interfaces/crud.interface.ts +++ b/src/common/@types/interfaces/crud.interface.ts @@ -9,8 +9,8 @@ import type { User } from "@entities"; import type { BaseEntity } from "@common/database"; /** -* common interface that enforces common methods for controller and service -*/ + * common interface that enforces common methods for controller and service + */ export interface Crud< Entity extends BaseEntity, PaginationRequest extends TPaginationRequest, diff --git a/src/common/@types/interfaces/file.interface.ts b/src/common/@types/interfaces/file.interface.ts index 179fde12..d80a2fd7 100644 --- a/src/common/@types/interfaces/file.interface.ts +++ b/src/common/@types/interfaces/file.interface.ts @@ -7,19 +7,19 @@ export interface File { /** Name of the file on the uploader's computer. */ originalname: string; /** -* Value of the `Content-Transfer-Encoding` header for this file. -* @deprecated since July 2015 -* @see RFC 7578, Section 4.7 -*/ + * Value of the `Content-Transfer-Encoding` header for this file. + * @deprecated since July 2015 + * @see RFC 7578, Section 4.7 + */ encoding: string; /** Value of the `Content-Type` header for this file. */ mimetype: string; /** Size of the file in bytes. */ size: number; /** -* A readable stream of this file. Only available to the `_handleFile` -* callback for custom `StorageEngine`s. -*/ + * A readable stream of this file. Only available to the `_handleFile` + * callback for custom `StorageEngine`s. + */ stream: Readable; /** `DiskStorage` only: Directory to which this file has been uploaded. */ destination: string; diff --git a/src/common/database/base.entity.ts b/src/common/database/base.entity.ts index ae2a8363..58224e68 100644 --- a/src/common/database/base.entity.ts +++ b/src/common/database/base.entity.ts @@ -5,8 +5,8 @@ import { ApiHideProperty } from "@nestjs/swagger"; import { HelperService } from "@common/helpers"; /** -* Base entity class for mikroorm models, that all other entities of the same type should extend. -*/ + * Base entity class for mikroorm models, that all other entities of the same type should extend. + */ export abstract class BaseEntity { @ApiHideProperty() @@ -14,38 +14,38 @@ export abstract class BaseEntity { id!: number; /** -* The unique id of the entity -*/ + * The unique id of the entity + */ @Property({ index: true }) idx?: string = randomUUID(); /** -* To enable or disable the entity -*/ + * To enable or disable the entity + */ @Property() isActive? = true; /** -* Marked true when entity is soft deleted -*/ + * Marked true when entity is soft deleted + */ @Property({ hidden: true }) isDeleted? = false; /** -* The date that the entity was soft-deleted. Nullable because it's not set until the entity is soft-deleted. -*/ + * The date that the entity was soft-deleted. Nullable because it's not set until the entity is soft-deleted. + */ @Property() deletedAt?: Date | null; /** -* The date that the entity was created -*/ + * The date that the entity was created + */ @Property() createdAt? = HelperService.getTimeInUtc(new Date()); /** -* The date that the entity was last updated -*/ + * The date that the entity was last updated + */ @Property({ onUpdate: () => HelperService.getTimeInUtc(new Date()), hidden: true, diff --git a/src/common/database/base.repository.ts b/src/common/database/base.repository.ts index dc5b27c2..03fe2ab6 100644 --- a/src/common/database/base.repository.ts +++ b/src/common/database/base.repository.ts @@ -36,31 +36,30 @@ export class BaseRepository extends EntityRepository { private readonly encoding: BufferEncoding = "base64"; /** -* The exists function checks if there are any records that match the given filter query. -* @param where - The `where` parameter is a filter query that specifies the conditions for the -* existence check. It is used to filter the records in the database and determine if any records match -* the specified conditions. -* @returns The `exists` method is returning an `Observable`. -*/ + * The exists function checks if there are any records that match the given filter query. + * @param where - The `where` parameter is a filter query that specifies the conditions for the + * existence check. It is used to filter the records in the database and determine if any records match + * the specified conditions. + * @returns The method is returning an Observable of type boolean. + */ exists(where: FilterQuery): Observable { return from(this.qb().where(where).getCount()).pipe(map(count => count > 0)); } /** -* The function `getEntityName()` returns the entity name of type `EntityName`. -* @returns The method `getEntityName()` is returning an object of type `EntityName`. -*/ + * The function `getEntityName()` returns the entity name of type `EntityName`. + * @returns The entity name of type `EntityName`. + */ getEntityName(): EntityName { return this.entityName; } /** -* -* -* @param {T} entity -* @return {*} {EntityManager} -* @memberof BaseRepositroy -*/ + * + * + * @param entity - The entity to be removed + * @returns The entityManager + */ softRemove(entity: T): EntityManager { entity.deletedAt = new Date(); entity.isDeleted = true; @@ -70,12 +69,10 @@ export class BaseRepository extends EntityRepository { } /** -* soft remove -* -* @param {T} entity -* @return {*} {Promise} -* @memberof BaseRepositroy -*/ + * soft remove + * @param entity - The entity to be removed + * @returns observable of the removed entity + */ softRemoveAndFlush(entity: T): Observable { entity.deletedAt = new Date(); entity.isDeleted = true; @@ -84,12 +81,12 @@ export class BaseRepository extends EntityRepository { } /** -* Replace the return value of {@link EntityRepository.findAndCount} with an -* object. -* @param where -* @param options -* @returns -*/ + * Replace the return value of {@link EntityRepository.findAndCount} with an + * object. + * @param where - FilterQuery + * @param options - FindOptions + * @returns An object containing the total number of entities and the entities + */ findAndPaginate( where: FilterQuery, options?: FindOptions, @@ -100,10 +97,10 @@ export class BaseRepository extends EntityRepository { } /** -* Returns the removed entity rather than `this`. -* @param entity -* @returns -*/ + * Returns the removed entity rather than `this`. + * @param entity - The entity to be removed + * @returns The removed entity + */ delete(entity: T): T { this.em.remove(entity); @@ -111,11 +108,11 @@ export class BaseRepository extends EntityRepository { } /** -* It finds an entity by the given `where` clause, and then updates it with the given `update` object -* @param where - FilterQuery -* @param update - Partial>> -* @returns The entity that was updated -*/ + * It finds an entity by the given `where` clause, and then updates it with the given `update` object + * @param where - FilterQuery + * @param update - Partial>> + * @returns The entity that was updated + */ findAndUpdate(where: FilterQuery, update: EntityData): Observable { return from(this.findOne(where)).pipe( switchMap((entity) => { @@ -137,10 +134,10 @@ export class BaseRepository extends EntityRepository { } /** -* It finds an entity by the given `where` clause, and if it exists, it deletes it -* @param where - FilterQuery -* @returns The entity that was deleted -*/ + * It finds an entity by the given `where` clause, and if it exists, it deletes it + * @param where - FilterQuery + * @returns The entity that was deleted + */ findAndDelete(where: FilterQuery): Observable { return from(this.findOne(where)).pipe( switchMap((entity) => { @@ -162,10 +159,10 @@ export class BaseRepository extends EntityRepository { } /** -* It finds an entity by the given `where` clause, and if it exists, it soft deletes it -* @param where - FilterQuery -* @returns The entity that was soft deleted. -*/ + * It finds an entity by the given `where` clause, and if it exists, it soft deletes it + * @param where - FilterQuery + * @returns The entity that was soft deleted. + */ findAndSoftDelete(where: FilterQuery): Observable { return from(this.findOne(where)).pipe( switchMap((entity) => { @@ -186,8 +183,12 @@ export class BaseRepository extends EntityRepository { } /** -* Gets the where clause filter logic for the query builder pagination -*/ + * Gets the where clause filter logic for the query builder pagination + * @param cursor - The cursor to use for the pagination + * @param decoded - The decoded cursor + * @param order - The order to use for the pagination + * @returns The where clause filter logic + */ private getFilters( cursor: keyof T, decoded: string | number | Date, @@ -201,8 +202,11 @@ export class BaseRepository extends EntityRepository { } /** -* Takes a base64 cursor and returns the string or number value -*/ + * Takes a base64 cursor and returns the string or number value + * @param cursor - The base64 cursor + * @param cursorType - The type of the cursor + * @returns The decoded cursor + */ decodeCursor( cursor: string, cursorType: CursorType = CursorType.STRING, @@ -233,9 +237,10 @@ cursorType: CursorType = CursorType.STRING, } /** -* Takes a date, string or number and returns the base64 -* representation of it -*/ + * Takes a date, string or number and returns the base64 representation of it + * @param value - The value to encode + * @returns The base64 encoded value + */ encodeCursor(value: Date | string | number): string { let string = value.toString(); @@ -246,8 +251,11 @@ cursorType: CursorType = CursorType.STRING, } /** -* Makes the order by query for MikroORM orderBy method. -*/ + * Makes the order by query for MikroORM orderBy method. + * @param cursor - The cursor to use for the pagination + * @param order - The order to use for the pagination + * @returns The order by query + */ private getOrderBy( cursor: keyof T, order: QueryOrder, @@ -258,12 +266,12 @@ cursorType: CursorType = CursorType.STRING, } /** -* This is a TypeScript function that performs offset pagination on a query builder and returns an -* observable of the paginated results. -* @param dto - An object containing two properties: -* @returns An Observable of OffsetPagination, which contains the results of a query with pagination -* options applied. -*/ + * This is a TypeScript function that performs offset pagination on a query builder and returns an + * observable of the paginated results. + * @param dto - An object containing two properties: + * @returns An Observable of OffsetPagination, which contains the results of a query with pagination + * options applied. + */ qbOffsetPagination( dto: QBOffsetPaginationOptions, ): Observable> { @@ -330,8 +338,10 @@ cursorType: CursorType = CursorType.STRING, } /** -* Takes a query builder and returns the entities paginated using cursor pagination -*/ + * Takes a query builder and returns the entities paginated using cursor pagination + * @param dto - An object containing two properties + * @returns An Observable of CursorPaginationResponse, which contains the results of a query with + */ async qbCursorPagination( dto: QBCursorPaginationOptions, ): Promise> { @@ -420,9 +430,6 @@ cursorType: CursorType = CursorType.STRING, }); } - /** -* Takes an entity array and returns the paginated type of that entity array -*/ paginateCursor({ instances, currentCount, @@ -454,9 +461,17 @@ search, } /** -* Takes an entity repository and a FilterQuery and returns the paginated -* entities -*/ + * Takes an entity repository and a FilterQuery and returns the paginated + * entities + * @param cursor - The cursor to use for the pagination + * @param first - The number of entities to return + * @param order - The order to use for the pagination + * @param repo - The entity repository + * @param where - The where clause to use for the pagination + * @param after - The cursor to use for the pagination + * @param afterCursor - The type of the cursor + * @returns The paginated entities + */ async findAndCountPagination( cursor: keyof T, first: number, diff --git a/src/common/database/mikro-orm-cli.config.ts b/src/common/database/mikro-orm-cli.config.ts index 2996f08b..c01936c2 100644 --- a/src/common/database/mikro-orm-cli.config.ts +++ b/src/common/database/mikro-orm-cli.config.ts @@ -9,14 +9,12 @@ import { Logger, NotFoundException } from "@nestjs/common"; import { BaseRepository } from "./base.repository"; /** -* -* `MikroOrmConfig` is a configuration object for `MikroORM` that is used to -* This is required to run mikro-orm cli -* -* @see https://mikro-orm.io/docs/configuration -* @see https://mikro-orm.io/docs/cli -* -*/ + * + *`MikroOrmConfig` is a configuration object for `MikroORM` that is used to + *This is required to run mikro-orm cli + * @see https://mikro-orm.io/docs/configuration + * @see https://mikro-orm.io/docs/cli + */ const logger = new Logger("MikroORM"); diff --git a/src/common/database/seeders/user.seeder.ts b/src/common/database/seeders/user.seeder.ts index 22c1b680..6c491fb4 100644 --- a/src/common/database/seeders/user.seeder.ts +++ b/src/common/database/seeders/user.seeder.ts @@ -4,11 +4,10 @@ import { randomNumber } from "helper-fns"; import { CommentFactory, PostFactory, TagFactory, UserFactory } from "../factories"; /** -* Runs the UserSeeder, creating new users with associated posts, comments, and tags. -* -* @param em - The EntityManager instance to use for database operations. -* @returns A Promise that resolves when the seeder has finished running. -*/ + * Runs the UserSeeder, creating new users with associated posts, comments, and tags. + * @param em - The EntityManager instance to use for database operations. + * @returns A Promise that resolves when the seeder has finished running. + */ export class UserSeeder extends Seeder { async run(em: EntityManager): Promise { diff --git a/src/common/decorators/api-file.decorator.ts b/src/common/decorators/api-file.decorator.ts index 7e7d53d8..70fee0a3 100644 --- a/src/common/decorators/api-file.decorator.ts +++ b/src/common/decorators/api-file.decorator.ts @@ -21,11 +21,11 @@ interface ApiFilesOptions extends ApiFileOptions { } /** -* It's a decorator that uses the Multer FileInterceptor to intercept a file upload and save it to the -* server -* @returns A function that returns a function that returns a function. -* @param options_ -*/ + * It's a decorator that uses the Multer FileInterceptor to intercept a file upload and save it to the + * server + * @param options_ - IApiFileOptions - The options for the decorator. + * @returns A function that returns a decorator. + */ export const ApiFile = (options_?: ApiFileOptions) => { const options: ApiFileOptions = { fieldName: "file", required: false, ...options_ }; @@ -48,11 +48,11 @@ export const ApiFile = (options_?: ApiFileOptions) => { }; /** -* It adds the `@UseInterceptors(FilesInterceptor(...))` decorator to the route handler, and adds the -* `@ApiConsumes("multipart/form-data")` and `@ApiBody({...})` decorators to the route handler -* @param {ApiFilesOptions} [options_] - IApiFilesOptions - The options for the decorator. -* @returns A function that returns a decorator. -*/ + * It adds the `@UseInterceptors(FilesInterceptor(...))` decorator to the route handler, and adds the + * `@ApiConsumes("multipart/form-data")` and `@ApiBody({...})` decorators to the route handler + * @param options_ - The options for the decorator. + * @returns A function that returns a decorator. + */ export const ApiFiles = (options_?: ApiFilesOptions) => { const options: ApiFilesOptions = { fieldName: "files", @@ -85,12 +85,12 @@ export const ApiFiles = (options_?: ApiFilesOptions) => { }; /** -* It takes an array of MulterFields and returns a decorator that will add the appropriate OpenAPI -* schema to the endpoint -* @param {(MulterField & { required?: boolean })[]} options - An array of MulterFields. -* @param {MulterOptions} [localOptions] - MulterOptions - These are the options that are passed to -* multer. -*/ + * It takes an array of MulterFields and returns a decorator that will add the appropriate OpenAPI + * schema to the endpoint + * @param options - An array of MulterFields. + * @param localOptions - These are the options that are passed to + * multer. + */ export const ApiFileFields = ( options: (MulterField & { required?: boolean })[], diff --git a/src/common/decorators/api-paginated.decorator.ts b/src/common/decorators/api-paginated.decorator.ts index abd93745..d2acd834 100644 --- a/src/common/decorators/api-paginated.decorator.ts +++ b/src/common/decorators/api-paginated.decorator.ts @@ -3,6 +3,16 @@ import { applyDecorators } from "@nestjs/common"; import { ApiExtraModels, ApiOkResponse, ApiOperation, getSchemaPath } from "@nestjs/swagger"; import { CursorPaginationResponse, OffsetPaginationResponse } from "@common/@types"; +/** + * The `ApiPaginatedResponse` function is a TypeScript function that generates decorators for Swagger + * API documentation for paginated responses. + * @param {TModel} model - The `model` parameter is a generic type that represents the type of the + * model being paginated. It is used to generate the response schema for the paginated API endpoint. + * @returns The function `ApiPaginatedResponse` returns a decorator that can be applied to an API + * endpoint. The decorator adds Swagger documentation for a paginated response. The response schema + * includes information about the pagination type (cursor or offset) and the data items returned. + */ + export const ApiPaginatedResponse = (model: TModel) => { return applyDecorators( ApiOperation({ summary: `${model.name.toLowerCase()} list` }), diff --git a/src/common/decorators/auth.decorator.ts b/src/common/decorators/auth.decorator.ts index aa43c803..07fa393d 100644 --- a/src/common/decorators/auth.decorator.ts +++ b/src/common/decorators/auth.decorator.ts @@ -11,11 +11,10 @@ interface AuthGuard { } /** -* It's a decorator that uses the JwtAuthGuard and PoliciesGuard guards, and returns an unauthorized -* response if the user is not authenticated -* @returns A function that returns a function -* -*/ + * It's a decorator that uses the JwtAuthGuard and PoliciesGuard guards, and returns an unauthorized + * response if the user is not authenticated + * @returns A function that returns a function + */ export const Auth = (options_?: AuthGuard) => { const options: AuthGuard = { diff --git a/src/common/decorators/controller.decorator.ts b/src/common/decorators/controller.decorator.ts index 59c7fe1d..366b138a 100644 --- a/src/common/decorators/controller.decorator.ts +++ b/src/common/decorators/controller.decorator.ts @@ -4,12 +4,12 @@ import { capitalize } from "helper-fns"; import { Auth } from "./auth.decorator"; /** -* It takes a name and a boolean value and returns a decorator that applies the Controller, ApiTags, -* and Auth decorators to the class -* @param {string} name - The name of the controller. -* @param [secured=true] - boolean - whether or not the controller should be secured -* @returns A function that takes in a class and returns a class. -*/ + * It takes a name and a boolean value and returns a decorator that applies the Controller, ApiTags, + * and Auth decorators to the class + * @param name - The name of the controller. + * @param secured - whether or not the controller should be secured + * @returns A function that takes in a class and returns a class. + */ export const GenericController = (name: string, secured = true) => { const decsToApply: (ClassDecorator | MethodDecorator | PropertyDecorator)[] = [ ApiTags(capitalize(name)), diff --git a/src/common/decorators/custom-cache.decorator.ts b/src/common/decorators/custom-cache.decorator.ts index 23020389..83d49ae7 100644 --- a/src/common/decorators/custom-cache.decorator.ts +++ b/src/common/decorators/custom-cache.decorator.ts @@ -4,14 +4,14 @@ import { NoCache } from "./nocache.decorator"; import { CacheKeyInterceptor } from "@common/interceptors"; /** -* @description use this to override the default cache interceptor. -* By default, Nest uses the request URL (in an HTTP app) or cache key -* (in websockets and microservices apps, set through the @CacheKey() decorator) -* to associate cache records with your endpoints. Nevertheless, sometimes you might want -* to set up tracking based on different factors, for example, using HTTP headers -* (e.g. Authorization to properly identify profile endpoints). -* -*/ + * Use this to override the default cache interceptor. + * By default, Nest uses the request URL (in an HTTP app) or cache key + * (in websockets and microservices apps, set through the @CacheKey() decorator) + * to associate cache records with your endpoints. Nevertheless, sometimes you might want + * to set up tracking based on different factors, for example, using HTTP headers + * (e.g. Authorization to properly identify profile endpoints). + * @returns A function that returns a decorator. + */ export const ApplyCustomCache = () => { return applyDecorators(NoCache, UseInterceptors(CacheKeyInterceptor)); }; diff --git a/src/common/decorators/nocache.decorator.ts b/src/common/decorators/nocache.decorator.ts index 6c342cdd..c0ee0d40 100644 --- a/src/common/decorators/nocache.decorator.ts +++ b/src/common/decorators/nocache.decorator.ts @@ -2,6 +2,7 @@ import { SetMetadata } from "@nestjs/common"; import { IGNORE_CACHING_META } from "@common/constant"; /** -* It sets a metadata key called "ignoreCaching" to true -*/ + * It sets a metadata key called "ignoreCaching" to true + * @returns A function that sets a metadata key called "ignoreCaching" to true + */ export const NoCache = () => SetMetadata(IGNORE_CACHING_META, true); diff --git a/src/common/decorators/public.decorator.ts b/src/common/decorators/public.decorator.ts index c8883dde..d29a9b50 100644 --- a/src/common/decorators/public.decorator.ts +++ b/src/common/decorators/public.decorator.ts @@ -2,8 +2,9 @@ import { SetMetadata, applyDecorators } from "@nestjs/common"; import { IS_PUBLIC_KEY_META, SWAGGER_API_SECURITY_KEY_META } from "@common/constant"; /** -* It sets a metadata key called "isPublic" to true -*/ + * It sets a metadata key called "isPublic" to true + * @returns A function that sets a metadata key called "isPublic" to true + */ const publicAuthMiddleware = SetMetadata(IS_PUBLIC_KEY_META, true); const publicAuthSwagger = SetMetadata(SWAGGER_API_SECURITY_KEY_META, [IS_PUBLIC_KEY_META]); diff --git a/src/common/decorators/swagger-api.decorator.ts b/src/common/decorators/swagger-api.decorator.ts index 7b66832e..2fac8993 100644 --- a/src/common/decorators/swagger-api.decorator.ts +++ b/src/common/decorators/swagger-api.decorator.ts @@ -11,13 +11,6 @@ interface SwaggerResponseOptions { response?: Type; } -/** -* It takes in a string for the operation summary, a string for the not found response, a string for -* the bad request response, and an array of strings for the parameters, and returns a function that -* applies the appropriate decorators to the class method -* @param - operation - The operation name -* @returns A function that takes a class and returns a class. -*/ export const SwaggerResponse = ({ operation, notFound, diff --git a/src/common/decorators/user.decorator.ts b/src/common/decorators/user.decorator.ts index be7fa5eb..9e8d936e 100644 --- a/src/common/decorators/user.decorator.ts +++ b/src/common/decorators/user.decorator.ts @@ -2,7 +2,9 @@ import type { ExecutionContext } from "@nestjs/common"; import { createParamDecorator } from "@nestjs/common"; import type { User } from "@entities"; -/* A decorator that will be used to get the user from the request. */ +/* +The `LoggedInUser` decorator is used to get the user object from the request object. +*/ export const LoggedInUser = createParamDecorator((data: keyof User, context: ExecutionContext) => { let request = context.switchToHttp().getRequest(); diff --git a/src/common/decorators/uuid-param.decorator.ts b/src/common/decorators/uuid-param.decorator.ts index 8ff8bcf0..009dbb25 100644 --- a/src/common/decorators/uuid-param.decorator.ts +++ b/src/common/decorators/uuid-param.decorator.ts @@ -2,12 +2,12 @@ import type { PipeTransform, Type } from "@nestjs/common"; import { HttpStatus, Param, ParseUUIDPipe } from "@nestjs/common"; /** -* It's a decorator that takes a property name and a list of pipes, and returns a decorator that takes -* a class and a property name, and returns a decorator that takes a target, a property key, and a -* parameter index, and returns a decorator that takes a target, a property key, and a parameter index -* @param {string} property - The name of the property to bind the value to. -* @returns A ParameterDecorator -*/ + * It's a decorator that takes a property name and a list of pipes, and returns a decorator that takes + * a class and a property name, and returns a decorator that takes a target, a property key, and a + * parameter index, and returns a decorator that takes a target, a property key, and a parameter index + * @param property - The name of the property to bind the value to. + * @returns A ParameterDecorator + */ class CustomException extends Error { message = "UUID must be a valid UUID format (e.g. xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)"; diff --git a/src/common/decorators/validation/is-date-field.validator.ts b/src/common/decorators/validation/is-date-field.validator.ts index eeadb80e..8386f1f0 100644 --- a/src/common/decorators/validation/is-date-field.validator.ts +++ b/src/common/decorators/validation/is-date-field.validator.ts @@ -3,6 +3,12 @@ import { ArrayNotEmpty, IsArray, IsDateString, IsNotEmpty, IsOptional } from "cl import type { DateFieldOptions } from "@common/@types"; import { validationI18nMessage } from "@lib/i18n"; +/** + * It's a decorator that validates that the field is an date + * @param options_ - DateFieldOptions + * @returns A decorator function that takes in a target, propertyKey, and descriptor. + */ + export const IsDateField = (options_?: DateFieldOptions) => { const options: DateFieldOptions = { each: false, diff --git a/src/common/decorators/validation/is-enum-field.decorator.ts b/src/common/decorators/validation/is-enum-field.decorator.ts index 4dca68c1..b48ab33e 100644 --- a/src/common/decorators/validation/is-enum-field.decorator.ts +++ b/src/common/decorators/validation/is-enum-field.decorator.ts @@ -5,11 +5,11 @@ import { i18nValidationMessage } from "nestjs-i18n"; import type { EnumFieldOptions } from "@common/@types"; /** -* It's a decorator that validates that the field is an enum value -* @param {object} entity - object - The enum object to validate against. -* @param {EnumFieldOptions} [options_] - EnumFieldOptions -* @returns A decorator function that takes in a target, propertyKey, and descriptor. -*/ + * It's a decorator that validates that the field is an enum value + * @param entity - object - The enum object to validate against. + * @param options_ - EnumFieldOptions + * @returns A decorator function that takes in a target, propertyKey, and descriptor. + */ export const IsEnumField = (entity: Record, options_?: EnumFieldOptions) => { const options: EnumFieldOptions = { each: false, diff --git a/src/common/decorators/validation/is-number-field.decorator.ts b/src/common/decorators/validation/is-number-field.decorator.ts index 42428aa5..d4d2c804 100644 --- a/src/common/decorators/validation/is-number-field.decorator.ts +++ b/src/common/decorators/validation/is-number-field.decorator.ts @@ -15,10 +15,10 @@ import { validationI18nMessage } from "@lib/i18n"; import type { NumberFieldOptions } from "@common/@types"; /** -* It's a decorator that validates a number field -* @param {NumberFieldOptions} [options_] - NumberFieldOptions -* @returns A function that returns a decorator. -*/ + * It's a decorator that validates a number field + * @param options_ - NumberFieldOptions + * @returns A function that returns a decorator. + */ export const IsNumberField = (options_?: NumberFieldOptions) => { const options: NumberFieldOptions = { diff --git a/src/common/decorators/validation/is-password.validator.ts b/src/common/decorators/validation/is-password.validator.ts index e9219b22..6ad18a47 100644 --- a/src/common/decorators/validation/is-password.validator.ts +++ b/src/common/decorators/validation/is-password.validator.ts @@ -10,14 +10,14 @@ import { import { PASSWORD_REGEX } from "@common/constant"; /** -* -* Rules used: -* This regex checks that password should contain at least one lowercase letter, one uppercase letter, one numeric digit, and one special character -* -* -* Tests at https://regex101.com/r/m6CWm9/1 -* -*/ + * + * Rules used: + * This regex checks that password should contain at least one lowercase letter, one uppercase letter, one numeric digit, and one special character + * + * + * Tests at https://regex101.com/r/m6CWm9/1 + * + */ @ValidatorConstraint({ async: true }) class IsPasswordConstraint implements ValidatorConstraintInterface { diff --git a/src/common/decorators/validation/is-string-field.decorator.ts b/src/common/decorators/validation/is-string-field.decorator.ts index 12bdee5e..1fac5e9d 100644 --- a/src/common/decorators/validation/is-string-field.decorator.ts +++ b/src/common/decorators/validation/is-string-field.decorator.ts @@ -16,10 +16,10 @@ import { validationI18nMessage } from "@lib/i18n"; import type { StringFieldOptions } from "@common/@types"; /** -* It's a decorator that validates a string field -* @param {StringFieldOptions} [options_] - StringFieldOptions -* @returns A function that returns a decorator. -*/ + * It's a decorator that validates a string field + * @param options_ - StringFieldOptions + * @returns A function that returns a decorator. + */ export const IsStringField = (options_?: StringFieldOptions) => { const options: StringFieldOptions = { diff --git a/src/common/decorators/validation/is-username.validator.ts b/src/common/decorators/validation/is-username.validator.ts index 02f71534..67d7547a 100644 --- a/src/common/decorators/validation/is-username.validator.ts +++ b/src/common/decorators/validation/is-username.validator.ts @@ -1,13 +1,13 @@ /** -* -* Rules used: -* This regex allows usernames to contain letters (both uppercase and lowercase), numbers, underscores, hyphens, and periods, -* but ensures that they do not start with a number, underscore, hyphen, or period. -* -* -* Tests at https://regex101.com/r/m5AT6j/2 -* -*/ + * + * Rules used: + * This regex allows usernames to contain letters (both uppercase and lowercase), numbers, underscores, hyphens, and periods, + * but ensures that they do not start with a number, underscore, hyphen, or period. + * + * + * Tests at https://regex101.com/r/m5AT6j/2 + * + */ import { applyDecorators } from "@nestjs/common"; import type { diff --git a/src/common/decorators/validation/is-uuid.validator.ts b/src/common/decorators/validation/is-uuid.validator.ts index 68e4f7d0..bf0a3ad3 100644 --- a/src/common/decorators/validation/is-uuid.validator.ts +++ b/src/common/decorators/validation/is-uuid.validator.ts @@ -3,6 +3,11 @@ import { ArrayNotEmpty, IsArray, IsNotEmpty, IsOptional, IsUUID } from "class-va import type { EnumFieldOptions as UUIDFieldOptions } from "@common/@types"; import { validationI18nMessage } from "@lib/i18n"; +/** + * It's a decorator that validates that the field is an uuid value + * @param options_ - UUIDFieldOptions + * @returns A decorator function that takes in a target, propertyKey, and descriptor. + */ export const IsUUIDField = (options_?: UUIDFieldOptions) => { const options: UUIDFieldOptions = { each: false, diff --git a/src/common/decorators/validation/min-max-length.decorator.ts b/src/common/decorators/validation/min-max-length.decorator.ts index 9ab82e92..844a9c57 100644 --- a/src/common/decorators/validation/min-max-length.decorator.ts +++ b/src/common/decorators/validation/min-max-length.decorator.ts @@ -4,10 +4,10 @@ import type { MinMaxLengthOptions } from "@common/@types"; import { validationI18nMessage } from "@lib/i18n"; /** -* It's a decorator that validates the length of a string to be between a minimum and maximum length -* @param {MinMaxLengthOptions} [options_] - MinMaxLengthOptions -* returns -*/ + * It's a decorator that validates the length of a string to be between a minimum and maximum length + * @param options_ - MinMaxLengthOptions + * @returns A function that takes in a target, propertyKey, and descriptor + */ export const MinMaxLength = (options_?: MinMaxLengthOptions) => { const options: MinMaxLengthOptions = { minLength: 2, maxLength: 500, each: false, ...options_ }; diff --git a/src/common/dtos/cursor-pagination.dto.ts b/src/common/dtos/cursor-pagination.dto.ts index 90dc1732..a839b9c2 100644 --- a/src/common/dtos/cursor-pagination.dto.ts +++ b/src/common/dtos/cursor-pagination.dto.ts @@ -10,22 +10,22 @@ import { validationI18nMessage } from "@lib/i18n"; export class CursorPaginationDto extends PaginationDto { @ApiHideProperty() @Allow() -type: PaginationType.CURSOR = PaginationType.CURSOR; + type: PaginationType.CURSOR = PaginationType.CURSOR; /** -* The cursor of the page you are requesting -*/ + * The cursor of the page you are requesting + */ @IsStringField({ required: false }) @IsBase64({ message: validationI18nMessage("validation.isDataType", { type: "base64", }), }) -after?: string; + after?: string; /** -* Results page you want to retrieve (0..N) -*/ + * Results page you want to retrieve (0..N) + */ @IsNumberField({ required: false }) -first = 10; + first = 10; } diff --git a/src/common/dtos/offset-pagination.dto.ts b/src/common/dtos/offset-pagination.dto.ts index 28f72dc2..7dc7e78a 100644 --- a/src/common/dtos/offset-pagination.dto.ts +++ b/src/common/dtos/offset-pagination.dto.ts @@ -8,29 +8,29 @@ import { PaginationType, QueryOrder } from "@common/@types"; export class OffsetPaginationDto extends PaginationDto { @ApiHideProperty() @Allow() -type: PaginationType.OFFSET = PaginationType.OFFSET; + type: PaginationType.OFFSET = PaginationType.OFFSET; /** -* Results page you want to retrieve (0..N) -*/ + * Results page you want to retrieve (0..N) + */ @IsNumberField({ required: false }) readonly page = 1; /** -* Number of results per page -*/ + * Number of results per page + */ @IsNumberField({ required: false, max: 50 }) readonly limit = 10; /** -* Sorting order -*/ + * Sorting order + */ @IsEnumField(QueryOrder, { required: false }) readonly order: QueryOrder = QueryOrder.DESC; /** -* Sorting criteria -*/ + * Sorting criteria + */ @IsStringField({ required: false, maxLength: 50 }) readonly sort = "createdAt"; diff --git a/src/common/dtos/pagination.dto.ts b/src/common/dtos/pagination.dto.ts index e600a902..31cef392 100644 --- a/src/common/dtos/pagination.dto.ts +++ b/src/common/dtos/pagination.dto.ts @@ -3,32 +3,33 @@ import { i18nValidationMessage } from "nestjs-i18n"; import { IsDateField, IsStringField, ToBoolean } from "@common/decorators"; export abstract class PaginationDto { -/** -* From date filter -*/ + /** + * From date filter + */ @IsOptional() @IsDateField() -from?: Date; + from?: Date; /** -* From date filter -*/ + * From date filter + */ @IsOptional() @IsDateField() -to?: Date; + to?: Date; /** -* The search query -*/ + * The search query + */ @IsStringField({ required: false, minLength: 1, maxLength: 100 }) -search: string; + search: string; - /** The `withDeleted` property is a boolean flag that -* indicates whether to include deleted items in the -* results or not. -*/ + /** + * The `withDeleted` property is a boolean flag that + * indicates whether to include deleted items in the + * results or not. + */ @IsOptional() @ToBoolean() @IsBoolean({ @@ -36,19 +37,21 @@ search: string; type: "boolean", }), }) -withDeleted = false; + withDeleted = false; - /** The `relations` property is used to specify which related -* entities should be included in the query -* results. -*/ + /** + * The `relations` property is used to specify which related + * entities should be included in the query + * results. + */ @IsStringField({ required: false, each: true }) -relations = []; + relations = []; - /** The `fields` property is used to specify which -* entities field should be included in the query -* results. -*/ + /** + * The `fields` property is used to specify which + * entities field should be included in the query + * results. + */ @IsStringField({ required: false, each: true }) -fields = []; + fields = []; } diff --git a/src/common/guards/auth.guard.ts b/src/common/guards/auth.guard.ts index 3e2dab27..9687b25c 100644 --- a/src/common/guards/auth.guard.ts +++ b/src/common/guards/auth.guard.ts @@ -5,10 +5,10 @@ import { JwtService } from "@nestjs/jwt"; import { translate } from "@lib/i18n"; /** -* -* The purpose of this guard is to provide a layer for extracting idx from jwt -* -*/ + * + * The purpose of this guard is to provide a layer for extracting idx from jwt + * + */ @Injectable() export class AuthGuard implements CanActivate { diff --git a/src/common/guards/throttle.guard.ts b/src/common/guards/throttle.guard.ts index d508c17d..22b57d82 100644 --- a/src/common/guards/throttle.guard.ts +++ b/src/common/guards/throttle.guard.ts @@ -7,7 +7,7 @@ import { THROTTLE_LIMIT_RESPONSE } from "@common/constant"; export class CustomThrottlerGuard extends ThrottlerGuard { protected errorMessage = THROTTLE_LIMIT_RESPONSE; - protected getTracker(request: Request): string { - return request.ips.length > 0 ? request.ips[0] : request.ip; // individualize IP extraction to meet your own needs + protected async getTracker(request: Request): Promise { + return request.ips.length > 0 ? request.ips[0] : request.ip; } } diff --git a/src/common/interceptors/clear-cache.interceptor.ts b/src/common/interceptors/clear-cache.interceptor.ts index 83718109..08dfdf08 100644 --- a/src/common/interceptors/clear-cache.interceptor.ts +++ b/src/common/interceptors/clear-cache.interceptor.ts @@ -6,10 +6,10 @@ import type { CallHandler, ExecutionContext, NestInterceptor } from "@nestjs/com import { CacheService } from "@lib/cache"; /** -* -* This interceptor is used to automatically clear the cache after a successful mutation. -* -*/ + * + * This interceptor is used to automatically clear the cache after a successful mutation. + * + */ @Injectable() export class ClearCacheInterceptor implements NestInterceptor { constructor(private readonly cacheService: CacheService) {} diff --git a/src/common/interceptors/logger.interceptor.ts b/src/common/interceptors/logger.interceptor.ts index a3c84b01..7052fd82 100644 --- a/src/common/interceptors/logger.interceptor.ts +++ b/src/common/interceptors/logger.interceptor.ts @@ -14,8 +14,8 @@ import type { Observable } from "rxjs"; import { tap } from "rxjs/operators"; /** -* Interceptor that logs input/output requests -*/ + * Interceptor that logs input/output requests + */ @Injectable() export class LoggingInterceptor implements NestInterceptor { private readonly ctxPrefix: string = LoggingInterceptor.name; @@ -23,18 +23,20 @@ export class LoggingInterceptor implements NestInterceptor { private userPrefix = ""; /** -* Prefix setter -* ex. [MyPrefix - LoggingInterceptor - 200 - GET - /] -*/ + * Prefix setter + * ex. [MyPrefix - LoggingInterceptor - 200 - GET - /] + * @param prefix - prefix to be added to the log + */ setUserPrefix(prefix: string): void { this.userPrefix = `${prefix} - `; } /** -* Intercept method, logs before and after the request being processed -* @param context details about the current request -* @param call$ implements the handle method that returns an Observable -*/ + * Intercept method, logs before and after the request being processed + * @param context details about the current request + * @param call$ implements the handle method that returns an Observable + * @returns Observable of unknown type + */ intercept(context: ExecutionContext, call$: CallHandler): Observable { const request: Request = context.switchToHttp().getRequest(); const { method, url, body, headers } = request; @@ -64,10 +66,10 @@ export class LoggingInterceptor implements NestInterceptor { } /** -* Logs the request response in success cases -* @param body body returned -* @param context details about the current request -*/ + * Logs the request response in success cases + * @param body body returned + * @param context details about the current request + */ private logNext(body: unknown, context: ExecutionContext): void { const request: Request = context.switchToHttp().getRequest(); const response: Response = context.switchToHttp().getResponse(); @@ -86,10 +88,10 @@ export class LoggingInterceptor implements NestInterceptor { } /** -* Logs the request response in success cases -* @param error Error object -* @param context details about the current request -*/ + * Logs the request response in success cases + * @param error Error object + * @param context details about the current request + */ private logError(error: Error, context: ExecutionContext): void { const request: Request = context.switchToHttp().getRequest(); const { method, url, body } = request; diff --git a/src/common/interceptors/request-sanitizer.interceptor.ts b/src/common/interceptors/request-sanitizer.interceptor.ts index 5b41f7d8..aa00b751 100644 --- a/src/common/interceptors/request-sanitizer.interceptor.ts +++ b/src/common/interceptors/request-sanitizer.interceptor.ts @@ -45,12 +45,12 @@ export class RequestSanitizerInterceptor implements NestInterceptor { } /** -* It takes a key and a value, and if the value is a string and the key is not in the except array, it -* returns the value after it has been sanitized -* @param key - The key of the object -* @param {string} value - The value to be sanitized. -* @returns The value of the key is being returned. -*/ + * It takes a key and a value, and if the value is a string and the key is not in the except array, it + * returns the value after it has been sanitized + * @param key - The key of the object + * @param value - The value to be sanitized. + * @returns The value of the key is being returned. + */ transform(key: T, value: string): string { if (this.isString(value) && !this.except.includes(key)) return DOMPurify.sanitize(value.trim()); @@ -59,13 +59,13 @@ export class RequestSanitizerInterceptor implements NestInterceptor { } /** -* "If the value is a string or a String object, return true, otherwise return false." -* -* The above function is a type guard. It narrows the type of the value parameter from unknown to -* string -* @param {unknown} value - The value to check. -* @returns A boolean value. -*/ + * "If the value is a string or a String object, return true, otherwise return false." + * + * The above function is a type guard. It narrows the type of the value parameter from unknown to + * string + * @param value - The value to check. + * @returns A boolean value. + */ isString(value: unknown): value is string { return typeof value === "string" || value instanceof String; } diff --git a/src/common/misc/file.ts b/src/common/misc/file.ts index 7277da5d..eec88d67 100644 --- a/src/common/misc/file.ts +++ b/src/common/misc/file.ts @@ -19,14 +19,14 @@ export const ImageMulterOption: MulterOptions = { }, }; -/** -* -* It takes in a fileType, fileSize, and required boolean and returns a ParseFilePipeBuilder object -* with the fileType and fileSize validators added to it -* @param {FileValidator} - IFileValidator -* @returns A function that returns a ParseFilePipeBuilder -* -*/ +// /** +// * +// * It takes in a fileType, fileSize, and required boolean and returns a ParseFilePipeBuilder object +// * with the fileType and fileSize validators added to it +// * @param {*} - IFileValidator +// * @returns A function that returns a ParseFilePipeBuilder +// * +// */ export const fileValidatorPipe = ({ fileType = FileType.IMAGE, fileSize = FileSize.IMAGE, diff --git a/src/common/pipes/sharp.pipe.ts b/src/common/pipes/sharp.pipe.ts index 3e80e22e..fc66a7a3 100644 --- a/src/common/pipes/sharp.pipe.ts +++ b/src/common/pipes/sharp.pipe.ts @@ -6,14 +6,14 @@ import sharp from "sharp"; import type { File } from "@common/@types"; /** -* -* Usage: -* uploadImage(@UploadedFile(SharpPipe) image: string) -* -* This only works for files that are uploaded through multer with file storage -* -* -*/ + * + * Usage: + * uploadImage(@UploadedFile(SharpPipe) image: string) + * + * This only works for files that are uploaded through multer with file storage + * + * + */ @Injectable() export class SharpPipe implements PipeTransform> { diff --git a/src/common/swagger/swagger.plugin.ts b/src/common/swagger/swagger.plugin.ts index e845eef8..aac7177f 100644 --- a/src/common/swagger/swagger.plugin.ts +++ b/src/common/swagger/swagger.plugin.ts @@ -1,6 +1,7 @@ /** * The `CaseInsensitiveFilterPlugin` function returns an object with a `fn` property that contains an * `opsFilter` method, which filters an array of tagged operations based on a case-insensitive phrase. + * @returns An object with a `fn` property that contains an `opsFilter` method. */ const CaseInsensitiveFilterPlugin = () => { return { diff --git a/src/lib/aws/aws.interface.ts b/src/lib/aws/aws.interface.ts index ae87a424..08642c0f 100644 --- a/src/lib/aws/aws.interface.ts +++ b/src/lib/aws/aws.interface.ts @@ -1,6 +1,6 @@ import type { ObjectCannedACL } from "@aws-sdk/client-s3"; -export interface IAwsS3 { +export interface AwsS3 { path: string; pathWithFilename: string; filename: string; @@ -9,11 +9,11 @@ export interface IAwsS3 { mime: string; } -export interface IAwsS3MultiPart extends IAwsS3 { +export interface AwsS3MultiPart extends AwsS3 { uploadId: string; } -export interface IAwsS3PutItemOptions { +export interface AwsS3PutItemOptions { path: string; acl?: ObjectCannedACL; } diff --git a/src/lib/aws/aws.s3.service.ts b/src/lib/aws/aws.s3.service.ts index 949fbac3..56f74c2f 100644 --- a/src/lib/aws/aws.s3.service.ts +++ b/src/lib/aws/aws.s3.service.ts @@ -16,9 +16,9 @@ import { Inject, Injectable } from "@nestjs/common"; import { lookup } from "mime-types"; import type { - IAwsS3, - IAwsS3MultiPart, - IAwsS3PutItemOptions, + AwsS3, + AwsS3MultiPart, + AwsS3PutItemOptions, } from "./aws.interface"; import { AwsModuleOptions } from "./aws.interface"; import { MODULE_OPTIONS_TOKEN } from "./aws.module"; @@ -49,7 +49,7 @@ export class AwsS3Service { /** * The function "listBucket" asynchronously retrieves a list of bucket names from an S3 client and * returns them as an array of strings. - * @returns an array of strings, which are the names of the buckets. + * @returns An array of strings, which are the names of the buckets. */ async listBucket(): Promise { const listBucket = await this.s3Client.send(new ListBucketsCommand({})); @@ -61,12 +61,12 @@ export class AwsS3Service { /** * The function `listItemInBucket` retrieves a list of objects in an AWS S3 bucket and maps them to a * custom interface. - * @param {string} [prefix] - The `prefix` parameter is an optional string that represents a prefix to + * @param prefix - The `prefix` parameter is an optional string that represents a prefix to * filter the objects in the S3 bucket. It is used to retrieve only the objects whose keys start with * the specified prefix. If no prefix is provided, all objects in the bucket will be listed. * @returns The function `listItemInBucket` returns an array of objects of type `IAwsS3[]`. */ - async listItemInBucket(prefix?: string): Promise { + async listItemInBucket(prefix?: string): Promise { const listItems = await this.s3Client.send( new ListObjectsV2Command({ Bucket: this.bucket, @@ -96,9 +96,9 @@ export class AwsS3Service { /** * The function `getItemInBucket` retrieves an item from an S3 bucket using the specified filename and * optional path. - * @param {string} filename - The filename parameter is a string that represents the name of the file + * @param filename - The filename parameter is a string that represents the name of the file * you want to retrieve from the bucket. - * @param {string} [path] - The `path` parameter is an optional string that represents the directory or + * @param path - The `path` parameter is an optional string that represents the directory or * subdirectory within the bucket where the file is located. If provided, it will be appended to the * filename to form the complete key for retrieving the file from the bucket. * @returns the body of the item retrieved from the specified bucket in the AWS S3 storage. @@ -121,9 +121,9 @@ export class AwsS3Service { /** * The function generates a unique file name by appending a timestamp, random number, and replacing * spaces with hyphens. - * @param {string} originalFilename - The `originalFilename` parameter is a string that represents the + * @param originalFilename - The `originalFilename` parameter is a string that represents the * name of the file that needs to be generated. - * @returns a string value. + * @returns A string value. */ private generateFileName(originalFilename: string): string { const [name, extension] = originalFilename.split("."); @@ -135,12 +135,12 @@ export class AwsS3Service { } /** - * The function "getMime" takes a file name as input and returns the corresponding MIME type based - * on the file's extension. - * @param {string} fileName - The `fileName` parameter is a string that represents the name of a file, - * including its extension. - * @returns a string, which is the MIME type associated with the file extension. - */ + * The function "getMime" takes a file name as input and returns the corresponding MIME type based + * on the file's extension. + * @param fileName - The `fileName` parameter is a string that represents the name of a file, + * including its extension. + * @returns A string, which is the MIME type associated with the file extension. + */ private getMime(fileName: string): string { const extension = fileName .slice(fileName.lastIndexOf(".") + 1, fileName.length) @@ -151,11 +151,11 @@ export class AwsS3Service { /** * The `putItemInBucket` function uploads a file to an AWS S3 bucket and returns information about the * uploaded file. - * @param {string} originalFilename - The original filename of the item being uploaded to the S3 + * @param originalFilename - The original filename of the item being uploaded to the S3 * bucket. - * @param {Uint8Array | Buffer} content - The `content` parameter is the actual content of the file + * @param content - The `content` parameter is the actual content of the file * that you want to put in the S3 bucket. It can be either a `Uint8Array` or a `Buffer` object. - * @param {IAwsS3PutItemOptions} [options] - The `options` parameter is an optional object that can + * @param options - The `options` parameter is an optional object that can * contain additional configuration options for uploading the item to the S3 bucket. It can include * properties such as ACL (Access Control List), CacheControl, ContentDisposition, ContentEncoding, * ContentLanguage, Metadata, and StorageClass. These options allow you to @@ -164,8 +164,8 @@ export class AwsS3Service { async putItemInBucket( originalFilename: string, content: Uint8Array | Buffer, - options?: IAwsS3PutItemOptions, - ): Promise { + options?: AwsS3PutItemOptions, + ): Promise { const filename = this.generateFileName(originalFilename); const { key, mime, path } = this.getOptions(options, filename); await this.s3Client.send( @@ -189,7 +189,7 @@ export class AwsS3Service { /** * The `deleteItemInBucket` function deletes a file with the specified filename from an S3 bucket. - * @param {string} filename - The filename parameter is a string that represents the name of the file + * @param filename - The filename parameter is a string that represents the name of the file * you want to delete from the bucket. */ async deleteItemInBucket(filename: string): Promise { @@ -203,7 +203,7 @@ export class AwsS3Service { /** * The `deleteItemsInBucket` function deletes multiple items from an S3 bucket using their filenames. - * @param {string[]} filenames - The `filenames` parameter is an array of strings that represents the + * @param filenames - The `filenames` parameter is an array of strings that represents the * names of the files you want to delete from a bucket. */ @@ -224,7 +224,7 @@ export class AwsS3Service { /** * The `deleteFolder` function deletes a folder and all its contents from an S3 bucket. - * @param {string} directory - The `directory` parameter is a string that represents the name or path + * @param directory - The `directory` parameter is a string that represents the name or path * of the folder you want to delete from an S3 bucket. */ async deleteFolder(directory: string): Promise { @@ -259,17 +259,17 @@ export class AwsS3Service { /** * The `createMultiPart` function creates a multipart upload for a file in AWS S3 and returns * information about the upload. - * @param {string} filename - The filename parameter is a string that represents the name of the file + * @param filename - The filename parameter is a string that represents the name of the file * that will be uploaded to AWS S3. - * @param {IAwsS3PutItemOptions} [options] - The `options` parameter is an optional object that can + * @param options - The `options` parameter is an optional object that can * contain additional configuration options for the S3 upload. It can have the following properties: * @returns The function `createMultiPart` returns a Promise that resolves to an object of type * `IAwsS3MultiPart`. */ async createMultiPart( filename: string, - options?: IAwsS3PutItemOptions, - ): Promise { + options?: AwsS3PutItemOptions, + ): Promise { const { key, mime, path, acl } = this.getOptions(options, filename); const response = await this.s3Client.send( @@ -294,13 +294,13 @@ export class AwsS3Service { /** * The function `getOptions` returns an object containing key, mime, path, and acl based on the * provided options and filename. - * @param {IAwsS3PutItemOptions} options - An object containing optional parameters for the AWS S3 Put + * @param options - An object containing optional parameters for the AWS S3 Put * Item operation. - * @param {string} filename - The `filename` parameter is a string that represents the name of the + * @param filename - The `filename` parameter is a string that represents the name of the * file. - * @returns an object with the properties `key`, `mime`, `path`, and `acl`. + * @returns An object with the properties `key`, `mime`, `path`, and `acl`. */ - private getOptions(options: IAwsS3PutItemOptions, filename: string) { + private getOptions(options: AwsS3PutItemOptions, filename: string) { let path = options?.path ?? undefined; const acl = options?.acl ?? "public-read"; @@ -315,18 +315,18 @@ export class AwsS3Service { /** * The `uploadPart` function uploads a part of a file to an AWS S3 bucket using the AWS SDK for * JavaScript. - * @param {string} filename - The filename parameter is a string that represents the name of the file + * @param filename - The filename parameter is a string that represents the name of the file * being uploaded. - * @param {Buffer} content - The `content` parameter is a `Buffer` that represents the content of the + * @param content - The `content` parameter is a `Buffer` that represents the content of the * file being uploaded. It is the actual data that will be uploaded to the S3 bucket. - * @param {string} uploadId - The `uploadId` parameter is a unique identifier for the multipart upload. + * @param uploadId - The `uploadId` parameter is a unique identifier for the multipart upload. * It is obtained when initiating the multipart upload and is used to associate the uploaded parts with * the correct upload. - * @param {number} partNumber - The `partNumber` parameter represents the number of the part being + * @param partNumber - The `partNumber` parameter represents the number of the part being * uploaded. In a multipart upload, a large file is divided into smaller parts, and each part is * uploaded separately. The `partNumber` is used to identify the order of the parts and ensure they are * assembled correctly when the upload is - * @param {IAwsS3PutItemOptions} [options] - The `options` parameter is an optional object that + * @param options - The `options` parameter is an optional object that * contains additional configuration options for the upload. It is of type `IAwsS3PutItemOptions`. */ async uploadPart( @@ -334,7 +334,7 @@ export class AwsS3Service { content: Buffer, uploadId: string, partNumber: number, - options?: IAwsS3PutItemOptions, + options?: AwsS3PutItemOptions, ): Promise { let path: string = options?.path ?? undefined; diff --git a/src/lib/cache/cache.module.ts b/src/lib/cache/cache.module.ts index f331734e..3624505a 100644 --- a/src/lib/cache/cache.module.ts +++ b/src/lib/cache/cache.module.ts @@ -1,32 +1,30 @@ import type { CacheStore } from "@nestjs/cache-manager"; import { CacheModule } from "@nestjs/cache-manager"; import { Global, Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { redisStore } from "cache-manager-ioredis-yet"; import { CacheService } from "./cache.service"; -import { NestConfigModule } from "@lib/config/config.module"; - @Global() @Module({ imports: [ CacheModule.registerAsync({ - imports: [NestConfigModule], - useFactory: async (configService: ConfigService) => { + imports: [ConfigModule], + inject: [ConfigService], + useFactory: async (configService: ConfigService) => { const store = await redisStore({ - host: configService.get("redis.host"), - port: configService.get("redis.port"), - username: configService.get("redis.username"), - password: configService.get("redis.password"), + host: configService.get("redis.host", { infer: true }), + port: configService.get("redis.port", { infer: true }), + username: configService.get("redis.username", { infer: true }), + password: configService.get("redis.password", { infer: true }), keepAlive: 120, - ttl: configService.get("redis.ttl"), + ttl: configService.get("redis.ttl", { infer: true }), }); return { store: store as unknown as CacheStore, }; }, - inject: [ConfigService], }), ], exports: [CacheModule, CacheService], diff --git a/src/lib/cache/cache.service.ts b/src/lib/cache/cache.service.ts index a3bc29ad..93a96692 100644 --- a/src/lib/cache/cache.service.ts +++ b/src/lib/cache/cache.service.ts @@ -9,10 +9,10 @@ export class CacheService { constructor(@Inject(CACHE_MANAGER) private readonly cacheManager: Cache) {} /** -* It deletes all cache keys that match the given regular expression -* @param {string} regexString - The regex string to match against the cache keys. -* @returns A boolean value. -*/ + * It deletes all cache keys that match the given regular expression + * @param regexString - The regex string to match against the cache keys. + * @returns A boolean value. + */ deleteMatch(regexString: string): Observable { return from(this.cacheManager.store.keys()).pipe( concatMap((keys: string[]) => { @@ -30,9 +30,9 @@ export class CacheService { } /** -* Reset the cache. -* @returns A promise that resolves to void. -*/ + * Reset the cache. + * @returns A promise that resolves to void. + */ async resetCache(): Promise { return this.cacheManager.reset(); } diff --git a/src/lib/cloudinary.module.ts b/src/lib/cloudinary.module.ts index d5d7eaf1..7e5e829d 100644 --- a/src/lib/cloudinary.module.ts +++ b/src/lib/cloudinary.module.ts @@ -1,19 +1,18 @@ import { Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { CloudinaryModule } from "nestjs-cloudinary"; -import { NestConfigModule } from "@lib/config/config.module"; @Module({ imports: [ CloudinaryModule.forRootAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => ({ isGlobal: true, cloud_name: configService.get("cloudinary.cloud_name", { infer: true }), api_key: configService.get("cloudinary.api_key", { infer: true }), api_secret: configService.get("cloudinary.api_secret", { infer: true }), }), - inject: [ConfigService], }), ], exports: [CloudinaryModule], diff --git a/src/lib/config/configs/jwt.config.ts b/src/lib/config/configs/jwt.config.ts index bd94e0db..477ea046 100644 --- a/src/lib/config/configs/jwt.config.ts +++ b/src/lib/config/configs/jwt.config.ts @@ -3,12 +3,12 @@ import Joi from "joi"; import { JWT_EXPIRY_REGEX } from "@common/constant"; /** -* NOTE: -* Expiry can be either number or string -* A numeric value is interpreted as a seconds count -* if number, parse to string -* -*/ + * NOTE: + * Expiry can be either number or string + * A numeric value is interpreted as a seconds count + * if number, parse to string + * + */ export const jwtConfigValidationSchema = { JWT_SECRET: Joi.string().required().min(8), diff --git a/src/lib/config/configs/redis.config.ts b/src/lib/config/configs/redis.config.ts index 936325a0..0ddc50f7 100644 --- a/src/lib/config/configs/redis.config.ts +++ b/src/lib/config/configs/redis.config.ts @@ -13,5 +13,9 @@ export const redisConfigValidationSchema = { export const redis = registerAs("redis", () => ({ url: process.env.REDIS_URI, + username: process.env.REDIS_USERNAME, + password: process.env.REDIS_PASSWORD, + host: process.env.REDIS_HOST, + port: +process.env.REDIS_PORT, ttl: +process.env.REDIS_TTL, })); diff --git a/src/lib/crud/crud.controller.ts b/src/lib/crud/crud.controller.ts index f199bdf6..bde53446 100644 --- a/src/lib/crud/crud.controller.ts +++ b/src/lib/crud/crud.controller.ts @@ -39,6 +39,13 @@ export class AbstractValidationPipe extends ValidationPipe { } } +/** + * Factory function that creates a controller class that implements the Crud interface + * @param queryDto - The query dto type + * @param createDto - The create dto type + * @param updateDto - The update dto type + * @returns A controller class that implements the Crud interface + */ export function ControllerFactory< T extends BaseEntity, Q extends PaginationRequest, diff --git a/src/lib/crud/crud.service.ts b/src/lib/crud/crud.service.ts index 5da2ba94..ab751b7f 100644 --- a/src/lib/crud/crud.service.ts +++ b/src/lib/crud/crud.service.ts @@ -28,14 +28,14 @@ UpdateDto extends EntityData = EntityData, protected constructor(private readonly repository: BaseRepository) {} /** -* "Create a new entity from the given DTO, persist it, and return it." -* -* The first line creates a new entity from the given DTO. The second line persists the entity and -* returns a promise. The third line maps the promise to the entity -* @param dto - The DTO that will be used to create the entity. -* @param {User} [_user] - The user that is making the request. -* @returns Observable -*/ + * "Create a new entity from the given DTO, persist it, and return it." + * + * The first line creates a new entity from the given DTO. The second line persists the entity and + * returns a promise. The third line maps the promise to the entity + * @param dto - The DTO that will be used to create the entity. + * @param _user - The user that is making the request. + * @returns An observable of the entity that was created. + */ create(dto: CreateDto, _user?: User): Observable { const entity = this.repository.create(dto); @@ -46,10 +46,10 @@ UpdateDto extends EntityData = EntityData, } /** -* It takes in a SearchOptionsDto object, and returns an Observable of a Pagination object -* @returns An observable of a pagination object. -* @param dto - The DTO that will be used to search for the entities. -*/ + * It takes in a SearchOptionsDto object, and returns an Observable of a Pagination object + * @param dto - The DTO that will be used to search for the entities. + * @returns An observable of a pagination object. + */ findAll(dto: PaginationRequest): Observable> { const qb = this.repository.createQueryBuilder(this.queryName); @@ -84,9 +84,10 @@ UpdateDto extends EntityData = EntityData, } /** -* It returns an observable of type Entity. -* @param {string} index - The name of the index to search. -*/ + * It returns an observable of type Entity. + * @param index - The name of the index to search. + * @returns An observable of type Entity. + */ findOne(index: string): Observable { return from(this.repository.findOne({ idx: index } as FilterQuery)).pipe( mergeMap((entity) => { @@ -107,10 +108,11 @@ UpdateDto extends EntityData = EntityData, } /** -* It updates an entity. -* @param {string} index - The name of the index you want to update. -* @param dto - The data transfer object that will be used to update the entity. -*/ + * It updates an entity. + * @param index - The name of the index you want to update. + * @param dto - The data transfer object that will be used to update the entity. + * @returns An observable of the entity that was updated. + */ update(index: string, dto: UpdateDto): Observable { return this.findOne(index).pipe( switchMap((item) => { @@ -122,10 +124,10 @@ UpdateDto extends EntityData = EntityData, } /** -* It removes an entity from the database -* @param {string} index - string - The index of the entity to remove. -* @returns An observable of the entity that was removed. -*/ + * It removes an entity from the database + * @param index - string - The index of the entity to remove. + * @returns An observable of the entity that was removed. + */ remove(index: string): Observable { return this.findOne(index).pipe( switchMap((item) => { diff --git a/src/lib/jwt.module.ts b/src/lib/jwt.module.ts index 9fedd1bd..5fac8a3d 100644 --- a/src/lib/jwt.module.ts +++ b/src/lib/jwt.module.ts @@ -1,13 +1,13 @@ import { Global, Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { JwtModule } from "@nestjs/jwt"; -import { NestConfigModule } from "@lib/config/config.module"; @Global() @Module({ imports: [ JwtModule.registerAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ isGlobal: true, secret: configService.get("jwt.secret", { infer: true }), @@ -16,7 +16,6 @@ import { NestConfigModule } from "@lib/config/config.module"; algorithm: "HS256", }, }), - inject: [ConfigService], }), ], exports: [JwtModule], diff --git a/src/lib/mailer/index.ts b/src/lib/mailer/index.ts index c2460508..fe11ea4c 100644 --- a/src/lib/mailer/index.ts +++ b/src/lib/mailer/index.ts @@ -1,15 +1,15 @@ import { Global, Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { MailModule } from "./mailer.module"; -import { NestConfigModule } from "@lib/config/config.module"; import { TemplateEngine } from "@common/@types"; @Global() @Module({ imports: [ MailModule.forRootAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => ({ host: configService.get("mail.host", { infer: true }), port: configService.get("mail.port", { infer: true }), @@ -26,7 +26,6 @@ import { TemplateEngine } from "@common/@types"; }, }, }), - inject: [ConfigService], }), ], exports: [MailModule], diff --git a/src/lib/mailer/mailer.service.ts b/src/lib/mailer/mailer.service.ts index ed051a70..3602253e 100644 --- a/src/lib/mailer/mailer.service.ts +++ b/src/lib/mailer/mailer.service.ts @@ -91,10 +91,10 @@ private readonly options: MailModuleOptions, } /** -* It takes a mailOptions object, renders the template, and sends the email -* @param {MailOptions} mailOptions - IMailOptions -* @returns A promise that resolves to a boolean. -*/ + * It takes a mailOptions object, renders the template, and sends the email + * @param mailOptions - IMailOptions + * @returns A promise that resolves to a boolean. + */ sendMail(mailOptions: MailOptions) { const templatePath = resolve("}"); diff --git a/src/lib/minio.module.ts b/src/lib/minio.module.ts index 7ed63250..d0cca25a 100644 --- a/src/lib/minio.module.ts +++ b/src/lib/minio.module.ts @@ -1,12 +1,12 @@ import { Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { NestMinioModule } from "nestjs-minio"; -import { NestConfigModule } from "@lib/config/config.module"; @Module({ imports: [ NestMinioModule.registerAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], isGlobal: true, useFactory: async (configService: ConfigService) => ({ endPoint: configService.get("minio.host"), @@ -15,7 +15,6 @@ import { NestConfigModule } from "@lib/config/config.module"; secretKey: configService.get("minio.secretKey"), useSSL: configService.get("minio.ssl"), }), - inject: [ConfigService], }), ], exports: [NestMinioModule], diff --git a/src/lib/orm.module.ts b/src/lib/orm.module.ts index 1b8bf3ba..50a78e85 100644 --- a/src/lib/orm.module.ts +++ b/src/lib/orm.module.ts @@ -10,6 +10,7 @@ import { baseOptions } from "@common/database/mikro-orm-cli.config"; imports: [ MikroOrmModule.forRootAsync({ imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => defineConfig({ ...baseOptions, @@ -19,7 +20,6 @@ import { baseOptions } from "@common/database/mikro-orm-cli.config"; user: configService.get("database.user", { infer: true }), dbName: configService.get("database.dbName", { infer: true }), }), - inject: [ConfigService], }), MikroOrmModule.forFeature({ entities: Object.values(Entities), diff --git a/src/lib/pino/app.logger.ts b/src/lib/pino/app.logger.ts index 74a4dec5..d03d4b42 100644 --- a/src/lib/pino/app.logger.ts +++ b/src/lib/pino/app.logger.ts @@ -3,6 +3,10 @@ import { NestFactory } from "@nestjs/core"; import { Logger } from "nestjs-pino"; import { NestPinoModule } from "./pino.module"; +/** + * Creates a logger instance + * @returns Promise of a Logger instance + */ export async function createLogger(): Promise { @Module({ imports: [NestPinoModule], diff --git a/src/lib/pino/pino.module.ts b/src/lib/pino/pino.module.ts index 7cf0e109..d4d8070f 100644 --- a/src/lib/pino/pino.module.ts +++ b/src/lib/pino/pino.module.ts @@ -12,87 +12,85 @@ const basePinoOptions = { @Module({ imports: [ - LoggerModule.forRootAsync({ - useFactory: () => { - return { - pinoHttp: { - timestamp: () => `,"timestamp":"${new Date(Date.now()).toISOString()}"`, - name: "ultimate-nest", - customProps: (_request, _response) => ({ - context: "HTTP", - }), - serializers: { - req(request: Record) { - request.body = request.raw.body; + LoggerModule.forRoot({ - return request; - }, - }, - redact: { - paths: redactFields, - censor: "**GDPR COMPLIANT**", - }, - transport: process.env.NODE_ENV.startsWith("prod") - ? { - targets: [ - { - target: "pino/file", - level: "info", // log only errors to file - options: { - ...basePinoOptions, - destination: "logs/info.log", - mkdir: true, - sync: false, - }, - }, - { - target: "pino/file", - level: "error", // log only errors to file - options: { - ...basePinoOptions, - destination: "logs/error.log", - mkdir: true, - sync: false, - }, - }, - ], - } - : { - targets: [ - { - target: "pino-pretty", - level: "info", // log only info and above to console - options: { - ...basePinoOptions, - colorize: true, - }, - }, - { - target: "pino/file", - level: "info", // log only errors to file - options: { - ...basePinoOptions, - destination: "logs/info.log", - mkdir: true, - sync: false, - }, - }, - { - target: "pino/file", - level: "error", // log only errors to file - options: { - ...basePinoOptions, - destination: "logs/error.log", - mkdir: true, - sync: false, - }, - }, - ], - }, + pinoHttp: { + timestamp: () => `,"timestamp":"${new Date(Date.now()).toISOString()}"`, + name: "ultimate-nest", + customProps: (_request, _response) => ({ + context: "HTTP", + }), + serializers: { + req(request: Record) { + request.body = request.raw.body; + + return request; }, - exclude: [{ method: RequestMethod.ALL, path: "doc" }], - }; + }, + redact: { + paths: redactFields, + censor: "**GDPR COMPLIANT**", + }, + transport: process.env.NODE_ENV.startsWith("prod") + ? { + targets: [ + { + target: "pino/file", + level: "info", // log only errors to file + options: { + ...basePinoOptions, + destination: "logs/info.log", + mkdir: true, + sync: false, + }, + }, + { + target: "pino/file", + level: "error", // log only errors to file + options: { + ...basePinoOptions, + destination: "logs/error.log", + mkdir: true, + sync: false, + }, + }, + ], + } + : { + targets: [ + { + target: "pino-pretty", + level: "info", // log only info and above to console + options: { + ...basePinoOptions, + colorize: true, + }, + }, + { + target: "pino/file", + level: "info", // log only errors to file + options: { + ...basePinoOptions, + destination: "logs/info.log", + mkdir: true, + sync: false, + }, + }, + { + target: "pino/file", + level: "error", // log only errors to file + options: { + ...basePinoOptions, + destination: "logs/error.log", + mkdir: true, + sync: false, + }, + }, + ], + }, }, + exclude: [{ method: RequestMethod.ALL, path: "doc" }], + }), ], exports: [LoggerModule], diff --git a/src/lib/rabbit.module.ts b/src/lib/rabbit.module.ts index e8a59abb..ee4e741b 100644 --- a/src/lib/rabbit.module.ts +++ b/src/lib/rabbit.module.ts @@ -1,7 +1,6 @@ import { RabbitMQModule } from "@golevelup/nestjs-rabbitmq"; import { Global, Logger, Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; -import { NestConfigModule } from "@lib/config/config.module"; +import { ConfigModule, ConfigService } from "@nestjs/config"; const logger = new Logger("RabbitMQ"); @@ -9,7 +8,8 @@ const logger = new Logger("RabbitMQ"); @Module({ imports: [ RabbitMQModule.forRootAsync(RabbitMQModule, { - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => ({ exchanges: [ { @@ -32,7 +32,6 @@ const logger = new Logger("RabbitMQ"); }, }, }), - inject: [ConfigService], }), ], exports: [RabbitMQModule], diff --git a/src/lib/rabbit/rabbit.module.ts b/src/lib/rabbit/rabbit.module.ts index 95459f8a..ad8a9daa 100644 --- a/src/lib/rabbit/rabbit.module.ts +++ b/src/lib/rabbit/rabbit.module.ts @@ -1,17 +1,16 @@ import { RabbitMQModule } from "@golevelup/nestjs-rabbitmq"; import { Global, Logger, Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { RabbitService } from "./rabbit.service"; -import { NestConfigModule } from "@lib/config/config.module"; - const logger = new Logger("RabbitMQ"); @Global() @Module({ imports: [ RabbitMQModule.forRootAsync(RabbitMQModule, { - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => ({ exchanges: [ { @@ -34,7 +33,6 @@ const logger = new Logger("RabbitMQ"); }, }, }), - inject: [ConfigService], }), ], providers: [RabbitService], diff --git a/src/lib/sentry.module.ts b/src/lib/sentry.module.ts index 007b0967..7ca483bd 100644 --- a/src/lib/sentry.module.ts +++ b/src/lib/sentry.module.ts @@ -1,19 +1,18 @@ import { Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { SentryModule } from "@ntegral/nestjs-sentry"; -import { NestConfigModule } from "@lib/config/config.module"; @Module({ imports: [ SentryModule.forRootAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ dsn: configService.get("app.sentryDsn", { infer: true }), debug: true, environment: "development", tracesSampleRate: 1, }), - inject: [ConfigService], }), ], exports: [SentryModule], diff --git a/src/lib/stripe.module.ts b/src/lib/stripe.module.ts index d930b026..8f5c3a4a 100644 --- a/src/lib/stripe.module.ts +++ b/src/lib/stripe.module.ts @@ -1,8 +1,7 @@ import { StripeModule } from "@golevelup/nestjs-stripe"; import { Global, Logger, Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { SkipThrottle } from "@nestjs/throttler"; -import { NestConfigModule } from "@lib/config/config.module"; const logger = new Logger("Stripe"); @@ -10,7 +9,8 @@ const logger = new Logger("Stripe"); @Module({ imports: [ StripeModule.forRootAsync(StripeModule, { - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => ({ apiKey: configService.get("stripe.apiKey", { infer: true }), logger, @@ -22,7 +22,6 @@ const logger = new Logger("Stripe"); }, decorators: [SkipThrottle()], }), - inject: [ConfigService], }), ], exports: [StripeModule], diff --git a/src/lib/throttle.module.ts b/src/lib/throttle.module.ts index 13f0ffbc..a0f03ef2 100644 --- a/src/lib/throttle.module.ts +++ b/src/lib/throttle.module.ts @@ -13,6 +13,7 @@ import { ThrottlerStorageRedisService } from "nestjs-throttler-storage-redis"; limit: config.get("throttle.limit", { infer: true }), ignoreUserAgents: [/nestify/i], storage: new ThrottlerStorageRedisService(config.get("redis.url", { infer: true })), + throttlers: [], }), }), ], diff --git a/src/lib/twilio/index.ts b/src/lib/twilio/index.ts index 019933f7..f85ebb09 100644 --- a/src/lib/twilio/index.ts +++ b/src/lib/twilio/index.ts @@ -1,20 +1,18 @@ import { Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { TwilioModule } from "./twilio.module"; -import { NestConfigModule } from "@lib/config/config.module"; - @Module({ imports: [ TwilioModule.forRootAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: (configService: ConfigService) => ({ isGlobal: true, accountSid: configService.get("twilio.accountSid", { infer: true }), authToken: configService.get("twilio.authToken", { infer: true }), from: configService.get("twilio.from", { infer: true }), }), - inject: [ConfigService], }), ], exports: [TwilioModule], diff --git a/src/lib/twilio/twilio.service.ts b/src/lib/twilio/twilio.service.ts index 171fd1b3..8b0088bf 100644 --- a/src/lib/twilio/twilio.service.ts +++ b/src/lib/twilio/twilio.service.ts @@ -20,11 +20,11 @@ private readonly options: TwilioModuleOptions, ) {} /** -* It takes in an options object, creates a Twilio client, and returns an observable of the message -* instance -* @param {MessageListInstanceCreateOptions} options - MessageListInstanceCreateOptions -* @returns Observable -*/ + * It takes in an options object, creates a Twilio client, and returns an observable of the message + * instance + * @param options - MessageListInstanceCreateOptions + * @returns Observable + */ sendSms( options: MessageListInstanceCreateOptions & { prefix: string }, diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts index b83283be..480616c1 100644 --- a/src/modules/auth/auth.service.ts +++ b/src/modules/auth/auth.service.ts @@ -46,13 +46,13 @@ private readonly em: EntityManager, ) {} /** -* It takes an email and a password, and returns the user if the password is correct -* @param {boolean} isPasswordLogin - boolean - This is a boolean value that determines whether the -* @param {string} email - The email address of the user. -* @param {string} pass - string - The password to be validated -* user is logging in with a password or not. -* @returns The user object without the password property. -*/ + * It takes an email and a password, and returns the user if the password is correct + * @param isPasswordLogin - boolean - This is a boolean value that determines whether the + * @param email - The email address of the user. + * @param pass - string - The password to be validated + * user is logging in with a password or not. + * @returns The user object without the password property. + */ validateUser(isPasswordLogin: boolean, email: string, pass?: string): Observable { return from( @@ -98,12 +98,12 @@ private readonly em: EntityManager, } /** -* We validate the user, if the user is valid, we generate an access token and a refresh token -* @param {UserLoginDto} loginDto - UserLoginDto - This is the DTO that we created earlier. -* @param {boolean} isPasswordLogin - boolean - This is a boolean value that tells the function whether -* the user is logging in with a password or oauth -* @returns An observable of type IAuthenticationResponse -*/ + * We validate the user, if the user is valid, we generate an access token and a refresh token + * @param loginDto - UserLoginDto - This is the DTO that we created earlier. + * @param isPasswordLogin - boolean - This is a boolean value that tells the function whether + * the user is logging in with a password or oauth + * @returns An observable of type IAuthenticationResponse + */ login(loginDto: UserLoginDto, isPasswordLogin = false): Observable { return this.validateUser(isPasswordLogin, loginDto.email, loginDto.password).pipe( @@ -139,20 +139,20 @@ private readonly em: EntityManager, } /** -* It deletes all refresh tokens for a given user -* @param {User} user - User - The user object that you want to logout from. -* @returns Observable -*/ + * It deletes all refresh tokens for a given user + * @param user - User - The user object that you want to logout from. + * @returns Observable + */ logoutFromAll(user: User): Observable { return this.tokenService.deleteRefreshTokenForUser(user); } /** -* We decode the refresh token, then delete the refresh token from the database -* @param {User} user - User - The user object that was returned from the login method. -* @param {string} refreshToken - The refresh token that was sent to the client. -* @returns Observable -*/ + * We decode the refresh token, then delete the refresh token from the database + * @param user - The user object that was returned from the login method. + * @param refreshToken - The refresh token that was sent to the client. + * @returns Observable of type User + */ logout(user: User, refreshToken: string): Observable { return from(this.tokenService.decodeRefreshToken(refreshToken)).pipe( switchMap((payload) => { @@ -162,11 +162,10 @@ private readonly em: EntityManager, } /** -* It creates a new OTP, sends it to the user's email, and returns the OTP -* @param {SendOtpDto} sendOtp - SendOtpDto -* @returns OtpLog -*/ - + * It creates a new OTP, sends it to the user's email, and returns the OTP + * @param sendOtp - SendOtpDto + * @returns Observable of type OtpLog + */ forgotPassword(sendOtp: SendOtpDto): Observable { const { email } = sendOtp; @@ -228,11 +227,11 @@ private readonly em: EntityManager, } /** -* We are finding the user details from the OTP table using the OTP code and then updating the password -* of the user in the user table -* @param {ResetPasswordDto} resetPassword - ResetPasswordDto -* @returns Observable -*/ + * We are finding the user details from the OTP table using the OTP code and then updating the password + * of the user in the user table + * @param resetPassword - ResetPasswordDto + * @returns Observable of type User + */ resetPassword(resetPassword: ResetPasswordDto): Observable { const { password, otpCode } = resetPassword; @@ -254,12 +253,12 @@ private readonly em: EntityManager, } /** -* This function verifies an OTP code and updates the user's verification status if the code is valid -* and not expired. -* @param {OtpVerifyDto} otpDto - The `otpDto` parameter is an object of type `OtpVerifyDto` which -* contains the OTP code that needs to be verified. -* @returns The `verifyOtp` function returns an Observable of type `User`. -*/ + * This function verifies an OTP code and updates the user's verification status if the code is valid + * and not expired. + * @param otpDto - The `otpDto` parameter is an object of type `OtpVerifyDto` which + * contains the OTP code that needs to be verified. + * @returns The `verifyOtp` function returns an Observable of type `User`. + */ verifyOtp(otpDto: OtpVerifyDto): Observable { const { otpCode } = otpDto; @@ -315,12 +314,12 @@ private readonly em: EntityManager, } /** -* It takes a user and a DTO, then it checks if the current password is valid, if it is, it updates the -* password and returns the user -* @param {ChangePasswordDto} dto - ChangePasswordDto - This is the DTO that we created earlier. -* @param {User} user - User - The user object that is currently logged in. -* @returns Observable -*/ + * It takes a user and a DTO, then it checks if the current password is valid, if it is, it updates the + * password and returns the user + * @param dto - ChangePasswordDto - This is the DTO that we created earlier. + * @param user - User - The user object that is currently logged in. + * @returns Observable of type User + */ changePassword(dto: ChangePasswordDto, user: User): Observable { const { password, oldPassword } = dto; diff --git a/src/modules/auth/dtos/otp.dto.ts b/src/modules/auth/dtos/otp.dto.ts index 338dac1e..ea070b52 100644 --- a/src/modules/auth/dtos/otp.dto.ts +++ b/src/modules/auth/dtos/otp.dto.ts @@ -2,22 +2,22 @@ import { PickType } from "@nestjs/swagger"; import { IsEmailField, IsStringField } from "@common/decorators"; export class OtpVerifyDto { -/** -* Otp sent on email -* @example 986579 -*/ + /** + * Otp sent on email + * @example 986579 + */ @IsStringField({ minLength: 6, maxLength: 6, }) -otpCode!: string; + otpCode!: string; /** -* Email of user -* @example someone@something.com -*/ + * Email of user + * @example someone@something.com + */ @IsEmailField() -email!: string; + email!: string; } export class SendOtpDto extends PickType(OtpVerifyDto, ["email"] as const) {} diff --git a/src/modules/auth/dtos/refresh-request.dto.ts b/src/modules/auth/dtos/refresh-request.dto.ts index 1245b837..15c61842 100644 --- a/src/modules/auth/dtos/refresh-request.dto.ts +++ b/src/modules/auth/dtos/refresh-request.dto.ts @@ -2,10 +2,10 @@ import { IsJWT, IsNotEmpty } from "class-validator"; import { validationI18nMessage } from "@lib/i18n"; export class RefreshTokenDto { -/** -* Refresh token of user -* @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" -*/ + /** + * Refresh token of user + * @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) @IsJWT({ @@ -13,5 +13,5 @@ export class RefreshTokenDto { type: "jwt", }), }) -refreshToken!: string; + refreshToken!: string; } diff --git a/src/modules/auth/dtos/reset-password.dto.ts b/src/modules/auth/dtos/reset-password.dto.ts index 56db172e..58363bd2 100644 --- a/src/modules/auth/dtos/reset-password.dto.ts +++ b/src/modules/auth/dtos/reset-password.dto.ts @@ -4,42 +4,42 @@ import { IsEqualTo, IsPassword, IsStringField } from "@common/decorators"; import { validationI18nMessage } from "@lib/i18n"; export class ResetPasswordDto { -/** -* Otp code sent on email -* @example 986579 -*/ + /** + * Otp code sent on email + * @example 986579 + */ @IsStringField({ minLength: 6, maxLength: 6, }) -otpCode!: string; + otpCode!: string; /** -* New password of user -* @example SomeThingNew7^#% -*/ + * New password of user + * @example SomeThingNew7^#% + */ @IsStringField({ minLength: 8, maxLength: 50 }) @IsPassword({ message: validationI18nMessage("validation.isPassword") }) -password!: string; + password!: string; /** -* New password of user -* @example AVeryGoodPassword@&67t75 -*/ + * New password of user + * @example AVeryGoodPassword@&67t75 + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) @IsEqualTo("password") -confirmPassword!: string; + confirmPassword!: string; } export class ChangePasswordDto extends PickType(ResetPasswordDto, [ "password", "confirmPassword", ] as const) { -/** -* Password of user -* @example SomeThingNew7^#% -*/ + /** + * Password of user + * @example SomeThingNew7^#% + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) -oldPassword!: string; + oldPassword!: string; } diff --git a/src/modules/auth/dtos/user-login.dto.ts b/src/modules/auth/dtos/user-login.dto.ts index 21b209fc..b31cec26 100644 --- a/src/modules/auth/dtos/user-login.dto.ts +++ b/src/modules/auth/dtos/user-login.dto.ts @@ -4,25 +4,25 @@ import { validationI18nMessage } from "@lib/i18n"; export class UserLoginDto { /** -* Email of user -* @example someone@something.com -*/ + * Email of user + * @example someone@something.com + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) email!: string; /** -* Password of user -* @example AVeryGoodPassword@&67t75 -*/ + * Password of user + * @example AVeryGoodPassword@&67t75 + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) password?: string; } export class MagicLinkLogin { /** -* Email of user -* @example someone@something.com -*/ + * Email of user + * @example someone@something.com + */ @IsEmailField() destination!: string; } diff --git a/src/modules/auth/strategies/facebook.strategy.ts b/src/modules/auth/strategies/facebook.strategy.ts index 98558b10..38058a36 100644 --- a/src/modules/auth/strategies/facebook.strategy.ts +++ b/src/modules/auth/strategies/facebook.strategy.ts @@ -13,14 +13,14 @@ import type { OauthResponse } from "@common/@types"; @Injectable() export class FacebookStrategy extends PassportStrategy(Strategy, "facebook") { /** -* It's a PassportStrategy that uses the FacebookStrategy and the Google OAuth2.0 API to authenticate users -* Create a new project at -* https://developers.facebook.com -* -* The callback url should match whats specified in the callbackURL section -* -* -*/ + * It's a PassportStrategy that uses the FacebookStrategy and the Google OAuth2.0 API to authenticate users + * Create a new project at + * https://developers.facebook.com + * + * The callback url should match whats specified in the callbackURL section + * + * + */ constructor( public readonly configService: ConfigService, diff --git a/src/modules/auth/strategies/google.strategy.ts b/src/modules/auth/strategies/google.strategy.ts index 6bdc30e5..440f2de1 100644 --- a/src/modules/auth/strategies/google.strategy.ts +++ b/src/modules/auth/strategies/google.strategy.ts @@ -12,14 +12,14 @@ import type { OauthResponse } from "@common/@types"; @Injectable() export class GoogleStrategy extends PassportStrategy(Strategy, "google") { /** -* It's a PassportStrategy that uses the GoogleStrategy and the Google OAuth2.0 API to authenticate users -* Create a new project at -* https://console.cloud.google.com/apis/ -* -* The callback url should match whats specified in the callbackURL section -* -* -*/ + * It's a PassportStrategy that uses the GoogleStrategy and the Google OAuth2.0 API to authenticate users + * Create a new project at + * https://console.cloud.google.com/apis/ + * + * The callback url should match whats specified in the callbackURL section + * + * + */ constructor( public readonly configService: ConfigService, diff --git a/src/modules/auth/strategies/jwt-2fa.strategy.ts b/src/modules/auth/strategies/jwt-2fa.strategy.ts index 0a123ea1..5ccfb3a0 100644 --- a/src/modules/auth/strategies/jwt-2fa.strategy.ts +++ b/src/modules/auth/strategies/jwt-2fa.strategy.ts @@ -20,12 +20,11 @@ export class JwtTwofaStrategy extends PassportStrategy(Strategy, "jwt2fa") { } /** -* -* @description Validate the token and return the user -* @param payload string -* @returns User -* -*/ + * + * Validate the token and return the user + * @param payload string + * @returns The user entity + */ async validate(payload: JwtPayload) { const { sub: id } = payload; diff --git a/src/modules/auth/strategies/jwt.strategy.ts b/src/modules/auth/strategies/jwt.strategy.ts index f5907922..c52b23c5 100644 --- a/src/modules/auth/strategies/jwt.strategy.ts +++ b/src/modules/auth/strategies/jwt.strategy.ts @@ -20,12 +20,11 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } /** -* -* @description Validate the token and return the user -* @param payload string -* @returns User -* -*/ + * + * Validate the token and return the user + * @param payload string + * @returns The user object + */ async validate(payload: JwtPayload) { const { sub: id } = payload; diff --git a/src/modules/auth/strategies/magic-login.strategy.ts b/src/modules/auth/strategies/magic-login.strategy.ts index 47cf27fe..a7d0d4c4 100644 --- a/src/modules/auth/strategies/magic-login.strategy.ts +++ b/src/modules/auth/strategies/magic-login.strategy.ts @@ -19,14 +19,14 @@ interface MagicLoginPayload { @Injectable() export class MagicLoginStrategy extends PassportStrategy(Strategy, "magicLogin") { /** -* It's a PassportStrategy that uses the MagicLoginStrategy to authenticate users -* More at -* https://passportjs.org/docs/strategies/passport-magic-login -* -* The callback url should match whats specified in the callbackURL section -* -* -*/ + * It's a PassportStrategy that uses the MagicLoginStrategy to authenticate users + * More at + * https://passportjs.org/docs/strategies/passport-magic-login + * + * The callback url should match whats specified in the callbackURL section + * + * + */ logger = new Logger(MagicLoginStrategy.name); @@ -69,11 +69,10 @@ export class MagicLoginStrategy extends PassportStrategy(Strategy, "magicLogin") } /** -* -* @description Validate the token and return the user -* -* @param email -*/ + * + * Validate the token and return the user + * @param email - The email of the user to validate + */ async validate(email: string) { // Accept the JWT and attempt to validate it using the user service diff --git a/src/modules/category/category.module.ts b/src/modules/category/category.module.ts index 24eb781e..6662c092 100644 --- a/src/modules/category/category.module.ts +++ b/src/modules/category/category.module.ts @@ -1,15 +1,14 @@ import { Module } from "@nestjs/common"; -import { ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from "@nestjs/config"; import { FastJwtModule } from "nestjs-fastjwt"; -import { CategoryService } from "./category.service"; import { CategoryController } from "./category.controller"; - -import { NestConfigModule } from "@lib/config/config.module"; +import { CategoryService } from "./category.service"; @Module({ imports: [ FastJwtModule.registerAsync({ - imports: [NestConfigModule], + imports: [ConfigModule], + inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ isGlobal: true, secret: configService.get("jwt.secret", { infer: true }), @@ -17,7 +16,6 @@ import { NestConfigModule } from "@lib/config/config.module"; expiresIn: configService.get("jwt.accessExpiry", { infer: true }), }, }), - inject: [ConfigService], }), ], controllers: [CategoryController], diff --git a/src/modules/category/dto/create-category.dto.ts b/src/modules/category/dto/create-category.dto.ts index eb556ab1..8a8b1c0f 100644 --- a/src/modules/category/dto/create-category.dto.ts +++ b/src/modules/category/dto/create-category.dto.ts @@ -1,17 +1,17 @@ import { IsStringField } from "@common/decorators"; export class CreateCategoryDto { -/** -* Title of tag -* @example "Lorem ipsum dolor sit" -*/ + /** + * Title of tag + * @example "Lorem ipsum dolor sit" + */ @IsStringField() -title: string; + title: string; /** -* Description of tag -* @example "Lorem ipsum dolor sit" -*/ + * Description of tag + * @example "Lorem ipsum dolor sit" + */ @IsStringField() -description: string; + description: string; } diff --git a/src/modules/chat/dto/create-chat.dto.ts b/src/modules/chat/dto/create-chat.dto.ts index 3de5e837..22893b29 100644 --- a/src/modules/chat/dto/create-chat.dto.ts +++ b/src/modules/chat/dto/create-chat.dto.ts @@ -2,8 +2,8 @@ import { IsStringField } from "@common/decorators"; export class CreateChatDto { @IsStringField() -message!: string; + message!: string; @IsStringField({ required: false }) -to?: string; + to?: string; } diff --git a/src/modules/chat/dto/message-seen.dto.ts b/src/modules/chat/dto/message-seen.dto.ts index eee34d7d..8c68ccdb 100644 --- a/src/modules/chat/dto/message-seen.dto.ts +++ b/src/modules/chat/dto/message-seen.dto.ts @@ -2,5 +2,5 @@ import { IsStringField } from "@common/decorators"; export class MessageSeenDto { @IsStringField() -receiver: string; + receiver: string; } diff --git a/src/modules/newsletter/dto/create-newsletter.dto.ts b/src/modules/newsletter/dto/create-newsletter.dto.ts index 8bb76683..c177ec50 100644 --- a/src/modules/newsletter/dto/create-newsletter.dto.ts +++ b/src/modules/newsletter/dto/create-newsletter.dto.ts @@ -1,24 +1,24 @@ import { IsDateField, IsStringField } from "@common/decorators"; export class CreateNewsletterDto { -/** -* name of newsletter -* @example "React Newsletter" -*/ + /** + * name of newsletter + * @example "React Newsletter" + */ @IsStringField() -name!: string; + name!: string; /** -* content of newsletter -* @example "React Newsletter" -*/ + * content of newsletter + * @example "React Newsletter" + */ @IsStringField() -content!: string; + content!: string; /** -* Send date of newsletter -* @example 2020-06-07T14:34:08.700Z -*/ + * Send date of newsletter + * @example 2020-06-07T14:34:08.700Z + */ @IsDateField() -sentAt!: string; + sentAt!: string; } diff --git a/src/modules/newsletter/dto/subscribe.dto.ts b/src/modules/newsletter/dto/subscribe.dto.ts index 35918ddf..573b1d5b 100644 --- a/src/modules/newsletter/dto/subscribe.dto.ts +++ b/src/modules/newsletter/dto/subscribe.dto.ts @@ -1,11 +1,11 @@ import { IsEmailField } from "@common/decorators"; export class SubscribeNewsletterDto { -/** -* Email of user -* @example someone@gmail.com -*/ + /** + * Email of user + * @example someone@gmail.com + */ @IsEmailField() -email: string; + email: string; } diff --git a/src/modules/newsletter/newsletter.service.ts b/src/modules/newsletter/newsletter.service.ts index b710cc4c..770e612c 100644 --- a/src/modules/newsletter/newsletter.service.ts +++ b/src/modules/newsletter/newsletter.service.ts @@ -51,12 +51,12 @@ private readonly configService: ConfigService, } /** -* This function finds a subscriber by their email and returns an observable that emits the subscriber -* entity or throws a NotFoundException if the entity does not exist. -* @param {string} email - The email parameter is a string that represents the email address of the -* subscriber whose subscription is being searched for. -* @returns An Observable of type `Subscriber`. -*/ + * This function finds a subscriber by their email and returns an observable that emits the subscriber + * entity or throws a NotFoundException if the entity does not exist. + * @param email - The email parameter is a string that represents the email address of the + * subscriber whose subscription is being searched for. + * @returns An Observable of type `Subscriber`. + */ findOneSubscription(email: string): Observable { return from(this.subscriberRepository.findOne({ email })).pipe( mergeMap((entity) => { @@ -77,11 +77,11 @@ private readonly configService: ConfigService, } /** -* This function subscribes a new user to a newsletter and returns an observable of the new subscriber. -* @param {SubscribeNewsletterDto} dto - SubscribeNewsletterDto object containing the email and name of -* the subscriber. -* @returns The `subscribeNewsLetter` method returns an `Observable` that emits a `Subscriber` object. -*/ + * This function subscribes a new user to a newsletter and returns an observable of the new subscriber. + * @param dto - SubscribeNewsletterDto object containing the email and name of + * the subscriber. + * @returns The `subscribeNewsLetter` method returns an `Observable` that emits a `Subscriber` object. + */ subscribeNewsLetter(dto: SubscribeNewsletterDto): Observable { return this.findOneSubscription(dto.email).pipe( switchMap((entity) => { @@ -105,12 +105,12 @@ private readonly configService: ConfigService, } /** -* This function unsubscribes a subscriber from a newsletter by finding their subscription and removing -* it. -* @param {SubscribeNewsletterDto} dto - SubscribeNewsletterDto object which contains the email of the -* subscriber who wants to unsubscribe from the newsletter. -* @returns The `unSubscribeNewsLetter` method returns an Observable of type `Subscriber`. -*/ + * This function unsubscribes a subscriber from a newsletter by finding their subscription and removing + * it. + * @param dto - SubscribeNewsletterDto object which contains the email of the + * subscriber who wants to unsubscribe from the newsletter. + * @returns The `unSubscribeNewsLetter` method returns an Observable of type `Subscriber`. + */ unSubscribeNewsLetter(dto: SubscribeNewsletterDto): Observable { return this.findOneSubscription(dto.email).pipe( switchMap((subscriber) => { diff --git a/src/modules/post/dtos/create-comment.dto.ts b/src/modules/post/dtos/create-comment.dto.ts index 2a7cd918..7873465a 100644 --- a/src/modules/post/dtos/create-comment.dto.ts +++ b/src/modules/post/dtos/create-comment.dto.ts @@ -1,11 +1,11 @@ import { IsStringField } from "@common/decorators"; export class CreateCommentDto { -/** -* Content of comment -* @example "This is a comment" -*/ + /** + * Content of comment + * @example "This is a comment" + */ @IsStringField() -body!: string; + body!: string; } diff --git a/src/modules/post/dtos/create-post.dto.ts b/src/modules/post/dtos/create-post.dto.ts index 484ca63c..8df28d82 100644 --- a/src/modules/post/dtos/create-post.dto.ts +++ b/src/modules/post/dtos/create-post.dto.ts @@ -5,62 +5,62 @@ import { validationI18nMessage } from "@lib/i18n"; export class CreatePostDto { /** -* Title of post -* @example "Lorem ipsum dolor sit" -*/ + * Title of post + * @example "Lorem ipsum dolor sit" + */ @IsStringField() -title!: string; + title!: string; /** -* Description of post -* @example "Some paragraph of text" -*/ + * Description of post + * @example "Some paragraph of text" + */ @IsStringField() -description!: string; + description!: string; /** -* Content of post -* @example "Long paragraph of text" -*/ + * Content of post + * @example "Long paragraph of text" + */ @IsStringField() -content!: string; + content!: string; /** -* tags of post -* @example ["c84ab664-d9a9-4b00-b412-bc31b50c7c50","c84ab664-d9a9-4b00-b412-bc31b50c7c50"] -*/ + * tags of post + * @example ["c84ab664-d9a9-4b00-b412-bc31b50c7c50","c84ab664-d9a9-4b00-b412-bc31b50c7c50"] + */ @IsUUIDField({ each: true }) -tags!: string[]; + tags!: string[]; /** -* tags of post -* @example ["c84ab664-d9a9-4b00-b412-bc31b50c7c50","c84ab664-d9a9-4b00-b412-bc31b50c7c50"] -*/ + * tags of post + * @example ["c84ab664-d9a9-4b00-b412-bc31b50c7c50","c84ab664-d9a9-4b00-b412-bc31b50c7c50"] + */ @IsUUIDField({ each: true }) -categories!: string[]; + categories!: string[]; /** -* State of post -* @example DRAFT -*/ + * State of post + * @example DRAFT + */ @IsEnumField(PostStateEnum, { required: false }) -state: PostStateEnum; + state: PostStateEnum; /** -* Published status of post -* @example true -*/ + * Published status of post + * @example true + */ @ToBoolean() @IsBoolean({ message: validationI18nMessage("validation.isDataType", { type: "boolean", }), }) -published?: boolean; + published?: boolean; } diff --git a/src/modules/post/post.service.ts b/src/modules/post/post.service.ts index 4e64dbc3..bcb04308 100644 --- a/src/modules/post/post.service.ts +++ b/src/modules/post/post.service.ts @@ -33,12 +33,12 @@ private readonly categoryRepository: BaseRepository, ) {} /** -* It returns an observable of a pagination object, which is created from the results of a query to the -* database -* offset. -* @returns An observable of a pagination object. -* @param dto -*/ + * It returns an observable of a pagination object, which is created from the results of a query to the + * database + * offset. + * @param dto - this is the DTO that we created earlier. + * @returns An observable of a pagination object. + */ findAll(dto: CursorPaginationDto): Observable> { const qb = this.postRepository.createQueryBuilder(this.queryName); @@ -85,11 +85,11 @@ private readonly categoryRepository: BaseRepository, } /** -* It creates a new post, saves it to the database, and returns it -* @param {CreatePostDto} dto - CreatePostDto - this is the DTO that we created earlier. -* @param {User} author - User - this is the user that is currently logged in. -* @returns The post object -*/ + * It creates a new post, saves it to the database, and returns it + * @param dto - CreatePostDto - this is the DTO that we created earlier. + * @param author - User - this is the user that is currently logged in. + * @returns The post object + */ create(dto: CreatePostDto, author: User): Observable { return zip( this.tagRepository.find({ @@ -113,12 +113,12 @@ private readonly categoryRepository: BaseRepository, } /** -* It gets a post by its slug, assigns the new values to it, and then flushes the changes to the -* database -* @param {string} slug - string - the slug of the post to edit -* @param {EditPostDto} dto - EditPostDto -* @returns Observable -*/ + * It gets a post by its slug, assigns the new values to it, and then flushes the changes to the + * database + * @param slug - string - the slug of the post to edit + * @param dto - EditPostDto + * @returns Observable + */ update(slug: string, dto: EditPostDto): Observable { return this.findOne(slug).pipe( switchMap((post) => { @@ -146,11 +146,10 @@ private readonly categoryRepository: BaseRepository, } /** -* "Get the post by slug, then delete it and return the deleted post." -* -* @param {string} slug - string - The slug of the post to delete. -* @returns Observable -*/ + * "Get the post by slug, then delete it and return the deleted post." + * @param slug - string - The slug of the post to delete. + * @returns Observable + */ remove(slug: string): Observable { return this.findOne(slug).pipe( switchMap((post) => { @@ -160,13 +159,12 @@ private readonly categoryRepository: BaseRepository, } /** -* "Find the post and user, add the post to the user's favorites, and increment the post's favorites -* count." -* -* @param {number} userId - number - The id of the user who favorite the post. -* @param {string} slug - The slug of the post to be favorited. -* @returns A post object -*/ + * "Find the post and user, add the post to the user's favorites, and increment the post's favorites + * count." + * @param userId - number - The id of the user who favorite the post. + * @param slug - The slug of the post to be favorited. + * @returns A post object + */ favorite(userId: number, slug: string): Observable { const post$ = from(this.postRepository.findOneOrFail({ idx: slug })); const user$ = from( @@ -194,13 +192,13 @@ private readonly categoryRepository: BaseRepository, } /** -* It finds a post and a user, checks if the user has favorited the post, if so, it removes the post -* from the user's favorites and decrements the post's favorites count, then it saves the changes to -* the database and returns the post -* @param {number} userId - number - The id of the user who favorite the post. -* @param {string} slug - The slug of the post to be favorited. -* @returns A post object -*/ + * It finds a post and a user, checks if the user has favorited the post, if so, it removes the post + * from the user's favorites and decrements the post's favorites count, then it saves the changes to + * the database and returns the post + * @param userId - number - The id of the user who favorite the post. + * @param slug - The slug of the post to be favorited. + * @returns A post object + */ unFavorite(userId: number, slug: string): Observable { const post$ = from( this.postRepository.findOneOrFail({ @@ -232,10 +230,10 @@ private readonly categoryRepository: BaseRepository, } /** -* It finds a post by slug, and then returns the comments of that post -* @param {string} slug - string - The slug of the post to find comments for. -* @returns An array of comments -*/ + * It finds a post by slug, and then returns the comments of that post + * @param slug - string - The slug of the post to find comments for. + * @returns An array of comments + */ findComments(slug: string): Observable { return from( this.postRepository.findOne( @@ -251,12 +249,12 @@ private readonly categoryRepository: BaseRepository, } /** -* It takes a userId, a post slug, and a DTO, and returns an observable of a post -* @param {number} userId - number, -* @param {string} slug - string - the slug of the post to add the comment to -* @param {CreateCommentDto} dto - CreateCommentDto -* @returns Post -*/ + * It takes a userId, a post slug, and a DTO, and returns an observable of a post + * @param userId - number, + * @param slug - string - the slug of the post to add the comment to + * @param dto - CreateCommentDto + * @returns Post + */ addComment(userId: number, slug: string, dto: CreateCommentDto): Observable { const post$ = this.findOne(slug); const user$ = from(this.userRepository.findOneOrFail(userId)); @@ -273,13 +271,13 @@ private readonly categoryRepository: BaseRepository, } /** -* This function edits a comment on a post using data from a DTO and returns the updated post. -* @param {string} slug - A string representing the slug of the post to which the comment belongs. -* @param {string} commentIndex - commentIndex is a string parameter that represents the unique -* @param {CreateCommentDto} commentData - commentData is an object of type CreateCommentDto -* @returns The `editComment` method is returning an Observable that emits the updated post data after -* editing the comment specified by `commentIndex` in the post specified by `slug`. -*/ + * This function edits a comment on a post using data from a DTO and returns the updated post. + * @param slug - A string representing the slug of the post to which the comment belongs. + * @param commentIndex - commentIndex is a string parameter that represents the unique + * @param commentData - commentData is an object of type CreateCommentDto + * @returns The `editComment` method is returning an Observable that emits the updated post data after + * editing the comment specified by `commentIndex` in the post specified by `slug`. + */ editComment(slug: string, commentIndex: string, commentData: CreateCommentDto) { return this.findOne(slug, ["comments"]).pipe( switchMap((_post) => { @@ -295,11 +293,11 @@ private readonly categoryRepository: BaseRepository, } /** -* It finds a post and a comment, removes the comment from the post, and then deletes the comment -* @param {string} slug - string - The id of the post -* @param {string} commentIndex - The id of the comment to be deleted -* @returns A post with the comment removed. -*/ + * It finds a post and a comment, removes the comment from the post, and then deletes the comment + * @param slug - string - The id of the post + * @param commentIndex - The id of the comment to be deleted + * @returns A post with the comment removed. + */ deleteComment(slug: string, commentIndex: string): Observable { return forkJoin([ this.findOne(slug), diff --git a/src/modules/profile/profile.service.ts b/src/modules/profile/profile.service.ts index 2dfdcd03..d77136e7 100644 --- a/src/modules/profile/profile.service.ts +++ b/src/modules/profile/profile.service.ts @@ -18,14 +18,14 @@ private readonly em: EntityManager, ) {} /** -* "Get a user by their username, and populate the specified fields." -* -* The first parameter is the username, which is a string. The second parameter is an array of fields -* to populate -* @param {string} username - string - The username of the user to get. -* @param {AutoPath[]} populate - AutoPath[] = [] -* @returns Observable -*/ + * "Get a user by their username, and populate the specified fields." + * + * The first parameter is the username, which is a string. The second parameter is an array of fields + * to populate + * @param username - string - The username of the user to get. + * @param populate - AutoPath[] = [] + * @returns Observable + */ getProfileByUsername( username: string, populate: AutoPath[] = [], @@ -64,15 +64,15 @@ populate: AutoPath[] = [], } /** -* It takes a logged in user and a username to follow, and returns an observable of the profile data -* of the user that was followed -* @param {User} loggedInUser - User - The user that is currently logged in. -* @param {string} usernameToFollow - The username of the user to follow. -* @returns A profile object with the following properties: -* following: true, -* avatar: followingUser.avatar, -* username: followingUser.username -*/ + * It takes a logged in user and a username to follow, and returns an observable of the profile data + * of the user that was followed + * @param loggedInUser - User - The user that is currently logged in. + * @param usernameToFollow - The username of the user to follow. + * @returns A profile object with the following properties: + * following: true, + * avatar: followingUser.avatar, + * username: followingUser.username + */ follow(loggedInUser: User, usernameToFollow: string): Observable { if (!usernameToFollow) { return throwError( @@ -102,14 +102,11 @@ populate: AutoPath[] = [], } /** -* It removes the logged in user from the followers of the user with the given username -* @param {User} loggedInUser - User - The user who is logged in and is trying to follow another user. -* @param {string} username - The username of the user to follow. -* @returns A profile object with the following properties: -* - following: boolean -* - avatar: string -* - username: string -*/ + * It removes the logged in user from the followers of the user with the given username + * @param loggedInUser - User - The user who is logged in and is trying to follow another user. + * @param username - The username of the user to follow. + * @returns A profile object + */ unFollow(loggedInUser: User, username: string): Observable { if (!username) { return throwError( diff --git a/src/modules/tags/dto/create-tag.dto.ts b/src/modules/tags/dto/create-tag.dto.ts index 1c4937e7..7f85a645 100644 --- a/src/modules/tags/dto/create-tag.dto.ts +++ b/src/modules/tags/dto/create-tag.dto.ts @@ -1,17 +1,17 @@ import { IsStringField } from "@common/decorators"; export class CreateTagDto { -/** -* Title of tag -* @example "Lorem ipsum" -*/ + /** + * Title of tag + * @example "Lorem ipsum" + */ @IsStringField() -title: string; + title: string; /** -* Description of tag -* @example "Lorem ipsum" -*/ + * Description of tag + * @example "Lorem ipsum" + */ @IsStringField() -description: string; + description: string; } diff --git a/src/modules/token/refresh-tokens.repository.ts b/src/modules/token/refresh-tokens.repository.ts index 30dd51f7..424ebd1c 100644 --- a/src/modules/token/refresh-tokens.repository.ts +++ b/src/modules/token/refresh-tokens.repository.ts @@ -16,11 +16,11 @@ private readonly refreshTokenRepository: EntityRepository, ) {} /** -* It creates a new refresh token for the given user and expiration time -* @param {User} user - The user that the token is being created for. -* @param {number} ttl - number - the time to live of the token in seconds -* @returns A refresh token -*/ + * It creates a new refresh token for the given user and expiration time + * @param user - The user that the token is being created for. + * @param ttl - number - the time to live of the token in seconds + * @returns A refresh token + */ createRefreshToken(user: User, ttl: number): Observable { const expiration = new Date(); @@ -38,10 +38,10 @@ private readonly refreshTokenRepository: EntityRepository, } /** -* It finds a refresh token by its id and returns it as an observable -* @param {number} id - The id of the token to be found. -* @returns Observable -*/ + * It finds a refresh token by its id and returns it as an observable + * @param id - The id of the token to be found. + * @returns Observable + */ findTokenById(id: number): Observable { return from( this.refreshTokenRepository.findOne({ @@ -52,10 +52,10 @@ private readonly refreshTokenRepository: EntityRepository, } /** -* It deletes all refresh tokens for a given user -* @param {User} user - User - The user object that we want to delete the tokens for. -* @returns A boolean value. -*/ + * It deletes all refresh tokens for a given user + * @param user - User - The user object that we want to delete the tokens for. + * @returns A boolean value. + */ deleteTokensForUser(user: User): Observable { return from(this.refreshTokenRepository.nativeUpdate({ user }, { isRevoked: true })).pipe( map(() => true), @@ -63,11 +63,11 @@ private readonly refreshTokenRepository: EntityRepository, } /** -* It deletes a refresh token by setting its `isRevoked` property to `true` -* @param {User} user - User - the user object that is currently logged in -* @param {number} tokenId - The ID of the token to be deleted. -* @returns A boolean value. -*/ + * It deletes a refresh token by setting its `isRevoked` property to `true` + * @param user - User - the user object that is currently logged in + * @param tokenId - The ID of the token to be deleted. + * @returns A boolean value. + */ deleteToken(user: User, tokenId: number): Observable { return from( this.refreshTokenRepository.nativeUpdate({ user, id: tokenId }, { isRevoked: true }), diff --git a/src/modules/token/tokens.service.ts b/src/modules/token/tokens.service.ts index 43b0cc48..ee936d26 100644 --- a/src/modules/token/tokens.service.ts +++ b/src/modules/token/tokens.service.ts @@ -29,10 +29,10 @@ private readonly jwt: JwtService, ) {} /** -* It takes a user object, and returns an observable of a string -* @param user - Omit -* @returns An Observable of a string. -*/ + * It takes a user object, and returns an observable of a string + * @param user - Omit + * @returns An Observable of a string. + */ generateAccessToken(user: Omit): Observable { const options: JwtSignOptions = { ...this.BASE_OPTIONS, @@ -45,11 +45,11 @@ private readonly jwt: JwtService, } /** -* It creates a refresh token in the database, then signs it with JWT -* @param {User} user - User - The user object that we want to generate a token for. -* @param {number} expiresIn - number - The number of seconds the token will be valid for. -* @returns A string -*/ + * It creates a refresh token in the database, then signs it with JWT + * @param user - User - The user object that we want to generate a token for. + * @param expiresIn - number - The number of seconds the token will be valid for. + * @returns A string + */ generateRefreshToken(user: User, expiresIn: number): Observable { return this.refreshTokenRepo.createRefreshToken(user, expiresIn).pipe( switchMap((token) => { @@ -66,11 +66,11 @@ private readonly jwt: JwtService, } /** -* It takes an encoded refresh token, decodes it, finds the user and token in the database, and -* returns them -* @param {string} encoded - string - The encoded refresh token -* @returns An object with a user and a token. -*/ + * It takes an encoded refresh token, decodes it, finds the user and token in the database, and + * returns them + * @param encoded - string - The encoded refresh token + * @returns An object with a user and a token. + */ resolveRefreshToken(encoded: string): Observable<{ user: User; token: RefreshToken }> { return this.decodeRefreshToken(encoded).pipe( switchMap((payload) => { @@ -121,10 +121,10 @@ private readonly jwt: JwtService, } /** -* It takes a refresh token, resolves it to a user, and then generates an access token for that user -* @param {string} refresh - string - The refresh token that was sent to the client. -* @returns { token: string; user: User } -*/ + * It takes a refresh token, resolves it to a user, and then generates an access token for that user + * @param refresh - string - The refresh token that was sent to the client. + * @returns An object with a token and a user. + */ createAccessTokenFromRefreshToken(refresh: string): Observable<{ token: string; user: User }> { return this.resolveRefreshToken(refresh).pipe( switchMap(({ user }) => { @@ -138,10 +138,10 @@ private readonly jwt: JwtService, } /** -* It decodes the refresh token and throws an error if the token is expired or malformed -* @param {string} token - The refresh token to decode. -* @returns The payload of the token. -*/ + * It decodes the refresh token and throws an error if the token is expired or malformed + * @param token - The refresh token to decode. + * @returns The payload of the token. + */ decodeRefreshToken(token: string): Observable { return from(this.jwt.verifyAsync(token)).pipe( map((payload: JwtPayload) => payload), @@ -162,10 +162,10 @@ private readonly jwt: JwtService, } /** -* It deletes all the refresh token for the given user, and then returns the user -* @param {User} user - The user object that we want to delete the refresh token for. -* @returns The user object. -*/ + * It deletes all the refresh token for the given user, and then returns the user + * @param user - The user object that we want to delete the refresh token for. + * @returns The user object. + */ deleteRefreshTokenForUser(user: User): Observable { return this.refreshTokenRepo.deleteTokensForUser(user).pipe( map(() => { @@ -175,11 +175,11 @@ private readonly jwt: JwtService, } /** -* It deletes the refresh token from the database and returns the user -* @param {User} user - The user object that was returned from the validateUser method. -* @param {JwtPayload} payload - The payload of the refresh token. -* @returns The user object -*/ + * It deletes the refresh token from the database and returns the user + * @param user - The user object that was returned from the validateUser method. + * @param payload - The payload of the refresh token. + * @returns The user object + */ deleteRefreshToken(user: User, payload: JwtPayload): Observable { const tokenId = payload.jti; @@ -202,11 +202,11 @@ private readonly jwt: JwtService, } /** -* It takes a refresh token payload, extracts the user ID from it, and then returns an observable of -* the user with that ID -* @param {JwtPayload} payload - IJwtPayload -* @returns A user object -*/ + * It takes a refresh token payload, extracts the user ID from it, and then returns an observable of + * the user with that ID + * @param payload - IJwtPayload + * @returns A user object + */ getUserFromRefreshTokenPayload(payload: JwtPayload): Observable { const subId = payload.sub; @@ -229,11 +229,11 @@ private readonly jwt: JwtService, } /** -* It takes a refresh token payload, extracts the token ID from it, and then uses that token ID to -* find the corresponding refresh token in the database -* @param {JwtPayload} payload - IJwtPayload -* @returns Observable -*/ + * It takes a refresh token payload, extracts the token ID from it, and then uses that token ID to + * find the corresponding refresh token in the database + * @param payload - IJwtPayload + * @returns Observable + */ getStoredTokenFromRefreshTokenPayload(payload: JwtPayload): Observable { const tokenId = payload.jti; diff --git a/src/modules/twofa/dtos/twofa.dto.ts b/src/modules/twofa/dtos/twofa.dto.ts index e91a3cea..5494168a 100644 --- a/src/modules/twofa/dtos/twofa.dto.ts +++ b/src/modules/twofa/dtos/twofa.dto.ts @@ -1,10 +1,10 @@ import { IsStringField } from "@common/decorators"; export class TwofaDto { -/** -* The code to verify -* @example 123456 -*/ + /** + * The code to verify + * @example 123456 + */ @IsStringField({ minLength: 1, required: true }) -code: string; + code: string; } diff --git a/src/modules/twofa/twofa.service.ts b/src/modules/twofa/twofa.service.ts index 98dceca0..f660cd74 100644 --- a/src/modules/twofa/twofa.service.ts +++ b/src/modules/twofa/twofa.service.ts @@ -21,11 +21,11 @@ private readonly em: EntityManager, ) {} /** -* It generates a secret, creates an OTP Auth URL, assigns the secret to the user, and flushes the user -* repository -* @param {User} user - User - The user object that we want to generate the secret for. -* @returns An Observable that returns an object with a secret and otpAuthUrl. -*/ + * It generates a secret, creates an OTP Auth URL, assigns the secret to the user, and flushes the user + * repository + * @param user - User - The user object that we want to generate the secret for. + * @returns An Observable that returns an object with a secret and otpAuthUrl. + */ generateTwoFactorSecret(user: User): Observable<{ secret: string; otpAuthUrl: string }> { const secret = authenticator.generateSecret(); @@ -46,22 +46,22 @@ private readonly em: EntityManager, } /** -* It takes a response stream and an OTP Auth URL, and returns an observable that emits the file path -* of the QR code image -* @param {Response} stream - Response - The response from the HTTP request. -* @param {string} otpAuthUrl - The OTP Auth URL that you want to generate a QR code for. -* @returns Observable -*/ + * It takes a response stream and an OTP Auth URL, and returns an observable that emits the file path + * of the QR code image + * @param stream - Response - The response from the HTTP request. + * @param otpAuthUrl - The OTP Auth URL that you want to generate a QR code for. + * @returns Observable + */ pipeQrCodeStream(stream: Response, otpAuthUrl: string): Observable { return from(toFileStream(stream, otpAuthUrl)); } /** -* It returns true if the two factor authentication code is valid for the user, and false otherwise -* @param {string} twoFactorAuthenticationCode - The code that the user entered in the form. -* @param {User} user - The user object that we're checking the two factor authentication code for. -* @returns A boolean value. -*/ + * It returns true if the two factor authentication code is valid for the user, and false otherwise + * @param twoFactorAuthenticationCode - The code that the user entered in the form. + * @param user - The user object that we're checking the two factor authentication code for. + * @returns A boolean value. + */ isTwoFactorCodeValid(twoFactorAuthenticationCode: string, user: User): boolean { return authenticator.verify({ token: twoFactorAuthenticationCode, @@ -70,12 +70,12 @@ private readonly em: EntityManager, } /** -* It takes a two factor authentication code and a user, checks if the code is valid, and if it is, it -* enables two factor authentication for the user -* @param {string} twoFactorAuthenticationCode - The code that the user has entered in the form. -* @param {User} user - User - the user that is trying to turn on two factor authentication -* @returns Observable -*/ + * It takes a two factor authentication code and a user, checks if the code is valid, and if it is, it + * enables two factor authentication for the user + * @param twoFactorAuthenticationCode - The code that the user has entered in the form. + * @param user - User - the user that is trying to turn on two factor authentication + * @returns Observable + */ turnOnTwoFactorAuthentication( twoFactorAuthenticationCode: string, user: User, diff --git a/src/modules/user/dtos/create-user.dto.ts b/src/modules/user/dtos/create-user.dto.ts index 65bb2616..364d9bd9 100644 --- a/src/modules/user/dtos/create-user.dto.ts +++ b/src/modules/user/dtos/create-user.dto.ts @@ -13,94 +13,94 @@ import { User } from "@entities"; import { validationI18nMessage } from "@lib/i18n"; export class SocialDto { -/** -* Twitter url of user -* @example https://twitter.com/rubiin -*/ + /** + * Twitter url of user + * @example https://twitter.com/rubiin + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) @IsUrl() -twitter?: string; + twitter?: string; /** -* Facebook url of user -* @example https://facebook.com/rubiin -*/ + * Facebook url of user + * @example https://facebook.com/rubiin + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) @IsUrl() -facebook?: string; + facebook?: string; /** -* Linkedin url of user -* @example https://linkedin.com/rubiin -*/ + * Linkedin url of user + * @example https://linkedin.com/rubiin + */ @IsNotEmpty({ message: validationI18nMessage("validation.isNotEmpty") }) @IsUrl() -linkedin?: string; + linkedin?: string; } export class CreateUserDto { -/** -* Username of user -* @example rubiin -*/ + /** + * Username of user + * @example rubiin + */ @IsUsernameField() @IsUnique(() => User, "username") -username!: string; + username!: string; /** -* Firstname of user -* @example John -*/ + * Firstname of user + * @example John + */ @IsStringField({ maxLength: 50 }) -firstName!: string; + firstName!: string; /** -* Middlename of user -* @example d -*/ + * Middlename of user + * @example d + */ @IsStringField({ required: false, maxLength: 50 }) -middleName?: string; + middleName?: string; /** -* Lastname of user -* @example Doe -*/ + * Lastname of user + * @example Doe + */ @IsStringField({ maxLength: 50 }) -lastName!: string; + lastName!: string; /** -* Email of user -* @example someemail@gmail.com -*/ + * Email of user + * @example someemail@gmail.com + */ @IsUnique(() => User, "email") @IsEmailField() -email!: string; + email!: string; /** -* Password of user -* @example SomePassword@123 -*/ + * Password of user + * @example SomePassword@123 + */ @IsStringField({ minLength: 8, maxLength: 50 }) @IsPassword({ message: validationI18nMessage("validation.isPassword") }) -password!: string; + password!: string; /** -* Roles of user -* @example ["ADMIN"] -*/ + * Roles of user + * @example ["ADMIN"] + */ @IsEnumField(Roles, { each: true }) -roles!: Roles[]; + roles!: Roles[]; /** -* Social handles of user -* @example { twitter: "https://twitter.com/rubiin", facebook: "https://facebook.com/rubiin", linkedin: "https://linkedin.com/in/rubiin" } -*/ + * Social handles of user + * @example { twitter: "https://twitter.com/rubiin", facebook: "https://facebook.com/rubiin", linkedin: "https://linkedin.com/in/rubiin" } + */ @ValidateNested() @Type(() => SocialDto) -social?: SocialDto; + social?: SocialDto; } diff --git a/src/modules/user/user.service.ts b/src/modules/user/user.service.ts index 6b1dd013..76161870 100644 --- a/src/modules/user/user.service.ts +++ b/src/modules/user/user.service.ts @@ -41,12 +41,12 @@ private readonly cloudinaryService: CloudinaryService, ) {} /** -* The function `findAll` retrieves a paginated list of users based on the provided cursor pagination -* DTO. -* @param {CursorPaginationDto} dto - CursorPaginationDto - A data transfer object that contains the -* pagination parameters for the query. -* @returns The method is returning an Observable of type PaginationResponse. -*/ + * The function `findAll` retrieves a paginated list of users based on the provided cursor pagination + * DTO. + * @param dto - CursorPaginationDto - A data transfer object that contains the + * pagination parameters for the query. + * @returns The method is returning an Observable of type PaginationResponse. + */ findAll(dto: CursorPaginationDto): Observable> { const qb = this.userRepository.createQueryBuilder(this.queryName); @@ -66,11 +66,11 @@ private readonly cloudinaryService: CloudinaryService, } /** -* It returns an observable of a user entity, which is either the user entity that was passed in, or -* the user entity that was found in the database -* @param {string} index - string - the index of the user you want to get -* @returns Observable -*/ + * It returns an observable of a user entity, which is either the user entity that was passed in, or + * the user entity that was found in the database + * @param index - string - the index of the user you want to get + * @returns Observable + */ findOne(index: string): Observable { return from( this.userRepository.findOne({ @@ -95,10 +95,10 @@ private readonly cloudinaryService: CloudinaryService, } /** -* It creates a user and sends a welcome email -* @param dto - CreateWithFile -* @returns The user object -*/ + * It creates a user and sends a welcome email + * @param dto - CreateWithFile + * @returns The user object + */ create(dto: DtoWithFile): Observable { const { files, ...rest } = dto; const user = this.userRepository.create(rest); @@ -133,15 +133,15 @@ private readonly cloudinaryService: CloudinaryService, } /** -* "Get a user, assign the DTO to it, and then flush the changes to the database." -* -* The first thing we do is get the user. We do this by calling the `findOne` function we created -* earlier -* @param {string} index - string - the index of the user to edit -* @param {EditUserDto} dto - EditUserDto -* @param {IFile} image - IFile -* @returns Observable -*/ + * "Get a user, assign the DTO to it, and then flush the changes to the database." + * + * The first thing we do is get the user. We do this by calling the `findOne` function we created + * earlier + * @param index - string - the index of the user to edit + * @param dto - EditUserDto + * @param image - IFile + * @returns Observable + */ update(index: string, dto: EditUserDto, image?: IFile): Observable { let uploadImage$: Observable; @@ -174,12 +174,12 @@ private readonly cloudinaryService: CloudinaryService, } /** -* "Get the user, then delete it." -* -* The first thing we do is get the user. We do this by calling the `findOne` function we just created -* @param {string} index - string - The index of the user to delete. -* @returns Observable -*/ + * "Get the user, then delete it." + * + * The first thing we do is get the user. We do this by calling the `findOne` function we just created + * @param index - string - The index of the user to delete. + * @returns Observable + */ remove(index: string): Observable { return this.findOne(index).pipe( switchMap((user) => { @@ -189,12 +189,12 @@ private readonly cloudinaryService: CloudinaryService, } /** -* This function generates a unique username based on a given name and a random ID, and checks if it -* already exists in the database before returning it. -* @param {string} name - The `name` parameter is a string representing the name of the user for whom -* a username is being generated. -* @returns An Observable of type string is being returned. -*/ + * This function generates a unique username based on a given name and a random ID, and checks if it + * already exists in the database before returning it. + * @param name - The `name` parameter is a string representing the name of the user for whom + * a username is being generated. + * @returns An Observable of type string is being returned. + */ generateUsername(name: string): Observable { const pointSlug = slugify(`${name} ${createId().slice(0, 6)}`); diff --git a/src/repl.ts b/src/repl.ts index 63655490..25590ea9 100644 --- a/src/repl.ts +++ b/src/repl.ts @@ -7,6 +7,9 @@ import { AppModule } from "./app.module"; const logger = new Logger("Repl"); +/** + * Bootstrap the application + */ async function bootstrap() { const replServer = await repl(AppModule);