From 16023861e6bccb4f788d215e93f44d77d44c5465 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sat, 1 Nov 2025 21:38:39 +0900 Subject: [PATCH 01/67] =?UTF-8?q?feat:=20organization=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 2 ++ .../command/organization.command.module.ts | 21 +++++++++++++++++++ src/organization/organization.module.ts | 8 +++++++ .../query/organization.query.module.ts | 8 +++++++ 4 files changed, 39 insertions(+) create mode 100644 src/organization/command/organization.command.module.ts create mode 100644 src/organization/organization.module.ts create mode 100644 src/organization/query/organization.query.module.ts diff --git a/src/app.module.ts b/src/app.module.ts index cee699e..c48edf1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -13,6 +13,7 @@ import { ScrapModule } from './scrap/scrap.module'; import mikroOrmConfig from './shared/config/mikro-orm.config'; import config from 'src/shared/config/configuration'; import { AnalyticsModule } from './analytics/analytics.module'; +import { OrganizationModule } from './organization/organization.module'; @Module({ imports: [ @@ -29,6 +30,7 @@ import { AnalyticsModule } from './analytics/analytics.module'; TagModule, MediaModule, ScrapModule, + OrganizationModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/organization/command/organization.command.module.ts b/src/organization/command/organization.command.module.ts new file mode 100644 index 0000000..d2978dc --- /dev/null +++ b/src/organization/command/organization.command.module.ts @@ -0,0 +1,21 @@ +import { Module } from '@nestjs/common'; +import { ORGANIZATION_COMMAND_REPOSITORY } from './domain/organization.command.repository'; +import { OrganizationCommandRepositoryImpl } from './infrastructure/organization.command.repository.impl'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { OrganizationEntity } from './infrastructure/organization.entity'; +import { CreateOrganizationUseCase } from './application/create-organization/create-organization.use-case'; + +const usecases = [CreateOrganizationUseCase]; + +@Module({ + imports: [MikroOrmModule.forFeature([OrganizationEntity])], + providers: [ + { + provide: ORGANIZATION_COMMAND_REPOSITORY, + useClass: OrganizationCommandRepositoryImpl, + }, + ...usecases, + ], + controllers: [], +}) +export class OrganizationCommandModule {} diff --git a/src/organization/organization.module.ts b/src/organization/organization.module.ts new file mode 100644 index 0000000..04d8031 --- /dev/null +++ b/src/organization/organization.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { OrganizationCommandModule } from './command/organization.command.module'; +import { OrganizationQueryModule } from './query/organization.query.module'; + +@Module({ + imports: [OrganizationCommandModule, OrganizationQueryModule], +}) +export class OrganizationModule {} diff --git a/src/organization/query/organization.query.module.ts b/src/organization/query/organization.query.module.ts new file mode 100644 index 0000000..00774ec --- /dev/null +++ b/src/organization/query/organization.query.module.ts @@ -0,0 +1,8 @@ +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { Module } from '@nestjs/common'; +import { OrganizationViewEntity } from './infrastructure/organization.view.entity'; + +@Module({ + imports: [MikroOrmModule.forFeature([OrganizationViewEntity])], +}) +export class OrganizationQueryModule {} From a8eb5a9a8ab77605222111c9f3bea11b0ea96f5f Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sat, 1 Nov 2025 21:55:24 +0900 Subject: [PATCH 02/67] =?UTF-8?q?chore:=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + yarn.lock | 2690 +++++++++++++++++++++++++------------------------- 2 files changed, 1365 insertions(+), 1327 deletions(-) diff --git a/package.json b/package.json index 5acad97..a012614 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@sapphire/snowflake": "^3.5.5", "@types/passport-jwt": "^4.0.1", "axios": "^1.11.0", + "bcrypt": "^6.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.2", "cookie-parser": "^1.4.7", @@ -60,6 +61,7 @@ "@nestjs/testing": "^11.0.1", "@swc/cli": "^0.7.7", "@swc/core": "^1.10.7", + "@types/bcrypt": "^6.0.0", "@types/cookie-parser": "^1.4.8", "@types/express": "^5.0.0", "@types/jest": "^29.5.14", diff --git a/yarn.lock b/yarn.lock index b79170a..03cdaf0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,20 +7,20 @@ resolved "https://registry.yarnpkg.com/@amplitude/analytics-connector/-/analytics-connector-1.6.4.tgz#8a811ff5c8ee46bdfea0e8f61c7578769b5778ed" integrity sha512-SpIv0IQMNIq6SH3UqFGiaZyGSc7PBZwRdq7lvP0pBxW8i4Ny+8zwI0pV+VMfMHQwWY3wdIbWw5WQphNjpdq1/Q== -"@amplitude/analytics-core@^2.26.2": - version "2.26.2" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.26.2.tgz#e156e7815760d3a214d9ec7fa87b79f717533049" - integrity sha512-XIOzNiUCxzJwKuoK+N8rVjl0OlrfTszM+C9GyFxOYwn1zgZZEYCq0AqX1OIpy+vl+Bx3mLKZbRzxTl3eX46hLQ== +"@amplitude/analytics-core@^2.31.0": + version "2.31.0" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.31.0.tgz#7d9bd231821641b03585890ab50386cce6e443d3" + integrity sha512-2ErmoKhnHfNGKLz6nbNL5KCn++8i7WVoy6k0jZu7JOlgW/Xsag9I2i/3M//iQMQqDo1/8rFolVI9X+chkmkK/Q== dependencies: "@amplitude/analytics-connector" "^1.6.4" tslib "^2.4.1" "@amplitude/analytics-node@^1.5.14": - version "1.5.14" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-node/-/analytics-node-1.5.14.tgz#67a444030fa29831407b3b149a311f6d98f42264" - integrity sha512-vNby1oxqOuFYvvxWTJJ+DH4byhuzwJO+qerZQrM/D/ZgDWK11TFu8FxuxMK39BHaYpaEo5vpdSGV/5gXRaDeNQ== + version "1.5.21" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-node/-/analytics-node-1.5.21.tgz#3395159593e5f9764d0a0c734d14ee9c5ae00b78" + integrity sha512-fUDLsOcIlbpACDxjQgeEPPgW/dpb53sNFfJjYKV21mufR/LvSrv0XA04ZVS56amSyNtT1hNa7enaFYsNhiOCGg== dependencies: - "@amplitude/analytics-core" "^2.26.2" + "@amplitude/analytics-core" "^2.31.0" tslib "^2.4.1" "@angular-devkit/core@19.2.15": @@ -35,6 +35,18 @@ rxjs "7.8.1" source-map "0.7.4" +"@angular-devkit/core@19.2.17": + version "19.2.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.2.17.tgz#014107a94240dd3ecf38edfcf23113ad55b9752b" + integrity sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ== + dependencies: + ajv "8.17.1" + ajv-formats "3.0.1" + jsonc-parser "3.3.1" + picomatch "4.0.2" + rxjs "7.8.1" + source-map "0.7.4" + "@angular-devkit/schematics-cli@19.2.15": version "19.2.15" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-19.2.15.tgz#e68a5a1c968ee975168812df8067129d90d11a32" @@ -58,6 +70,17 @@ ora "5.4.1" rxjs "7.8.1" +"@angular-devkit/schematics@19.2.17": + version "19.2.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.2.17.tgz#253c0c6f4d5400c3bf038d73ed114af5516b72ef" + integrity sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg== + dependencies: + "@angular-devkit/core" "19.2.17" + jsonc-parser "3.3.1" + magic-string "0.30.17" + ora "5.4.1" + rxjs "7.8.1" + "@aws-crypto/crc32@5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" @@ -127,530 +150,528 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.820.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.888.0.tgz#6a030cc4cc98974062862bd6d490e1b72478057c" - integrity sha512-MgYyF/qpvCMYVSiOpRJ5C/EtdFxuYAeF5SprtMsbf71xBiiCH5GurB616i+ZxJqHlfhBQTTvR0qugnWvk1Wqvw== + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.922.0.tgz#5752a59ad5cf4e370ede00774f1e09e9c0af6235" + integrity sha512-SZRaZUUAHCWfEyBf4SRSPd29ko4uFoJpfd0E/w1meE68XhFB52FTtz/71UqYcwqZmN+s7oUNFFZT+DE/dnQSEA== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/credential-provider-node" "3.888.0" - "@aws-sdk/middleware-bucket-endpoint" "3.887.0" - "@aws-sdk/middleware-expect-continue" "3.887.0" - "@aws-sdk/middleware-flexible-checksums" "3.888.0" - "@aws-sdk/middleware-host-header" "3.887.0" - "@aws-sdk/middleware-location-constraint" "3.887.0" - "@aws-sdk/middleware-logger" "3.887.0" - "@aws-sdk/middleware-recursion-detection" "3.887.0" - "@aws-sdk/middleware-sdk-s3" "3.888.0" - "@aws-sdk/middleware-ssec" "3.887.0" - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/region-config-resolver" "3.887.0" - "@aws-sdk/signature-v4-multi-region" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@aws-sdk/util-user-agent-browser" "3.887.0" - "@aws-sdk/util-user-agent-node" "3.888.0" - "@aws-sdk/xml-builder" "3.887.0" - "@smithy/config-resolver" "^4.2.1" - "@smithy/core" "^3.11.0" - "@smithy/eventstream-serde-browser" "^4.1.1" - "@smithy/eventstream-serde-config-resolver" "^4.2.1" - "@smithy/eventstream-serde-node" "^4.1.1" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-blob-browser" "^4.1.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/hash-stream-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/md5-js" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-retry" "^4.2.1" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.1" - "@smithy/util-defaults-mode-node" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" - "@smithy/util-waiter" "^4.1.1" - "@types/uuid" "^9.0.1" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/credential-provider-node" "3.922.0" + "@aws-sdk/middleware-bucket-endpoint" "3.922.0" + "@aws-sdk/middleware-expect-continue" "3.922.0" + "@aws-sdk/middleware-flexible-checksums" "3.922.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-location-constraint" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-sdk-s3" "3.922.0" + "@aws-sdk/middleware-ssec" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/region-config-resolver" "3.922.0" + "@aws-sdk/signature-v4-multi-region" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.922.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/core" "^3.17.2" + "@smithy/eventstream-serde-browser" "^4.2.4" + "@smithy/eventstream-serde-config-resolver" "^4.3.4" + "@smithy/eventstream-serde-node" "^4.2.4" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-blob-browser" "^4.2.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/hash-stream-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/md5-js" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.7" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" + "@smithy/util-waiter" "^4.2.4" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@aws-sdk/client-sso@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.888.0.tgz#ab161ff13de9bf43b641df9d04172150761f8418" - integrity sha512-8CLy/ehGKUmekjH+VtZJ4w40PqDg3u0K7uPziq/4P8Q7LLgsy8YQoHNbuY4am7JU3HWrqLXJI9aaz1+vPGPoWA== +"@aws-sdk/client-sso@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.922.0.tgz#5f19518fdf496e0d3cc55e98755132b7cc25d5d9" + integrity sha512-jdHs7uy7cSpiMvrxhYmqHyJxgK7hyqw4plG8OQ4YTBpq0SbfAxdoOuOkwJ1IVUUQho4otR1xYYjiX/8e8J8qwQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/middleware-host-header" "3.887.0" - "@aws-sdk/middleware-logger" "3.887.0" - "@aws-sdk/middleware-recursion-detection" "3.887.0" - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/region-config-resolver" "3.887.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@aws-sdk/util-user-agent-browser" "3.887.0" - "@aws-sdk/util-user-agent-node" "3.888.0" - "@smithy/config-resolver" "^4.2.1" - "@smithy/core" "^3.11.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-retry" "^4.2.1" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.1" - "@smithy/util-defaults-mode-node" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/region-config-resolver" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.922.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.7" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/core@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.888.0.tgz#d0b9115d5b79b515a0435ff59ad721195bcb55a8" - integrity sha512-L3S2FZywACo4lmWv37Y4TbefuPJ1fXWyWwIJ3J4wkPYFJ47mmtUPqThlVrSbdTHkEjnZgJe5cRfxk0qCLsFh1w== - dependencies: - "@aws-sdk/types" "3.887.0" - "@aws-sdk/xml-builder" "3.887.0" - "@smithy/core" "^3.11.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/property-provider" "^4.0.5" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.1.3" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" - fast-xml-parser "5.2.5" +"@aws-sdk/core@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.922.0.tgz#6df3b04145202567a15e2b83cc83ef15590c828a" + integrity sha512-EvfP4cqJfpO3L2v5vkIlTkMesPtRwWlMfsaW6Tpfm7iYfBOuTi6jx60pMDMTyJNVfh6cGmXwh/kj1jQdR+w99Q== + dependencies: + "@aws-sdk/types" "3.922.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.888.0.tgz#20bd28d5ea79d5254829700d9230e0d1a360fdbd" - integrity sha512-shPi4AhUKbIk7LugJWvNpeZA8va7e5bOHAEKo89S0Ac8WDZt2OaNzbh/b9l0iSL2eEyte8UgIsYGcFxOwIF1VA== +"@aws-sdk/credential-provider-env@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.922.0.tgz#c0f7a0ae77c4f9d1c6494aec4a149bbc74cc8578" + integrity sha512-WikGQpKkROJSK3D3E7odPjZ8tU7WJp5/TgGdRuZw3izsHUeH48xMv6IznafpRTmvHcjAbDQj4U3CJZNAzOK/OQ== dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/types" "^4.5.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.888.0.tgz#e32ff8223dbe090bcf004bcc58ec1b676043ccac" - integrity sha512-Jvuk6nul0lE7o5qlQutcqlySBHLXOyoPtiwE6zyKbGc7RVl0//h39Lab7zMeY2drMn8xAnIopL4606Fd8JI/Hw== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/property-provider" "^4.0.5" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-stream" "^4.3.1" +"@aws-sdk/credential-provider-http@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.922.0.tgz#d957bf8f2c0fb07a27eaee561e5bc94d6f86cb73" + integrity sha512-i72DgHMK7ydAEqdzU0Duqh60Q8W59EZmRJ73y0Y5oFmNOqnYsAI+UXyOoCsubp+Dkr6+yOwAn1gPt1XGE9Aowg== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-stream" "^4.5.5" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.888.0.tgz#4a97261b8593c3c8c8e5bac974ba0e5e0a40d89f" - integrity sha512-M82ItvS5yq+tO6ZOV1ruaVs2xOne+v8HW85GFCXnz8pecrzYdgxh6IsVqEbbWruryG/mUGkWMbkBZoEsy4MgyA== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/credential-provider-env" "3.888.0" - "@aws-sdk/credential-provider-http" "3.888.0" - "@aws-sdk/credential-provider-process" "3.888.0" - "@aws-sdk/credential-provider-sso" "3.888.0" - "@aws-sdk/credential-provider-web-identity" "3.888.0" - "@aws-sdk/nested-clients" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/credential-provider-imds" "^4.0.7" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-ini@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.922.0.tgz#67348aa54e0548e7bcaea2a54eac6af18e84f0d7" + integrity sha512-bVF+pI5UCLNkvbiZr/t2fgTtv84s8FCdOGAPxQiQcw5qOZywNuuCCY3wIIchmQr6GJr8YFkEp5LgDCac5EC5aQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/credential-provider-env" "3.922.0" + "@aws-sdk/credential-provider-http" "3.922.0" + "@aws-sdk/credential-provider-process" "3.922.0" + "@aws-sdk/credential-provider-sso" "3.922.0" + "@aws-sdk/credential-provider-web-identity" "3.922.0" + "@aws-sdk/nested-clients" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.888.0.tgz#48f769d52d999088d4437dc1bc76af55afecad9b" - integrity sha512-KCrQh1dCDC8Y+Ap3SZa6S81kHk+p+yAaOQ5jC3dak4zhHW3RCrsGR/jYdemTOgbEGcA6ye51UbhWfrrlMmeJSA== - dependencies: - "@aws-sdk/credential-provider-env" "3.888.0" - "@aws-sdk/credential-provider-http" "3.888.0" - "@aws-sdk/credential-provider-ini" "3.888.0" - "@aws-sdk/credential-provider-process" "3.888.0" - "@aws-sdk/credential-provider-sso" "3.888.0" - "@aws-sdk/credential-provider-web-identity" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/credential-provider-imds" "^4.0.7" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-node@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.922.0.tgz#279eb69f1b932556a8b94d52af13375baeaac4a2" + integrity sha512-agCwaD6mBihToHkjycL8ObIS2XOnWypWZZWhJSoWyHwFrhEKz1zGvgylK9Dc711oUfU+zU6J8e0JPKNJMNb3BQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.922.0" + "@aws-sdk/credential-provider-http" "3.922.0" + "@aws-sdk/credential-provider-ini" "3.922.0" + "@aws-sdk/credential-provider-process" "3.922.0" + "@aws-sdk/credential-provider-sso" "3.922.0" + "@aws-sdk/credential-provider-web-identity" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.888.0.tgz#34842315e44b4882c63eb92fa2151c2efaf5401f" - integrity sha512-+aX6piSukPQ8DUS4JAH344GePg8/+Q1t0+kvSHAZHhYvtQ/1Zek3ySOJWH2TuzTPCafY4nmWLcQcqvU1w9+4Lw== +"@aws-sdk/credential-provider-process@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.922.0.tgz#23f5b0923d9a9bb89dac3fa9aeb27c9eebf1a19c" + integrity sha512-1DZOYezT6okslpvMW7oA2q+y17CJd4fxjNFH0jtThfswdh9CtG62+wxenqO+NExttq0UMaKisrkZiVrYQBTShw== dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.888.0.tgz#85956b3bcebbcb1aee096d07b4365e524dc1b985" - integrity sha512-b1ZJji7LJ6E/j1PhFTyvp51in2iCOQ3VP6mj5H6f5OUnqn7efm41iNMoinKr87n0IKZw7qput5ggXVxEdPhouA== - dependencies: - "@aws-sdk/client-sso" "3.888.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/token-providers" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-sso@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.922.0.tgz#64a2e8f44e4aa8fdacbaa6c536495971109926d2" + integrity sha512-nbD3G3hShTYxLCkKMqLkLPtKwAAfxdY/k9jHtZmVBFXek2T6tQrqZHKxlAu+fd23Ga4/Aik7DLQQx1RA1a5ipg== + dependencies: + "@aws-sdk/client-sso" "3.922.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/token-providers" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.888.0.tgz#03de49dca86649ae2061247ee4d2831642a4767f" - integrity sha512-7P0QNtsDzMZdmBAaY/vY1BsZHwTGvEz3bsn2bm5VSKFAeMmZqsHK1QeYdNsFjLtegnVh+wodxMq50jqLv3LFlA== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/nested-clients" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-web-identity@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.922.0.tgz#d7757693c8f7cec62a0c34b90fea45be4023cf23" + integrity sha512-wjGIhgMHGGQfQTdFaJphNOKyAL8wZs6znJdHADPVURmgR+EWLyN/0fDO1u7wx8xaLMZpbHIFWBEvf9TritR/cQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/nested-clients" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.887.0.tgz#a89331e130effd1ee35dec309b8163fb4a9d4920" - integrity sha512-qRCte/3MtNiMhPh4ZEGk9cHfAXq6IDTflvi2t1tkOIVZFyshkSCvNQNJrrE2D/ljVbOK1f3XbBDaF43EoQzIRQ== - dependencies: - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-arn-parser" "3.873.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.0.0" +"@aws-sdk/middleware-bucket-endpoint@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.922.0.tgz#417efd18e8af948e694c5be751bde6d631138b3d" + integrity sha512-Dpr2YeOaLFqt3q1hocwBesynE3x8/dXZqXZRuzSX/9/VQcwYBFChHAm4mTAl4zuvArtDbLrwzWSxmOWYZGtq5w== + dependencies: + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-arn-parser" "3.893.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.887.0.tgz#cc52bc31752875a8d3dfa84a5705e2b563ffc39f" - integrity sha512-AlrTZZScDTG9SYeT82BC5cK/6Q4N0miN5xqMW/pbBqP3fNXlsdJOWKB+EKD3V6DV41EV5GVKHKe/1065xKSQ4w== +"@aws-sdk/middleware-expect-continue@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.922.0.tgz#02f0b0402fcb8974765b3e7d20f43753bd05738c" + integrity sha512-xmnLWMtmHJHJBupSWMUEW1gyxuRIeQ1Ov2xa8Tqq77fPr4Ft2AluEwiDMaZIMHoAvpxWKEEt9Si59Li7GIA+bQ== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.888.0.tgz#b66da7fe00fe980a9274bc36bd56190a218a4314" - integrity sha512-vdwd4wMAlXSg1bldhXyTsDSnyPP+bbEVihapejGKNd4gLfyyHwjTfbli+B/hEONGttQs5Dp54UMn8yW/UA189g== +"@aws-sdk/middleware-flexible-checksums@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.922.0.tgz#41abb38c5baa8626a843aa57cfcb904a4d71427a" + integrity sha512-G363np7YcJhf+gBucskdv8cOTbs2TRwocEzRupuqDIooGDlLBlfJrvwehdgtWR8l53yjJR3zcHvGrVPTe2h8Nw== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/is-array-buffer" "^4.0.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.887.0.tgz#765305b5a2c412e6bf53eb6d557f2ab831ff50a7" - integrity sha512-ulzqXv6NNqdu/kr0sgBYupWmahISHY+azpJidtK6ZwQIC+vBUk9NdZeqQpy7KVhIk2xd4+5Oq9rxapPwPI21CA== +"@aws-sdk/middleware-host-header@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.922.0.tgz#f19621fd19764f7eb0a33795ce0f43402080e394" + integrity sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.887.0.tgz#fdf76f587c04cc8d755f05e41d4df65a78b34127" - integrity sha512-eU/9Cq4gg2sS32bOomxdx2YF43kb+o70pMhnEBBnVVeqzE8co78SO5FQdWfRTfhNJgTyQ6Vgosx//CNMPIfZPg== +"@aws-sdk/middleware-location-constraint@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.922.0.tgz#c455d40e3ab49014a1193fbcb2bf29885d345b7c" + integrity sha512-T4iqd7WQ2DDjCH/0s50mnhdoX+IJns83ZE+3zj9IDlpU0N2aq8R91IG890qTfYkUEdP9yRm0xir/CNed+v6Dew== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.887.0.tgz#fec1c731d158306425897b371cfabdf188d07f12" - integrity sha512-YbbgLI6jKp2qSoAcHnXrQ5jcuc5EYAmGLVFgMVdk8dfCfJLfGGSaOLxF4CXC7QYhO50s+mPPkhBYejCik02Kug== +"@aws-sdk/middleware-logger@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.922.0.tgz#3a43e2b7ec72b043751a7fd45f0514db77756be9" + integrity sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.887.0.tgz#4fdb1039042565a4ba0ff506584a99f3c7c3fd23" - integrity sha512-tjrUXFtQnFLo+qwMveq5faxP5MQakoLArXtqieHphSqZTXm21wDJM73hgT4/PQQGTwgYjDKqnqsE1hvk0hcfDw== +"@aws-sdk/middleware-recursion-detection@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.922.0.tgz#cca89bd926ad05893f9b99b253fa50a6b6c7b829" + integrity sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA== dependencies: - "@aws-sdk/types" "3.887.0" - "@aws/lambda-invoke-store" "^0.0.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@aws/lambda-invoke-store" "^0.1.1" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.888.0.tgz#9e561338d9d036a5bf8252b578222b351b635ea1" - integrity sha512-rKOFNfqgqOfrdcLGF8fcO75azWS2aq2ksRHFoIEFru5FJxzu/yDAhY4C2FKiP/X34xeIUS2SbE/gQgrgWHSN2g== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-arn-parser" "3.873.0" - "@smithy/core" "^3.11.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.1.3" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" +"@aws-sdk/middleware-sdk-s3@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.922.0.tgz#11875f1b848070413815ca34f1b8e93a36fa351a" + integrity sha512-ygg8lME1oFAbsH42ed2wtGqfHLoT5irgx6VC4X98j79fV1qXEwwwbqMsAiMQ/HJehpjqAFRVsHox3MHLN48Z5A== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-arn-parser" "3.893.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.887.0.tgz#861a3bdb2e0565d492a0869651a348ff36ac5faf" - integrity sha512-1ixZks0IDkdac1hjPe4vdLSuD9HznkhblCEb4T0wNyw3Ee1fdXg+MlcPWywzG5zkPXLcIrULUzJg/OSYfaDXcQ== +"@aws-sdk/middleware-ssec@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.922.0.tgz#1c56b2619cdd604e97203148030f299980494008" + integrity sha512-eHvSJZTSRJO+/tjjGD6ocnPc8q9o3m26+qbwQTu/4V6yOJQ1q+xkDZNqwJQphL+CodYaQ7uljp8g1Ji/AN3D9w== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.888.0.tgz#8b7f8ed11120fd1b931b09de12f7846f72bfe538" - integrity sha512-ZkcUkoys8AdrNNG7ATjqw2WiXqrhTvT+r4CIK3KhOqIGPHX0p0DQWzqjaIl7ZhSUToKoZ4Ud7MjF795yUr73oA== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@smithy/core" "^3.11.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" +"@aws-sdk/middleware-user-agent@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.922.0.tgz#b1e109ce3a0c30d44360bf0f707013a3a36d3f78" + integrity sha512-N4Qx/9KP3oVQBJOrSghhz8iZFtUC2NNeSZt88hpPhbqAEAtuX8aD8OzVcpnAtrwWqy82Yd2YTxlkqMGkgqnBsQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@smithy/core" "^3.17.2" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.888.0.tgz#5c3ea2517bf05caf4bd699e731f97bf5e565f397" - integrity sha512-py4o4RPSGt+uwGvSBzR6S6cCBjS4oTX5F8hrHFHfPCdIOMVjyOBejn820jXkCrcdpSj3Qg1yUZXxsByvxc9Lyg== +"@aws-sdk/nested-clients@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.922.0.tgz#1b66f1505fb0d6442e67239c5596159ba871cfff" + integrity sha512-uYvKCF1TGh/MuJ4TMqmUM0Csuao02HawcseG4LUDyxdUsd/EFuxalWq1Cx4fKZQ2K8F504efZBjctMAMNY+l7A== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/middleware-host-header" "3.887.0" - "@aws-sdk/middleware-logger" "3.887.0" - "@aws-sdk/middleware-recursion-detection" "3.887.0" - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/region-config-resolver" "3.887.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@aws-sdk/util-user-agent-browser" "3.887.0" - "@aws-sdk/util-user-agent-node" "3.888.0" - "@smithy/config-resolver" "^4.2.1" - "@smithy/core" "^3.11.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-retry" "^4.2.1" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.1" - "@smithy/util-defaults-mode-node" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/region-config-resolver" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.922.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.7" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.887.0.tgz#5e89768b44cd5e5c624852ade958579144ac2eb5" - integrity sha512-VdSMrIqJ3yjJb/fY+YAxrH/lCVv0iL8uA+lbMNfQGtO5tB3Zx6SU9LEpUwBNX8fPK1tUpI65CNE4w42+MY/7Mg== +"@aws-sdk/region-config-resolver@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.922.0.tgz#55bf45c6d4d344b8393528c7e33576f923bb1b1d" + integrity sha512-44Y/rNNwhngR2KHp6gkx//TOr56/hx6s4l+XLjOqH7EBCHL7XhnrT1y92L+DLiroVr1tCSmO8eHQwBv0Y2+mvw== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.1.1" + "@aws-sdk/types" "3.922.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@aws-sdk/s3-request-presigner@^3.820.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.888.0.tgz#2c629e1bfe1547490873ca71dc38c17fd806a776" - integrity sha512-3VAF0tJxW0p/ttUzJEgrMe52zZVoEG9dcJGdp4N0RG+LD41lp7QuQEYAZ/LGn7mwJsT0q18+tEJ5XzKmJFrOiA== - dependencies: - "@aws-sdk/signature-v4-multi-region" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-format-url" "3.887.0" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.922.0.tgz#f71ad9565d2f1e790ed258c192e3844430ce484c" + integrity sha512-x/WZXOMAN10X/hbjHnaXjtU34RmV3/eJMiHoJsohquSgz8+pfRN1DeK65oa/XPoKCMPfV31RfHSzCduligHfsQ== + dependencies: + "@aws-sdk/signature-v4-multi-region" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-format-url" "3.922.0" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.888.0.tgz#27336bd763746daa3513a8a72436754a370fccce" - integrity sha512-FmOHUaJzEhqfcpyh0L7HLwYcYopK13Dbmuf+oUyu56/RoeB1nLnltH1VMQVj8v3Am2IwlGR+/JpFyrdkErN+cA== +"@aws-sdk/signature-v4-multi-region@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.922.0.tgz#37e30499d805ac0cffbd14b448f7d2a58bbea132" + integrity sha512-mmsgEEL5pE+A7gFYiJMDBCLVciaXq4EFI5iAP7bPpnHvOplnNOYxVy2IreKMllGvrfjVyLnwxzZYlo5zZ65FWg== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.1.3" - "@smithy/types" "^4.5.0" + "@aws-sdk/middleware-sdk-s3" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/token-providers@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.888.0.tgz#db79f49c8999c93abab321fbab4e2e6920738b93" - integrity sha512-WA3NF+3W8GEuCMG1WvkDYbB4z10G3O8xuhT7QSjhvLYWQ9CPt3w4VpVIfdqmUn131TCIbhCzD0KN/1VJTjAjyw== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/nested-clients" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/token-providers@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.922.0.tgz#0ae050e9b713b942397fa290ce269df91013c8cc" + integrity sha512-/inmPnjZE0ZBE16zaCowAvouSx05FJ7p6BQYuzlJ8vxEU0sS0Hf8fvhuiRnN9V9eDUPIBY+/5EjbMWygXL4wlQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/nested-clients" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/types@3.887.0", "@aws-sdk/types@^3.222.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.887.0.tgz#989f3b67d7ddb97443e4bdb80ad2313c604b240d" - integrity sha512-fmTEJpUhsPsovQ12vZSpVTEP/IaRoJAMBGQXlQNjtCpkBp6Iq3KQDa/HDaPINE+3xxo6XvTdtibsNOd5zJLV9A== +"@aws-sdk/types@3.922.0", "@aws-sdk/types@^3.222.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.922.0.tgz#e92daf55272171caac8dba9d425786646466d935" + integrity sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/util-arn-parser@3.873.0": - version "3.873.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.873.0.tgz#12c5ea852574dfb6fe78eaac1666433dff1acffa" - integrity sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg== +"@aws-sdk/util-arn-parser@3.893.0": + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz#fcc9b792744b9da597662891c2422dda83881d8d" + integrity sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA== dependencies: tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.887.0.tgz#e4f2dfb608360b6d8b4e3793492d4625dba00275" - integrity sha512-kpegvT53KT33BMeIcGLPA65CQVxLUL/C3gTz9AzlU/SDmeusBHX4nRApAicNzI/ltQ5lxZXbQn18UczzBuwF1w== +"@aws-sdk/util-endpoints@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.922.0.tgz#817457d6a78ce366bdb7b201c638dba5ffdbfe60" + integrity sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-endpoints" "^3.2.4" tslib "^2.6.2" -"@aws-sdk/util-format-url@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.887.0.tgz#53008142379c4a2c813ee1a68ee086a2507874d9" - integrity sha512-ABDSP6KsrdD+JC7qwMqUpLXqPidvfgT+Q+W8sGGuk/IBy7smgZDOdYSZLE4VBbQpH3N/zSJuslAWhL2x37Qwww== +"@aws-sdk/util-format-url@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.922.0.tgz#a1b91b180d75a73dd8eedee0913a60153673392e" + integrity sha512-UYLWPvZEd6TYilNkrQrIeXh2bXZsY3ighYErSEjD24f3JQhg0XdXoR/QHIE8licHu2qFrTRM6yi9LH1GY6X0cg== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/querystring-builder" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.873.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.873.0.tgz#cc10edef3b7aecf365943ec657116d6eb470d9cb" - integrity sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg== + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz#5df15f24e1edbe12ff1fe8906f823b51cd53bae8" + integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg== dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.887.0.tgz#1c5ccc82a0b31a4b159ad98cb12abda1e6c422c8" - integrity sha512-X71UmVsYc6ZTH4KU6hA5urOzYowSXc3qvroagJNLJYU1ilgZ529lP4J9XOYfEvTXkLR1hPFSRxa43SrwgelMjA== +"@aws-sdk/util-user-agent-browser@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.922.0.tgz#734bbe74d34c3fbdb96aca80a151d3d7e7e87c30" + integrity sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.888.0.tgz#45c871429c7742cf73f570fbc39ef17f4d12e8de" - integrity sha512-rSB3OHyuKXotIGfYEo//9sU0lXAUrTY28SUUnxzOGYuQsAt0XR5iYwBAp+RjV6x8f+Hmtbg0PdCsy1iNAXa0UQ== +"@aws-sdk/util-user-agent-node@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.922.0.tgz#52dd951b314a3e7097d181664a3f79a1e56921ce" + integrity sha512-NrPe/Rsr5kcGunkog0eBV+bY0inkRELsD2SacC4lQZvZiXf8VJ2Y7j+Yq1tB+h+FPLsdt3v9wItIvDf/laAm0Q== dependencies: - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/xml-builder@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.887.0.tgz#376754d19384bbe5b8139c0a0e6521a4a6500c67" - integrity sha512-lMwgWK1kNgUhHGfBvO/5uLe7TKhycwOn3eRCqsKPT9aPCx/HWuTlpcQp8oW2pCRGLS7qzcxqpQulcD+bbUL7XQ== +"@aws-sdk/xml-builder@3.921.0": + version "3.921.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz#e4d4d21b09341648b598d720c602ee76d7a84594" + integrity sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" + fast-xml-parser "5.2.5" tslib "^2.6.2" -"@aws/lambda-invoke-store@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f" - integrity sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw== +"@aws/lambda-invoke-store@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz#2e67f17040b930bde00a79ffb484eb9e77472b06" + integrity sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.27.1": version "7.27.1" @@ -662,24 +683,24 @@ picocolors "^1.1.1" "@babel/compat-data@^7.27.2": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" - integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" - integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.28.3" "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.4" - "@babel/types" "^7.28.4" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -687,13 +708,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.28.3", "@babel/generator@^7.7.2": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" - integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== +"@babel/generator@^7.28.5", "@babel/generator@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/parser" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -741,10 +762,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" @@ -759,12 +780,12 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" - integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -894,26 +915,26 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" - integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.3.3": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" - integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -945,23 +966,25 @@ eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" - integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== dependencies: - "@eslint/object-schema" "^2.1.6" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz#d316e47905bd0a1a931fa50e669b9af4104d1617" - integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" "@eslint/core@^0.15.2": version "0.15.2" @@ -970,6 +993,13 @@ dependencies: "@types/json-schema" "^7.0.15" +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + "@eslint/eslintrc@^3.2.0", "@eslint/eslintrc@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" @@ -985,15 +1015,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.35.0", "@eslint/js@^9.18.0": - version "9.35.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.35.0.tgz#ffbc7e13cf1204db18552e9cd9d4a8e17c692d07" - integrity sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw== +"@eslint/js@9.39.0", "@eslint/js@^9.18.0": + version "9.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.0.tgz#e1955cefd1d79e80a9557274e9aa9bd3f641be01" + integrity sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw== -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== "@eslint/plugin-kit@^0.3.5": version "0.3.5" @@ -1003,6 +1033,14 @@ "@eslint/core" "^0.15.2" levn "^0.4.1" +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + "@humanfs/core@^0.19.1": version "0.19.1" resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" @@ -1026,33 +1064,38 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@inquirer/ansi@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.1.tgz#994f7dd16a00c547a7b110e04bf4f4eca1857929" + integrity sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw== + "@inquirer/checkbox@^4.1.2", "@inquirer/checkbox@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.2.2.tgz#eabaa7eb6adbd64bb7bb7765c67c0a283ed616eb" - integrity sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g== + version "4.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.0.tgz#747ab0ec9b385dd77d3215a51fc9abe25f556a4b" + integrity sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + "@inquirer/ansi" "^1.0.1" + "@inquirer/core" "^10.3.0" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" "@inquirer/confirm@^5.1.14", "@inquirer/confirm@^5.1.6": - version "5.1.16" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.16.tgz#4f99603e5c8a1b471b819343f708c75e8abd2b88" - integrity sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag== + version "5.1.19" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.19.tgz#bf28b420898999eb7479ab55623a3fbaf1453ff4" + integrity sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" -"@inquirer/core@^10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.2.0.tgz#19ff527dbe0956891d825e320ecbc890bd6a1550" - integrity sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA== +"@inquirer/core@^10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.0.tgz#342e4fd62cbd33ea62089364274995dbec1f2ffe" + integrity sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA== dependencies: - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + "@inquirer/ansi" "^1.0.1" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" cli-width "^4.1.0" mute-stream "^2.0.0" signal-exit "^4.1.0" @@ -1060,60 +1103,60 @@ yoctocolors-cjs "^2.1.2" "@inquirer/editor@^4.2.15", "@inquirer/editor@^4.2.7": - version "4.2.18" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.18.tgz#1418aef90025046ad16306451effb6fb36db9664" - integrity sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w== + version "4.2.21" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.21.tgz#9ffe641760a1a1f7722c39be00143060537adcc7" + integrity sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/external-editor" "^1.0.1" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/external-editor" "^1.0.2" + "@inquirer/type" "^3.0.9" "@inquirer/expand@^4.0.17", "@inquirer/expand@^4.0.9": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.18.tgz#8bf1bcd1ee99b8fa02e1143ed5bf69dc576bacd7" - integrity sha512-xUjteYtavH7HwDMzq4Cn2X4Qsh5NozoDHCJTdoXg9HfZ4w3R6mxV1B9tL7DGJX2eq/zqtsFjhm0/RJIMGlh3ag== + version "4.0.21" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.21.tgz#3b22eb3d9961bdbad6edb2a956cfcadc15be9128" + integrity sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" -"@inquirer/external-editor@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.1.tgz#ab0a82c5719a963fb469021cde5cd2b74fea30f8" - integrity sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q== +"@inquirer/external-editor@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.2.tgz#dc16e7064c46c53be09918db639ff780718c071a" + integrity sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ== dependencies: chardet "^2.1.0" - iconv-lite "^0.6.3" + iconv-lite "^0.7.0" -"@inquirer/figures@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== +"@inquirer/figures@^1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.14.tgz#12a7bfd344a83ae6cc5d6004b389ed11f6db6be4" + integrity sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ== "@inquirer/input@^4.1.6", "@inquirer/input@^4.2.1": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.2.tgz#98c420a3bff94ee19124f74a641cef2b1eb01b22" - integrity sha512-hqOvBZj/MhQCpHUuD3MVq18SSoDNHy7wEnQ8mtvs71K8OPZVXJinOzcvQna33dNYLYE4LkA9BlhAhK6MJcsVbw== + version "4.2.5" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.5.tgz#40fe0a4b585c367089b57ef455da4980fbc5480f" + integrity sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" "@inquirer/number@^3.0.17", "@inquirer/number@^3.0.9": - version "3.0.18" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.18.tgz#b5595c02061498e2753fdfe35d9abae14e9223aa" - integrity sha512-7exgBm52WXZRczsydCVftozFTrrwbG5ySE0GqUd2zLNSBXyIucs2Wnm7ZKLe/aUu6NUg9dg7Q80QIHCdZJiY4A== + version "3.0.21" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.21.tgz#fb8fac4c8bd08471b1068dc89f42d61fe3a43ca9" + integrity sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" "@inquirer/password@^4.0.17", "@inquirer/password@^4.0.9": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.18.tgz#7500139016247163a6c115228fcafbb9cb448941" - integrity sha512-zXvzAGxPQTNk/SbT3carAD4Iqi6A2JS2qtcqQjsL22uvD+JfQzUrDEtPjLL7PLn8zlSNyPdY02IiQjzoL9TStA== + version "4.0.21" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.21.tgz#b3422a19621290f2270f9b2ef8eeded8cf85db4f" + integrity sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + "@inquirer/ansi" "^1.0.1" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" "@inquirer/prompts@7.3.2": version "7.3.2" @@ -1148,39 +1191,39 @@ "@inquirer/select" "^4.3.1" "@inquirer/rawlist@^4.0.9", "@inquirer/rawlist@^4.1.5": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.6.tgz#805e1c449dde2bdfd8bc7eca56e6fe40938a7dc7" - integrity sha512-KOZqa3QNr3f0pMnufzL7K+nweFFCCBs6LCXZzXDrVGTyssjLeudn5ySktZYv1XiSqobyHRYYK0c6QsOxJEhXKA== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.9.tgz#b4641cb54e130049a13bd1b7621ac766c6d531f2" + integrity sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" "@inquirer/search@^3.0.9", "@inquirer/search@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.1.1.tgz#f67a559c66043fe4fdc639c053578d34440b3c49" - integrity sha512-TkMUY+A2p2EYVY3GCTItYGvqT6LiLzHBnqsU1rJbrpXUijFfM6zvUx0R4civofVwFCmJZcKqOVwwWAjplKkhxA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.0.tgz#fef378965592e9f407cd4f1f782ca40df1b3ed5e" + integrity sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" "@inquirer/select@^4.0.9", "@inquirer/select@^4.3.1": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.3.2.tgz#7ff8942fb052c9c92110c9c044c7abb9b4ba9497" - integrity sha512-nwous24r31M+WyDEHV+qckXkepvihxhnyIaod2MG7eCE6G0Zm/HUF6jgN8GXgf4U7AU6SLseKdanY195cwvU6w== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + version "4.4.0" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.0.tgz#e19d0d0fbfcd5cb4a20f292e62c88aa8155cc6dc" + integrity sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA== + dependencies: + "@inquirer/ansi" "^1.0.1" + "@inquirer/core" "^10.3.0" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" -"@inquirer/type@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.8.tgz#efc293ba0ed91e90e6267f1aacc1c70d20b8b4e8" - integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== +"@inquirer/type@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.9.tgz#f7f9696e9276e4e1ae9332767afb9199992e31d9" + integrity sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w== "@isaacs/balanced-match@^4.0.1": version "4.0.1" @@ -1484,46 +1527,46 @@ integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== "@mikro-orm/cli@^6.4.12": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/cli/-/cli-6.5.2.tgz#d3cdc0b54249e714f10666e408328921fe6a9f86" - integrity sha512-gNP3AdlYmMnR2QHkxWOorU/O/+sefgzgiwtrtxZrAVhlI7KcPmcUMb4ymNHwNhnxUnyqP0vBEhcbnF4caqmLHA== + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/cli/-/cli-6.5.9.tgz#da231e76669c127f0be6e444d9470a2f9883b5c4" + integrity sha512-Jihukq7STU5ZfRdjOBSR7mzOClqkhkic7t8GF/OAoMBeHgpUc93Ug2GvSMrJaNWGg4AKtgch/cP/KGv/3QtSsQ== dependencies: "@jercle/yargonaut" "1.1.5" - "@mikro-orm/core" "6.5.2" - "@mikro-orm/knex" "6.5.2" - fs-extra "11.3.1" + "@mikro-orm/core" "6.5.9" + "@mikro-orm/knex" "6.5.9" + fs-extra "11.3.2" tsconfig-paths "4.2.0" yargs "17.7.2" -"@mikro-orm/core@6.5.2", "@mikro-orm/core@^6.4.12": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/core/-/core-6.5.2.tgz#ca40951417c544ae1f15b7187f0c50ac14e12160" - integrity sha512-iKVbgdj653a1RiBzFy6UlpdraprLowpPjabyWObtYUYvVAvvJbtKwDVeZ8xbpIgdLzX2HHurR1w6wXeC17GVSg== +"@mikro-orm/core@6.5.9", "@mikro-orm/core@^6.4.12": + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/core/-/core-6.5.9.tgz#4958c88ebc1dbb77e4a650c1f9fbfc1304ad1d00" + integrity sha512-BDfMW35pKVfSBBK0TiIpjh+IX62UwD0V22x4O6psMfiwbFoAJN/gEpEg1FuLx41dYf/ExHe9Cin6U6hwRdELaQ== dependencies: dataloader "2.2.3" - dotenv "17.2.1" + dotenv "17.2.3" esprima "4.0.1" - fs-extra "11.3.1" + fs-extra "11.3.2" globby "11.1.0" - mikro-orm "6.5.2" + mikro-orm "6.5.9" reflect-metadata "0.2.2" -"@mikro-orm/knex@6.5.2": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/knex/-/knex-6.5.2.tgz#a9cdd3acd334660df71af87ed60f6db0e6e1ab36" - integrity sha512-9CmZIZ6hs7P7JPDLaZzA539pzEHRc5GzgEru9XK0MUxqHrHiOImYiXAclVj9k6LLo5NczR4gYchQxK19+HWdoQ== +"@mikro-orm/knex@6.5.9": + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/knex/-/knex-6.5.9.tgz#1bef2f0aa4cf246c1851b9d0306b8dfc54ad6dfd" + integrity sha512-VtBPIcNYyWeQ+M+ha5DD+961gc6jtJDX0JLkBfMatTgHl78R1IuiTPaPfen4X9ezEDsR6N8XqJtuRmOXRFl6lA== dependencies: - fs-extra "11.3.1" + fs-extra "11.3.2" knex "3.1.0" sqlstring "2.3.3" "@mikro-orm/mysql@^6.4.12": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/mysql/-/mysql-6.5.2.tgz#3eb5b22b533cbb2db66e0f5ec9f8204d3cfb00bc" - integrity sha512-B4JaWXLIhLFhQJ74Fl3g8c4T+Ywy5Q/dcby/YLKUXUR2ExOsZ0vQmybsdCggwWAvdUFkMoKGkDwE9/jmgyZ5LA== + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/mysql/-/mysql-6.5.9.tgz#b7aedde0715d4f49863a07c7f1298c3759512d2a" + integrity sha512-Zoo4lRdY6jzCB/rzdN/YxYA854+RCpY++hEZz9vHG4wJs72M5rsU7sibH19lJw/JH9m7BC1xqV/geAhfC/MjVg== dependencies: - "@mikro-orm/knex" "6.5.2" - mysql2 "3.14.4" + "@mikro-orm/knex" "6.5.9" + mysql2 "3.15.3" "@mikro-orm/nestjs@^6.1.1": version "6.1.1" @@ -1531,12 +1574,12 @@ integrity sha512-aluD3eTeuCvIePDk5UBanHIhu1zAJQXqWAg47MZdHJmFkNuXn62DCXbD2c4X5TCpKW/m0zjba22ilyZ/AFG9qg== "@mikro-orm/reflection@^6.4.16": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/reflection/-/reflection-6.5.2.tgz#edebfb2b8f472d24f963be2e28242e289172c716" - integrity sha512-tzKYFs5T2RKQ/zcomJIhAfGy+mScJB/+oSphPx9KrrTooAZtJgcHJddaR1TFW5oiq4je4tQ265+DDsYYOLsj7w== + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/reflection/-/reflection-6.5.9.tgz#877cf1a48ee246b6e0c56f8a492e192a3e631983" + integrity sha512-iBkQXFzh8oAZmRAH1WrcI48fIfJMgBuIWHdyDLvrmVgkZe4QP0ninOGskV41xsKX7ywWsgsxTjYagwBROEpVSw== dependencies: globby "11.1.0" - ts-morph "26.0.0" + ts-morph "27.0.2" "@napi-rs/nice-android-arm-eabi@1.1.1": version "1.1.1" @@ -1672,14 +1715,14 @@ webpack-node-externals "3.0.0" "@nestjs/common@^11.0.1": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-11.1.6.tgz#704ae26f09ccd135bf3e6f44b6ef4e3407ea3c54" - integrity sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-11.1.8.tgz#624d01f50d2f263592a1a5407d9f180179a98b2c" + integrity sha512-bbsOqwld/GdBfiRNc4nnjyWWENDEicq4SH+R5AuYatvf++vf1x5JIsHB1i1KtfZMD3eRte0D4K9WXuAYil6XAg== dependencies: uid "2.0.2" file-type "21.0.0" iterare "1.2.1" - load-esm "1.0.2" + load-esm "1.0.3" tslib "2.8.1" "@nestjs/config@^4.0.2": @@ -1692,15 +1735,15 @@ lodash "4.17.21" "@nestjs/core@^11.0.1": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-11.1.6.tgz#9d54882f121168b2fa2b07fa1db0858161a80626" - integrity sha512-siWX7UDgErisW18VTeJA+x+/tpNZrJewjTBsRPF3JVxuWRuAB1kRoiJcxHgln8Lb5UY9NdvklITR84DUEXD0Cg== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-11.1.8.tgz#fb0d32f9d92e9396babb1e5d29a34727dbbe5285" + integrity sha512-7riWfmTmMhCJHZ5ZiaG+crj4t85IPCq/wLRuOUSigBYyFT2JZj0lVHtAdf4Davp9ouNI8GINBDt9h9b5Gz9nTw== dependencies: uid "2.0.2" "@nuxt/opencollective" "0.4.1" fast-safe-stringify "2.1.1" iterare "1.2.1" - path-to-regexp "8.2.0" + path-to-regexp "8.3.0" tslib "2.8.1" "@nestjs/cqrs@^11.0.3": @@ -1709,11 +1752,11 @@ integrity sha512-2ezBftiXqVfNTzjCrmhazohYhIQzgm8rvM0aKndv73IOOBcVlNuNiQ3HHiHdd4c2w/3MOQDtsGbQHgZUuW6DPw== "@nestjs/jwt@^11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@nestjs/jwt/-/jwt-11.0.0.tgz#aef1590e70830c70fba0f59e9b17314dc4d36822" - integrity sha512-v7YRsW3Xi8HNTsO+jeHSEEqelX37TVWgwt+BcxtkG/OfXJEOs6GZdbdza200d6KqId1pJQZ6UPj1F0M6E+mxaA== + version "11.0.1" + resolved "https://registry.yarnpkg.com/@nestjs/jwt/-/jwt-11.0.1.tgz#3109ba23932330f4001db9e41e4374f2e41342df" + integrity sha512-HXSsc7SAnCnjA98TsZqrE7trGtHDnYXWp4Ffy6LwSmck1QvbGYdMzBquXofX5l6tIRpeY4Qidl2Ti2CVG77Pdw== dependencies: - "@types/jsonwebtoken" "9.0.7" + "@types/jsonwebtoken" "9.0.10" jsonwebtoken "9.0.2" "@nestjs/mapped-types@2.1.0": @@ -1727,43 +1770,43 @@ integrity sha512-ulQX6mbjlws92PIM15Naes4F4p2JoxGnIJuUsdXQPT+Oo2sqQmENEZXM7eYuimocfHnKlcfZOuyzbA33LwUlOQ== "@nestjs/platform-express@^11.1.5": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.6.tgz#9b1dcf82a3b3fdd5761c918ad664aff83e4eacc7" - integrity sha512-HErwPmKnk+loTq8qzu1up+k7FC6Kqa8x6lJ4cDw77KnTxLzsCaPt+jBvOq6UfICmfqcqCCf3dKXg+aObQp+kIQ== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.8.tgz#9e97c20d23df70ad8826125424a69c9103b68653" + integrity sha512-rL6pZH9BW7BnL5X2eWbJMtt86uloAKjFgyY5+L2UkizgfEp7rgAs0+Z1z0BcW2Pgu5+q8O7RKPNyHJ/9ZNz/ZQ== dependencies: cors "2.8.5" express "5.1.0" multer "2.0.2" - path-to-regexp "8.2.0" + path-to-regexp "8.3.0" tslib "2.8.1" "@nestjs/schematics@^11.0.0", "@nestjs/schematics@^11.0.1": - version "11.0.7" - resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-11.0.7.tgz#4a3cd162b38a4756995d89473ec45f8d1e952bd1" - integrity sha512-t8dNYYMwEeEsrlwc2jbkfwCfXczq4AeNEgx1KVQuJ6wYibXk0ZbXbPdfp8scnEAaQv1grpncNV5gWgzi7ZwbvQ== + version "11.0.9" + resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-11.0.9.tgz#18a0d128c609be76410f5c7ea02680c8cd297113" + integrity sha512-0NfPbPlEaGwIT8/TCThxLzrlz3yzDNkfRNpbL7FiplKq3w4qXpJg0JYwqgMEJnLQZm3L/L/5XjoyfJHUO3qX9g== dependencies: - "@angular-devkit/core" "19.2.15" - "@angular-devkit/schematics" "19.2.15" - comment-json "4.2.5" + "@angular-devkit/core" "19.2.17" + "@angular-devkit/schematics" "19.2.17" + comment-json "4.4.1" jsonc-parser "3.3.1" pluralize "8.0.0" "@nestjs/swagger@^11.1.5": - version "11.2.0" - resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.0.tgz#a1b10620a9f90c78edf897a9386dc4f3e014387e" - integrity sha512-5wolt8GmpNcrQv34tIPUtPoV1EeFbCetm40Ij3+M0FNNnf2RJ3FyWfuQvI8SBlcJyfaounYVTKzKHreFXsUyOg== + version "11.2.1" + resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.1.tgz#590047ed74e4c8417f0b0f0260d04eea9a1d7daf" + integrity sha512-1MS7xf0pzc1mofG53xrrtrurnziafPUHkqzRm4YUVPA/egeiMaSerQBD/feiAeQ2BnX0WiLsTX4HQFO0icvOjQ== dependencies: "@microsoft/tsdoc" "0.15.1" "@nestjs/mapped-types" "2.1.0" js-yaml "4.1.0" lodash "4.17.21" - path-to-regexp "8.2.0" - swagger-ui-dist "5.21.0" + path-to-regexp "8.3.0" + swagger-ui-dist "5.29.4" "@nestjs/testing@^11.0.1": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.6.tgz#7f172a8024948dee4cb318acccfff31c1356f338" - integrity sha512-srYzzDNxGvVCe1j0SpTS9/ix75PKt6Sn6iMaH1rpJ6nj2g8vwNrhK0CoJJXvpCYgrnI+2WES2pprYnq8rAMYHA== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.8.tgz#b41855084e53cdea0fae5669fa0fb4792e49c687" + integrity sha512-E6K+0UTKztcPxJzLnQa7S34lFjZbrj3Z1r7c5y5WDrL1m5HD1H4AeyBhicHgdaFmxjLAva2bq0sYKy/S7cdeYA== dependencies: tslib "2.8.1" @@ -1801,9 +1844,9 @@ consola "^3.2.3" "@paralleldrive/cuid2@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" - integrity sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz#3d62ea9e7be867d3fa94b9897fab5b0ae187d784" + integrity sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw== dependencies: "@noble/hashes" "^1.1.5" @@ -1846,159 +1889,159 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@smithy/abort-controller@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.1.1.tgz#9b3872ab6b2c061486175c281dadc0a853260533" - integrity sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg== +"@smithy/abort-controller@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.4.tgz#8031d32aea69c714eae49c1f43ce0ea60481d2d3" + integrity sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/chunked-blob-reader-native@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.1.0.tgz#4d814dd07ebb1f579daf51671945389f9772400f" - integrity sha512-Bnv0B3nSlfB2mPO0WgM49I/prl7+kamF042rrf3ezJ3Z4C7csPYvyYgZfXTGXwXfj1mAwDWjE/ybIf49PzFzvA== +"@smithy/chunked-blob-reader-native@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz#380266951d746b522b4ab2b16bfea6b451147b41" + integrity sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ== dependencies: - "@smithy/util-base64" "^4.1.0" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/chunked-blob-reader@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.1.0.tgz#48fa62c85b146be2a06525f0457ce58a46d69ab0" - integrity sha512-a36AtR7Q7XOhRPt6F/7HENmTWcB8kN7mDJcOFM/+FuKO6x88w8MQJfYCufMWh4fGyVkPjUh3Rrz/dnqFQdo6OQ== +"@smithy/chunked-blob-reader@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz#776fec5eaa5ab5fa70d0d0174b7402420b24559c" + integrity sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA== dependencies: tslib "^2.6.2" -"@smithy/config-resolver@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.2.1.tgz#12c24e550e2675e03a78bec64a652ed129bce718" - integrity sha512-FXil8q4QN7mgKwU2hCLm0ltab8NyY/1RiqEf25Jnf6WLS3wmb11zGAoLETqg1nur2Aoibun4w4MjeN9CMJ4G6A== - dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" +"@smithy/config-resolver@^4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.1.tgz#dcf9321841d44912455d4a0d8c4e554aa97af921" + integrity sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ== + dependencies: + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" tslib "^2.6.2" -"@smithy/core@^3.11.0": - version "3.11.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.11.0.tgz#18ee04696ca35889046169e422a894bea1bec59d" - integrity sha512-Abs5rdP1o8/OINtE49wwNeWuynCu0kme1r4RI3VXVrHr4odVDG7h7mTnw1WXXfN5Il+c25QOnrdL2y56USfxkA== - dependencies: - "@smithy/middleware-serde" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" - "@types/uuid" "^9.0.1" +"@smithy/core@^3.17.2": + version "3.17.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.17.2.tgz#bd27762dfd9f61e60b2789a20fa0dfd647827e98" + integrity sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ== + dependencies: + "@smithy/middleware-serde" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@smithy/credential-provider-imds@^4.0.7", "@smithy/credential-provider-imds@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.1.tgz#e1535a0121a98a2d872eaffc2470eccc057cebd5" - integrity sha512-1WdBfM9DwA59pnpIizxnUvBf/de18p4GP+6zP2AqrlFzoW3ERpZaT4QueBR0nS9deDMaQRkBlngpVlnkuuTisQ== +"@smithy/credential-provider-imds@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.4.tgz#eb2ab999136c97d942e69638e6126a3c4d8cf79d" + integrity sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw== dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/property-provider" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" tslib "^2.6.2" -"@smithy/eventstream-codec@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.1.1.tgz#637eb4bceecc3ef588b86c28506439a9cdd7a41f" - integrity sha512-PwkQw1hZwHTQB6X5hSUWz2OSeuj5Z6enWuAqke7DgWoP3t6vg3ktPpqPz3Erkn6w+tmsl8Oss6nrgyezoea2Iw== +"@smithy/eventstream-codec@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz#f9cc680b156d3fac4cc631a8b0159f5e87205143" + integrity sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^4.5.0" - "@smithy/util-hex-encoding" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-hex-encoding" "^4.2.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.1.1.tgz#f7df13ebd5a6028b12b496f12eecdd08c4c9b792" - integrity sha512-Q9QWdAzRaIuVkefupRPRFAasaG/droBqn1feiMnmLa+LLEUG45pqX1+FurHFmlqiCfobB3nUlgoJfeXZsr7MPA== +"@smithy/eventstream-serde-browser@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.4.tgz#6aa94f14dd4d3376cb3389a0f6f245994e9e97c7" + integrity sha512-d5T7ZS3J/r8P/PDjgmCcutmNxnSRvPH1U6iHeXjzI50sMr78GLmFcrczLw33Ap92oEKqa4CLrkAPeSSOqvGdUA== dependencies: - "@smithy/eventstream-serde-universal" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-serde-universal" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.2.1.tgz#77333a110361bfe2749b685d31e01299ede87c40" - integrity sha512-oSUkF9zDN9zcOUBMtxp8RewJlh71E9NoHWU8jE3hU9JMYCsmW4assVTpgic/iS3/dM317j6hO5x18cc3XrfvEw== +"@smithy/eventstream-serde-config-resolver@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.4.tgz#6ddd88c57274a6fe72e11bfd5ac858977573dc46" + integrity sha512-lxfDT0UuSc1HqltOGsTEAlZ6H29gpfDSdEPTapD5G63RbnYToZ+ezjzdonCCH90j5tRRCw3aLXVbiZaBW3VRVg== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.1.1.tgz#635819a756cb8a69a7e3eb91ca9076284ea00939" - integrity sha512-tn6vulwf/ScY0vjhzptSJuDJJqlhNtUjkxJ4wiv9E3SPoEqTEKbaq6bfqRO7nvhTG29ALICRcvfFheOUPl8KNA== +"@smithy/eventstream-serde-node@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.4.tgz#61934c44c511bec5b07cfbbf59a2282806cd2ff8" + integrity sha512-TPhiGByWnYyzcpU/K3pO5V7QgtXYpE0NaJPEZBCa1Y5jlw5SjqzMSbFiLb+ZkJhqoQc0ImGyVINqnq1ze0ZRcQ== dependencies: - "@smithy/eventstream-serde-universal" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-serde-universal" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.1.1.tgz#803cdde6a17ac501cc700ce38400caf70715ecb1" - integrity sha512-uLOAiM/Dmgh2CbEXQx+6/ssK7fbzFhd+LjdyFxXid5ZBCbLHTFHLdD/QbXw5aEDsLxQhgzDxLLsZhsftAYwHJA== +"@smithy/eventstream-serde-universal@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.4.tgz#7c19762047b429d53af4664dc1168482706b4ee7" + integrity sha512-GNI/IXaY/XBB1SkGBFmbW033uWA0tj085eCxYih0eccUe/PFR7+UBQv9HNDk2fD9TJu7UVsCWsH99TkpEPSOzQ== dependencies: - "@smithy/eventstream-codec" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-codec" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/fetch-http-handler@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz#fe284a00f1b3a35edf9fba454d287b7f74ef20af" - integrity sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng== +"@smithy/fetch-http-handler@^5.3.5": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.5.tgz#5cfea38d9a1519741c7147fea10a4a064de03f66" + integrity sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/querystring-builder" "^4.2.4" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/hash-blob-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.1.1.tgz#fbcab0008b973ccf370c698cd11ec8d9584607c8" - integrity sha512-avAtk++s1e/1VODf+rg7c9R2pB5G9y8yaJaGY4lPZI2+UIqVyuSDMikWjeWfBVmFZ3O7NpDxBbUCyGhThVUKWQ== +"@smithy/hash-blob-browser@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.5.tgz#c82e032747b72811f735c2c1f0ed0c1aeb4de910" + integrity sha512-kCdgjD2J50qAqycYx0imbkA9tPtyQr1i5GwbK/EOUkpBmJGSkJe4mRJm+0F65TUSvvui1HZ5FFGFCND7l8/3WQ== dependencies: - "@smithy/chunked-blob-reader" "^5.1.0" - "@smithy/chunked-blob-reader-native" "^4.1.0" - "@smithy/types" "^4.5.0" + "@smithy/chunked-blob-reader" "^5.2.0" + "@smithy/chunked-blob-reader-native" "^4.2.1" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/hash-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.1.1.tgz#86ceca92487492267e944e4f4507106b731e7971" - integrity sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA== +"@smithy/hash-node@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.4.tgz#45bd19999625166825eb29aafb007819de031894" + integrity sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/hash-stream-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.1.1.tgz#1d8e4485fa15c458d7a8248a50d0f5f91705cced" - integrity sha512-3ztT4pV0Moazs3JAYFdfKk11kYFDo4b/3R3+xVjIm6wY9YpJf+xfz+ocEnNKcWAdcmSMqi168i2EMaKmJHbJMA== +"@smithy/hash-stream-node@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.4.tgz#553fa9a8fe567b0018cf99be3dafb920bc241a7f" + integrity sha512-amuh2IJiyRfO5MV0X/YFlZMD6banjvjAwKdeJiYGUbId608x+oSNwv3vlyW2Gt6AGAgl3EYAuyYLGRX/xU8npQ== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz#2511335ff889944701c7d2a3b1e4a4d6fe9ddfab" - integrity sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg== +"@smithy/invalid-dependency@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.4.tgz#ff957d711b72f432803fdee1e247f0dd4c98251d" + integrity sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": @@ -2008,210 +2051,209 @@ dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^4.0.0", "@smithy/is-array-buffer@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz#d18a2f22280e7173633cb91a9bdb6f3d8a6560b8" - integrity sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ== +"@smithy/is-array-buffer@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz#b0f874c43887d3ad44f472a0f3f961bcce0550c2" + integrity sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ== dependencies: tslib "^2.6.2" -"@smithy/md5-js@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.1.1.tgz#df81396bef83eb17bce531c871af935df986bdfc" - integrity sha512-MvWXKK743BuHjr/hnWuT6uStdKEaoqxHAQUvbKJPPZM5ZojTNFI5D+47BoQfBE5RgGlRRty05EbWA+NXDv+hIA== +"@smithy/md5-js@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.4.tgz#e012464383ffde0bd423d38ef9b5caf720ee90eb" + integrity sha512-h7kzNWZuMe5bPnZwKxhVbY1gan5+TZ2c9JcVTHCygB14buVGOZxLl+oGfpY2p2Xm48SFqEWdghpvbBdmaz3ncQ== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-content-length@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz#eaea7bd14c7a0b64aef87b8c372c2a04d7b9cb72" - integrity sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w== +"@smithy/middleware-content-length@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.4.tgz#8b625cb264c13c54440ecae59a3e6b1996dfd7b5" + integrity sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.1.tgz#54c61a113e6da7b615724d03517879d377d3888d" - integrity sha512-fUTMmQvQQZakXOuKizfu7fBLDpwvWZjfH6zUK2OLsoNZRZGbNUdNSdLJHpwk1vS208jtDjpUIskh+JoA8zMzZg== - dependencies: - "@smithy/core" "^3.11.0" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/shared-ini-file-loader" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-middleware" "^4.1.1" +"@smithy/middleware-endpoint@^4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.6.tgz#dce57120e72ffeb2d45f1d09d424a9bed1571a21" + integrity sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w== + dependencies: + "@smithy/core" "^3.17.2" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-middleware" "^4.2.4" tslib "^2.6.2" -"@smithy/middleware-retry@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.2.1.tgz#61be10c06e183c392a3769cb8b03c7846b37bee7" - integrity sha512-JzfvjwSJXWRl7LkLgIRTUTd2Wj639yr3sQGpViGNEOjtb0AkAuYqRAHs+jSOI/LPC0ZTjmFVVtfrCICMuebexw== - dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/service-error-classification" "^4.1.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@types/uuid" "^9.0.1" +"@smithy/middleware-retry@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.6.tgz#b3c781b42b8f1ab22ee71358c0e81303cb00d737" + integrity sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA== + dependencies: + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/service-error-classification" "^4.2.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@smithy/middleware-serde@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz#cfb99f53c744d7730928235cbe66cc7ff8a8a9b2" - integrity sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg== +"@smithy/middleware-serde@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.4.tgz#43da8ac40e2bcdd30e705a6047a3a667ce44433c" + integrity sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/middleware-stack@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz#1d533fde4ccbb62d7fc0f0b8ac518b7e4791e311" - integrity sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A== +"@smithy/middleware-stack@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.4.tgz#9c833c3c8f2ddda1e2e31c9315ffa31f0f0aa85d" + integrity sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/node-config-provider@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.2.1.tgz#31be8865dbea9a9f23aee278a6728317d0ed0250" - integrity sha512-AIA0BJZq2h295J5NeCTKhg1WwtdTA/GqBCaVjk30bDgMHwniUETyh5cP9IiE9VrId7Kt8hS7zvREVMTv1VfA6g== +"@smithy/node-config-provider@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.4.tgz#9e41d45167568dbd2e1bc2c24a25cb26c3fd847f" + integrity sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw== dependencies: - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/node-http-handler@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz#d7ab8e31659030d3d5a68f0982f15c00b1e67a0c" - integrity sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw== +"@smithy/node-http-handler@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.4.tgz#e0ccaae333960df7e9387e9487554b98674b7720" + integrity sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA== dependencies: - "@smithy/abort-controller" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/abort-controller" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/querystring-builder" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/property-provider@^4.0.5", "@smithy/property-provider@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.1.1.tgz#6e11ae6729840314afed05fd6ab48f62c654116b" - integrity sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg== +"@smithy/property-provider@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.4.tgz#ea36ed8f1e282060aaf5cd220f2b428682d52775" + integrity sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/protocol-http@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.2.1.tgz#33f2b8e4e1082c3ae0372d1322577e6fa71d7824" - integrity sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw== +"@smithy/protocol-http@^5.3.4": + version "5.3.4" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz#2773de28d0b7e8b0ab83e94673fee0966fc8c68c" + integrity sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/querystring-builder@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz#4d35c1735de8214055424045a117fa5d1d5cdec1" - integrity sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA== +"@smithy/querystring-builder@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.4.tgz#9f57301a895bb986cf7740edd70a91df335e6109" + integrity sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-uri-escape" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-uri-escape" "^4.2.0" tslib "^2.6.2" -"@smithy/querystring-parser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz#21b861439b2db16abeb0a6789b126705fa25eea1" - integrity sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng== +"@smithy/querystring-parser@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.4.tgz#c0cc9b13855e9fc45a0c75ae26482eab6891a25e" + integrity sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/service-error-classification@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.1.1.tgz#86a615298ae406c3b6c7dc63c1c1738c54cfdfc6" - integrity sha512-Iam75b/JNXyDE41UvrlM6n8DNOa/r1ylFyvgruTUx7h2Uk7vDNV9AAwP1vfL1fOL8ls0xArwEGVcGZVd7IO/Cw== +"@smithy/service-error-classification@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.4.tgz#acace7208270c8a9c4f2218092866b4d650d4719" + integrity sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" -"@smithy/shared-ini-file-loader@^4.0.5", "@smithy/shared-ini-file-loader@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.1.1.tgz#d4a748bb8027e1111635464c9b1e546d608fc089" - integrity sha512-YkpikhIqGc4sfXeIbzSj10t2bJI/sSoP5qxLue6zG+tEE3ngOBSm8sO3+djacYvS/R5DfpxN/L9CyZsvwjWOAQ== +"@smithy/shared-ini-file-loader@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.4.tgz#ba0707daba05d7705ae120abdc27dbfa5b5b9049" + integrity sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/signature-v4@^5.1.3": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.2.1.tgz#0048489d2f1b3c888382595a085edd31967498f8" - integrity sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA== - dependencies: - "@smithy/is-array-buffer" "^4.1.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-hex-encoding" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-uri-escape" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" +"@smithy/signature-v4@^5.3.4": + version "5.3.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.4.tgz#d2233c39ce0b02041a11c5cfd210f3e61982931a" + integrity sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A== + dependencies: + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-uri-escape" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.6.1.tgz#4bebcf313431bd274da0b28c7ddc4ba335f9994b" - integrity sha512-WolVLDb9UTPMEPPOncrCt6JmAMCSC/V2y5gst2STWJ5r7+8iNac+EFYQnmvDCYMfOLcilOSEpm5yXZXwbLak1Q== - dependencies: - "@smithy/core" "^3.11.0" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-stream" "^4.3.1" +"@smithy/smithy-client@^4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.9.2.tgz#6f9d916da362de7ac8e685112e3f68a9eba56b94" + integrity sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg== + dependencies: + "@smithy/core" "^3.17.2" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-stream" "^4.5.5" tslib "^2.6.2" -"@smithy/types@^4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370" - integrity sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg== +"@smithy/types@^4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.8.1.tgz#0ecad4e329340c8844e38a18c7608d84cc1c853c" + integrity sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA== dependencies: tslib "^2.6.2" -"@smithy/url-parser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.1.1.tgz#0e9a5e72b3cf9d7ab7305f9093af5528d9debaf6" - integrity sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg== +"@smithy/url-parser@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.4.tgz#36336ea90529ff00de473a2c82d1487d87a588b1" + integrity sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg== dependencies: - "@smithy/querystring-parser" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/querystring-parser" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-base64@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.1.0.tgz#5965026081d9aef4a8246f5702807570abe538b2" - integrity sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ== +"@smithy/util-base64@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.0.tgz#5e287b528793aa7363877c1a02cd880d2e76241d" + integrity sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ== dependencies: - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz#636bdf4bc878c546627dab4b9b0e4db31b475be7" - integrity sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ== +"@smithy/util-body-length-browser@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz#04e9fc51ee7a3e7f648a4b4bcdf96c350cfa4d61" + integrity sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz#646750e4af58f97254a5d5cfeaba7d992f0152ec" - integrity sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ== +"@smithy/util-body-length-node@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz#79c8a5d18e010cce6c42d5cbaf6c1958523e6fec" + integrity sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA== dependencies: tslib "^2.6.2" @@ -2223,96 +2265,95 @@ "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz#21f9e644a0eb41226d92e4eff763f76a7db7e9cc" - integrity sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw== +"@smithy/util-buffer-from@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz#7abd12c4991b546e7cee24d1e8b4bfaa35c68a9d" + integrity sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew== dependencies: - "@smithy/is-array-buffer" "^4.1.0" + "@smithy/is-array-buffer" "^4.2.0" tslib "^2.6.2" -"@smithy/util-config-provider@^4.0.0", "@smithy/util-config-provider@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz#6a07d73446c1e9a46d7a3c125f2a9301060bc957" - integrity sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ== +"@smithy/util-config-provider@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz#2e4722937f8feda4dcb09672c59925a4e6286cfc" + integrity sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q== dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.1.tgz#40b9659d6fc15aa1101e440d1a92579cb66ebfa3" - integrity sha512-hA1AKIHFUMa9Tl6q6y8p0pJ9aWHCCG8s57flmIyLE0W7HcJeYrYtnqXDcGnftvXEhdQnSexyegXnzzTGk8bKLA== +"@smithy/util-defaults-mode-browser@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.5.tgz#c74f357b048d20c95aa636fa79d33bcfa799e2d0" + integrity sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ== dependencies: - "@smithy/property-provider" "^4.1.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - bowser "^2.11.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.1.tgz#bca834c5ee16949bf8d0db9ac7bf988ad0d3ce10" - integrity sha512-RGSpmoBrA+5D2WjwtK7tto6Pc2wO9KSXKLpLONhFZ8VyuCbqlLdiDAfuDTNY9AJe4JoE+Cx806cpTQQoQ71zPQ== - dependencies: - "@smithy/config-resolver" "^4.2.1" - "@smithy/credential-provider-imds" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/property-provider" "^4.1.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" +"@smithy/util-defaults-mode-node@^4.2.7": + version "4.2.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.7.tgz#2657623ff6f326f152966bfa52a593cd3b5cd70e" + integrity sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw== + dependencies: + "@smithy/config-resolver" "^4.4.1" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-endpoints@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.1.1.tgz#62c7e10e3a685c9cbb4080220d9e819ee79be8ff" - integrity sha512-qB4R9kO0SetA11Rzu6MVGFIaGYX3p6SGGGfWwsKnC6nXIf0n/0AKVwRTsYsz9ToN8CeNNtNgQRwKFBndGJZdyw== +"@smithy/util-endpoints@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.4.tgz#d68a4692a55b14f2060de75715bd4664b93a4353" + integrity sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg== dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-hex-encoding@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz#9b27cf0c25d0de2c8ebfe75cc20df84e5014ccc9" - integrity sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w== +"@smithy/util-hex-encoding@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz#1c22ea3d1e2c3a81ff81c0a4f9c056a175068a7b" + integrity sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.1.1.tgz#e19749a127499c9bdada713a8afd807d92d846e2" - integrity sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg== +"@smithy/util-middleware@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.4.tgz#d66d6b67c4c90be7bf0659f57000122b1a6bbf82" + integrity sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-retry@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.1.1.tgz#f4a99d9b0ffb9e4bb119ac5a24e54e54d891e22c" - integrity sha512-jGeybqEZ/LIordPLMh5bnmnoIgsqnp4IEimmUp5c5voZ8yx+5kAlN5+juyr7p+f7AtZTgvhmInQk4Q0UVbrZ0Q== +"@smithy/util-retry@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.4.tgz#1f466d3bc5b5f114994ac2298e859815f3a8deec" + integrity sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA== dependencies: - "@smithy/service-error-classification" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/service-error-classification" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-stream@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.3.1.tgz#63cce0f09d99d75142c6dc8fe03e55ac0171de47" - integrity sha512-khKkW/Jqkgh6caxMWbMuox9+YfGlsk9OnHOYCGVEdYQb/XVzcORXHLYUubHmmda0pubEDncofUrPNniS9d+uAA== - dependencies: - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-hex-encoding" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" +"@smithy/util-stream@^4.5.5": + version "4.5.5" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.5.tgz#a3fd73775c65dd23370d021b8818914a2c44f28e" + integrity sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w== + dependencies: + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-uri-escape@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz#ed4a5c498f1da07122ca1e3df4ca3e2c67c6c18a" - integrity sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg== +"@smithy/util-uri-escape@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz#096a4cec537d108ac24a68a9c60bee73fc7e3a9e" + integrity sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA== dependencies: tslib "^2.6.2" @@ -2324,21 +2365,28 @@ "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.1.0.tgz#912c33c1a06913f39daa53da79cb8f7ab740d97b" - integrity sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ== +"@smithy/util-utf8@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz#8b19d1514f621c44a3a68151f3d43e51087fed9d" + integrity sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw== dependencies: - "@smithy/util-buffer-from" "^4.1.0" + "@smithy/util-buffer-from" "^4.2.0" tslib "^2.6.2" -"@smithy/util-waiter@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.1.1.tgz#5b74429ca9e37f61838800b919d0063b1a865bef" - integrity sha512-PJBmyayrlfxM7nbqjomF4YcT1sApQwZio0NHSsT0EzhJqljRmvhzqZua43TyEs80nJk2Cn2FGPg/N8phH6KeCQ== +"@smithy/util-waiter@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.4.tgz#a28b7835aacd82ae2d10da5af5bf21b3c21b34ac" + integrity sha512-roKXtXIC6fopFvVOju8VYHtguc/jAcMlK8IlDOHsrQn0ayMkHynjm/D2DCMRf7MJFXzjHhlzg2edr3QPEakchQ== + dependencies: + "@smithy/abort-controller" "^4.2.4" + "@smithy/types" "^4.8.1" + tslib "^2.6.2" + +"@smithy/uuid@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.0.tgz#9fd09d3f91375eab94f478858123387df1cda987" + integrity sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw== dependencies: - "@smithy/abort-controller" "^4.1.1" - "@smithy/types" "^4.5.0" tslib "^2.6.2" "@swc/cli@^0.7.7": @@ -2356,81 +2404,81 @@ source-map "^0.7.3" tinyglobby "^0.2.13" -"@swc/core-darwin-arm64@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz#7638c073946f9297753ed9a2eb198d07b2336a24" - integrity sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ== - -"@swc/core-darwin-x64@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz#18061167378f0fb285e17818494bc6c89dd07551" - integrity sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng== - -"@swc/core-linux-arm-gnueabihf@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz#4c8062bd598049b5b9b0beb762e075e76b4c23c3" - integrity sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ== - -"@swc/core-linux-arm64-gnu@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz#7222d321197ea9304e387933e87d775849fc1ae6" - integrity sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw== - -"@swc/core-linux-arm64-musl@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz#51e7958deaf37edc212bd9dc0ea1476f151d2bea" - integrity sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ== - -"@swc/core-linux-x64-gnu@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz#3476beab93ab03e92844d955ca9d9289aa4a5993" - integrity sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA== - -"@swc/core-linux-x64-musl@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz#f4934b1e77e2a297909bb3ab977836205c36e5e0" - integrity sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q== - -"@swc/core-win32-arm64-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz#5084c107435cfc82d4d901bfb388dc319d38a236" - integrity sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw== - -"@swc/core-win32-ia32-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz#f8b2e28bc51b30467e316ed736a130c1324b9880" - integrity sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw== - -"@swc/core-win32-x64-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz#13883cf3c63bf11b787e28dcdf75ca0cc49efa83" - integrity sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q== +"@swc/core-darwin-arm64@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.14.0.tgz#1db614b52ed7369f47be2a1c6b5e80b6be923898" + integrity sha512-uHPC8rlCt04nvYNczWzKVdgnRhxCa3ndKTBBbBpResOZsRmiwRAvByIGh599j+Oo6Z5eyTPrgY+XfJzVmXnN7Q== + +"@swc/core-darwin-x64@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.14.0.tgz#900e56924994d0e723e6088e2a2e1a1c08c59a95" + integrity sha512-2SHrlpl68vtePRknv9shvM9YKKg7B9T13tcTg9aFCwR318QTYo+FzsKGmQSv9ox/Ua0Q2/5y2BNjieffJoo4nA== + +"@swc/core-linux-arm-gnueabihf@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.14.0.tgz#3c84966a8c6e308b0788d1c7875bce23c65134c6" + integrity sha512-SMH8zn01dxt809svetnxpeg/jWdpi6dqHKO3Eb11u4OzU2PK7I5uKS6gf2hx5LlTbcJMFKULZiVwjlQLe8eqtg== + +"@swc/core-linux-arm64-gnu@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.14.0.tgz#5190097d2ca4ea8b198f46a3abe2272331575b54" + integrity sha512-q2JRu2D8LVqGeHkmpVCljVNltG0tB4o4eYg+dElFwCS8l2Mnt9qurMCxIeo9mgoqz0ax+k7jWtIRHktnVCbjvQ== + +"@swc/core-linux-arm64-musl@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.14.0.tgz#420f510102a37feda0e3dfb8d21651515251476b" + integrity sha512-uofpVoPCEUjYIv454ZEZ3sLgMD17nIwlz2z7bsn7rl301Kt/01umFA7MscUovFfAK2IRGck6XB+uulMu6aFhKQ== + +"@swc/core-linux-x64-gnu@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.14.0.tgz#953f741d577a81f6e1e1b434856c48eb674cdeb7" + integrity sha512-quTTx1Olm05fBfv66DEBuOsOgqdypnZ/1Bh3yGXWY7ANLFeeRpCDZpljD9BSjdsNdPOlwJmEUZXMHtGm3v1TZQ== + +"@swc/core-linux-x64-musl@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.14.0.tgz#bdf241062d1433ba617ffe1451dccde8923a28a2" + integrity sha512-caaNAu+aIqT8seLtCf08i8C3/UC5ttQujUjejhMcuS1/LoCKtNiUs4VekJd2UGt+pyuuSrQ6dKl8CbCfWvWeXw== + +"@swc/core-win32-arm64-msvc@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.14.0.tgz#960919015bc31c46a8fc10df5c384add651df91e" + integrity sha512-EeW3jFlT3YNckJ6V/JnTfGcX7UHGyh6/AiCPopZ1HNaGiXVCKHPpVQZicmtyr/UpqxCXLrTgjHOvyMke7YN26A== + +"@swc/core-win32-ia32-msvc@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.14.0.tgz#826a76b2af0e4df4dee3674e91734cb85eb7b21f" + integrity sha512-dPai3KUIcihV5hfoO4QNQF5HAaw8+2bT7dvi8E5zLtecW2SfL3mUZipzampXq5FHll0RSCLzlrXnSx+dBRZIIQ== + +"@swc/core-win32-x64-msvc@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.14.0.tgz#75fe708a702f57f176fd640eb9af394cf767be91" + integrity sha512-nm+JajGrTqUA6sEHdghDlHMNfH1WKSiuvljhdmBACW4ta4LC3gKurX2qZuiBARvPkephW9V/i5S8QPY1PzFEqg== "@swc/core@^1.10.7": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.5.tgz#93874b831d3bd121560e6fcd688972b7fc7baa26" - integrity sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ== + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.14.0.tgz#ff7d287fbac6b6fd3adedf7b440cadfd0c389df6" + integrity sha512-oExhY90bes5pDTVrei0xlMVosTxwd/NMafIpqsC4dMbRYZ5KB981l/CX8tMnGsagTplj/RcG9BeRYmV6/J5m3w== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.24" + "@swc/types" "^0.1.25" optionalDependencies: - "@swc/core-darwin-arm64" "1.13.5" - "@swc/core-darwin-x64" "1.13.5" - "@swc/core-linux-arm-gnueabihf" "1.13.5" - "@swc/core-linux-arm64-gnu" "1.13.5" - "@swc/core-linux-arm64-musl" "1.13.5" - "@swc/core-linux-x64-gnu" "1.13.5" - "@swc/core-linux-x64-musl" "1.13.5" - "@swc/core-win32-arm64-msvc" "1.13.5" - "@swc/core-win32-ia32-msvc" "1.13.5" - "@swc/core-win32-x64-msvc" "1.13.5" + "@swc/core-darwin-arm64" "1.14.0" + "@swc/core-darwin-x64" "1.14.0" + "@swc/core-linux-arm-gnueabihf" "1.14.0" + "@swc/core-linux-arm64-gnu" "1.14.0" + "@swc/core-linux-arm64-musl" "1.14.0" + "@swc/core-linux-x64-gnu" "1.14.0" + "@swc/core-linux-x64-musl" "1.14.0" + "@swc/core-win32-arm64-msvc" "1.14.0" + "@swc/core-win32-ia32-msvc" "1.14.0" + "@swc/core-win32-x64-msvc" "1.14.0" "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/types@^0.1.24": +"@swc/types@^0.1.25": version "0.1.25" resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.25.tgz#b517b2a60feb37dd933e542d93093719e4cf1078" integrity sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g== @@ -2458,14 +2506,14 @@ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== -"@ts-morph/common@~0.27.0": - version "0.27.0" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.27.0.tgz#e83a1bd7cbac054045c6246a7c4c99eab7692d46" - integrity sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ== +"@ts-morph/common@~0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.28.1.tgz#10ec52182d5c310832b669af7784a34fc3da3ca1" + integrity sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g== dependencies: - fast-glob "^3.3.3" minimatch "^10.0.1" path-browserify "^1.0.1" + tinyglobby "^0.2.14" "@tsconfig/node10@^1.0.7": version "1.0.11" @@ -2520,6 +2568,13 @@ dependencies: "@babel/types" "^7.28.2" +"@types/bcrypt@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/bcrypt/-/bcrypt-6.0.0.tgz#0d20587924663607fb59ae373d3d6fbc7b339a92" + integrity sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ== + dependencies: + "@types/node" "*" + "@types/body-parser@*": version "1.19.6" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" @@ -2536,9 +2591,9 @@ "@types/node" "*" "@types/cookie-parser@^1.4.8": - version "1.4.9" - resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.9.tgz#f0e79c766a58ee7369a52e7509b3840222f68ed2" - integrity sha512-tGZiZ2Gtc4m3wIdLkZ8mkj1T6CEHb35+VApbL2T14Dew8HA7c+04dmKqsKRNC+8RJPm16JEK0tFSwdZqubfc4g== + version "1.4.10" + resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.10.tgz#a045272a383a30597a01955d4f9c790018f214e4" + integrity sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg== "@types/cookiejar@^2.1.5": version "2.1.5" @@ -2567,9 +2622,9 @@ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@^5.0.0": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" - integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2577,13 +2632,13 @@ "@types/send" "*" "@types/express@*", "@types/express@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" - integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== + version "5.0.5" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.5.tgz#3ba069177caa34ab96585ca23b3984d752300cdc" + integrity sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "*" + "@types/serve-static" "^1" "@types/graceful-fs@^4.1.3": version "4.1.9" @@ -2634,7 +2689,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/jsonwebtoken@*": +"@types/jsonwebtoken@*", "@types/jsonwebtoken@9.0.10": version "9.0.10" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== @@ -2642,13 +2697,6 @@ "@types/ms" "*" "@types/node" "*" -"@types/jsonwebtoken@9.0.7": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz#e49b96c2b29356ed462e9708fc73b833014727d2" - integrity sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== - dependencies: - "@types/node" "*" - "@types/methods@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547" @@ -2672,16 +2720,16 @@ "@types/express" "*" "@types/node@*": - version "24.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.3.tgz#6d195b95af3cda4e74dcef7bb3797a1941e7d2d1" - integrity sha512-GKBNHjoNw3Kra1Qg5UXttsY5kiWMEfoHq2TmXb+b1rcm6N7B3wTrFYIf/oSZ1xNQ+hVVijgLkiDZh7jRRsh+Gw== + version "24.9.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.2.tgz#90ded2422dbfcafcf72080f28975adc21366148d" + integrity sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA== dependencies: - undici-types "~7.10.0" + undici-types "~7.16.0" "@types/node@^22.10.7": - version "22.18.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.3.tgz#e1a4eb680a688141cdd369c5a035f48cf8ece9e3" - integrity sha512-gTVM8js2twdtqM+AE2PdGEe9zGQY4UvmFjan9rZcVb6FGdStfjWoWejdmy4CfWVO9rh5MiYQGZloKAGkJt8lMw== + version "22.18.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.13.tgz#a037c4f474b860be660e05dbe92a9ef945472e28" + integrity sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A== dependencies: undici-types "~6.21.0" @@ -2719,21 +2767,28 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/send@*": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" - integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== dependencies: "@types/mime" "^1" "@types/node" "*" -"@types/serve-static@*": - version "1.15.8" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" - integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== +"@types/serve-static@^1": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "*" + "@types/send" "<1" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -2763,15 +2818,10 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== -"@types/uuid@^9.0.1": - version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== - "@types/validator@^13.11.8": - version "13.15.3" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.3.tgz#67e8aeacbace03517f9bd3f99e750bb666207ff4" - integrity sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q== + version "13.15.4" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.4.tgz#38a97ae54747416f745afdfc678f041713082635" + integrity sha512-LSFfpSnJJY9wbC0LQxgvfb+ynbHftFo0tMsFOl/J4wexLnYMmDSPaj2ZyDv3TkfL1UePxPrxOWJfbiRS8mQv7A== "@types/yargs-parser@*": version "21.0.3" @@ -2779,85 +2829,85 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.34" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.34.tgz#1c2f9635b71d5401827373a01ce2e8a7670ea839" + integrity sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz#4d730c2becd8e47ef76e59f68aee0fb560927cfc" - integrity sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ== +"@typescript-eslint/eslint-plugin@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz#dc4ab93ee3d7e6c8e38820a0d6c7c93c7183e2dc" + integrity sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.43.0" - "@typescript-eslint/type-utils" "8.43.0" - "@typescript-eslint/utils" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/type-utils" "8.46.2" + "@typescript-eslint/utils" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.43.0.tgz#4024159925e7671f1782bdd3498bdcfbd48f9137" - integrity sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw== +"@typescript-eslint/parser@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.46.2.tgz#dd938d45d581ac8ffa9d8a418a50282b306f7ebf" + integrity sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g== dependencies: - "@typescript-eslint/scope-manager" "8.43.0" - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" -"@typescript-eslint/project-service@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.43.0.tgz#958dbaa16fbd1e81d46ab86e139f6276757140f8" - integrity sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw== +"@typescript-eslint/project-service@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.2.tgz#ab2f02a0de4da6a7eeb885af5e059be57819d608" + integrity sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.43.0" - "@typescript-eslint/types" "^8.43.0" + "@typescript-eslint/tsconfig-utils" "^8.46.2" + "@typescript-eslint/types" "^8.46.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz#009ebc09cc6e7e0dd67898a0e9a70d295361c6b9" - integrity sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg== +"@typescript-eslint/scope-manager@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz#7d37df2493c404450589acb3b5d0c69cc0670a88" + integrity sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA== dependencies: - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" -"@typescript-eslint/tsconfig-utils@8.43.0", "@typescript-eslint/tsconfig-utils@^8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz#e6721dba183d61769a90ffdad202aebc383b18c8" - integrity sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA== +"@typescript-eslint/tsconfig-utils@8.46.2", "@typescript-eslint/tsconfig-utils@^8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz#d110451cb93bbd189865206ea37ef677c196828c" + integrity sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag== -"@typescript-eslint/type-utils@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz#29ea2e34eeae5b8e9fe4f4730c5659fa330aa04e" - integrity sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg== +"@typescript-eslint/type-utils@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz#802d027864e6fb752e65425ed09f3e089fb4d384" + integrity sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA== dependencies: - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" - "@typescript-eslint/utils" "8.43.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/utils" "8.46.2" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.43.0", "@typescript-eslint/types@^8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.43.0.tgz#00d34a5099504eb1b263e022cc17c4243ff2302e" - integrity sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw== +"@typescript-eslint/types@8.46.2", "@typescript-eslint/types@^8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.2.tgz#2bad7348511b31e6e42579820e62b73145635763" + integrity sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ== -"@typescript-eslint/typescript-estree@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz#39e5d431239b4d90787072ae0c2290cbd3e0a562" - integrity sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw== +"@typescript-eslint/typescript-estree@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz#ab547a27e4222bb6a3281cb7e98705272e2c7d08" + integrity sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ== dependencies: - "@typescript-eslint/project-service" "8.43.0" - "@typescript-eslint/tsconfig-utils" "8.43.0" - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/project-service" "8.46.2" + "@typescript-eslint/tsconfig-utils" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -2865,22 +2915,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.43.0.tgz#5c391133a52f8500dfdabd7026be72a537d7b59e" - integrity sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g== +"@typescript-eslint/utils@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.46.2.tgz#b313d33d67f9918583af205bd7bcebf20f231732" + integrity sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.43.0" - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" -"@typescript-eslint/visitor-keys@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz#633d3414afec3cf0a0e4583e1575f4101ef51d30" - integrity sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw== +"@typescript-eslint/visitor-keys@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz#803fa298948c39acf810af21bdce6f8babfa9738" + integrity sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w== dependencies: - "@typescript-eslint/types" "8.43.0" + "@typescript-eslint/types" "8.46.2" eslint-visitor-keys "^4.2.1" "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": @@ -3192,7 +3242,7 @@ ansi-colors@4.1.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -3292,18 +3342,18 @@ aws-ssl-profiles@^1.1.1: integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== axios@^1.11.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.1.tgz#0747b39c5b615f81f93f2c138e6d82a71426937f" - integrity sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ== + version "1.13.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.1.tgz#45b62dc8fe04e0e92274e08b98e910ba3d7963a7" + integrity sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.4" proxy-from-env "^1.1.0" b4a@^1.6.4: - version "1.7.1" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.7.1.tgz#6fd4ec2fb33ba7a4ff341a2869bbfc88a6e57850" - integrity sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q== + version "1.7.3" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.7.3.tgz#24cf7ccda28f5465b66aec2bac69e32809bf112f" + integrity sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q== babel-jest@^29.7.0: version "29.7.0" @@ -3373,20 +3423,28 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@^2.2.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.6.1.tgz#f793b28bdc3dcf147d7cf01f882a6f0b12ccc4a2" - integrity sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g== +bare-events@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.1.tgz#121afaeee9e9a8eb92e71d125bc85753d39913d0" + integrity sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ== base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.2.tgz#1cfd362e07d8f2eadff369461ae847d40fefe578" - integrity sha512-NvcIedLxrs9llVpX7wI+Jz4Hn9vJQkCPKrTaHIE0sW/Rj1iq6Fzby4NbyTZjQJNoypBXNaG7tEHkTgONZpwgxQ== +baseline-browser-mapping@^2.8.19: + version "2.8.22" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.22.tgz#9d98661721ebe0812def25858f4cb2561820d2e6" + integrity sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ== + +bcrypt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-6.0.0.tgz#86643fddde9bcd0ad91400b063003fa4b0312835" + integrity sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg== + dependencies: + node-addon-api "^8.3.0" + node-gyp-build "^4.8.4" bin-version-check@^5.1.0: version "5.1.0" @@ -3457,15 +3515,15 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.24.0: - version "4.26.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.0.tgz#035ca84b4ff312a3c6a7014a77beb83456a882dd" - integrity sha512-P9go2WrP9FiPwLv3zqRD/Uoxo0RSHjzFCiQz7d4vbmwNqQFo9T9WCeP/Qn5EbcKQY6DBbkxEXNcpJOmncNrb7A== + version "4.27.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697" + integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw== dependencies: - baseline-browser-mapping "^2.8.2" - caniuse-lite "^1.0.30001741" - electron-to-chromium "^1.5.218" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.8.19" + caniuse-lite "^1.0.30001751" + electron-to-chromium "^1.5.238" + node-releases "^2.0.26" + update-browserslist-db "^1.1.4" bs-logger@^0.2.6: version "0.2.6" @@ -3565,10 +3623,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001741: - version "1.0.30001741" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz#67fb92953edc536442f3c9da74320774aa523143" - integrity sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw== +caniuse-lite@^1.0.30001751: + version "1.0.30001752" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz#afa28d0830709507162bc6ed3f7cb23b00926a99" + integrity sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g== chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" @@ -3584,9 +3642,9 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chardet@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" - integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== chokidar@4.0.3, chokidar@^4.0.1: version "4.0.3" @@ -3675,9 +3733,9 @@ code-block-writer@^13.0.3: integrity sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg== collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== color-convert@^2.0.1: version "2.0.1" @@ -3714,9 +3772,9 @@ commander@^10.0.0: integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^14.0.0: - version "14.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.1.tgz#2f9225c19e6ebd0dc4404dd45821b2caa17ea09b" - integrity sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A== + version "14.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.2.tgz#b71fd37fe4069e4c3c7c13925252ada4eba14e8e" + integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== commander@^2.20.0: version "2.20.3" @@ -3733,16 +3791,14 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -comment-json@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.2.5.tgz#482e085f759c2704b60bc6f97f55b8c01bc41e70" - integrity sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw== +comment-json@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.4.1.tgz#0757e3ba31a9e56f3f6e00bdaae114384ac8bcf3" + integrity sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg== dependencies: array-timsort "^1.0.3" core-util-is "^1.0.3" esprima "^4.0.1" - has-own-prop "^2.0.0" - repeat-string "^1.6.1" component-emitter@^1.3.1: version "1.3.1" @@ -3884,9 +3940,9 @@ debug@4.3.4: ms "2.1.2" debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.7, debug@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -3986,10 +4042,10 @@ dotenv@16.4.7: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== -dotenv@17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.1.tgz#6f32e10faf014883515538dc922a0fb8765d9b32" - integrity sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ== +dotenv@17.2.3: + version "17.2.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== dotenv@^16.4.5: version "16.6.1" @@ -4022,10 +4078,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.218: - version "1.5.218" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.218.tgz#921042a011a98a4620853c9d391ab62bcc124400" - integrity sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg== +electron-to-chromium@^1.5.238: + version "1.5.244" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz#b9b61e3d24ef4203489951468614f2a360763820" + integrity sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw== emittery@^0.13.1: version "0.13.1" @@ -4056,9 +4112,9 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.2, enhanced-resolve@^5.7.0: tapable "^2.2.0" error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" @@ -4154,23 +4210,22 @@ eslint-visitor-keys@^4.2.1: integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9.34.0: - version "9.35.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.35.0.tgz#7a89054b7b9ee1dfd1b62035d8ce75547773f47e" - integrity sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg== + version "9.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.0.tgz#33c90ddf62b64e1e3f83b689934b336f21b5f0e5" + integrity sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg== dependencies: "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.1" - "@eslint/core" "^0.15.2" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.35.0" - "@eslint/plugin-kit" "^0.3.5" + "@eslint/js" "9.39.0" + "@eslint/plugin-kit" "^0.4.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.6" @@ -4247,6 +4302,13 @@ etag@^1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +events-universal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" + integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== + dependencies: + bare-events "^2.7.0" + events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4346,7 +4408,7 @@ fast-fifo@^1.2.0, fast-fifo@^1.3.2: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -4409,9 +4471,9 @@ fflate@^0.8.2: integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== figlet@^1.5.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.9.1.tgz#2760642afc600199065c229d1e7ced7bb39c7107" - integrity sha512-DpKC89iXFjq6NCaIQ1O91R+ofpfyvkwuBfoVd8LpP/JZGZQpelMXgiTStGOfksuMYaDoBAwFlvx7mk+wX+3rrA== + version "1.9.3" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.9.3.tgz#d30906aa6017608e924e7fb82ca6c11802f55680" + integrity sha512-majPgOpVtrZN1iyNGbsUP6bOtZ6eaJgg5HHh0vFvm5DJhh8dc+FJpOC4GABvMZ/A7XHAJUuJujhgUY/2jPWgMA== dependencies: commander "^14.0.0" @@ -4575,10 +4637,10 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== -fs-extra@11.3.1: - version "11.3.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz#ba7a1f97a85f94c6db2e52ff69570db3671d5a74" - integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== +fs-extra@11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -4718,9 +4780,9 @@ globals@^14.0.0: integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globals@^16.0.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-16.4.0.tgz#574bc7e72993d40cf27cf6c241f324ee77808e51" - integrity sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw== + version "16.5.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" + integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== globby@11.1.0: version "11.1.0" @@ -4783,11 +4845,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-own-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" - integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== - has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" @@ -4926,7 +4983,7 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-core-module@^2.16.0: +is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -5580,24 +5637,24 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.11.1: - version "1.12.17" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.17.tgz#ec01c8f1cf123748923746925bdb6f379b0d3f35" - integrity sha512-bsxi8FoceAYR/bjHcLYc2ShJ/aVAzo5jaxAYiMHF0BD+NTp47405CGuPNKYpw+lHadN9k/ClFGc9X5vaZswIrA== + version "1.12.25" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.25.tgz#1af48b816082100bf88f47d342387fbac1f1a773" + integrity sha512-u90tUu/SEF8b+RaDKCoW7ZNFDakyBtFlX1ex3J+VH+ElWes/UaitJLt/w4jGu8uAE41lltV/s+kMVtywcMEg7g== lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-esm@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/load-esm/-/load-esm-1.0.2.tgz#35dbac8a1a3abdb802cf236008048fcc8a9289a6" - integrity sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw== +load-esm@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/load-esm/-/load-esm-1.0.3.tgz#2073afe3da63902c323e80d9f135c301173ac92c" + integrity sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA== loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== locate-path@^5.0.0: version "5.0.0" @@ -5682,9 +5739,9 @@ lowercase-keys@^3.0.0: integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^11.0.0: - version "11.2.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.1.tgz#d426ac471521729c6c1acda5f7a633eadaa28db2" - integrity sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ== + version "11.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.2.tgz#40fd37edffcfae4b2940379c0722dc6eeaa75f24" + integrity sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg== lru-cache@^5.1.1: version "5.1.1" @@ -5779,10 +5836,10 @@ micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mikro-orm@6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/mikro-orm/-/mikro-orm-6.5.2.tgz#4e0532cf214af60332ea2c907cddb9b30527c56a" - integrity sha512-D+W2MwdA1XerqxN+33hP86apCdJb5wAPV2r5cSKNXv9RXXv4o9KvCu9BOm/ydVHdCGQXYTO9S/+MqiSIKDQ2Aw== +mikro-orm@6.5.9: + version "6.5.9" + resolved "https://registry.yarnpkg.com/mikro-orm/-/mikro-orm-6.5.9.tgz#a72fe4310de789ca8979552c2ed53ed01ff929b7" + integrity sha512-qbEZsQG8HbGfBHeeSpmWGD+bcaZmYEE8TU3Mi9iXRoJ1yPBd6GXbUjBejMVUAkqzBL+LMZjE9sRyIG+Fg+kTvw== mime-db@1.52.0: version "1.52.0" @@ -5829,9 +5886,9 @@ mimic-response@^4.0.0: integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== minimatch@^10.0.1, minimatch@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" - integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== dependencies: "@isaacs/brace-expansion" "^5.0.0" @@ -5894,25 +5951,10 @@ mute-stream@^2.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== -mysql2@3.14.4: - version "3.14.4" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.14.4.tgz#36e33a8d33820a299fb9e9221486310b1a4c8767" - integrity sha512-Cs/jx3WZPNrYHVz+Iunp9ziahaG5uFMvD2R8Zlmc194AqXNxt9HBNu7ZsPYrUtmJsF0egETCWIdMIYAwOGjL1w== - dependencies: - aws-ssl-profiles "^1.1.1" - denque "^2.1.0" - generate-function "^2.3.1" - iconv-lite "^0.7.0" - long "^5.2.1" - lru.min "^1.0.0" - named-placeholders "^1.1.3" - seq-queue "^0.0.5" - sqlstring "^2.3.2" - -mysql2@^3.14.0: - version "3.14.5" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.14.5.tgz#b832ddf4917557c32a08e93104101a31d10cde51" - integrity sha512-40hDf8LPUsuuJ2hFq+UgOuPwt2IFLIRDvMv6ez9hKbXeYuZPxDDwiJW7KdknvOsQqKznaKczOT1kELgFkhDvFg== +mysql2@3.15.3, mysql2@^3.14.0: + version "3.15.3" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.15.3.tgz#f0348d9c7401bb98cb1f45ffc5a773b109f70808" + integrity sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg== dependencies: aws-ssl-profiles "^1.1.1" denque "^2.1.0" @@ -5951,6 +5993,11 @@ node-abort-controller@^3.0.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== +node-addon-api@^8.3.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.5.0.tgz#c91b2d7682fa457d2e1c388150f0dff9aafb8f3f" + integrity sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A== + node-emoji@1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -5958,15 +6005,20 @@ node-emoji@1.11.0: dependencies: lodash "^4.17.21" +node-gyp-build@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.21: - version "2.0.21" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" - integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== +node-releases@^2.0.26: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== normalize-path@^3.0.0: version "3.0.0" @@ -6175,12 +6227,7 @@ path-scurry@^2.0.0: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" - integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== - -path-to-regexp@^8.0.0: +path-to-regexp@8.3.0, path-to-regexp@^8.0.0: version "8.3.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== @@ -6376,11 +6423,6 @@ reflect-metadata@0.2.2, reflect-metadata@^0.2.2: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6419,11 +6461,11 @@ resolve.exports@^2.0.0: integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.20.0: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.16.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -6499,9 +6541,9 @@ schema-utils@^3.1.1: ajv-keywords "^3.5.2" schema-utils@^4.3.0, schema-utils@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" - integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -6532,10 +6574,10 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.2: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== send@^1.1.0, send@^1.2.0: version "1.2.0" @@ -6731,14 +6773,13 @@ streamsearch@^1.1.0: integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== streamx@^2.15.0: - version "2.22.1" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.1.tgz#c97cbb0ce18da4f4db5a971dc9ab68ff5dc7f5a5" - integrity sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA== + version "2.23.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" + integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg== dependencies: + events-universal "^1.0.0" fast-fifo "^1.3.2" text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" string-length@^4.0.1: version "4.0.2" @@ -6885,10 +6926,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -swagger-ui-dist@5.21.0: - version "5.21.0" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.21.0.tgz#aed230fe6e294c9470217e67697d601e3bb8eb9d" - integrity sha512-E0K3AB6HvQd8yQNSMR7eE5bk+323AUxjtCz/4ZNKiahOlPhPJxqn3UPIGs00cyY/dhrTDJ61L7C/a8u6zhGrZg== +swagger-ui-dist@5.29.4: + version "5.29.4" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.29.4.tgz#ba86ff7e18b6b23eecfc32a81220f032d748b468" + integrity sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng== dependencies: "@scarf/scarf" "=1.4.0" @@ -6905,9 +6946,9 @@ synckit@^0.11.7: "@pkgr/core" "^0.2.9" tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.3.tgz#4b67b635b2d97578a06a2713d2f04800c237e99b" - integrity sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar-stream@^3.1.7: version "3.1.7" @@ -6970,7 +7011,7 @@ tildify@2.0.0: resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== -tinyglobby@^0.2.13: +tinyglobby@^0.2.13, tinyglobby@^0.2.14: version "0.2.15" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== @@ -7015,9 +7056,9 @@ ts-api-utils@^2.1.0: integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== ts-jest@^29.4.0: - version "29.4.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.1.tgz#42d33beb74657751d315efb9a871fe99e3b9b519" - integrity sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw== + version "29.4.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.5.tgz#a6b0dc401e521515d5342234be87f1ca96390a6f" + integrity sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q== dependencies: bs-logger "^0.2.6" fast-json-stable-stringify "^2.1.0" @@ -7025,7 +7066,7 @@ ts-jest@^29.4.0: json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.7.2" + semver "^7.7.3" type-fest "^4.41.0" yargs-parser "^21.1.1" @@ -7040,12 +7081,12 @@ ts-loader@^9.5.2: semver "^7.3.4" source-map "^0.7.4" -ts-morph@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-26.0.0.tgz#d435ccac9421d4615fde8be86fee782f18cd9f73" - integrity sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug== +ts-morph@27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-27.0.2.tgz#7b2fcce6822eeca3942fa6c601f159d5920b1422" + integrity sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w== dependencies: - "@ts-morph/common" "~0.27.0" + "@ts-morph/common" "~0.28.1" code-block-writer "^13.0.3" ts-node@^10.9.2: @@ -7136,14 +7177,14 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript-eslint@^8.34.1: - version "8.43.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.43.0.tgz#335ac16a859f385dfb23022e0d8298962364d099" - integrity sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w== + version "8.46.2" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.46.2.tgz#da1adec683ba93a1b6c3850a4efb0922ffbc627d" + integrity sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg== dependencies: - "@typescript-eslint/eslint-plugin" "8.43.0" - "@typescript-eslint/parser" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" - "@typescript-eslint/utils" "8.43.0" + "@typescript-eslint/eslint-plugin" "8.46.2" + "@typescript-eslint/parser" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/utils" "8.46.2" typescript@5.8.3: version "5.8.3" @@ -7151,9 +7192,9 @@ typescript@5.8.3: integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== typescript@^5.7.3: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uglify-js@^3.1.4: version "3.19.3" @@ -7185,10 +7226,10 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" - integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== universalify@^2.0.0: version "2.0.1" @@ -7200,10 +7241,10 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -7230,11 +7271,6 @@ uuid@^11.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -7250,9 +7286,9 @@ v8-to-istanbul@^9.0.1: convert-source-map "^2.0.0" validator@^13.9.0: - version "13.15.15" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.15.tgz#246594be5671dc09daa35caec5689fcd18c6e7e4" - integrity sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A== + version "13.15.20" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.20.tgz#054e9238109538a1bf46ae3e1290845a64fa2186" + integrity sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw== vary@^1, vary@^1.1.2: version "1.1.2" From 4df35324227622d215317e457847afb69ce1b23c Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 02:22:35 +0900 Subject: [PATCH 03/67] =?UTF-8?q?chore:=20auth=20=EB=94=94=EB=A0=89?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/auth-event.handler.ts | 4 +- src/app.module.ts | 2 + .../authorize-oauth.use-case.ts | 0 .../dto/authorize-oauth.request.dto.ts | 2 +- .../dto/authorize-oauth.response.dto.ts | 0 .../logout/dto/logout.request.dto.ts | 0 .../application/logout/logout.use-case.ts | 2 +- .../dto/oauth-login.response.dto.ts | 0 .../oauth-login/oauth-login.command.ts | 2 +- .../oauth-login/oauth-login.handler.ts | 8 ++-- .../dto/renew-token.request.dto.ts | 0 .../dto/renew-token.response.dto.ts | 0 .../renew-token/renew-token.use-case.ts | 2 +- .../domain}/auth.repository.ts | 2 +- .../entity => auth-user/domain}/auth.ts | 4 +- .../domain/event/auth-created.event.ts | 0 .../domain/event/login-succeeded.event.ts | 0 .../value-object/oauth-provider.enum.ts | 0 .../infrasturcture}/auth.entity.ts | 2 +- .../infrasturcture}/auth.mapper.ts | 4 +- .../infrasturcture}/auth.repository.impl.ts | 10 ++-- .../presentation/auth.controller.spec.ts | 0 .../presentation/auth.controller.ts | 0 .../{ => auth-user}/presentation/auth.docs.ts | 0 src/auth/auth.module.ts | 16 +++---- .../oauth/base-oauth.provider.ts | 2 +- .../infrastructure/oauth/kakao.provider.ts | 4 +- .../oauth/oauth-provider.factory.ts | 2 +- src/shared/exception/custom-exception-code.ts | 46 +++++++++++++++++++ src/shared/shared.module.ts | 6 +-- .../create/create-user.listener.ts | 2 +- .../application/delete/delete.handler.ts | 2 +- .../command/infrastructure/user.entity.ts | 2 +- 33 files changed, 87 insertions(+), 39 deletions(-) rename src/auth/{ => auth-user}/application/authorize-oauth/authorize-oauth.use-case.ts (100%) rename src/auth/{ => auth-user}/application/authorize-oauth/dto/authorize-oauth.request.dto.ts (70%) rename src/auth/{ => auth-user}/application/authorize-oauth/dto/authorize-oauth.response.dto.ts (100%) rename src/auth/{ => auth-user}/application/logout/dto/logout.request.dto.ts (100%) rename src/auth/{ => auth-user}/application/logout/logout.use-case.ts (89%) rename src/auth/{ => auth-user}/application/oauth-login/dto/oauth-login.response.dto.ts (100%) rename src/auth/{ => auth-user}/application/oauth-login/oauth-login.command.ts (72%) rename src/auth/{ => auth-user}/application/oauth-login/oauth-login.handler.ts (91%) rename src/auth/{ => auth-user}/application/renew-token/dto/renew-token.request.dto.ts (100%) rename src/auth/{ => auth-user}/application/renew-token/dto/renew-token.response.dto.ts (100%) rename src/auth/{ => auth-user}/application/renew-token/renew-token.use-case.ts (94%) rename src/auth/{domain/repository => auth-user/domain}/auth.repository.ts (90%) rename src/auth/{domain/entity => auth-user/domain}/auth.ts (93%) rename src/auth/{ => auth-user}/domain/event/auth-created.event.ts (100%) rename src/auth/{ => auth-user}/domain/event/login-succeeded.event.ts (100%) rename src/auth/{ => auth-user}/domain/value-object/oauth-provider.enum.ts (100%) rename src/auth/{infrastructure/orm-entity => auth-user/infrasturcture}/auth.entity.ts (89%) rename src/auth/{infrastructure/mapper => auth-user/infrasturcture}/auth.mapper.ts (91%) rename src/auth/{infrastructure/repository => auth-user/infrasturcture}/auth.repository.impl.ts (81%) rename src/auth/{ => auth-user}/presentation/auth.controller.spec.ts (100%) rename src/auth/{ => auth-user}/presentation/auth.controller.ts (100%) rename src/auth/{ => auth-user}/presentation/auth.docs.ts (100%) diff --git a/src/analytics/application/auth-event.handler.ts b/src/analytics/application/auth-event.handler.ts index a79e984..acd57f6 100644 --- a/src/analytics/application/auth-event.handler.ts +++ b/src/analytics/application/auth-event.handler.ts @@ -1,7 +1,7 @@ import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; -import { AuthCreatedEvent } from 'src/auth/domain/event/auth-created.event'; +import { AuthCreatedEvent } from 'src/auth/auth-user/domain/event/auth-created.event'; import { AnalyticsService } from '../infrastructure/analytics.service'; -import { LoginSucceededEvent } from 'src/auth/domain/event/login-succeeded.event'; +import { LoginSucceededEvent } from 'src/auth/auth-user/domain/event/login-succeeded.event'; @EventsHandler(AuthCreatedEvent) export class AuthCreatedEventHandler implements IEventHandler { diff --git a/src/app.module.ts b/src/app.module.ts index c48edf1..ab62e1c 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,6 +14,7 @@ import mikroOrmConfig from './shared/config/mikro-orm.config'; import config from 'src/shared/config/configuration'; import { AnalyticsModule } from './analytics/analytics.module'; import { OrganizationModule } from './organization/organization.module'; +import { AuthOrganizationModule } from './auth/auth-organization/auth-organization.module'; @Module({ imports: [ @@ -24,6 +25,7 @@ import { OrganizationModule } from './organization/organization.module'; }), AnalyticsModule, AuthModule, + AuthOrganizationModule, ArticleModule, UserModule, SharedModule, diff --git a/src/auth/application/authorize-oauth/authorize-oauth.use-case.ts b/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts similarity index 100% rename from src/auth/application/authorize-oauth/authorize-oauth.use-case.ts rename to src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts diff --git a/src/auth/application/authorize-oauth/dto/authorize-oauth.request.dto.ts b/src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.request.dto.ts similarity index 70% rename from src/auth/application/authorize-oauth/dto/authorize-oauth.request.dto.ts rename to src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.request.dto.ts index 028223b..e2beddd 100644 --- a/src/auth/application/authorize-oauth/dto/authorize-oauth.request.dto.ts +++ b/src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.request.dto.ts @@ -1,5 +1,5 @@ import { IsEnum, IsNotEmpty, IsString } from 'class-validator'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; export class AuthorizeOAuthRequestDto { @IsEnum(OAuthProviderType) diff --git a/src/auth/application/authorize-oauth/dto/authorize-oauth.response.dto.ts b/src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.response.dto.ts similarity index 100% rename from src/auth/application/authorize-oauth/dto/authorize-oauth.response.dto.ts rename to src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.response.dto.ts diff --git a/src/auth/application/logout/dto/logout.request.dto.ts b/src/auth/auth-user/application/logout/dto/logout.request.dto.ts similarity index 100% rename from src/auth/application/logout/dto/logout.request.dto.ts rename to src/auth/auth-user/application/logout/dto/logout.request.dto.ts diff --git a/src/auth/application/logout/logout.use-case.ts b/src/auth/auth-user/application/logout/logout.use-case.ts similarity index 89% rename from src/auth/application/logout/logout.use-case.ts rename to src/auth/auth-user/application/logout/logout.use-case.ts index 1be16af..996ed14 100644 --- a/src/auth/application/logout/logout.use-case.ts +++ b/src/auth/auth-user/application/logout/logout.use-case.ts @@ -1,8 +1,8 @@ import { Inject, Injectable } from '@nestjs/common'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; import { LogoutRequestDto } from './dto/logout.request.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; @Injectable() export class LogoutUseCase { diff --git a/src/auth/application/oauth-login/dto/oauth-login.response.dto.ts b/src/auth/auth-user/application/oauth-login/dto/oauth-login.response.dto.ts similarity index 100% rename from src/auth/application/oauth-login/dto/oauth-login.response.dto.ts rename to src/auth/auth-user/application/oauth-login/dto/oauth-login.response.dto.ts diff --git a/src/auth/application/oauth-login/oauth-login.command.ts b/src/auth/auth-user/application/oauth-login/oauth-login.command.ts similarity index 72% rename from src/auth/application/oauth-login/oauth-login.command.ts rename to src/auth/auth-user/application/oauth-login/oauth-login.command.ts index 6a05f95..c9cf5c8 100644 --- a/src/auth/application/oauth-login/oauth-login.command.ts +++ b/src/auth/auth-user/application/oauth-login/oauth-login.command.ts @@ -1,5 +1,5 @@ import { ICommand } from '@nestjs/cqrs'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; export class OAuthLoginCommand implements ICommand { constructor( diff --git a/src/auth/application/oauth-login/oauth-login.handler.ts b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts similarity index 91% rename from src/auth/application/oauth-login/oauth-login.handler.ts rename to src/auth/auth-user/application/oauth-login/oauth-login.handler.ts index 76c5a70..539c70a 100644 --- a/src/auth/application/oauth-login/oauth-login.handler.ts +++ b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts @@ -1,17 +1,17 @@ import { Inject, Injectable } from '@nestjs/common'; -import { Auth } from 'src/auth/domain/entity/auth'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; +import { Auth } from 'src/auth/auth-user/domain/auth'; import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; import { Identifier } from 'src/shared/core/domain/identifier'; import { OAuthLoginResponseDto } from './dto/oauth-login.response.dto'; import { Transactional } from '@mikro-orm/core'; import { Role } from 'src/user/command/domain/value-object/role.enum'; import { CommandHandler, EventBus } from '@nestjs/cqrs'; -import { AuthCreatedEvent } from 'src/auth/domain/event/auth-created.event'; +import { AuthCreatedEvent } from 'src/auth/auth-user/domain/event/auth-created.event'; import { OAuthLoginCommand } from './oauth-login.command'; +import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; @Injectable() @CommandHandler(OAuthLoginCommand) diff --git a/src/auth/application/renew-token/dto/renew-token.request.dto.ts b/src/auth/auth-user/application/renew-token/dto/renew-token.request.dto.ts similarity index 100% rename from src/auth/application/renew-token/dto/renew-token.request.dto.ts rename to src/auth/auth-user/application/renew-token/dto/renew-token.request.dto.ts diff --git a/src/auth/application/renew-token/dto/renew-token.response.dto.ts b/src/auth/auth-user/application/renew-token/dto/renew-token.response.dto.ts similarity index 100% rename from src/auth/application/renew-token/dto/renew-token.response.dto.ts rename to src/auth/auth-user/application/renew-token/dto/renew-token.response.dto.ts diff --git a/src/auth/application/renew-token/renew-token.use-case.ts b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts similarity index 94% rename from src/auth/application/renew-token/renew-token.use-case.ts rename to src/auth/auth-user/application/renew-token/renew-token.use-case.ts index 54b4905..68f6862 100644 --- a/src/auth/application/renew-token/renew-token.use-case.ts +++ b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts @@ -1,5 +1,4 @@ import { Inject, Injectable } from '@nestjs/common'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; import { RenewTokenRequestDto } from './dto/renew-token.request.dto'; @@ -7,6 +6,7 @@ import { RenewTokenResponseDto } from './dto/renew-token.response.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { EventBus } from '@nestjs/cqrs'; +import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; @Injectable() export class RenewTokenUseCase { diff --git a/src/auth/domain/repository/auth.repository.ts b/src/auth/auth-user/domain/auth.repository.ts similarity index 90% rename from src/auth/domain/repository/auth.repository.ts rename to src/auth/auth-user/domain/auth.repository.ts index 08d695c..5ce5bb9 100644 --- a/src/auth/domain/repository/auth.repository.ts +++ b/src/auth/auth-user/domain/auth.repository.ts @@ -1,4 +1,4 @@ -import { Auth } from '../entity/auth'; +import { Auth } from './auth'; export interface AuthRepository { save(auth: Auth): Promise; diff --git a/src/auth/domain/entity/auth.ts b/src/auth/auth-user/domain/auth.ts similarity index 93% rename from src/auth/domain/entity/auth.ts rename to src/auth/auth-user/domain/auth.ts index ad54c97..fba1363 100644 --- a/src/auth/domain/entity/auth.ts +++ b/src/auth/auth-user/domain/auth.ts @@ -1,10 +1,10 @@ import { BaseEntityProps } from 'src/shared/core/domain/base.entity'; import { Identifier } from 'src/shared/core/domain/identifier'; -import { OAuthProviderType } from '../value-object/oauth-provider.enum'; +import { OAuthProviderType } from './value-object/oauth-provider.enum'; import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; -import { LoginSucceededEvent } from '../event/login-succeeded.event'; +import { LoginSucceededEvent } from './event/login-succeeded.event'; export interface AuthProps extends BaseEntityProps { oauthId: string; diff --git a/src/auth/domain/event/auth-created.event.ts b/src/auth/auth-user/domain/event/auth-created.event.ts similarity index 100% rename from src/auth/domain/event/auth-created.event.ts rename to src/auth/auth-user/domain/event/auth-created.event.ts diff --git a/src/auth/domain/event/login-succeeded.event.ts b/src/auth/auth-user/domain/event/login-succeeded.event.ts similarity index 100% rename from src/auth/domain/event/login-succeeded.event.ts rename to src/auth/auth-user/domain/event/login-succeeded.event.ts diff --git a/src/auth/domain/value-object/oauth-provider.enum.ts b/src/auth/auth-user/domain/value-object/oauth-provider.enum.ts similarity index 100% rename from src/auth/domain/value-object/oauth-provider.enum.ts rename to src/auth/auth-user/domain/value-object/oauth-provider.enum.ts diff --git a/src/auth/infrastructure/orm-entity/auth.entity.ts b/src/auth/auth-user/infrasturcture/auth.entity.ts similarity index 89% rename from src/auth/infrastructure/orm-entity/auth.entity.ts rename to src/auth/auth-user/infrasturcture/auth.entity.ts index 9ef40a0..52d8920 100644 --- a/src/auth/infrastructure/orm-entity/auth.entity.ts +++ b/src/auth/auth-user/infrasturcture/auth.entity.ts @@ -1,6 +1,6 @@ import { Cascade, Entity, OneToOne, Property, Unique } from '@mikro-orm/core'; import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { UserEntity } from 'src/user/command/infrastructure/user.entity'; @Entity({ tableName: 'auth' }) diff --git a/src/auth/infrastructure/mapper/auth.mapper.ts b/src/auth/auth-user/infrasturcture/auth.mapper.ts similarity index 91% rename from src/auth/infrastructure/mapper/auth.mapper.ts rename to src/auth/auth-user/infrasturcture/auth.mapper.ts index 82637be..7f07b87 100644 --- a/src/auth/infrastructure/mapper/auth.mapper.ts +++ b/src/auth/auth-user/infrasturcture/auth.mapper.ts @@ -1,8 +1,8 @@ -import { Auth } from 'src/auth/domain/entity/auth'; -import { AuthEntity } from '../orm-entity/auth.entity'; +import { Auth } from 'src/auth/auth-user/domain/auth'; import { Identifier } from 'src/shared/core/domain/identifier'; import { EntityManager } from '@mikro-orm/mysql'; import { UserEntity } from 'src/user/command/infrastructure/user.entity'; +import { AuthEntity } from './auth.entity'; export class AuthMapper { static toDomain(entity: AuthEntity): Auth { diff --git a/src/auth/infrastructure/repository/auth.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth.repository.impl.ts similarity index 81% rename from src/auth/infrastructure/repository/auth.repository.impl.ts rename to src/auth/auth-user/infrasturcture/auth.repository.impl.ts index 4b6dfad..ca5e6dd 100644 --- a/src/auth/infrastructure/repository/auth.repository.impl.ts +++ b/src/auth/auth-user/infrasturcture/auth.repository.impl.ts @@ -1,10 +1,10 @@ import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; -import { Auth } from 'src/auth/domain/entity/auth'; -import { AuthRepository } from 'src/auth/domain/repository/auth.repository'; -import { AuthMapper } from '../mapper/auth.mapper'; -import { AuthEntity } from '../orm-entity/auth.entity'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { Auth } from 'src/auth/auth-user/domain/auth'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { InjectRepository } from '@mikro-orm/nestjs'; +import { AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; +import { AuthEntity } from './auth.entity'; +import { AuthMapper } from './auth.mapper'; export class AuthRepositoryImpl implements AuthRepository { constructor( diff --git a/src/auth/presentation/auth.controller.spec.ts b/src/auth/auth-user/presentation/auth.controller.spec.ts similarity index 100% rename from src/auth/presentation/auth.controller.spec.ts rename to src/auth/auth-user/presentation/auth.controller.spec.ts diff --git a/src/auth/presentation/auth.controller.ts b/src/auth/auth-user/presentation/auth.controller.ts similarity index 100% rename from src/auth/presentation/auth.controller.ts rename to src/auth/auth-user/presentation/auth.controller.ts diff --git a/src/auth/presentation/auth.docs.ts b/src/auth/auth-user/presentation/auth.docs.ts similarity index 100% rename from src/auth/presentation/auth.docs.ts rename to src/auth/auth-user/presentation/auth.docs.ts diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 5a27642..7e5805f 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,22 +1,22 @@ import { Module } from '@nestjs/common'; -import { AUTH_REPOSITORY } from './domain/repository/auth.repository'; -import { AuthRepositoryImpl } from './infrastructure/repository/auth.repository.impl'; -import { AuthController } from './presentation/auth.controller'; +import { AuthRepositoryImpl } from './auth-user/infrasturcture/auth.repository.impl'; +import { AuthController } from './auth-user/presentation/auth.controller'; import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthEntity } from './infrastructure/orm-entity/auth.entity'; -import { OAuthLoginUseCase } from './application/oauth-login/oauth-login.handler'; +import { AuthEntity } from './auth-user/infrasturcture/auth.entity'; +import { OAuthLoginUseCase } from './auth-user/application/oauth-login/oauth-login.handler'; import { OAuthProviderFactory } from '../shared/core/infrastructure/oauth/oauth-provider.factory'; import { KakaoOAuthProvider } from '../shared/core/infrastructure/oauth/kakao.provider'; -import { AuthorizeOAuthUseCase } from './application/authorize-oauth/authorize-oauth.use-case'; +import { AuthorizeOAuthUseCase } from './auth-user/application/authorize-oauth/authorize-oauth.use-case'; import { JwtProvider } from './infrastructure/jwt/jwt.provider'; import { JwtModule } from '@nestjs/jwt'; import { JwtAccessStrategy } from './infrastructure/jwt/jwt-access.strategy'; import { JwtRefreshStrategy } from './infrastructure/jwt/jwt-refresh.strategy'; import { PassportModule } from '@nestjs/passport'; -import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; -import { LogoutUseCase } from './application/logout/logout.use-case'; +import { RenewTokenUseCase } from './auth-user/application/renew-token/renew-token.use-case'; +import { LogoutUseCase } from './auth-user/application/logout/logout.use-case'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; +import { AUTH_REPOSITORY } from './auth-user/domain/auth.repository'; const useCases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; diff --git a/src/shared/core/infrastructure/oauth/base-oauth.provider.ts b/src/shared/core/infrastructure/oauth/base-oauth.provider.ts index 649d4dd..2ed1207 100644 --- a/src/shared/core/infrastructure/oauth/base-oauth.provider.ts +++ b/src/shared/core/infrastructure/oauth/base-oauth.provider.ts @@ -1,4 +1,4 @@ -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; export interface BaseOAuthProvider { getToken(code: string): Promise; diff --git a/src/shared/core/infrastructure/oauth/kakao.provider.ts b/src/shared/core/infrastructure/oauth/kakao.provider.ts index d2de518..631ae50 100644 --- a/src/shared/core/infrastructure/oauth/kakao.provider.ts +++ b/src/shared/core/infrastructure/oauth/kakao.provider.ts @@ -2,8 +2,8 @@ import { Inject, Injectable, NotFoundException, UnauthorizedException } from '@n import axios from 'axios'; import { ConfigService } from '@nestjs/config'; import { BaseOAuthProvider, OAuthUser } from './base-oauth.provider'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; +import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; interface KakaoTokenResponse { access_token: string; diff --git a/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts b/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts index fb4eaa3..edb8156 100644 --- a/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts +++ b/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { BaseOAuthProvider } from './base-oauth.provider'; import { KakaoOAuthProvider } from './kakao.provider'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; @Injectable() export class OAuthProviderFactory { diff --git a/src/shared/exception/custom-exception-code.ts b/src/shared/exception/custom-exception-code.ts index 0e6f9a2..033598b 100644 --- a/src/shared/exception/custom-exception-code.ts +++ b/src/shared/exception/custom-exception-code.ts @@ -39,6 +39,17 @@ export enum CustomExceptionCode { SCRAP_ARTICLE_ID_OR_USER_ID_EMPTY = 'SCRAP_ARTICLE_ID_OR_USER_ID_EMPTY', SCRAP_ALREADY_EXISTS = 'SCRAP_ALREADY_EXISTS', SCRAP_NOT_FOUND = 'SCRAP_NOT_FOUND', + + // Auth Organization + AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_FORMAT = 'AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_FORMAT', + AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH = 'AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH', + AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH = 'AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH', + AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT = 'AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT', + + // Organization + ORGANIZATION_INVALID_NAME_LENGTH = 'ORGANIZATION_INVALID_NAME_LENGTH', + ORGANIZATION_INVALID_CONTACT_FORMAT = 'ORGANIZATION_INVALID_CONTACT_FORMAT', + ORGANIZATION_NOT_FOUND = 'ORGANIZATION_NOT_FOUND', } export const ExceptionInfo: Record = { @@ -180,4 +191,39 @@ export const ExceptionInfo: Record Date: Sun, 2 Nov 2025 15:35:23 +0900 Subject: [PATCH 04/67] =?UTF-8?q?chore:=20=EB=8C=80=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 2 - .../authorize-oauth.use-case.ts | 2 +- .../application/logout/logout.use-case.ts | 6 +-- .../oauth-login/oauth-login.handler.ts | 42 +++++++-------- .../renew-token/renew-token.use-case.ts | 21 ++++---- src/auth/auth-user/auth-user.module.ts | 29 +++++++++++ .../auth-user/domain/auth-user.repository.ts | 11 ++++ .../domain/{auth.ts => auth-user.ts} | 20 +++---- src/auth/auth-user/domain/auth.repository.ts | 11 ---- .../{auth.entity.ts => auth-user.entity.ts} | 4 +- .../{auth.mapper.ts => auth-user.mapper.ts} | 14 ++--- .../auth-user.repository.impl.ts | 52 +++++++++++++++++++ .../infrasturcture/auth.repository.impl.ts | 52 ------------------- ....controller.ts => auth-user.controller.ts} | 14 ++--- .../{auth.docs.ts => auth-user.docs.ts} | 4 +- .../presentation/auth.controller.spec.ts | 18 ------- src/auth/auth.module.ts | 38 ++------------ .../infrastructure/jwt/jwt-access.strategy.ts | 0 .../jwt/jwt-refresh.strategy.ts | 0 .../core/infrastructure/jwt/jwt.factory.ts | 28 ++++++++++ .../infrastructure/jwt/jwt.provider.ts | 8 +-- .../oauth/base-oauth.provider.ts | 0 .../infrastructure/oauth/kakao.provider.ts | 6 +-- .../oauth/oauth-provider.factory.ts | 0 src/auth/infrastructure/jwt/jwt.factory.ts | 19 ------- src/shared/shared.module.ts | 19 ++----- .../application/delete/delete.handler.ts | 2 +- .../user.command.repository.impl.ts | 2 +- .../command/infrastructure/user.entity.ts | 6 +-- 29 files changed, 204 insertions(+), 226 deletions(-) create mode 100644 src/auth/auth-user/auth-user.module.ts create mode 100644 src/auth/auth-user/domain/auth-user.repository.ts rename src/auth/auth-user/domain/{auth.ts => auth-user.ts} (78%) delete mode 100644 src/auth/auth-user/domain/auth.repository.ts rename src/auth/auth-user/infrasturcture/{auth.entity.ts => auth-user.entity.ts} (88%) rename src/auth/auth-user/infrasturcture/{auth.mapper.ts => auth-user.mapper.ts} (72%) create mode 100644 src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts delete mode 100644 src/auth/auth-user/infrasturcture/auth.repository.impl.ts rename src/auth/auth-user/presentation/{auth.controller.ts => auth-user.controller.ts} (92%) rename src/auth/auth-user/presentation/{auth.docs.ts => auth-user.docs.ts} (93%) delete mode 100644 src/auth/auth-user/presentation/auth.controller.spec.ts rename src/auth/{ => core}/infrastructure/jwt/jwt-access.strategy.ts (100%) rename src/auth/{ => core}/infrastructure/jwt/jwt-refresh.strategy.ts (100%) create mode 100644 src/auth/core/infrastructure/jwt/jwt.factory.ts rename src/auth/{ => core}/infrastructure/jwt/jwt.provider.ts (69%) rename src/{shared => auth}/core/infrastructure/oauth/base-oauth.provider.ts (100%) rename src/{shared => auth}/core/infrastructure/oauth/kakao.provider.ts (94%) rename src/{shared => auth}/core/infrastructure/oauth/oauth-provider.factory.ts (100%) delete mode 100644 src/auth/infrastructure/jwt/jwt.factory.ts diff --git a/src/app.module.ts b/src/app.module.ts index ab62e1c..c48edf1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,7 +14,6 @@ import mikroOrmConfig from './shared/config/mikro-orm.config'; import config from 'src/shared/config/configuration'; import { AnalyticsModule } from './analytics/analytics.module'; import { OrganizationModule } from './organization/organization.module'; -import { AuthOrganizationModule } from './auth/auth-organization/auth-organization.module'; @Module({ imports: [ @@ -25,7 +24,6 @@ import { AuthOrganizationModule } from './auth/auth-organization/auth-organizati }), AnalyticsModule, AuthModule, - AuthOrganizationModule, ArticleModule, UserModule, SharedModule, diff --git a/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts b/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts index 2bd6828..2c4c5df 100644 --- a/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts +++ b/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; import { AuthorizeOAuthRequestDto } from './dto/authorize-oauth.request.dto'; import { AuthorizeOAuthResponseDto } from './dto/authorize-oauth.response.dto'; diff --git a/src/auth/auth-user/application/logout/logout.use-case.ts b/src/auth/auth-user/application/logout/logout.use-case.ts index 996ed14..dee96e0 100644 --- a/src/auth/auth-user/application/logout/logout.use-case.ts +++ b/src/auth/auth-user/application/logout/logout.use-case.ts @@ -2,13 +2,13 @@ import { Inject, Injectable } from '@nestjs/common'; import { LogoutRequestDto } from './dto/logout.request.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; -import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; @Injectable() export class LogoutUseCase { constructor( - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authRepository: AuthUserRepository, ) {} async execute(requestDto: LogoutRequestDto): Promise { diff --git a/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts index 539c70a..e457a94 100644 --- a/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts +++ b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts @@ -1,9 +1,9 @@ import { Inject, Injectable } from '@nestjs/common'; -import { Auth } from 'src/auth/auth-user/domain/auth'; -import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; -import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; +import { TokenType } from 'src/auth/core/infrastructure/jwt/jwt.factory'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; +import { JwtProvider } from 'src/auth/core/infrastructure/jwt/jwt.provider'; import { Identifier } from 'src/shared/core/domain/identifier'; import { OAuthLoginResponseDto } from './dto/oauth-login.response.dto'; import { Transactional } from '@mikro-orm/core'; @@ -11,7 +11,7 @@ import { Role } from 'src/user/command/domain/value-object/role.enum'; import { CommandHandler, EventBus } from '@nestjs/cqrs'; import { AuthCreatedEvent } from 'src/auth/auth-user/domain/event/auth-created.event'; import { OAuthLoginCommand } from './oauth-login.command'; -import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; @Injectable() @CommandHandler(OAuthLoginCommand) @@ -20,8 +20,8 @@ export class OAuthLoginUseCase { constructor( private readonly oAuthProviderFactory: OAuthProviderFactory, private readonly jwtProvider: JwtProvider, - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authUserRepository: AuthUserRepository, private readonly eventBus: EventBus, ) { this.now = new Date(); @@ -31,11 +31,11 @@ export class OAuthLoginUseCase { async execute(command: OAuthLoginCommand): Promise { const { oAuthProviderType, code } = command; const { oauthId, provider, email } = await this.getOAuthUserInfo(oAuthProviderType, code); - const auth = await this.findOrCreateAuth(oauthId, provider, email); - const { accessToken, refreshToken } = await this.generateAndSaveTokens(auth); + const authUser = await this.findOrCreateAuth(oauthId, provider, email); + const { accessToken, refreshToken } = await this.generateAndSaveTokens(authUser); const redirectUrl = this.decodeRedirectUrl(command.state); - return { accessToken, refreshToken, userId: auth.userId.value, redirectUrl }; + return { accessToken, refreshToken, userId: authUser.userId.value, redirectUrl }; } // 소셜로그인 유저저 정보 가져오기 @@ -47,8 +47,8 @@ export class OAuthLoginUseCase { } // 유저 생성 및 정보 가져오기 - private async findOrCreateAuth(oauthId: string, provider: OAuthProviderType, email: string): Promise { - const existingAuth = await this.authRepository.findByOAuthIdandProvider(oauthId, provider); + private async findOrCreateAuth(oauthId: string, provider: OAuthProviderType, email: string): Promise { + const existingAuth = await this.authUserRepository.findByOAuthIdandProvider(oauthId, provider); if (existingAuth) { this.eventBus.publish(existingAuth); return existingAuth; @@ -58,7 +58,7 @@ export class OAuthLoginUseCase { await this.eventBus.publish(new AuthCreatedEvent(userId, email, Role.GENERAL, provider)); - const auth = Auth.create({ + const authUser = AuthUser.create({ id: Identifier.create(), createdAt: this.now, updatedAt: this.now, @@ -69,20 +69,20 @@ export class OAuthLoginUseCase { userId: userId, }); - await this.authRepository.save(auth); + await this.authUserRepository.save(authUser); - await this.eventBus.publishAll(auth.pullDomainEvents()); + await this.eventBus.publishAll(authUser.pullDomainEvents()); - return auth; + return authUser; } // 토큰 생성 및 저장 - private async generateAndSaveTokens(auth: Auth) { - const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, auth.userId.value); - const { token: refreshToken, jti } = await this.jwtProvider.generateToken(TokenType.REFRESH, auth.userId.value); + private async generateAndSaveTokens(authUser: AuthUser) { + const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, authUser.userId.value); + const { token: refreshToken, jti } = await this.jwtProvider.generateToken(TokenType.REFRESH, authUser.userId.value); - auth.updateRefreshToken(jti, this.now); - await this.authRepository.update(auth); + authUser.updateRefreshToken(jti, this.now); + await this.authUserRepository.update(authUser); return { accessToken, refreshToken }; } diff --git a/src/auth/auth-user/application/renew-token/renew-token.use-case.ts b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts index 68f6862..62d0b4c 100644 --- a/src/auth/auth-user/application/renew-token/renew-token.use-case.ts +++ b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts @@ -1,34 +1,35 @@ import { Inject, Injectable } from '@nestjs/common'; -import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; -import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; +import { TokenType } from 'src/auth/core/infrastructure/jwt/jwt.factory'; +import { JwtProvider } from 'src/auth/core/infrastructure/jwt/jwt.provider'; import { RenewTokenRequestDto } from './dto/renew-token.request.dto'; import { RenewTokenResponseDto } from './dto/renew-token.response.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { EventBus } from '@nestjs/cqrs'; -import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; @Injectable() export class RenewTokenUseCase { constructor( private readonly jwtProvider: JwtProvider, - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authUserRepository: AuthUserRepository, private readonly eventBus: EventBus, ) {} async execute(reqeustDto: RenewTokenRequestDto): Promise { const { userId, jti } = reqeustDto; - const auth = await this.authRepository.findByRefreshToken(jti); - if (!auth || userId != auth.userId.value) throw new CustomException(CustomExceptionCode.AUTH_INVALID_REFRESH_TOKEN); + const authUser = await this.authUserRepository.findByRefreshToken(jti); + if (!authUser || userId != authUser.userId.value) + throw new CustomException(CustomExceptionCode.AUTH_INVALID_REFRESH_TOKEN); const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, userId); const { token: refreshToken, jti: newJti } = await this.jwtProvider.generateToken(TokenType.REFRESH, userId); - auth.updateRefreshToken(newJti, new Date()); - await this.authRepository.update(auth); + authUser.updateRefreshToken(newJti, new Date()); + await this.authUserRepository.update(authUser); - await this.eventBus.publishAll(auth.pullDomainEvents()); + await this.eventBus.publishAll(authUser.pullDomainEvents()); return { accessToken, refreshToken }; } diff --git a/src/auth/auth-user/auth-user.module.ts b/src/auth/auth-user/auth-user.module.ts new file mode 100644 index 0000000..58074eb --- /dev/null +++ b/src/auth/auth-user/auth-user.module.ts @@ -0,0 +1,29 @@ +import { Module } from '@nestjs/common'; +import { AuthUserRepositoryImpl } from './infrasturcture/auth-user.repository.impl'; +import { AUTH_USER_REPOSITORY } from './domain/auth-user.repository'; +import { OAuthLoginUseCase } from './application/oauth-login/oauth-login.handler'; +import { AuthorizeOAuthUseCase } from './application/authorize-oauth/authorize-oauth.use-case'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { AuthUserEntity } from './infrasturcture/auth-user.entity'; +import { AuthUserController } from './presentation/auth-user.controller'; +import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; +import { LogoutUseCase } from './application/logout/logout.use-case'; +import { AuthCoreModule } from '../core/auth-core.module'; +import { SharedModule } from 'src/shared/shared.module'; +import { CqrsModule } from '@nestjs/cqrs'; + +const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; + +@Module({ + imports: [MikroOrmModule.forFeature([AuthUserEntity]), AuthCoreModule, SharedModule, CqrsModule], + providers: [ + { + provide: AUTH_USER_REPOSITORY, + useClass: AuthUserRepositoryImpl, + }, + ...usecases, + ], + controllers: [AuthUserController], + exports: [], +}) +export class AuthUserModule {} diff --git a/src/auth/auth-user/domain/auth-user.repository.ts b/src/auth/auth-user/domain/auth-user.repository.ts new file mode 100644 index 0000000..9769b07 --- /dev/null +++ b/src/auth/auth-user/domain/auth-user.repository.ts @@ -0,0 +1,11 @@ +import { AuthUser } from './auth-user'; + +export interface AuthUserRepository { + save(authUser: AuthUser): Promise; + update(authUser: AuthUser): Promise; + findByOAuthIdandProvider(oauthId: string, provider: string): Promise; + findByRefreshToken(refreshToken: string): Promise; + findByUserId(userId: string): Promise; +} + +export const AUTH_USER_REPOSITORY = Symbol('AUTH_USER_REPOSITORY'); diff --git a/src/auth/auth-user/domain/auth.ts b/src/auth/auth-user/domain/auth-user.ts similarity index 78% rename from src/auth/auth-user/domain/auth.ts rename to src/auth/auth-user/domain/auth-user.ts index fba1363..d6ba3df 100644 --- a/src/auth/auth-user/domain/auth.ts +++ b/src/auth/auth-user/domain/auth-user.ts @@ -6,7 +6,7 @@ import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { LoginSucceededEvent } from './event/login-succeeded.event'; -export interface AuthProps extends BaseEntityProps { +export interface AuthUserProps extends BaseEntityProps { oauthId: string; provider: OAuthProviderType; refreshToken: string | null; @@ -14,21 +14,21 @@ export interface AuthProps extends BaseEntityProps { userId: Identifier; } -export class Auth extends AggregateRoot { - constructor(props: AuthProps) { +export class AuthUser extends AggregateRoot { + constructor(props: AuthUserProps) { super(props); } - public static create(props: AuthProps): Auth { - const auth = new Auth(props); - auth.validate(); - auth.addDomainEvent(new LoginSucceededEvent(auth.userId, auth.provider)); + public static create(props: AuthUserProps): AuthUser { + const authUser = new AuthUser(props); + authUser.validate(); + authUser.addDomainEvent(new LoginSucceededEvent(authUser.userId, authUser.provider)); - return auth; + return authUser; } - public static of(props: AuthProps): Auth { - return new Auth(props); + public static of(props: AuthUserProps): AuthUser { + return new AuthUser(props); } public validate(): void { diff --git a/src/auth/auth-user/domain/auth.repository.ts b/src/auth/auth-user/domain/auth.repository.ts deleted file mode 100644 index 5ce5bb9..0000000 --- a/src/auth/auth-user/domain/auth.repository.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Auth } from './auth'; - -export interface AuthRepository { - save(auth: Auth): Promise; - update(auth: Auth): Promise; - findByOAuthIdandProvider(oauthId: string, provider: string): Promise; - findByRefreshToken(refreshToken: string): Promise; - findByUserId(userId: string): Promise; -} - -export const AUTH_REPOSITORY = Symbol('AUTH_REPOSITORY'); diff --git a/src/auth/auth-user/infrasturcture/auth.entity.ts b/src/auth/auth-user/infrasturcture/auth-user.entity.ts similarity index 88% rename from src/auth/auth-user/infrasturcture/auth.entity.ts rename to src/auth/auth-user/infrasturcture/auth-user.entity.ts index 52d8920..a6f21d9 100644 --- a/src/auth/auth-user/infrasturcture/auth.entity.ts +++ b/src/auth/auth-user/infrasturcture/auth-user.entity.ts @@ -5,7 +5,7 @@ import { UserEntity } from 'src/user/command/infrastructure/user.entity'; @Entity({ tableName: 'auth' }) @Unique({ properties: ['oauthId', 'provider'] }) -export class AuthEntity extends BaseEntity { +export class AuthUserEntity extends BaseEntity { @Property({ type: 'varchar', unique: true }) oauthId: string; @@ -18,7 +18,7 @@ export class AuthEntity extends BaseEntity { @Property({ type: 'varchar', unique: true, nullable: true }) oauthAccessToken: string | null; - @OneToOne(() => UserEntity, (user) => user.auth, { + @OneToOne(() => UserEntity, (user) => user.authUser, { owner: true, cascade: [Cascade.PERSIST, Cascade.REMOVE], unique: true, diff --git a/src/auth/auth-user/infrasturcture/auth.mapper.ts b/src/auth/auth-user/infrasturcture/auth-user.mapper.ts similarity index 72% rename from src/auth/auth-user/infrasturcture/auth.mapper.ts rename to src/auth/auth-user/infrasturcture/auth-user.mapper.ts index 7f07b87..1de14fc 100644 --- a/src/auth/auth-user/infrasturcture/auth.mapper.ts +++ b/src/auth/auth-user/infrasturcture/auth-user.mapper.ts @@ -1,12 +1,12 @@ -import { Auth } from 'src/auth/auth-user/domain/auth'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; import { Identifier } from 'src/shared/core/domain/identifier'; import { EntityManager } from '@mikro-orm/mysql'; import { UserEntity } from 'src/user/command/infrastructure/user.entity'; -import { AuthEntity } from './auth.entity'; +import { AuthUserEntity } from './auth-user.entity'; -export class AuthMapper { - static toDomain(entity: AuthEntity): Auth { - return Auth.of({ +export class AuthUserMapper { + static toDomain(entity: AuthUserEntity): AuthUser { + return AuthUser.of({ id: Identifier.from(entity.id), createdAt: entity.createdAt, updatedAt: entity.updatedAt, @@ -18,8 +18,8 @@ export class AuthMapper { }); } - static toEntity(domain: Auth, em: EntityManager): AuthEntity { - const entity = new AuthEntity(); + static toEntity(domain: AuthUser, em: EntityManager): AuthUserEntity { + const entity = new AuthUserEntity(); entity.id = domain.id.value; entity.createdAt = domain.createdAt; entity.updatedAt = domain.updatedAt; diff --git a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts new file mode 100644 index 0000000..23b6bf9 --- /dev/null +++ b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts @@ -0,0 +1,52 @@ +import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; +import { InjectRepository } from '@mikro-orm/nestjs'; +import { AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; +import { AuthUserEntity } from './auth-user.entity'; +import { AuthUserMapper } from './auth-user.mapper'; + +export class AuthUserRepositoryImpl implements AuthUserRepository { + constructor( + @InjectRepository(AuthUserEntity) + private readonly authOrmRepository: EntityRepository, + private readonly em: EntityManager, + ) {} + + async save(authUser: AuthUser): Promise { + const authUserEntity = AuthUserMapper.toEntity(authUser, this.em); + await this.em.persistAndFlush(authUserEntity); + } + + async findByOAuthIdandProvider(oauthId: string, provider: OAuthProviderType): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ oauthId, provider }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async findByRefreshToken(refreshToken: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ refreshToken }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async update(authUser: AuthUser): Promise { + await this.em.nativeUpdate( + AuthUserEntity, + { id: authUser.id.value }, + { + refreshToken: authUser.refreshToken, + updatedAt: authUser.updatedAt, + }, + ); + } + + async findByUserId(userId: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ user: userId }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } +} diff --git a/src/auth/auth-user/infrasturcture/auth.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth.repository.impl.ts deleted file mode 100644 index ca5e6dd..0000000 --- a/src/auth/auth-user/infrasturcture/auth.repository.impl.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; -import { Auth } from 'src/auth/auth-user/domain/auth'; -import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { InjectRepository } from '@mikro-orm/nestjs'; -import { AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; -import { AuthEntity } from './auth.entity'; -import { AuthMapper } from './auth.mapper'; - -export class AuthRepositoryImpl implements AuthRepository { - constructor( - @InjectRepository(AuthEntity) - private readonly authOrmRepository: EntityRepository, - private readonly em: EntityManager, - ) {} - - async save(auth: Auth): Promise { - const authEntity = AuthMapper.toEntity(auth, this.em); - await this.em.persistAndFlush(authEntity); - } - - async findByOAuthIdandProvider(oauthId: string, provider: OAuthProviderType): Promise { - const authEntity = await this.authOrmRepository.findOne({ oauthId, provider }); - if (!authEntity) return null; - - return AuthMapper.toDomain(authEntity); - } - - async findByRefreshToken(refreshToken: string): Promise { - const authEntity = await this.authOrmRepository.findOne({ refreshToken }); - if (!authEntity) return null; - - return AuthMapper.toDomain(authEntity); - } - - async update(auth: Auth): Promise { - await this.em.nativeUpdate( - AuthEntity, - { id: auth.id.value }, - { - refreshToken: auth.refreshToken, - updatedAt: auth.updatedAt, - }, - ); - } - - async findByUserId(userId: string): Promise { - const authEntity = await this.authOrmRepository.findOne({ user: userId }); - if (!authEntity) return null; - - return AuthMapper.toDomain(authEntity); - } -} diff --git a/src/auth/auth-user/presentation/auth.controller.ts b/src/auth/auth-user/presentation/auth-user.controller.ts similarity index 92% rename from src/auth/auth-user/presentation/auth.controller.ts rename to src/auth/auth-user/presentation/auth-user.controller.ts index 5d63a7d..c5b38e6 100644 --- a/src/auth/auth-user/presentation/auth.controller.ts +++ b/src/auth/auth-user/presentation/auth-user.controller.ts @@ -9,12 +9,12 @@ import { RenewTokenUseCase } from '../application/renew-token/renew-token.use-ca import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; import { LogoutUseCase } from '../application/logout/logout.use-case'; import { OAuthProviderType } from '../domain/value-object/oauth-provider.enum'; -import { AuthDocs } from './auth.docs'; import { ConfigService } from '@nestjs/config'; +import { AuthUserDocs } from './auth-user.docs'; -@ApiTags('auth') +@ApiTags('auth-user') @Controller('auth') -export class AuthController { +export class AuthUserController { constructor( private readonly oAuthLoginUseCase: OAuthLoginUseCase, private readonly authorizeOAuthUseCase: AuthorizeOAuthUseCase, @@ -24,7 +24,7 @@ export class AuthController { ) {} @Get('oauth/authorization') - @AuthDocs('oauthAuthorization') + @AuthUserDocs('oauthAuthorization') authorizeOAuth(@Query('returnPath') returnPath?: string) { const { authUrl } = this.authorizeOAuthUseCase.execute({ oAuthProviderType: OAuthProviderType.KAKAO, @@ -35,7 +35,7 @@ export class AuthController { } @Post('login/oauth/callback') - @AuthDocs('oauthCallback') + @AuthUserDocs('oauthCallback') async oAuthLogin( @Res() res: Response, @Query('code') code: string, @@ -60,7 +60,7 @@ export class AuthController { @Get('refresh') @UseGuards(AuthGuard('jwt-refresh')) - @AuthDocs('renewToken') + @AuthUserDocs('renewToken') async renewToken(@User() user: UserPayload, @Res() res: Response) { const { accessToken, refreshToken } = await this.renewTokenUseCase.execute({ userId: user.userId, jti: user.jti }); @@ -72,7 +72,7 @@ export class AuthController { @Post('logout') @UseGuards(AuthGuard('jwt-access')) - @AuthDocs('logout') + @AuthUserDocs('logout') async logout(@User() user: UserPayload, @Res() res: Response) { await this.logoutUseCase.execute({ userId: user.userId }); diff --git a/src/auth/auth-user/presentation/auth.docs.ts b/src/auth/auth-user/presentation/auth-user.docs.ts similarity index 93% rename from src/auth/auth-user/presentation/auth.docs.ts rename to src/auth/auth-user/presentation/auth-user.docs.ts index b6b1815..e5f80b0 100644 --- a/src/auth/auth-user/presentation/auth.docs.ts +++ b/src/auth/auth-user/presentation/auth-user.docs.ts @@ -9,9 +9,9 @@ import { } from '@nestjs/swagger'; import { createDocs } from 'src/shared/core/presentation/base.docs'; -export type AuthEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout'; +export type AuthUserEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout'; -export const AuthDocs = createDocs({ +export const AuthUserDocs = createDocs({ oauthAuthorization: () => applyDecorators( ApiOperation({ diff --git a/src/auth/auth-user/presentation/auth.controller.spec.ts b/src/auth/auth-user/presentation/auth.controller.spec.ts deleted file mode 100644 index 27a31e6..0000000 --- a/src/auth/auth-user/presentation/auth.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AuthController } from './auth.controller'; - -describe('AuthController', () => { - let controller: AuthController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [AuthController], - }).compile(); - - controller = module.get(AuthController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 7e5805f..76f3682 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,40 +1,12 @@ import { Module } from '@nestjs/common'; -import { AuthRepositoryImpl } from './auth-user/infrasturcture/auth.repository.impl'; -import { AuthController } from './auth-user/presentation/auth.controller'; -import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthEntity } from './auth-user/infrasturcture/auth.entity'; -import { OAuthLoginUseCase } from './auth-user/application/oauth-login/oauth-login.handler'; -import { OAuthProviderFactory } from '../shared/core/infrastructure/oauth/oauth-provider.factory'; -import { KakaoOAuthProvider } from '../shared/core/infrastructure/oauth/kakao.provider'; -import { AuthorizeOAuthUseCase } from './auth-user/application/authorize-oauth/authorize-oauth.use-case'; -import { JwtProvider } from './infrastructure/jwt/jwt.provider'; -import { JwtModule } from '@nestjs/jwt'; -import { JwtAccessStrategy } from './infrastructure/jwt/jwt-access.strategy'; -import { JwtRefreshStrategy } from './infrastructure/jwt/jwt-refresh.strategy'; -import { PassportModule } from '@nestjs/passport'; -import { RenewTokenUseCase } from './auth-user/application/renew-token/renew-token.use-case'; -import { LogoutUseCase } from './auth-user/application/logout/logout.use-case'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; -import { AUTH_REPOSITORY } from './auth-user/domain/auth.repository'; - -const useCases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; +import { AuthUserModule } from './auth-user/auth-user.module'; +import { AuthOrganizationModule } from './auth-organization/auth-organization.module'; +import { AuthCoreModule } from './core/auth-core.module'; @Module({ - controllers: [AuthController], - imports: [JwtModule.register({}), MikroOrmModule.forFeature([AuthEntity]), PassportModule, SharedModule, CqrsModule], - providers: [ - ...useCases, - { - provide: AUTH_REPOSITORY, - useClass: AuthRepositoryImpl, - }, - OAuthProviderFactory, - KakaoOAuthProvider, - JwtProvider, - JwtAccessStrategy, - JwtRefreshStrategy, - ], - exports: [OAuthProviderFactory], + imports: [SharedModule, CqrsModule, AuthUserModule, AuthOrganizationModule, AuthCoreModule], + providers: [], }) export class AuthModule {} diff --git a/src/auth/infrastructure/jwt/jwt-access.strategy.ts b/src/auth/core/infrastructure/jwt/jwt-access.strategy.ts similarity index 100% rename from src/auth/infrastructure/jwt/jwt-access.strategy.ts rename to src/auth/core/infrastructure/jwt/jwt-access.strategy.ts diff --git a/src/auth/infrastructure/jwt/jwt-refresh.strategy.ts b/src/auth/core/infrastructure/jwt/jwt-refresh.strategy.ts similarity index 100% rename from src/auth/infrastructure/jwt/jwt-refresh.strategy.ts rename to src/auth/core/infrastructure/jwt/jwt-refresh.strategy.ts diff --git a/src/auth/core/infrastructure/jwt/jwt.factory.ts b/src/auth/core/infrastructure/jwt/jwt.factory.ts new file mode 100644 index 0000000..aa939b5 --- /dev/null +++ b/src/auth/core/infrastructure/jwt/jwt.factory.ts @@ -0,0 +1,28 @@ +// jwt-token-options.factory.ts +import { ConfigService } from '@nestjs/config'; +import { JwtSignOptions, JwtVerifyOptions } from '@nestjs/jwt'; + +export enum TokenType { + ACCESS = 'access', + REFRESH = 'refresh', +} + +export const JwtSignOptionsMapper = (config: ConfigService): Record => ({ + [TokenType.ACCESS]: { + secret: config.getOrThrow('jwt.access.secret'), + expiresIn: config.getOrThrow('jwt.access.expiration'), + }, + [TokenType.REFRESH]: { + secret: config.getOrThrow('jwt.refresh.secret'), + expiresIn: config.getOrThrow('jwt.refresh.expiration'), + }, +}); + +export const JwtVerifyOptionsMapper = (config: ConfigService): Record => ({ + [TokenType.ACCESS]: { + secret: config.getOrThrow('jwt.access.secret'), + }, + [TokenType.REFRESH]: { + secret: config.getOrThrow('jwt.refresh.secret'), + }, +}); diff --git a/src/auth/infrastructure/jwt/jwt.provider.ts b/src/auth/core/infrastructure/jwt/jwt.provider.ts similarity index 69% rename from src/auth/infrastructure/jwt/jwt.provider.ts rename to src/auth/core/infrastructure/jwt/jwt.provider.ts index ddcbac7..004ef12 100644 --- a/src/auth/infrastructure/jwt/jwt.provider.ts +++ b/src/auth/core/infrastructure/jwt/jwt.provider.ts @@ -1,6 +1,6 @@ import { ConfigService } from '@nestjs/config'; import { JwtService } from '@nestjs/jwt'; -import { JwtTokenOptions, TokenType } from './jwt.factory'; +import { JwtSignOptionsMapper, JwtVerifyOptionsMapper, TokenType } from './jwt.factory'; import { Injectable } from '@nestjs/common'; import { v4 as uuidV4 } from 'uuid'; @@ -12,7 +12,7 @@ export class JwtProvider { ) {} async generateToken(tokenType: TokenType, userId: string): Promise<{ token: string; jti: string }> { - const jwtSignOptions = JwtTokenOptions(this.configService)[tokenType]; + const jwtSignOptions = JwtSignOptionsMapper(this.configService)[tokenType]; const jti = uuidV4(); const payload = { userId, jti }; const token = await this.jwtService.signAsync(payload, jwtSignOptions); @@ -21,9 +21,9 @@ export class JwtProvider { } async verifyToken(token: string, tokenType: TokenType): Promise { - const jwtSignOptions = JwtTokenOptions(this.configService)[tokenType]; + const jwtVerifyOptions = JwtVerifyOptionsMapper(this.configService)[tokenType]; - return this.jwtService.verifyAsync(token, jwtSignOptions); + return this.jwtService.verifyAsync(token, jwtVerifyOptions); } async saveRefreshToken(): Promise {} diff --git a/src/shared/core/infrastructure/oauth/base-oauth.provider.ts b/src/auth/core/infrastructure/oauth/base-oauth.provider.ts similarity index 100% rename from src/shared/core/infrastructure/oauth/base-oauth.provider.ts rename to src/auth/core/infrastructure/oauth/base-oauth.provider.ts diff --git a/src/shared/core/infrastructure/oauth/kakao.provider.ts b/src/auth/core/infrastructure/oauth/kakao.provider.ts similarity index 94% rename from src/shared/core/infrastructure/oauth/kakao.provider.ts rename to src/auth/core/infrastructure/oauth/kakao.provider.ts index 631ae50..bec9cb7 100644 --- a/src/shared/core/infrastructure/oauth/kakao.provider.ts +++ b/src/auth/core/infrastructure/oauth/kakao.provider.ts @@ -3,7 +3,7 @@ import axios from 'axios'; import { ConfigService } from '@nestjs/config'; import { BaseOAuthProvider, OAuthUser } from './base-oauth.provider'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; interface KakaoTokenResponse { access_token: string; @@ -28,8 +28,8 @@ interface KakaoUserResponse { export class KakaoOAuthProvider implements BaseOAuthProvider { constructor( private readonly configService: ConfigService, - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authRepository: AuthUserRepository, ) {} async getUserInfo(token: string): Promise { diff --git a/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts b/src/auth/core/infrastructure/oauth/oauth-provider.factory.ts similarity index 100% rename from src/shared/core/infrastructure/oauth/oauth-provider.factory.ts rename to src/auth/core/infrastructure/oauth/oauth-provider.factory.ts diff --git a/src/auth/infrastructure/jwt/jwt.factory.ts b/src/auth/infrastructure/jwt/jwt.factory.ts deleted file mode 100644 index c60f936..0000000 --- a/src/auth/infrastructure/jwt/jwt.factory.ts +++ /dev/null @@ -1,19 +0,0 @@ -// jwt-token-options.factory.ts -import { ConfigService } from '@nestjs/config'; -import { JwtSignOptions } from '@nestjs/jwt'; - -export enum TokenType { - ACCESS = 'access', - REFRESH = 'refresh', -} - -export const JwtTokenOptions = (config: ConfigService): Record => ({ - [TokenType.ACCESS]: { - secret: config.getOrThrow('jwt.access.secret'), - expiresIn: config.getOrThrow('jwt.access.expiration'), - }, - [TokenType.REFRESH]: { - secret: config.getOrThrow('jwt.refresh.secret'), - expiresIn: config.getOrThrow('jwt.refresh.expiration'), - }, -}); diff --git a/src/shared/shared.module.ts b/src/shared/shared.module.ts index 823f3de..3534626 100644 --- a/src/shared/shared.module.ts +++ b/src/shared/shared.module.ts @@ -1,21 +1,8 @@ import { Module } from '@nestjs/common'; -import { OAuthProviderFactory } from './core/infrastructure/oauth/oauth-provider.factory'; -import { KakaoOAuthProvider } from './core/infrastructure/oauth/kakao.provider'; -import { AuthRepositoryImpl } from 'src/auth/auth-user/infrasturcture/auth.repository.impl'; -import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthEntity } from 'src/auth/auth-user/infrasturcture/auth.entity'; -import { AUTH_REPOSITORY } from 'src/auth/auth-user/domain/auth.repository'; @Module({ - imports: [MikroOrmModule.forFeature([AuthEntity])], - providers: [ - OAuthProviderFactory, - KakaoOAuthProvider, - { - provide: AUTH_REPOSITORY, - useClass: AuthRepositoryImpl, - }, - ], - exports: [OAuthProviderFactory], + imports: [], + providers: [], + exports: [], }) export class SharedModule {} diff --git a/src/user/command/application/delete/delete.handler.ts b/src/user/command/application/delete/delete.handler.ts index 18c6729..99f1ac0 100644 --- a/src/user/command/application/delete/delete.handler.ts +++ b/src/user/command/application/delete/delete.handler.ts @@ -1,5 +1,5 @@ import { Inject, Injectable } from '@nestjs/common'; -import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { USER_COMMAND_REPOSITORY, UserCommandRepository } from '../../domain/user.command.repository'; import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; diff --git a/src/user/command/infrastructure/user.command.repository.impl.ts b/src/user/command/infrastructure/user.command.repository.impl.ts index a0fd6b5..5ca8215 100644 --- a/src/user/command/infrastructure/user.command.repository.impl.ts +++ b/src/user/command/infrastructure/user.command.repository.impl.ts @@ -20,7 +20,7 @@ export class UserCommandRepositoryImpl implements UserCommandRepository { } async deleteById(userId: string): Promise { - const userEntity = await this.ormRepository.findOne({ id: userId }, { populate: ['auth', 'scraps'] }); + const userEntity = await this.ormRepository.findOne({ id: userId }, { populate: ['authUser', 'scraps'] }); if (!userEntity) throw new CustomException( CustomExceptionCode.USER_NOT_FOUND, diff --git a/src/user/command/infrastructure/user.entity.ts b/src/user/command/infrastructure/user.entity.ts index 7890b6f..b4cec82 100644 --- a/src/user/command/infrastructure/user.entity.ts +++ b/src/user/command/infrastructure/user.entity.ts @@ -1,5 +1,5 @@ import { Cascade, Collection, Entity, OneToMany, OneToOne, Property } from '@mikro-orm/core'; -import { AuthEntity } from 'src/auth/auth-user/infrasturcture/auth.entity'; +import { AuthUserEntity } from 'src/auth/auth-user/infrasturcture/auth-user.entity'; import { ScrapEntity } from 'src/scrap/command/infrastructure/scrap.entity'; import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; import { Role } from '../domain/value-object/role.enum'; @@ -12,8 +12,8 @@ export class UserEntity extends BaseEntity { @Property({ type: 'varchar' }) role: Role; - @OneToOne(() => AuthEntity, (auth) => auth.user, { unique: true }) - auth: AuthEntity; + @OneToOne(() => AuthUserEntity, (authUser) => authUser.user, { unique: true }) + authUser: AuthUserEntity; @OneToMany(() => ScrapEntity, (scrap) => scrap.user, { nullable: true, cascade: [Cascade.ALL] }) scraps = new Collection(this); From 6300d03029372a10788778a57727570a168e7e47 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:53:13 +0900 Subject: [PATCH 05/67] =?UTF-8?q?fix:=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=ED=95=B4=EC=A0=9C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=82=B4=EC=97=90=EC=84=9C=20repository=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/oauth/base-oauth.provider.ts | 2 +- .../core/infrastructure/oauth/kakao.provider.ts | 17 ++++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/auth/core/infrastructure/oauth/base-oauth.provider.ts b/src/auth/core/infrastructure/oauth/base-oauth.provider.ts index 2ed1207..e2d19bc 100644 --- a/src/auth/core/infrastructure/oauth/base-oauth.provider.ts +++ b/src/auth/core/infrastructure/oauth/base-oauth.provider.ts @@ -4,7 +4,7 @@ export interface BaseOAuthProvider { getToken(code: string): Promise; getUserInfo(token: string): Promise; getAuthorizationUrl(state?: string): string; - unlinkAccount(userId: string): Promise; + unlinkAccount(oAuthId: string): Promise; } export interface OAuthUser { diff --git a/src/auth/core/infrastructure/oauth/kakao.provider.ts b/src/auth/core/infrastructure/oauth/kakao.provider.ts index bec9cb7..9d82027 100644 --- a/src/auth/core/infrastructure/oauth/kakao.provider.ts +++ b/src/auth/core/infrastructure/oauth/kakao.provider.ts @@ -1,9 +1,8 @@ -import { Inject, Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common'; +import { Injectable, UnauthorizedException } from '@nestjs/common'; import axios from 'axios'; import { ConfigService } from '@nestjs/config'; import { BaseOAuthProvider, OAuthUser } from './base-oauth.provider'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { AUTH_USER_REPOSITORY, AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; interface KakaoTokenResponse { access_token: string; @@ -26,11 +25,7 @@ interface KakaoUserResponse { @Injectable() export class KakaoOAuthProvider implements BaseOAuthProvider { - constructor( - private readonly configService: ConfigService, - @Inject(AUTH_USER_REPOSITORY) - private readonly authRepository: AuthUserRepository, - ) {} + constructor(private readonly configService: ConfigService) {} async getUserInfo(token: string): Promise { const res = await axios.get('https://kapi.kakao.com/v2/user/me', { @@ -91,11 +86,7 @@ export class KakaoOAuthProvider implements BaseOAuthProvider { return `${authorizeUrl}?${params.toString()}`; } - async unlinkAccount(userId: string): Promise { - const auth = await this.authRepository.findByUserId(userId); - if (!auth) throw new NotFoundException('해당 유저의 인증 정보가 존재하지 않습니다.'); - - const oauthId = auth.oauthId; + async unlinkAccount(oAuthId: string): Promise { const adminKey = this.configService.getOrThrow('kakao.adminKey'); const unlinkUrl = 'https://kapi.kakao.com/v1/user/unlink'; @@ -103,7 +94,7 @@ export class KakaoOAuthProvider implements BaseOAuthProvider { Authorization: `KakaoAK ${adminKey}`, 'Content-Type': 'application/x-www-form-urlencoded', }; - const data = `target_id_type=user_id&target_id=${oauthId}`; + const data = `target_id_type=user_id&target_id=${oAuthId}`; try { return await axios.post(unlinkUrl, data, { headers }); From 13db42382c0489cf56b37d9dfce174490e582189 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:55:23 +0900 Subject: [PATCH 06/67] =?UTF-8?q?feat:=20auth=20repository=EC=97=90=20dele?= =?UTF-8?q?teById=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-user/domain/auth-user.repository.ts | 1 + .../infrasturcture/auth-user.repository.impl.ts | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/auth/auth-user/domain/auth-user.repository.ts b/src/auth/auth-user/domain/auth-user.repository.ts index 9769b07..904c83c 100644 --- a/src/auth/auth-user/domain/auth-user.repository.ts +++ b/src/auth/auth-user/domain/auth-user.repository.ts @@ -6,6 +6,7 @@ export interface AuthUserRepository { findByOAuthIdandProvider(oauthId: string, provider: string): Promise; findByRefreshToken(refreshToken: string): Promise; findByUserId(userId: string): Promise; + deleteById(id: string): Promise; } export const AUTH_USER_REPOSITORY = Symbol('AUTH_USER_REPOSITORY'); diff --git a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts index 23b6bf9..2e847c0 100644 --- a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts +++ b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts @@ -5,6 +5,8 @@ import { InjectRepository } from '@mikro-orm/nestjs'; import { AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; import { AuthUserEntity } from './auth-user.entity'; import { AuthUserMapper } from './auth-user.mapper'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; export class AuthUserRepositoryImpl implements AuthUserRepository { constructor( @@ -12,7 +14,6 @@ export class AuthUserRepositoryImpl implements AuthUserRepository { private readonly authOrmRepository: EntityRepository, private readonly em: EntityManager, ) {} - async save(authUser: AuthUser): Promise { const authUserEntity = AuthUserMapper.toEntity(authUser, this.em); await this.em.persistAndFlush(authUserEntity); @@ -49,4 +50,11 @@ export class AuthUserRepositoryImpl implements AuthUserRepository { return AuthUserMapper.toDomain(authUserEntity); } + + async deleteById(id: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ id }); + if (!authUserEntity) throw new CustomException(CustomExceptionCode.AUTH_USER_NOT_FOUND); + + await this.em.removeAndFlush(authUserEntity); + } } From 36d7ca8a8aace68fd2e158b48ddd3a53e164e535 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:56:39 +0900 Subject: [PATCH 07/67] =?UTF-8?q?feat:=20auth=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B0=8F=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-user/domain/auth-user.ts | 5 +++++ src/auth/auth-user/domain/event/auth-deleted.event.ts | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 src/auth/auth-user/domain/event/auth-deleted.event.ts diff --git a/src/auth/auth-user/domain/auth-user.ts b/src/auth/auth-user/domain/auth-user.ts index d6ba3df..85b8fdd 100644 --- a/src/auth/auth-user/domain/auth-user.ts +++ b/src/auth/auth-user/domain/auth-user.ts @@ -5,6 +5,7 @@ import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { LoginSucceededEvent } from './event/login-succeeded.event'; +import { AuthDeletedEvent } from './event/auth-deleted.event'; export interface AuthUserProps extends BaseEntityProps { oauthId: string; @@ -53,6 +54,10 @@ export class AuthUser extends AggregateRoot { this.props.updatedAt = updatedAt; } + delete() { + this.addDomainEvent(new AuthDeletedEvent(this.userId.value)); + } + get oauthId(): string { return this.props.oauthId; } diff --git a/src/auth/auth-user/domain/event/auth-deleted.event.ts b/src/auth/auth-user/domain/event/auth-deleted.event.ts new file mode 100644 index 0000000..b702f35 --- /dev/null +++ b/src/auth/auth-user/domain/event/auth-deleted.event.ts @@ -0,0 +1,9 @@ +import { BaseDomainEvent } from 'src/shared/core/domain/base.domain-event'; + +export class AuthDeletedEvent implements BaseDomainEvent { + readonly timesstamp: Date; + + constructor(public readonly userId: string) { + this.timesstamp = new Date(); + } +} From 10dafa08de8b91fb908796e5cd7a7f7c173b4045 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:58:24 +0900 Subject: [PATCH 08/67] =?UTF-8?q?feat:=20=EC=9D=BC=EB=B0=98=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20oauth=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20=ED=95=B4=EC=A0=9C=20usecase=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unlink-oauth/unlink-oauth.command.ts | 9 +++++ .../unlink-oauth/unlink-oauth.use-case.ts | 33 +++++++++++++++++++ src/auth/auth-user/auth-user.module.ts | 3 +- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts create mode 100644 src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts diff --git a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts new file mode 100644 index 0000000..27c9b92 --- /dev/null +++ b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts @@ -0,0 +1,9 @@ +import { ICommand } from '@nestjs/cqrs'; +import { OAuthProviderType } from '../../domain/value-object/oauth-provider.enum'; + +export class UnlinkOAuthCommand implements ICommand { + constructor( + public readonly oAuthProviderType: OAuthProviderType, + public readonly userId: string, + ) {} +} diff --git a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts new file mode 100644 index 0000000..1b6a63e --- /dev/null +++ b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts @@ -0,0 +1,33 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; +import { CommandHandler, EventBus } from '@nestjs/cqrs'; +import { UnlinkOAuthCommand } from './unlink-oauth.command'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; + +@Injectable() +@CommandHandler(UnlinkOAuthCommand) +export class UnlinkOAuthUseCase { + constructor( + @Inject(AUTH_USER_REPOSITORY) + private readonly authUserRepository: AuthUserRepository, + private readonly oAuthProviderFactory: OAuthProviderFactory, + private readonly eventBus: EventBus, + ) {} + + async execute(command: UnlinkOAuthCommand) { + const { userId, oAuthProviderType } = command; + + const authUser = await this.authUserRepository.findByUserId(userId); + if (!authUser) throw new CustomException(CustomExceptionCode.AUTH_USER_NOT_FOUND); + + const oAuthProvider = this.oAuthProviderFactory.getProvider(oAuthProviderType); + await oAuthProvider.unlinkAccount(authUser.oauthId); + + authUser.delete(); + await this.authUserRepository.deleteById(authUser.id.value); + + this.eventBus.publishAll(authUser.pullDomainEvents()); + } +} diff --git a/src/auth/auth-user/auth-user.module.ts b/src/auth/auth-user/auth-user.module.ts index 58074eb..19b91c9 100644 --- a/src/auth/auth-user/auth-user.module.ts +++ b/src/auth/auth-user/auth-user.module.ts @@ -11,8 +11,9 @@ import { LogoutUseCase } from './application/logout/logout.use-case'; import { AuthCoreModule } from '../core/auth-core.module'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; +import { UnlinkOAuthUseCase } from './application/unlink-oauth/unlink-oauth.use-case'; -const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; +const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase, UnlinkOAuthUseCase]; @Module({ imports: [MikroOrmModule.forFeature([AuthUserEntity]), AuthCoreModule, SharedModule, CqrsModule], From a0e2648bbd9a906194f39f2e35e19c63473f4010 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:59:31 +0900 Subject: [PATCH 09/67] =?UTF-8?q?fix:=20=EC=9D=BC=EB=B0=98=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C?= =?UTF-8?q?=20oAuth=20=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/user/command/application/delete/delete.handler.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/user/command/application/delete/delete.handler.ts b/src/user/command/application/delete/delete.handler.ts index 99f1ac0..e6942ea 100644 --- a/src/user/command/application/delete/delete.handler.ts +++ b/src/user/command/application/delete/delete.handler.ts @@ -1,6 +1,4 @@ import { Inject, Injectable } from '@nestjs/common'; -import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; -import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { USER_COMMAND_REPOSITORY, UserCommandRepository } from '../../domain/user.command.repository'; import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; import { DeleteMyInfoCommand } from './delete.command'; @@ -11,14 +9,10 @@ export class DeleteMyInfoHandler implements ICommandHandler constructor( @Inject(USER_COMMAND_REPOSITORY) private readonly userCommandRepository: UserCommandRepository, - private readonly oAuthProviderFactory: OAuthProviderFactory, ) {} async execute(command: DeleteMyInfoCommand): Promise { const { userId } = command; - const oAuthProvider = this.oAuthProviderFactory.getProvider(OAuthProviderType.KAKAO); - console.log(1); - await oAuthProvider.unlinkAccount(userId); await this.userCommandRepository.deleteById(userId); } From bddb9f3f897b3763d2033835cb09d342b854a5e7 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 20:00:20 +0900 Subject: [PATCH 10/67] =?UTF-8?q?fix:=20=EC=9D=BC=EB=B0=98=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EC=82=AD=EC=A0=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20=EC=9D=B8=EC=A6=9D=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20listener=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/application/delete/delete.listener.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/user/command/application/delete/delete.listener.ts diff --git a/src/user/command/application/delete/delete.listener.ts b/src/user/command/application/delete/delete.listener.ts new file mode 100644 index 0000000..c42df59 --- /dev/null +++ b/src/user/command/application/delete/delete.listener.ts @@ -0,0 +1,15 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { AuthDeletedEvent } from 'src/auth/auth-user/domain/event/auth-deleted.event'; +import { DeleteMyInfoHandler } from './delete.handler'; +import { DeleteMyInfoCommand } from './delete.command'; + +@EventsHandler(AuthDeletedEvent) +export class DeleteUserListener implements IEventHandler { + constructor(private readonly deleteMyInfoHandler: DeleteMyInfoHandler) {} + + async handle(event: AuthDeletedEvent) { + const deleteMyInfoCommand = new DeleteMyInfoCommand(event.userId); + + await this.deleteMyInfoHandler.execute(deleteMyInfoCommand); + } +} From da932f15a8944f21e384b987776c93f5b15ea7dc Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 20:12:44 +0900 Subject: [PATCH 11/67] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=20api=20auth=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BF=A0=ED=82=A4=20=EC=82=AD=EC=A0=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-user.controller.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/auth/auth-user/presentation/auth-user.controller.ts b/src/auth/auth-user/presentation/auth-user.controller.ts index c5b38e6..71e273d 100644 --- a/src/auth/auth-user/presentation/auth-user.controller.ts +++ b/src/auth/auth-user/presentation/auth-user.controller.ts @@ -9,8 +9,8 @@ import { RenewTokenUseCase } from '../application/renew-token/renew-token.use-ca import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; import { LogoutUseCase } from '../application/logout/logout.use-case'; import { OAuthProviderType } from '../domain/value-object/oauth-provider.enum'; -import { ConfigService } from '@nestjs/config'; import { AuthUserDocs } from './auth-user.docs'; +import { UnlinkOAuthUseCase } from '../application/unlink-oauth/unlink-oauth.use-case'; @ApiTags('auth-user') @Controller('auth') @@ -20,7 +20,7 @@ export class AuthUserController { private readonly authorizeOAuthUseCase: AuthorizeOAuthUseCase, private readonly renewTokenUseCase: RenewTokenUseCase, private readonly logoutUseCase: LogoutUseCase, - private readonly configService: ConfigService, + private readonly unlinkOAuthUseCase: UnlinkOAuthUseCase, ) {} @Get('oauth/authorization') @@ -81,4 +81,15 @@ export class AuthUserController { res.status(HttpStatus.OK).send(); } + + @Post('withdraw') + @UseGuards(AuthGuard('jwt-access')) + async withdraw(@User() user: UserPayload, @Res() res: Response) { + await this.unlinkOAuthUseCase.execute({ userId: user.userId, oAuthProviderType: OAuthProviderType.KAKAO }); + + res.clearCookie('accessToken', accessTokenCookieOptions); + res.clearCookie('refreshToken', refreshTokenCookieOptions); + + res.status(HttpStatus.NO_CONTENT).send(); + } } From 5b638cefa521cfa7daa550ad29dba9fc3d165da4 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 20:21:07 +0900 Subject: [PATCH 12/67] =?UTF-8?q?docs:=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=20api=20swagger=20=EB=AC=B8=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-user.controller.ts | 1 + .../auth-user/presentation/auth-user.docs.ts | 20 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/auth/auth-user/presentation/auth-user.controller.ts b/src/auth/auth-user/presentation/auth-user.controller.ts index 71e273d..fa12ade 100644 --- a/src/auth/auth-user/presentation/auth-user.controller.ts +++ b/src/auth/auth-user/presentation/auth-user.controller.ts @@ -84,6 +84,7 @@ export class AuthUserController { @Post('withdraw') @UseGuards(AuthGuard('jwt-access')) + @AuthUserDocs('withdraw') async withdraw(@User() user: UserPayload, @Res() res: Response) { await this.unlinkOAuthUseCase.execute({ userId: user.userId, oAuthProviderType: OAuthProviderType.KAKAO }); diff --git a/src/auth/auth-user/presentation/auth-user.docs.ts b/src/auth/auth-user/presentation/auth-user.docs.ts index e5f80b0..184f833 100644 --- a/src/auth/auth-user/presentation/auth-user.docs.ts +++ b/src/auth/auth-user/presentation/auth-user.docs.ts @@ -3,13 +3,14 @@ import { ApiCreatedResponse, ApiFoundResponse, ApiInternalServerErrorResponse, + ApiNoContentResponse, ApiOkResponse, ApiOperation, ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { createDocs } from 'src/shared/core/presentation/base.docs'; -export type AuthUserEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout'; +export type AuthUserEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout' | 'withdraw'; export const AuthUserDocs = createDocs({ oauthAuthorization: () => @@ -70,4 +71,21 @@ export const AuthUserDocs = createDocs({ description: '유저 인증 정보가 존재하지 않음', }), ), + + withdraw: () => + applyDecorators( + ApiOperation({ + summary: '회원탈퇴', + description: '사용자 정보 및 인증 정보 삭제 및 토큰 무효화', + }), + ApiNoContentResponse({ + description: '회원탈퇴 성공', + }), + ApiUnauthorizedResponse({ + description: '유효하지 않은 토큰', + }), + ApiInternalServerErrorResponse({ + description: '유저 인증 정보가 존재하지 않음', + }), + ), }); From 7afb996dcaf415896a06a5fa34af43249a18aa69 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 3 Nov 2025 21:49:21 +0900 Subject: [PATCH 13/67] =?UTF-8?q?chore:=20auth=20organization=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/exception/custom-exception-code.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/shared/exception/custom-exception-code.ts b/src/shared/exception/custom-exception-code.ts index 033598b..9c6c4bb 100644 --- a/src/shared/exception/custom-exception-code.ts +++ b/src/shared/exception/custom-exception-code.ts @@ -29,6 +29,9 @@ export enum CustomExceptionCode { AUTH_INVALID_REFRESH_TOKEN = 'AUTH_INVALID_REFRESH_TOKEN', AUTH_INVALID_ACCESS_TOKEN = 'AUTH_INVALID_ACCESS_TOKEN', + // Auth User + AUTH_USER_NOT_FOUND = 'AUTH_USER_NOT_FOUND', + // Media MEDIA_PATH_EMPTY = 'MEDIA_PATH_EMPTY', MEDIA_INVALID_PATH = 'MEDIA_INVALID_PATH', @@ -154,6 +157,12 @@ export const ExceptionInfo: Record Date: Sat, 1 Nov 2025 21:38:39 +0900 Subject: [PATCH 14/67] =?UTF-8?q?feat:=20organization=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 2 ++ .../command/organization.command.module.ts | 21 +++++++++++++++++++ src/organization/organization.module.ts | 8 +++++++ .../query/organization.query.module.ts | 8 +++++++ 4 files changed, 39 insertions(+) create mode 100644 src/organization/command/organization.command.module.ts create mode 100644 src/organization/organization.module.ts create mode 100644 src/organization/query/organization.query.module.ts diff --git a/src/app.module.ts b/src/app.module.ts index cee699e..c48edf1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -13,6 +13,7 @@ import { ScrapModule } from './scrap/scrap.module'; import mikroOrmConfig from './shared/config/mikro-orm.config'; import config from 'src/shared/config/configuration'; import { AnalyticsModule } from './analytics/analytics.module'; +import { OrganizationModule } from './organization/organization.module'; @Module({ imports: [ @@ -29,6 +30,7 @@ import { AnalyticsModule } from './analytics/analytics.module'; TagModule, MediaModule, ScrapModule, + OrganizationModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/organization/command/organization.command.module.ts b/src/organization/command/organization.command.module.ts new file mode 100644 index 0000000..d2978dc --- /dev/null +++ b/src/organization/command/organization.command.module.ts @@ -0,0 +1,21 @@ +import { Module } from '@nestjs/common'; +import { ORGANIZATION_COMMAND_REPOSITORY } from './domain/organization.command.repository'; +import { OrganizationCommandRepositoryImpl } from './infrastructure/organization.command.repository.impl'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { OrganizationEntity } from './infrastructure/organization.entity'; +import { CreateOrganizationUseCase } from './application/create-organization/create-organization.use-case'; + +const usecases = [CreateOrganizationUseCase]; + +@Module({ + imports: [MikroOrmModule.forFeature([OrganizationEntity])], + providers: [ + { + provide: ORGANIZATION_COMMAND_REPOSITORY, + useClass: OrganizationCommandRepositoryImpl, + }, + ...usecases, + ], + controllers: [], +}) +export class OrganizationCommandModule {} diff --git a/src/organization/organization.module.ts b/src/organization/organization.module.ts new file mode 100644 index 0000000..04d8031 --- /dev/null +++ b/src/organization/organization.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { OrganizationCommandModule } from './command/organization.command.module'; +import { OrganizationQueryModule } from './query/organization.query.module'; + +@Module({ + imports: [OrganizationCommandModule, OrganizationQueryModule], +}) +export class OrganizationModule {} diff --git a/src/organization/query/organization.query.module.ts b/src/organization/query/organization.query.module.ts new file mode 100644 index 0000000..00774ec --- /dev/null +++ b/src/organization/query/organization.query.module.ts @@ -0,0 +1,8 @@ +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { Module } from '@nestjs/common'; +import { OrganizationViewEntity } from './infrastructure/organization.view.entity'; + +@Module({ + imports: [MikroOrmModule.forFeature([OrganizationViewEntity])], +}) +export class OrganizationQueryModule {} From eb31f3d7fc3da9250ab92beb1a173d650cd94898 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sat, 1 Nov 2025 21:55:24 +0900 Subject: [PATCH 15/67] =?UTF-8?q?chore:=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + yarn.lock | 2690 +++++++++++++++++++++++++------------------------- 2 files changed, 1365 insertions(+), 1327 deletions(-) diff --git a/package.json b/package.json index 5acad97..a012614 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@sapphire/snowflake": "^3.5.5", "@types/passport-jwt": "^4.0.1", "axios": "^1.11.0", + "bcrypt": "^6.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.2", "cookie-parser": "^1.4.7", @@ -60,6 +61,7 @@ "@nestjs/testing": "^11.0.1", "@swc/cli": "^0.7.7", "@swc/core": "^1.10.7", + "@types/bcrypt": "^6.0.0", "@types/cookie-parser": "^1.4.8", "@types/express": "^5.0.0", "@types/jest": "^29.5.14", diff --git a/yarn.lock b/yarn.lock index b79170a..03cdaf0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,20 +7,20 @@ resolved "https://registry.yarnpkg.com/@amplitude/analytics-connector/-/analytics-connector-1.6.4.tgz#8a811ff5c8ee46bdfea0e8f61c7578769b5778ed" integrity sha512-SpIv0IQMNIq6SH3UqFGiaZyGSc7PBZwRdq7lvP0pBxW8i4Ny+8zwI0pV+VMfMHQwWY3wdIbWw5WQphNjpdq1/Q== -"@amplitude/analytics-core@^2.26.2": - version "2.26.2" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.26.2.tgz#e156e7815760d3a214d9ec7fa87b79f717533049" - integrity sha512-XIOzNiUCxzJwKuoK+N8rVjl0OlrfTszM+C9GyFxOYwn1zgZZEYCq0AqX1OIpy+vl+Bx3mLKZbRzxTl3eX46hLQ== +"@amplitude/analytics-core@^2.31.0": + version "2.31.0" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.31.0.tgz#7d9bd231821641b03585890ab50386cce6e443d3" + integrity sha512-2ErmoKhnHfNGKLz6nbNL5KCn++8i7WVoy6k0jZu7JOlgW/Xsag9I2i/3M//iQMQqDo1/8rFolVI9X+chkmkK/Q== dependencies: "@amplitude/analytics-connector" "^1.6.4" tslib "^2.4.1" "@amplitude/analytics-node@^1.5.14": - version "1.5.14" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-node/-/analytics-node-1.5.14.tgz#67a444030fa29831407b3b149a311f6d98f42264" - integrity sha512-vNby1oxqOuFYvvxWTJJ+DH4byhuzwJO+qerZQrM/D/ZgDWK11TFu8FxuxMK39BHaYpaEo5vpdSGV/5gXRaDeNQ== + version "1.5.21" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-node/-/analytics-node-1.5.21.tgz#3395159593e5f9764d0a0c734d14ee9c5ae00b78" + integrity sha512-fUDLsOcIlbpACDxjQgeEPPgW/dpb53sNFfJjYKV21mufR/LvSrv0XA04ZVS56amSyNtT1hNa7enaFYsNhiOCGg== dependencies: - "@amplitude/analytics-core" "^2.26.2" + "@amplitude/analytics-core" "^2.31.0" tslib "^2.4.1" "@angular-devkit/core@19.2.15": @@ -35,6 +35,18 @@ rxjs "7.8.1" source-map "0.7.4" +"@angular-devkit/core@19.2.17": + version "19.2.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.2.17.tgz#014107a94240dd3ecf38edfcf23113ad55b9752b" + integrity sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ== + dependencies: + ajv "8.17.1" + ajv-formats "3.0.1" + jsonc-parser "3.3.1" + picomatch "4.0.2" + rxjs "7.8.1" + source-map "0.7.4" + "@angular-devkit/schematics-cli@19.2.15": version "19.2.15" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-19.2.15.tgz#e68a5a1c968ee975168812df8067129d90d11a32" @@ -58,6 +70,17 @@ ora "5.4.1" rxjs "7.8.1" +"@angular-devkit/schematics@19.2.17": + version "19.2.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.2.17.tgz#253c0c6f4d5400c3bf038d73ed114af5516b72ef" + integrity sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg== + dependencies: + "@angular-devkit/core" "19.2.17" + jsonc-parser "3.3.1" + magic-string "0.30.17" + ora "5.4.1" + rxjs "7.8.1" + "@aws-crypto/crc32@5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" @@ -127,530 +150,528 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.820.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.888.0.tgz#6a030cc4cc98974062862bd6d490e1b72478057c" - integrity sha512-MgYyF/qpvCMYVSiOpRJ5C/EtdFxuYAeF5SprtMsbf71xBiiCH5GurB616i+ZxJqHlfhBQTTvR0qugnWvk1Wqvw== + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.922.0.tgz#5752a59ad5cf4e370ede00774f1e09e9c0af6235" + integrity sha512-SZRaZUUAHCWfEyBf4SRSPd29ko4uFoJpfd0E/w1meE68XhFB52FTtz/71UqYcwqZmN+s7oUNFFZT+DE/dnQSEA== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/credential-provider-node" "3.888.0" - "@aws-sdk/middleware-bucket-endpoint" "3.887.0" - "@aws-sdk/middleware-expect-continue" "3.887.0" - "@aws-sdk/middleware-flexible-checksums" "3.888.0" - "@aws-sdk/middleware-host-header" "3.887.0" - "@aws-sdk/middleware-location-constraint" "3.887.0" - "@aws-sdk/middleware-logger" "3.887.0" - "@aws-sdk/middleware-recursion-detection" "3.887.0" - "@aws-sdk/middleware-sdk-s3" "3.888.0" - "@aws-sdk/middleware-ssec" "3.887.0" - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/region-config-resolver" "3.887.0" - "@aws-sdk/signature-v4-multi-region" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@aws-sdk/util-user-agent-browser" "3.887.0" - "@aws-sdk/util-user-agent-node" "3.888.0" - "@aws-sdk/xml-builder" "3.887.0" - "@smithy/config-resolver" "^4.2.1" - "@smithy/core" "^3.11.0" - "@smithy/eventstream-serde-browser" "^4.1.1" - "@smithy/eventstream-serde-config-resolver" "^4.2.1" - "@smithy/eventstream-serde-node" "^4.1.1" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-blob-browser" "^4.1.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/hash-stream-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/md5-js" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-retry" "^4.2.1" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.1" - "@smithy/util-defaults-mode-node" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" - "@smithy/util-waiter" "^4.1.1" - "@types/uuid" "^9.0.1" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/credential-provider-node" "3.922.0" + "@aws-sdk/middleware-bucket-endpoint" "3.922.0" + "@aws-sdk/middleware-expect-continue" "3.922.0" + "@aws-sdk/middleware-flexible-checksums" "3.922.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-location-constraint" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-sdk-s3" "3.922.0" + "@aws-sdk/middleware-ssec" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/region-config-resolver" "3.922.0" + "@aws-sdk/signature-v4-multi-region" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.922.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/core" "^3.17.2" + "@smithy/eventstream-serde-browser" "^4.2.4" + "@smithy/eventstream-serde-config-resolver" "^4.3.4" + "@smithy/eventstream-serde-node" "^4.2.4" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-blob-browser" "^4.2.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/hash-stream-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/md5-js" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.7" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" + "@smithy/util-waiter" "^4.2.4" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@aws-sdk/client-sso@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.888.0.tgz#ab161ff13de9bf43b641df9d04172150761f8418" - integrity sha512-8CLy/ehGKUmekjH+VtZJ4w40PqDg3u0K7uPziq/4P8Q7LLgsy8YQoHNbuY4am7JU3HWrqLXJI9aaz1+vPGPoWA== +"@aws-sdk/client-sso@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.922.0.tgz#5f19518fdf496e0d3cc55e98755132b7cc25d5d9" + integrity sha512-jdHs7uy7cSpiMvrxhYmqHyJxgK7hyqw4plG8OQ4YTBpq0SbfAxdoOuOkwJ1IVUUQho4otR1xYYjiX/8e8J8qwQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/middleware-host-header" "3.887.0" - "@aws-sdk/middleware-logger" "3.887.0" - "@aws-sdk/middleware-recursion-detection" "3.887.0" - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/region-config-resolver" "3.887.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@aws-sdk/util-user-agent-browser" "3.887.0" - "@aws-sdk/util-user-agent-node" "3.888.0" - "@smithy/config-resolver" "^4.2.1" - "@smithy/core" "^3.11.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-retry" "^4.2.1" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.1" - "@smithy/util-defaults-mode-node" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/region-config-resolver" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.922.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.7" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/core@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.888.0.tgz#d0b9115d5b79b515a0435ff59ad721195bcb55a8" - integrity sha512-L3S2FZywACo4lmWv37Y4TbefuPJ1fXWyWwIJ3J4wkPYFJ47mmtUPqThlVrSbdTHkEjnZgJe5cRfxk0qCLsFh1w== - dependencies: - "@aws-sdk/types" "3.887.0" - "@aws-sdk/xml-builder" "3.887.0" - "@smithy/core" "^3.11.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/property-provider" "^4.0.5" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.1.3" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" - fast-xml-parser "5.2.5" +"@aws-sdk/core@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.922.0.tgz#6df3b04145202567a15e2b83cc83ef15590c828a" + integrity sha512-EvfP4cqJfpO3L2v5vkIlTkMesPtRwWlMfsaW6Tpfm7iYfBOuTi6jx60pMDMTyJNVfh6cGmXwh/kj1jQdR+w99Q== + dependencies: + "@aws-sdk/types" "3.922.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.888.0.tgz#20bd28d5ea79d5254829700d9230e0d1a360fdbd" - integrity sha512-shPi4AhUKbIk7LugJWvNpeZA8va7e5bOHAEKo89S0Ac8WDZt2OaNzbh/b9l0iSL2eEyte8UgIsYGcFxOwIF1VA== +"@aws-sdk/credential-provider-env@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.922.0.tgz#c0f7a0ae77c4f9d1c6494aec4a149bbc74cc8578" + integrity sha512-WikGQpKkROJSK3D3E7odPjZ8tU7WJp5/TgGdRuZw3izsHUeH48xMv6IznafpRTmvHcjAbDQj4U3CJZNAzOK/OQ== dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/types" "^4.5.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.888.0.tgz#e32ff8223dbe090bcf004bcc58ec1b676043ccac" - integrity sha512-Jvuk6nul0lE7o5qlQutcqlySBHLXOyoPtiwE6zyKbGc7RVl0//h39Lab7zMeY2drMn8xAnIopL4606Fd8JI/Hw== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/property-provider" "^4.0.5" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-stream" "^4.3.1" +"@aws-sdk/credential-provider-http@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.922.0.tgz#d957bf8f2c0fb07a27eaee561e5bc94d6f86cb73" + integrity sha512-i72DgHMK7ydAEqdzU0Duqh60Q8W59EZmRJ73y0Y5oFmNOqnYsAI+UXyOoCsubp+Dkr6+yOwAn1gPt1XGE9Aowg== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-stream" "^4.5.5" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.888.0.tgz#4a97261b8593c3c8c8e5bac974ba0e5e0a40d89f" - integrity sha512-M82ItvS5yq+tO6ZOV1ruaVs2xOne+v8HW85GFCXnz8pecrzYdgxh6IsVqEbbWruryG/mUGkWMbkBZoEsy4MgyA== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/credential-provider-env" "3.888.0" - "@aws-sdk/credential-provider-http" "3.888.0" - "@aws-sdk/credential-provider-process" "3.888.0" - "@aws-sdk/credential-provider-sso" "3.888.0" - "@aws-sdk/credential-provider-web-identity" "3.888.0" - "@aws-sdk/nested-clients" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/credential-provider-imds" "^4.0.7" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-ini@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.922.0.tgz#67348aa54e0548e7bcaea2a54eac6af18e84f0d7" + integrity sha512-bVF+pI5UCLNkvbiZr/t2fgTtv84s8FCdOGAPxQiQcw5qOZywNuuCCY3wIIchmQr6GJr8YFkEp5LgDCac5EC5aQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/credential-provider-env" "3.922.0" + "@aws-sdk/credential-provider-http" "3.922.0" + "@aws-sdk/credential-provider-process" "3.922.0" + "@aws-sdk/credential-provider-sso" "3.922.0" + "@aws-sdk/credential-provider-web-identity" "3.922.0" + "@aws-sdk/nested-clients" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.888.0.tgz#48f769d52d999088d4437dc1bc76af55afecad9b" - integrity sha512-KCrQh1dCDC8Y+Ap3SZa6S81kHk+p+yAaOQ5jC3dak4zhHW3RCrsGR/jYdemTOgbEGcA6ye51UbhWfrrlMmeJSA== - dependencies: - "@aws-sdk/credential-provider-env" "3.888.0" - "@aws-sdk/credential-provider-http" "3.888.0" - "@aws-sdk/credential-provider-ini" "3.888.0" - "@aws-sdk/credential-provider-process" "3.888.0" - "@aws-sdk/credential-provider-sso" "3.888.0" - "@aws-sdk/credential-provider-web-identity" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/credential-provider-imds" "^4.0.7" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-node@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.922.0.tgz#279eb69f1b932556a8b94d52af13375baeaac4a2" + integrity sha512-agCwaD6mBihToHkjycL8ObIS2XOnWypWZZWhJSoWyHwFrhEKz1zGvgylK9Dc711oUfU+zU6J8e0JPKNJMNb3BQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.922.0" + "@aws-sdk/credential-provider-http" "3.922.0" + "@aws-sdk/credential-provider-ini" "3.922.0" + "@aws-sdk/credential-provider-process" "3.922.0" + "@aws-sdk/credential-provider-sso" "3.922.0" + "@aws-sdk/credential-provider-web-identity" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.888.0.tgz#34842315e44b4882c63eb92fa2151c2efaf5401f" - integrity sha512-+aX6piSukPQ8DUS4JAH344GePg8/+Q1t0+kvSHAZHhYvtQ/1Zek3ySOJWH2TuzTPCafY4nmWLcQcqvU1w9+4Lw== +"@aws-sdk/credential-provider-process@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.922.0.tgz#23f5b0923d9a9bb89dac3fa9aeb27c9eebf1a19c" + integrity sha512-1DZOYezT6okslpvMW7oA2q+y17CJd4fxjNFH0jtThfswdh9CtG62+wxenqO+NExttq0UMaKisrkZiVrYQBTShw== dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.888.0.tgz#85956b3bcebbcb1aee096d07b4365e524dc1b985" - integrity sha512-b1ZJji7LJ6E/j1PhFTyvp51in2iCOQ3VP6mj5H6f5OUnqn7efm41iNMoinKr87n0IKZw7qput5ggXVxEdPhouA== - dependencies: - "@aws-sdk/client-sso" "3.888.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/token-providers" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-sso@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.922.0.tgz#64a2e8f44e4aa8fdacbaa6c536495971109926d2" + integrity sha512-nbD3G3hShTYxLCkKMqLkLPtKwAAfxdY/k9jHtZmVBFXek2T6tQrqZHKxlAu+fd23Ga4/Aik7DLQQx1RA1a5ipg== + dependencies: + "@aws-sdk/client-sso" "3.922.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/token-providers" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.888.0.tgz#03de49dca86649ae2061247ee4d2831642a4767f" - integrity sha512-7P0QNtsDzMZdmBAaY/vY1BsZHwTGvEz3bsn2bm5VSKFAeMmZqsHK1QeYdNsFjLtegnVh+wodxMq50jqLv3LFlA== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/nested-clients" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-web-identity@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.922.0.tgz#d7757693c8f7cec62a0c34b90fea45be4023cf23" + integrity sha512-wjGIhgMHGGQfQTdFaJphNOKyAL8wZs6znJdHADPVURmgR+EWLyN/0fDO1u7wx8xaLMZpbHIFWBEvf9TritR/cQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/nested-clients" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.887.0.tgz#a89331e130effd1ee35dec309b8163fb4a9d4920" - integrity sha512-qRCte/3MtNiMhPh4ZEGk9cHfAXq6IDTflvi2t1tkOIVZFyshkSCvNQNJrrE2D/ljVbOK1f3XbBDaF43EoQzIRQ== - dependencies: - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-arn-parser" "3.873.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.0.0" +"@aws-sdk/middleware-bucket-endpoint@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.922.0.tgz#417efd18e8af948e694c5be751bde6d631138b3d" + integrity sha512-Dpr2YeOaLFqt3q1hocwBesynE3x8/dXZqXZRuzSX/9/VQcwYBFChHAm4mTAl4zuvArtDbLrwzWSxmOWYZGtq5w== + dependencies: + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-arn-parser" "3.893.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.887.0.tgz#cc52bc31752875a8d3dfa84a5705e2b563ffc39f" - integrity sha512-AlrTZZScDTG9SYeT82BC5cK/6Q4N0miN5xqMW/pbBqP3fNXlsdJOWKB+EKD3V6DV41EV5GVKHKe/1065xKSQ4w== +"@aws-sdk/middleware-expect-continue@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.922.0.tgz#02f0b0402fcb8974765b3e7d20f43753bd05738c" + integrity sha512-xmnLWMtmHJHJBupSWMUEW1gyxuRIeQ1Ov2xa8Tqq77fPr4Ft2AluEwiDMaZIMHoAvpxWKEEt9Si59Li7GIA+bQ== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.888.0.tgz#b66da7fe00fe980a9274bc36bd56190a218a4314" - integrity sha512-vdwd4wMAlXSg1bldhXyTsDSnyPP+bbEVihapejGKNd4gLfyyHwjTfbli+B/hEONGttQs5Dp54UMn8yW/UA189g== +"@aws-sdk/middleware-flexible-checksums@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.922.0.tgz#41abb38c5baa8626a843aa57cfcb904a4d71427a" + integrity sha512-G363np7YcJhf+gBucskdv8cOTbs2TRwocEzRupuqDIooGDlLBlfJrvwehdgtWR8l53yjJR3zcHvGrVPTe2h8Nw== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/is-array-buffer" "^4.0.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.887.0.tgz#765305b5a2c412e6bf53eb6d557f2ab831ff50a7" - integrity sha512-ulzqXv6NNqdu/kr0sgBYupWmahISHY+azpJidtK6ZwQIC+vBUk9NdZeqQpy7KVhIk2xd4+5Oq9rxapPwPI21CA== +"@aws-sdk/middleware-host-header@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.922.0.tgz#f19621fd19764f7eb0a33795ce0f43402080e394" + integrity sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.887.0.tgz#fdf76f587c04cc8d755f05e41d4df65a78b34127" - integrity sha512-eU/9Cq4gg2sS32bOomxdx2YF43kb+o70pMhnEBBnVVeqzE8co78SO5FQdWfRTfhNJgTyQ6Vgosx//CNMPIfZPg== +"@aws-sdk/middleware-location-constraint@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.922.0.tgz#c455d40e3ab49014a1193fbcb2bf29885d345b7c" + integrity sha512-T4iqd7WQ2DDjCH/0s50mnhdoX+IJns83ZE+3zj9IDlpU0N2aq8R91IG890qTfYkUEdP9yRm0xir/CNed+v6Dew== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.887.0.tgz#fec1c731d158306425897b371cfabdf188d07f12" - integrity sha512-YbbgLI6jKp2qSoAcHnXrQ5jcuc5EYAmGLVFgMVdk8dfCfJLfGGSaOLxF4CXC7QYhO50s+mPPkhBYejCik02Kug== +"@aws-sdk/middleware-logger@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.922.0.tgz#3a43e2b7ec72b043751a7fd45f0514db77756be9" + integrity sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.887.0.tgz#4fdb1039042565a4ba0ff506584a99f3c7c3fd23" - integrity sha512-tjrUXFtQnFLo+qwMveq5faxP5MQakoLArXtqieHphSqZTXm21wDJM73hgT4/PQQGTwgYjDKqnqsE1hvk0hcfDw== +"@aws-sdk/middleware-recursion-detection@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.922.0.tgz#cca89bd926ad05893f9b99b253fa50a6b6c7b829" + integrity sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA== dependencies: - "@aws-sdk/types" "3.887.0" - "@aws/lambda-invoke-store" "^0.0.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@aws/lambda-invoke-store" "^0.1.1" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.888.0.tgz#9e561338d9d036a5bf8252b578222b351b635ea1" - integrity sha512-rKOFNfqgqOfrdcLGF8fcO75azWS2aq2ksRHFoIEFru5FJxzu/yDAhY4C2FKiP/X34xeIUS2SbE/gQgrgWHSN2g== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-arn-parser" "3.873.0" - "@smithy/core" "^3.11.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.1.3" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" +"@aws-sdk/middleware-sdk-s3@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.922.0.tgz#11875f1b848070413815ca34f1b8e93a36fa351a" + integrity sha512-ygg8lME1oFAbsH42ed2wtGqfHLoT5irgx6VC4X98j79fV1qXEwwwbqMsAiMQ/HJehpjqAFRVsHox3MHLN48Z5A== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-arn-parser" "3.893.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.887.0.tgz#861a3bdb2e0565d492a0869651a348ff36ac5faf" - integrity sha512-1ixZks0IDkdac1hjPe4vdLSuD9HznkhblCEb4T0wNyw3Ee1fdXg+MlcPWywzG5zkPXLcIrULUzJg/OSYfaDXcQ== +"@aws-sdk/middleware-ssec@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.922.0.tgz#1c56b2619cdd604e97203148030f299980494008" + integrity sha512-eHvSJZTSRJO+/tjjGD6ocnPc8q9o3m26+qbwQTu/4V6yOJQ1q+xkDZNqwJQphL+CodYaQ7uljp8g1Ji/AN3D9w== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.888.0.tgz#8b7f8ed11120fd1b931b09de12f7846f72bfe538" - integrity sha512-ZkcUkoys8AdrNNG7ATjqw2WiXqrhTvT+r4CIK3KhOqIGPHX0p0DQWzqjaIl7ZhSUToKoZ4Ud7MjF795yUr73oA== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@smithy/core" "^3.11.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" +"@aws-sdk/middleware-user-agent@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.922.0.tgz#b1e109ce3a0c30d44360bf0f707013a3a36d3f78" + integrity sha512-N4Qx/9KP3oVQBJOrSghhz8iZFtUC2NNeSZt88hpPhbqAEAtuX8aD8OzVcpnAtrwWqy82Yd2YTxlkqMGkgqnBsQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@smithy/core" "^3.17.2" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.888.0.tgz#5c3ea2517bf05caf4bd699e731f97bf5e565f397" - integrity sha512-py4o4RPSGt+uwGvSBzR6S6cCBjS4oTX5F8hrHFHfPCdIOMVjyOBejn820jXkCrcdpSj3Qg1yUZXxsByvxc9Lyg== +"@aws-sdk/nested-clients@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.922.0.tgz#1b66f1505fb0d6442e67239c5596159ba871cfff" + integrity sha512-uYvKCF1TGh/MuJ4TMqmUM0Csuao02HawcseG4LUDyxdUsd/EFuxalWq1Cx4fKZQ2K8F504efZBjctMAMNY+l7A== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.888.0" - "@aws-sdk/middleware-host-header" "3.887.0" - "@aws-sdk/middleware-logger" "3.887.0" - "@aws-sdk/middleware-recursion-detection" "3.887.0" - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/region-config-resolver" "3.887.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-endpoints" "3.887.0" - "@aws-sdk/util-user-agent-browser" "3.887.0" - "@aws-sdk/util-user-agent-node" "3.888.0" - "@smithy/config-resolver" "^4.2.1" - "@smithy/core" "^3.11.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-retry" "^4.2.1" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.1" - "@smithy/util-defaults-mode-node" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.922.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/region-config-resolver" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.922.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.7" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.887.0.tgz#5e89768b44cd5e5c624852ade958579144ac2eb5" - integrity sha512-VdSMrIqJ3yjJb/fY+YAxrH/lCVv0iL8uA+lbMNfQGtO5tB3Zx6SU9LEpUwBNX8fPK1tUpI65CNE4w42+MY/7Mg== +"@aws-sdk/region-config-resolver@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.922.0.tgz#55bf45c6d4d344b8393528c7e33576f923bb1b1d" + integrity sha512-44Y/rNNwhngR2KHp6gkx//TOr56/hx6s4l+XLjOqH7EBCHL7XhnrT1y92L+DLiroVr1tCSmO8eHQwBv0Y2+mvw== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.1.1" + "@aws-sdk/types" "3.922.0" + "@smithy/config-resolver" "^4.4.1" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@aws-sdk/s3-request-presigner@^3.820.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.888.0.tgz#2c629e1bfe1547490873ca71dc38c17fd806a776" - integrity sha512-3VAF0tJxW0p/ttUzJEgrMe52zZVoEG9dcJGdp4N0RG+LD41lp7QuQEYAZ/LGn7mwJsT0q18+tEJ5XzKmJFrOiA== - dependencies: - "@aws-sdk/signature-v4-multi-region" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@aws-sdk/util-format-url" "3.887.0" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.922.0.tgz#f71ad9565d2f1e790ed258c192e3844430ce484c" + integrity sha512-x/WZXOMAN10X/hbjHnaXjtU34RmV3/eJMiHoJsohquSgz8+pfRN1DeK65oa/XPoKCMPfV31RfHSzCduligHfsQ== + dependencies: + "@aws-sdk/signature-v4-multi-region" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-format-url" "3.922.0" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.888.0.tgz#27336bd763746daa3513a8a72436754a370fccce" - integrity sha512-FmOHUaJzEhqfcpyh0L7HLwYcYopK13Dbmuf+oUyu56/RoeB1nLnltH1VMQVj8v3Am2IwlGR+/JpFyrdkErN+cA== +"@aws-sdk/signature-v4-multi-region@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.922.0.tgz#37e30499d805ac0cffbd14b448f7d2a58bbea132" + integrity sha512-mmsgEEL5pE+A7gFYiJMDBCLVciaXq4EFI5iAP7bPpnHvOplnNOYxVy2IreKMllGvrfjVyLnwxzZYlo5zZ65FWg== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.1.3" - "@smithy/types" "^4.5.0" + "@aws-sdk/middleware-sdk-s3" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/token-providers@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.888.0.tgz#db79f49c8999c93abab321fbab4e2e6920738b93" - integrity sha512-WA3NF+3W8GEuCMG1WvkDYbB4z10G3O8xuhT7QSjhvLYWQ9CPt3w4VpVIfdqmUn131TCIbhCzD0KN/1VJTjAjyw== - dependencies: - "@aws-sdk/core" "3.888.0" - "@aws-sdk/nested-clients" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/property-provider" "^4.0.5" - "@smithy/shared-ini-file-loader" "^4.0.5" - "@smithy/types" "^4.5.0" +"@aws-sdk/token-providers@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.922.0.tgz#0ae050e9b713b942397fa290ce269df91013c8cc" + integrity sha512-/inmPnjZE0ZBE16zaCowAvouSx05FJ7p6BQYuzlJ8vxEU0sS0Hf8fvhuiRnN9V9eDUPIBY+/5EjbMWygXL4wlQ== + dependencies: + "@aws-sdk/core" "3.922.0" + "@aws-sdk/nested-clients" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/types@3.887.0", "@aws-sdk/types@^3.222.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.887.0.tgz#989f3b67d7ddb97443e4bdb80ad2313c604b240d" - integrity sha512-fmTEJpUhsPsovQ12vZSpVTEP/IaRoJAMBGQXlQNjtCpkBp6Iq3KQDa/HDaPINE+3xxo6XvTdtibsNOd5zJLV9A== +"@aws-sdk/types@3.922.0", "@aws-sdk/types@^3.222.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.922.0.tgz#e92daf55272171caac8dba9d425786646466d935" + integrity sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/util-arn-parser@3.873.0": - version "3.873.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.873.0.tgz#12c5ea852574dfb6fe78eaac1666433dff1acffa" - integrity sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg== +"@aws-sdk/util-arn-parser@3.893.0": + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz#fcc9b792744b9da597662891c2422dda83881d8d" + integrity sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA== dependencies: tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.887.0.tgz#e4f2dfb608360b6d8b4e3793492d4625dba00275" - integrity sha512-kpegvT53KT33BMeIcGLPA65CQVxLUL/C3gTz9AzlU/SDmeusBHX4nRApAicNzI/ltQ5lxZXbQn18UczzBuwF1w== +"@aws-sdk/util-endpoints@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.922.0.tgz#817457d6a78ce366bdb7b201c638dba5ffdbfe60" + integrity sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-endpoints" "^3.1.1" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-endpoints" "^3.2.4" tslib "^2.6.2" -"@aws-sdk/util-format-url@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.887.0.tgz#53008142379c4a2c813ee1a68ee086a2507874d9" - integrity sha512-ABDSP6KsrdD+JC7qwMqUpLXqPidvfgT+Q+W8sGGuk/IBy7smgZDOdYSZLE4VBbQpH3N/zSJuslAWhL2x37Qwww== +"@aws-sdk/util-format-url@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.922.0.tgz#a1b91b180d75a73dd8eedee0913a60153673392e" + integrity sha512-UYLWPvZEd6TYilNkrQrIeXh2bXZsY3ighYErSEjD24f3JQhg0XdXoR/QHIE8licHu2qFrTRM6yi9LH1GY6X0cg== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/querystring-builder" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.873.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.873.0.tgz#cc10edef3b7aecf365943ec657116d6eb470d9cb" - integrity sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg== + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz#5df15f24e1edbe12ff1fe8906f823b51cd53bae8" + integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg== dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.887.0.tgz#1c5ccc82a0b31a4b159ad98cb12abda1e6c422c8" - integrity sha512-X71UmVsYc6ZTH4KU6hA5urOzYowSXc3qvroagJNLJYU1ilgZ529lP4J9XOYfEvTXkLR1hPFSRxa43SrwgelMjA== +"@aws-sdk/util-user-agent-browser@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.922.0.tgz#734bbe74d34c3fbdb96aca80a151d3d7e7e87c30" + integrity sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA== dependencies: - "@aws-sdk/types" "3.887.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.888.0": - version "3.888.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.888.0.tgz#45c871429c7742cf73f570fbc39ef17f4d12e8de" - integrity sha512-rSB3OHyuKXotIGfYEo//9sU0lXAUrTY28SUUnxzOGYuQsAt0XR5iYwBAp+RjV6x8f+Hmtbg0PdCsy1iNAXa0UQ== +"@aws-sdk/util-user-agent-node@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.922.0.tgz#52dd951b314a3e7097d181664a3f79a1e56921ce" + integrity sha512-NrPe/Rsr5kcGunkog0eBV+bY0inkRELsD2SacC4lQZvZiXf8VJ2Y7j+Yq1tB+h+FPLsdt3v9wItIvDf/laAm0Q== dependencies: - "@aws-sdk/middleware-user-agent" "3.888.0" - "@aws-sdk/types" "3.887.0" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/middleware-user-agent" "3.922.0" + "@aws-sdk/types" "3.922.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/xml-builder@3.887.0": - version "3.887.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.887.0.tgz#376754d19384bbe5b8139c0a0e6521a4a6500c67" - integrity sha512-lMwgWK1kNgUhHGfBvO/5uLe7TKhycwOn3eRCqsKPT9aPCx/HWuTlpcQp8oW2pCRGLS7qzcxqpQulcD+bbUL7XQ== +"@aws-sdk/xml-builder@3.921.0": + version "3.921.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz#e4d4d21b09341648b598d720c602ee76d7a84594" + integrity sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" + fast-xml-parser "5.2.5" tslib "^2.6.2" -"@aws/lambda-invoke-store@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f" - integrity sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw== +"@aws/lambda-invoke-store@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz#2e67f17040b930bde00a79ffb484eb9e77472b06" + integrity sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.27.1": version "7.27.1" @@ -662,24 +683,24 @@ picocolors "^1.1.1" "@babel/compat-data@^7.27.2": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" - integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" - integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.28.3" "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.4" - "@babel/types" "^7.28.4" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -687,13 +708,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.28.3", "@babel/generator@^7.7.2": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" - integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== +"@babel/generator@^7.28.5", "@babel/generator@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/parser" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -741,10 +762,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" @@ -759,12 +780,12 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" - integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -894,26 +915,26 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" - integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.3.3": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" - integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -945,23 +966,25 @@ eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" - integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== dependencies: - "@eslint/object-schema" "^2.1.6" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz#d316e47905bd0a1a931fa50e669b9af4104d1617" - integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" "@eslint/core@^0.15.2": version "0.15.2" @@ -970,6 +993,13 @@ dependencies: "@types/json-schema" "^7.0.15" +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + "@eslint/eslintrc@^3.2.0", "@eslint/eslintrc@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" @@ -985,15 +1015,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.35.0", "@eslint/js@^9.18.0": - version "9.35.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.35.0.tgz#ffbc7e13cf1204db18552e9cd9d4a8e17c692d07" - integrity sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw== +"@eslint/js@9.39.0", "@eslint/js@^9.18.0": + version "9.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.0.tgz#e1955cefd1d79e80a9557274e9aa9bd3f641be01" + integrity sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw== -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== "@eslint/plugin-kit@^0.3.5": version "0.3.5" @@ -1003,6 +1033,14 @@ "@eslint/core" "^0.15.2" levn "^0.4.1" +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + "@humanfs/core@^0.19.1": version "0.19.1" resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" @@ -1026,33 +1064,38 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@inquirer/ansi@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.1.tgz#994f7dd16a00c547a7b110e04bf4f4eca1857929" + integrity sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw== + "@inquirer/checkbox@^4.1.2", "@inquirer/checkbox@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.2.2.tgz#eabaa7eb6adbd64bb7bb7765c67c0a283ed616eb" - integrity sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g== + version "4.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.0.tgz#747ab0ec9b385dd77d3215a51fc9abe25f556a4b" + integrity sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + "@inquirer/ansi" "^1.0.1" + "@inquirer/core" "^10.3.0" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" "@inquirer/confirm@^5.1.14", "@inquirer/confirm@^5.1.6": - version "5.1.16" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.16.tgz#4f99603e5c8a1b471b819343f708c75e8abd2b88" - integrity sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag== + version "5.1.19" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.19.tgz#bf28b420898999eb7479ab55623a3fbaf1453ff4" + integrity sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" -"@inquirer/core@^10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.2.0.tgz#19ff527dbe0956891d825e320ecbc890bd6a1550" - integrity sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA== +"@inquirer/core@^10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.0.tgz#342e4fd62cbd33ea62089364274995dbec1f2ffe" + integrity sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA== dependencies: - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + "@inquirer/ansi" "^1.0.1" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" cli-width "^4.1.0" mute-stream "^2.0.0" signal-exit "^4.1.0" @@ -1060,60 +1103,60 @@ yoctocolors-cjs "^2.1.2" "@inquirer/editor@^4.2.15", "@inquirer/editor@^4.2.7": - version "4.2.18" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.18.tgz#1418aef90025046ad16306451effb6fb36db9664" - integrity sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w== + version "4.2.21" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.21.tgz#9ffe641760a1a1f7722c39be00143060537adcc7" + integrity sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/external-editor" "^1.0.1" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/external-editor" "^1.0.2" + "@inquirer/type" "^3.0.9" "@inquirer/expand@^4.0.17", "@inquirer/expand@^4.0.9": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.18.tgz#8bf1bcd1ee99b8fa02e1143ed5bf69dc576bacd7" - integrity sha512-xUjteYtavH7HwDMzq4Cn2X4Qsh5NozoDHCJTdoXg9HfZ4w3R6mxV1B9tL7DGJX2eq/zqtsFjhm0/RJIMGlh3ag== + version "4.0.21" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.21.tgz#3b22eb3d9961bdbad6edb2a956cfcadc15be9128" + integrity sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" -"@inquirer/external-editor@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.1.tgz#ab0a82c5719a963fb469021cde5cd2b74fea30f8" - integrity sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q== +"@inquirer/external-editor@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.2.tgz#dc16e7064c46c53be09918db639ff780718c071a" + integrity sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ== dependencies: chardet "^2.1.0" - iconv-lite "^0.6.3" + iconv-lite "^0.7.0" -"@inquirer/figures@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== +"@inquirer/figures@^1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.14.tgz#12a7bfd344a83ae6cc5d6004b389ed11f6db6be4" + integrity sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ== "@inquirer/input@^4.1.6", "@inquirer/input@^4.2.1": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.2.tgz#98c420a3bff94ee19124f74a641cef2b1eb01b22" - integrity sha512-hqOvBZj/MhQCpHUuD3MVq18SSoDNHy7wEnQ8mtvs71K8OPZVXJinOzcvQna33dNYLYE4LkA9BlhAhK6MJcsVbw== + version "4.2.5" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.5.tgz#40fe0a4b585c367089b57ef455da4980fbc5480f" + integrity sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" "@inquirer/number@^3.0.17", "@inquirer/number@^3.0.9": - version "3.0.18" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.18.tgz#b5595c02061498e2753fdfe35d9abae14e9223aa" - integrity sha512-7exgBm52WXZRczsydCVftozFTrrwbG5ySE0GqUd2zLNSBXyIucs2Wnm7ZKLe/aUu6NUg9dg7Q80QIHCdZJiY4A== + version "3.0.21" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.21.tgz#fb8fac4c8bd08471b1068dc89f42d61fe3a43ca9" + integrity sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" "@inquirer/password@^4.0.17", "@inquirer/password@^4.0.9": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.18.tgz#7500139016247163a6c115228fcafbb9cb448941" - integrity sha512-zXvzAGxPQTNk/SbT3carAD4Iqi6A2JS2qtcqQjsL22uvD+JfQzUrDEtPjLL7PLn8zlSNyPdY02IiQjzoL9TStA== + version "4.0.21" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.21.tgz#b3422a19621290f2270f9b2ef8eeded8cf85db4f" + integrity sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + "@inquirer/ansi" "^1.0.1" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" "@inquirer/prompts@7.3.2": version "7.3.2" @@ -1148,39 +1191,39 @@ "@inquirer/select" "^4.3.1" "@inquirer/rawlist@^4.0.9", "@inquirer/rawlist@^4.1.5": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.6.tgz#805e1c449dde2bdfd8bc7eca56e6fe40938a7dc7" - integrity sha512-KOZqa3QNr3f0pMnufzL7K+nweFFCCBs6LCXZzXDrVGTyssjLeudn5ySktZYv1XiSqobyHRYYK0c6QsOxJEhXKA== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.9.tgz#b4641cb54e130049a13bd1b7621ac766c6d531f2" + integrity sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" "@inquirer/search@^3.0.9", "@inquirer/search@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.1.1.tgz#f67a559c66043fe4fdc639c053578d34440b3c49" - integrity sha512-TkMUY+A2p2EYVY3GCTItYGvqT6LiLzHBnqsU1rJbrpXUijFfM6zvUx0R4civofVwFCmJZcKqOVwwWAjplKkhxA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.0.tgz#fef378965592e9f407cd4f1f782ca40df1b3ed5e" + integrity sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ== dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" + "@inquirer/core" "^10.3.0" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" "@inquirer/select@^4.0.9", "@inquirer/select@^4.3.1": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.3.2.tgz#7ff8942fb052c9c92110c9c044c7abb9b4ba9497" - integrity sha512-nwous24r31M+WyDEHV+qckXkepvihxhnyIaod2MG7eCE6G0Zm/HUF6jgN8GXgf4U7AU6SLseKdanY195cwvU6w== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" + version "4.4.0" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.0.tgz#e19d0d0fbfcd5cb4a20f292e62c88aa8155cc6dc" + integrity sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA== + dependencies: + "@inquirer/ansi" "^1.0.1" + "@inquirer/core" "^10.3.0" + "@inquirer/figures" "^1.0.14" + "@inquirer/type" "^3.0.9" yoctocolors-cjs "^2.1.2" -"@inquirer/type@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.8.tgz#efc293ba0ed91e90e6267f1aacc1c70d20b8b4e8" - integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== +"@inquirer/type@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.9.tgz#f7f9696e9276e4e1ae9332767afb9199992e31d9" + integrity sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w== "@isaacs/balanced-match@^4.0.1": version "4.0.1" @@ -1484,46 +1527,46 @@ integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== "@mikro-orm/cli@^6.4.12": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/cli/-/cli-6.5.2.tgz#d3cdc0b54249e714f10666e408328921fe6a9f86" - integrity sha512-gNP3AdlYmMnR2QHkxWOorU/O/+sefgzgiwtrtxZrAVhlI7KcPmcUMb4ymNHwNhnxUnyqP0vBEhcbnF4caqmLHA== + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/cli/-/cli-6.5.9.tgz#da231e76669c127f0be6e444d9470a2f9883b5c4" + integrity sha512-Jihukq7STU5ZfRdjOBSR7mzOClqkhkic7t8GF/OAoMBeHgpUc93Ug2GvSMrJaNWGg4AKtgch/cP/KGv/3QtSsQ== dependencies: "@jercle/yargonaut" "1.1.5" - "@mikro-orm/core" "6.5.2" - "@mikro-orm/knex" "6.5.2" - fs-extra "11.3.1" + "@mikro-orm/core" "6.5.9" + "@mikro-orm/knex" "6.5.9" + fs-extra "11.3.2" tsconfig-paths "4.2.0" yargs "17.7.2" -"@mikro-orm/core@6.5.2", "@mikro-orm/core@^6.4.12": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/core/-/core-6.5.2.tgz#ca40951417c544ae1f15b7187f0c50ac14e12160" - integrity sha512-iKVbgdj653a1RiBzFy6UlpdraprLowpPjabyWObtYUYvVAvvJbtKwDVeZ8xbpIgdLzX2HHurR1w6wXeC17GVSg== +"@mikro-orm/core@6.5.9", "@mikro-orm/core@^6.4.12": + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/core/-/core-6.5.9.tgz#4958c88ebc1dbb77e4a650c1f9fbfc1304ad1d00" + integrity sha512-BDfMW35pKVfSBBK0TiIpjh+IX62UwD0V22x4O6psMfiwbFoAJN/gEpEg1FuLx41dYf/ExHe9Cin6U6hwRdELaQ== dependencies: dataloader "2.2.3" - dotenv "17.2.1" + dotenv "17.2.3" esprima "4.0.1" - fs-extra "11.3.1" + fs-extra "11.3.2" globby "11.1.0" - mikro-orm "6.5.2" + mikro-orm "6.5.9" reflect-metadata "0.2.2" -"@mikro-orm/knex@6.5.2": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/knex/-/knex-6.5.2.tgz#a9cdd3acd334660df71af87ed60f6db0e6e1ab36" - integrity sha512-9CmZIZ6hs7P7JPDLaZzA539pzEHRc5GzgEru9XK0MUxqHrHiOImYiXAclVj9k6LLo5NczR4gYchQxK19+HWdoQ== +"@mikro-orm/knex@6.5.9": + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/knex/-/knex-6.5.9.tgz#1bef2f0aa4cf246c1851b9d0306b8dfc54ad6dfd" + integrity sha512-VtBPIcNYyWeQ+M+ha5DD+961gc6jtJDX0JLkBfMatTgHl78R1IuiTPaPfen4X9ezEDsR6N8XqJtuRmOXRFl6lA== dependencies: - fs-extra "11.3.1" + fs-extra "11.3.2" knex "3.1.0" sqlstring "2.3.3" "@mikro-orm/mysql@^6.4.12": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/mysql/-/mysql-6.5.2.tgz#3eb5b22b533cbb2db66e0f5ec9f8204d3cfb00bc" - integrity sha512-B4JaWXLIhLFhQJ74Fl3g8c4T+Ywy5Q/dcby/YLKUXUR2ExOsZ0vQmybsdCggwWAvdUFkMoKGkDwE9/jmgyZ5LA== + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/mysql/-/mysql-6.5.9.tgz#b7aedde0715d4f49863a07c7f1298c3759512d2a" + integrity sha512-Zoo4lRdY6jzCB/rzdN/YxYA854+RCpY++hEZz9vHG4wJs72M5rsU7sibH19lJw/JH9m7BC1xqV/geAhfC/MjVg== dependencies: - "@mikro-orm/knex" "6.5.2" - mysql2 "3.14.4" + "@mikro-orm/knex" "6.5.9" + mysql2 "3.15.3" "@mikro-orm/nestjs@^6.1.1": version "6.1.1" @@ -1531,12 +1574,12 @@ integrity sha512-aluD3eTeuCvIePDk5UBanHIhu1zAJQXqWAg47MZdHJmFkNuXn62DCXbD2c4X5TCpKW/m0zjba22ilyZ/AFG9qg== "@mikro-orm/reflection@^6.4.16": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@mikro-orm/reflection/-/reflection-6.5.2.tgz#edebfb2b8f472d24f963be2e28242e289172c716" - integrity sha512-tzKYFs5T2RKQ/zcomJIhAfGy+mScJB/+oSphPx9KrrTooAZtJgcHJddaR1TFW5oiq4je4tQ265+DDsYYOLsj7w== + version "6.5.9" + resolved "https://registry.yarnpkg.com/@mikro-orm/reflection/-/reflection-6.5.9.tgz#877cf1a48ee246b6e0c56f8a492e192a3e631983" + integrity sha512-iBkQXFzh8oAZmRAH1WrcI48fIfJMgBuIWHdyDLvrmVgkZe4QP0ninOGskV41xsKX7ywWsgsxTjYagwBROEpVSw== dependencies: globby "11.1.0" - ts-morph "26.0.0" + ts-morph "27.0.2" "@napi-rs/nice-android-arm-eabi@1.1.1": version "1.1.1" @@ -1672,14 +1715,14 @@ webpack-node-externals "3.0.0" "@nestjs/common@^11.0.1": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-11.1.6.tgz#704ae26f09ccd135bf3e6f44b6ef4e3407ea3c54" - integrity sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-11.1.8.tgz#624d01f50d2f263592a1a5407d9f180179a98b2c" + integrity sha512-bbsOqwld/GdBfiRNc4nnjyWWENDEicq4SH+R5AuYatvf++vf1x5JIsHB1i1KtfZMD3eRte0D4K9WXuAYil6XAg== dependencies: uid "2.0.2" file-type "21.0.0" iterare "1.2.1" - load-esm "1.0.2" + load-esm "1.0.3" tslib "2.8.1" "@nestjs/config@^4.0.2": @@ -1692,15 +1735,15 @@ lodash "4.17.21" "@nestjs/core@^11.0.1": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-11.1.6.tgz#9d54882f121168b2fa2b07fa1db0858161a80626" - integrity sha512-siWX7UDgErisW18VTeJA+x+/tpNZrJewjTBsRPF3JVxuWRuAB1kRoiJcxHgln8Lb5UY9NdvklITR84DUEXD0Cg== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-11.1.8.tgz#fb0d32f9d92e9396babb1e5d29a34727dbbe5285" + integrity sha512-7riWfmTmMhCJHZ5ZiaG+crj4t85IPCq/wLRuOUSigBYyFT2JZj0lVHtAdf4Davp9ouNI8GINBDt9h9b5Gz9nTw== dependencies: uid "2.0.2" "@nuxt/opencollective" "0.4.1" fast-safe-stringify "2.1.1" iterare "1.2.1" - path-to-regexp "8.2.0" + path-to-regexp "8.3.0" tslib "2.8.1" "@nestjs/cqrs@^11.0.3": @@ -1709,11 +1752,11 @@ integrity sha512-2ezBftiXqVfNTzjCrmhazohYhIQzgm8rvM0aKndv73IOOBcVlNuNiQ3HHiHdd4c2w/3MOQDtsGbQHgZUuW6DPw== "@nestjs/jwt@^11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@nestjs/jwt/-/jwt-11.0.0.tgz#aef1590e70830c70fba0f59e9b17314dc4d36822" - integrity sha512-v7YRsW3Xi8HNTsO+jeHSEEqelX37TVWgwt+BcxtkG/OfXJEOs6GZdbdza200d6KqId1pJQZ6UPj1F0M6E+mxaA== + version "11.0.1" + resolved "https://registry.yarnpkg.com/@nestjs/jwt/-/jwt-11.0.1.tgz#3109ba23932330f4001db9e41e4374f2e41342df" + integrity sha512-HXSsc7SAnCnjA98TsZqrE7trGtHDnYXWp4Ffy6LwSmck1QvbGYdMzBquXofX5l6tIRpeY4Qidl2Ti2CVG77Pdw== dependencies: - "@types/jsonwebtoken" "9.0.7" + "@types/jsonwebtoken" "9.0.10" jsonwebtoken "9.0.2" "@nestjs/mapped-types@2.1.0": @@ -1727,43 +1770,43 @@ integrity sha512-ulQX6mbjlws92PIM15Naes4F4p2JoxGnIJuUsdXQPT+Oo2sqQmENEZXM7eYuimocfHnKlcfZOuyzbA33LwUlOQ== "@nestjs/platform-express@^11.1.5": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.6.tgz#9b1dcf82a3b3fdd5761c918ad664aff83e4eacc7" - integrity sha512-HErwPmKnk+loTq8qzu1up+k7FC6Kqa8x6lJ4cDw77KnTxLzsCaPt+jBvOq6UfICmfqcqCCf3dKXg+aObQp+kIQ== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.8.tgz#9e97c20d23df70ad8826125424a69c9103b68653" + integrity sha512-rL6pZH9BW7BnL5X2eWbJMtt86uloAKjFgyY5+L2UkizgfEp7rgAs0+Z1z0BcW2Pgu5+q8O7RKPNyHJ/9ZNz/ZQ== dependencies: cors "2.8.5" express "5.1.0" multer "2.0.2" - path-to-regexp "8.2.0" + path-to-regexp "8.3.0" tslib "2.8.1" "@nestjs/schematics@^11.0.0", "@nestjs/schematics@^11.0.1": - version "11.0.7" - resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-11.0.7.tgz#4a3cd162b38a4756995d89473ec45f8d1e952bd1" - integrity sha512-t8dNYYMwEeEsrlwc2jbkfwCfXczq4AeNEgx1KVQuJ6wYibXk0ZbXbPdfp8scnEAaQv1grpncNV5gWgzi7ZwbvQ== + version "11.0.9" + resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-11.0.9.tgz#18a0d128c609be76410f5c7ea02680c8cd297113" + integrity sha512-0NfPbPlEaGwIT8/TCThxLzrlz3yzDNkfRNpbL7FiplKq3w4qXpJg0JYwqgMEJnLQZm3L/L/5XjoyfJHUO3qX9g== dependencies: - "@angular-devkit/core" "19.2.15" - "@angular-devkit/schematics" "19.2.15" - comment-json "4.2.5" + "@angular-devkit/core" "19.2.17" + "@angular-devkit/schematics" "19.2.17" + comment-json "4.4.1" jsonc-parser "3.3.1" pluralize "8.0.0" "@nestjs/swagger@^11.1.5": - version "11.2.0" - resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.0.tgz#a1b10620a9f90c78edf897a9386dc4f3e014387e" - integrity sha512-5wolt8GmpNcrQv34tIPUtPoV1EeFbCetm40Ij3+M0FNNnf2RJ3FyWfuQvI8SBlcJyfaounYVTKzKHreFXsUyOg== + version "11.2.1" + resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.1.tgz#590047ed74e4c8417f0b0f0260d04eea9a1d7daf" + integrity sha512-1MS7xf0pzc1mofG53xrrtrurnziafPUHkqzRm4YUVPA/egeiMaSerQBD/feiAeQ2BnX0WiLsTX4HQFO0icvOjQ== dependencies: "@microsoft/tsdoc" "0.15.1" "@nestjs/mapped-types" "2.1.0" js-yaml "4.1.0" lodash "4.17.21" - path-to-regexp "8.2.0" - swagger-ui-dist "5.21.0" + path-to-regexp "8.3.0" + swagger-ui-dist "5.29.4" "@nestjs/testing@^11.0.1": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.6.tgz#7f172a8024948dee4cb318acccfff31c1356f338" - integrity sha512-srYzzDNxGvVCe1j0SpTS9/ix75PKt6Sn6iMaH1rpJ6nj2g8vwNrhK0CoJJXvpCYgrnI+2WES2pprYnq8rAMYHA== + version "11.1.8" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.8.tgz#b41855084e53cdea0fae5669fa0fb4792e49c687" + integrity sha512-E6K+0UTKztcPxJzLnQa7S34lFjZbrj3Z1r7c5y5WDrL1m5HD1H4AeyBhicHgdaFmxjLAva2bq0sYKy/S7cdeYA== dependencies: tslib "2.8.1" @@ -1801,9 +1844,9 @@ consola "^3.2.3" "@paralleldrive/cuid2@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" - integrity sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz#3d62ea9e7be867d3fa94b9897fab5b0ae187d784" + integrity sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw== dependencies: "@noble/hashes" "^1.1.5" @@ -1846,159 +1889,159 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@smithy/abort-controller@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.1.1.tgz#9b3872ab6b2c061486175c281dadc0a853260533" - integrity sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg== +"@smithy/abort-controller@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.4.tgz#8031d32aea69c714eae49c1f43ce0ea60481d2d3" + integrity sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/chunked-blob-reader-native@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.1.0.tgz#4d814dd07ebb1f579daf51671945389f9772400f" - integrity sha512-Bnv0B3nSlfB2mPO0WgM49I/prl7+kamF042rrf3ezJ3Z4C7csPYvyYgZfXTGXwXfj1mAwDWjE/ybIf49PzFzvA== +"@smithy/chunked-blob-reader-native@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz#380266951d746b522b4ab2b16bfea6b451147b41" + integrity sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ== dependencies: - "@smithy/util-base64" "^4.1.0" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/chunked-blob-reader@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.1.0.tgz#48fa62c85b146be2a06525f0457ce58a46d69ab0" - integrity sha512-a36AtR7Q7XOhRPt6F/7HENmTWcB8kN7mDJcOFM/+FuKO6x88w8MQJfYCufMWh4fGyVkPjUh3Rrz/dnqFQdo6OQ== +"@smithy/chunked-blob-reader@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz#776fec5eaa5ab5fa70d0d0174b7402420b24559c" + integrity sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA== dependencies: tslib "^2.6.2" -"@smithy/config-resolver@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.2.1.tgz#12c24e550e2675e03a78bec64a652ed129bce718" - integrity sha512-FXil8q4QN7mgKwU2hCLm0ltab8NyY/1RiqEf25Jnf6WLS3wmb11zGAoLETqg1nur2Aoibun4w4MjeN9CMJ4G6A== - dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" +"@smithy/config-resolver@^4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.1.tgz#dcf9321841d44912455d4a0d8c4e554aa97af921" + integrity sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ== + dependencies: + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" tslib "^2.6.2" -"@smithy/core@^3.11.0": - version "3.11.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.11.0.tgz#18ee04696ca35889046169e422a894bea1bec59d" - integrity sha512-Abs5rdP1o8/OINtE49wwNeWuynCu0kme1r4RI3VXVrHr4odVDG7h7mTnw1WXXfN5Il+c25QOnrdL2y56USfxkA== - dependencies: - "@smithy/middleware-serde" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.1" - "@smithy/util-utf8" "^4.1.0" - "@types/uuid" "^9.0.1" +"@smithy/core@^3.17.2": + version "3.17.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.17.2.tgz#bd27762dfd9f61e60b2789a20fa0dfd647827e98" + integrity sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ== + dependencies: + "@smithy/middleware-serde" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@smithy/credential-provider-imds@^4.0.7", "@smithy/credential-provider-imds@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.1.tgz#e1535a0121a98a2d872eaffc2470eccc057cebd5" - integrity sha512-1WdBfM9DwA59pnpIizxnUvBf/de18p4GP+6zP2AqrlFzoW3ERpZaT4QueBR0nS9deDMaQRkBlngpVlnkuuTisQ== +"@smithy/credential-provider-imds@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.4.tgz#eb2ab999136c97d942e69638e6126a3c4d8cf79d" + integrity sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw== dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/property-provider" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" tslib "^2.6.2" -"@smithy/eventstream-codec@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.1.1.tgz#637eb4bceecc3ef588b86c28506439a9cdd7a41f" - integrity sha512-PwkQw1hZwHTQB6X5hSUWz2OSeuj5Z6enWuAqke7DgWoP3t6vg3ktPpqPz3Erkn6w+tmsl8Oss6nrgyezoea2Iw== +"@smithy/eventstream-codec@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz#f9cc680b156d3fac4cc631a8b0159f5e87205143" + integrity sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^4.5.0" - "@smithy/util-hex-encoding" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-hex-encoding" "^4.2.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.1.1.tgz#f7df13ebd5a6028b12b496f12eecdd08c4c9b792" - integrity sha512-Q9QWdAzRaIuVkefupRPRFAasaG/droBqn1feiMnmLa+LLEUG45pqX1+FurHFmlqiCfobB3nUlgoJfeXZsr7MPA== +"@smithy/eventstream-serde-browser@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.4.tgz#6aa94f14dd4d3376cb3389a0f6f245994e9e97c7" + integrity sha512-d5T7ZS3J/r8P/PDjgmCcutmNxnSRvPH1U6iHeXjzI50sMr78GLmFcrczLw33Ap92oEKqa4CLrkAPeSSOqvGdUA== dependencies: - "@smithy/eventstream-serde-universal" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-serde-universal" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.2.1.tgz#77333a110361bfe2749b685d31e01299ede87c40" - integrity sha512-oSUkF9zDN9zcOUBMtxp8RewJlh71E9NoHWU8jE3hU9JMYCsmW4assVTpgic/iS3/dM317j6hO5x18cc3XrfvEw== +"@smithy/eventstream-serde-config-resolver@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.4.tgz#6ddd88c57274a6fe72e11bfd5ac858977573dc46" + integrity sha512-lxfDT0UuSc1HqltOGsTEAlZ6H29gpfDSdEPTapD5G63RbnYToZ+ezjzdonCCH90j5tRRCw3aLXVbiZaBW3VRVg== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.1.1.tgz#635819a756cb8a69a7e3eb91ca9076284ea00939" - integrity sha512-tn6vulwf/ScY0vjhzptSJuDJJqlhNtUjkxJ4wiv9E3SPoEqTEKbaq6bfqRO7nvhTG29ALICRcvfFheOUPl8KNA== +"@smithy/eventstream-serde-node@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.4.tgz#61934c44c511bec5b07cfbbf59a2282806cd2ff8" + integrity sha512-TPhiGByWnYyzcpU/K3pO5V7QgtXYpE0NaJPEZBCa1Y5jlw5SjqzMSbFiLb+ZkJhqoQc0ImGyVINqnq1ze0ZRcQ== dependencies: - "@smithy/eventstream-serde-universal" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-serde-universal" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.1.1.tgz#803cdde6a17ac501cc700ce38400caf70715ecb1" - integrity sha512-uLOAiM/Dmgh2CbEXQx+6/ssK7fbzFhd+LjdyFxXid5ZBCbLHTFHLdD/QbXw5aEDsLxQhgzDxLLsZhsftAYwHJA== +"@smithy/eventstream-serde-universal@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.4.tgz#7c19762047b429d53af4664dc1168482706b4ee7" + integrity sha512-GNI/IXaY/XBB1SkGBFmbW033uWA0tj085eCxYih0eccUe/PFR7+UBQv9HNDk2fD9TJu7UVsCWsH99TkpEPSOzQ== dependencies: - "@smithy/eventstream-codec" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-codec" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/fetch-http-handler@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz#fe284a00f1b3a35edf9fba454d287b7f74ef20af" - integrity sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng== +"@smithy/fetch-http-handler@^5.3.5": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.5.tgz#5cfea38d9a1519741c7147fea10a4a064de03f66" + integrity sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/querystring-builder" "^4.2.4" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/hash-blob-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.1.1.tgz#fbcab0008b973ccf370c698cd11ec8d9584607c8" - integrity sha512-avAtk++s1e/1VODf+rg7c9R2pB5G9y8yaJaGY4lPZI2+UIqVyuSDMikWjeWfBVmFZ3O7NpDxBbUCyGhThVUKWQ== +"@smithy/hash-blob-browser@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.5.tgz#c82e032747b72811f735c2c1f0ed0c1aeb4de910" + integrity sha512-kCdgjD2J50qAqycYx0imbkA9tPtyQr1i5GwbK/EOUkpBmJGSkJe4mRJm+0F65TUSvvui1HZ5FFGFCND7l8/3WQ== dependencies: - "@smithy/chunked-blob-reader" "^5.1.0" - "@smithy/chunked-blob-reader-native" "^4.1.0" - "@smithy/types" "^4.5.0" + "@smithy/chunked-blob-reader" "^5.2.0" + "@smithy/chunked-blob-reader-native" "^4.2.1" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/hash-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.1.1.tgz#86ceca92487492267e944e4f4507106b731e7971" - integrity sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA== +"@smithy/hash-node@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.4.tgz#45bd19999625166825eb29aafb007819de031894" + integrity sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/hash-stream-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.1.1.tgz#1d8e4485fa15c458d7a8248a50d0f5f91705cced" - integrity sha512-3ztT4pV0Moazs3JAYFdfKk11kYFDo4b/3R3+xVjIm6wY9YpJf+xfz+ocEnNKcWAdcmSMqi168i2EMaKmJHbJMA== +"@smithy/hash-stream-node@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.4.tgz#553fa9a8fe567b0018cf99be3dafb920bc241a7f" + integrity sha512-amuh2IJiyRfO5MV0X/YFlZMD6banjvjAwKdeJiYGUbId608x+oSNwv3vlyW2Gt6AGAgl3EYAuyYLGRX/xU8npQ== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz#2511335ff889944701c7d2a3b1e4a4d6fe9ddfab" - integrity sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg== +"@smithy/invalid-dependency@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.4.tgz#ff957d711b72f432803fdee1e247f0dd4c98251d" + integrity sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": @@ -2008,210 +2051,209 @@ dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^4.0.0", "@smithy/is-array-buffer@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz#d18a2f22280e7173633cb91a9bdb6f3d8a6560b8" - integrity sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ== +"@smithy/is-array-buffer@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz#b0f874c43887d3ad44f472a0f3f961bcce0550c2" + integrity sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ== dependencies: tslib "^2.6.2" -"@smithy/md5-js@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.1.1.tgz#df81396bef83eb17bce531c871af935df986bdfc" - integrity sha512-MvWXKK743BuHjr/hnWuT6uStdKEaoqxHAQUvbKJPPZM5ZojTNFI5D+47BoQfBE5RgGlRRty05EbWA+NXDv+hIA== +"@smithy/md5-js@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.4.tgz#e012464383ffde0bd423d38ef9b5caf720ee90eb" + integrity sha512-h7kzNWZuMe5bPnZwKxhVbY1gan5+TZ2c9JcVTHCygB14buVGOZxLl+oGfpY2p2Xm48SFqEWdghpvbBdmaz3ncQ== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-content-length@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz#eaea7bd14c7a0b64aef87b8c372c2a04d7b9cb72" - integrity sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w== +"@smithy/middleware-content-length@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.4.tgz#8b625cb264c13c54440ecae59a3e6b1996dfd7b5" + integrity sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.1.tgz#54c61a113e6da7b615724d03517879d377d3888d" - integrity sha512-fUTMmQvQQZakXOuKizfu7fBLDpwvWZjfH6zUK2OLsoNZRZGbNUdNSdLJHpwk1vS208jtDjpUIskh+JoA8zMzZg== - dependencies: - "@smithy/core" "^3.11.0" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/shared-ini-file-loader" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-middleware" "^4.1.1" +"@smithy/middleware-endpoint@^4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.6.tgz#dce57120e72ffeb2d45f1d09d424a9bed1571a21" + integrity sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w== + dependencies: + "@smithy/core" "^3.17.2" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-middleware" "^4.2.4" tslib "^2.6.2" -"@smithy/middleware-retry@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.2.1.tgz#61be10c06e183c392a3769cb8b03c7846b37bee7" - integrity sha512-JzfvjwSJXWRl7LkLgIRTUTd2Wj639yr3sQGpViGNEOjtb0AkAuYqRAHs+jSOI/LPC0ZTjmFVVtfrCICMuebexw== - dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/service-error-classification" "^4.1.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.1" - "@types/uuid" "^9.0.1" +"@smithy/middleware-retry@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.6.tgz#b3c781b42b8f1ab22ee71358c0e81303cb00d737" + integrity sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA== + dependencies: + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/service-error-classification" "^4.2.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@smithy/middleware-serde@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz#cfb99f53c744d7730928235cbe66cc7ff8a8a9b2" - integrity sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg== +"@smithy/middleware-serde@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.4.tgz#43da8ac40e2bcdd30e705a6047a3a667ce44433c" + integrity sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/middleware-stack@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz#1d533fde4ccbb62d7fc0f0b8ac518b7e4791e311" - integrity sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A== +"@smithy/middleware-stack@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.4.tgz#9c833c3c8f2ddda1e2e31c9315ffa31f0f0aa85d" + integrity sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/node-config-provider@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.2.1.tgz#31be8865dbea9a9f23aee278a6728317d0ed0250" - integrity sha512-AIA0BJZq2h295J5NeCTKhg1WwtdTA/GqBCaVjk30bDgMHwniUETyh5cP9IiE9VrId7Kt8hS7zvREVMTv1VfA6g== +"@smithy/node-config-provider@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.4.tgz#9e41d45167568dbd2e1bc2c24a25cb26c3fd847f" + integrity sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw== dependencies: - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/node-http-handler@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz#d7ab8e31659030d3d5a68f0982f15c00b1e67a0c" - integrity sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw== +"@smithy/node-http-handler@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.4.tgz#e0ccaae333960df7e9387e9487554b98674b7720" + integrity sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA== dependencies: - "@smithy/abort-controller" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/abort-controller" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/querystring-builder" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/property-provider@^4.0.5", "@smithy/property-provider@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.1.1.tgz#6e11ae6729840314afed05fd6ab48f62c654116b" - integrity sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg== +"@smithy/property-provider@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.4.tgz#ea36ed8f1e282060aaf5cd220f2b428682d52775" + integrity sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/protocol-http@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.2.1.tgz#33f2b8e4e1082c3ae0372d1322577e6fa71d7824" - integrity sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw== +"@smithy/protocol-http@^5.3.4": + version "5.3.4" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz#2773de28d0b7e8b0ab83e94673fee0966fc8c68c" + integrity sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/querystring-builder@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz#4d35c1735de8214055424045a117fa5d1d5cdec1" - integrity sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA== +"@smithy/querystring-builder@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.4.tgz#9f57301a895bb986cf7740edd70a91df335e6109" + integrity sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-uri-escape" "^4.1.0" + "@smithy/types" "^4.8.1" + "@smithy/util-uri-escape" "^4.2.0" tslib "^2.6.2" -"@smithy/querystring-parser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz#21b861439b2db16abeb0a6789b126705fa25eea1" - integrity sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng== +"@smithy/querystring-parser@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.4.tgz#c0cc9b13855e9fc45a0c75ae26482eab6891a25e" + integrity sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/service-error-classification@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.1.1.tgz#86a615298ae406c3b6c7dc63c1c1738c54cfdfc6" - integrity sha512-Iam75b/JNXyDE41UvrlM6n8DNOa/r1ylFyvgruTUx7h2Uk7vDNV9AAwP1vfL1fOL8ls0xArwEGVcGZVd7IO/Cw== +"@smithy/service-error-classification@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.4.tgz#acace7208270c8a9c4f2218092866b4d650d4719" + integrity sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" -"@smithy/shared-ini-file-loader@^4.0.5", "@smithy/shared-ini-file-loader@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.1.1.tgz#d4a748bb8027e1111635464c9b1e546d608fc089" - integrity sha512-YkpikhIqGc4sfXeIbzSj10t2bJI/sSoP5qxLue6zG+tEE3ngOBSm8sO3+djacYvS/R5DfpxN/L9CyZsvwjWOAQ== +"@smithy/shared-ini-file-loader@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.4.tgz#ba0707daba05d7705ae120abdc27dbfa5b5b9049" + integrity sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/signature-v4@^5.1.3": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.2.1.tgz#0048489d2f1b3c888382595a085edd31967498f8" - integrity sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA== - dependencies: - "@smithy/is-array-buffer" "^4.1.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-hex-encoding" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-uri-escape" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" +"@smithy/signature-v4@^5.3.4": + version "5.3.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.4.tgz#d2233c39ce0b02041a11c5cfd210f3e61982931a" + integrity sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A== + dependencies: + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-uri-escape" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.6.1.tgz#4bebcf313431bd274da0b28c7ddc4ba335f9994b" - integrity sha512-WolVLDb9UTPMEPPOncrCt6JmAMCSC/V2y5gst2STWJ5r7+8iNac+EFYQnmvDCYMfOLcilOSEpm5yXZXwbLak1Q== - dependencies: - "@smithy/core" "^3.11.0" - "@smithy/middleware-endpoint" "^4.2.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-stream" "^4.3.1" +"@smithy/smithy-client@^4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.9.2.tgz#6f9d916da362de7ac8e685112e3f68a9eba56b94" + integrity sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg== + dependencies: + "@smithy/core" "^3.17.2" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-stream" "^4.5.5" tslib "^2.6.2" -"@smithy/types@^4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370" - integrity sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg== +"@smithy/types@^4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.8.1.tgz#0ecad4e329340c8844e38a18c7608d84cc1c853c" + integrity sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA== dependencies: tslib "^2.6.2" -"@smithy/url-parser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.1.1.tgz#0e9a5e72b3cf9d7ab7305f9093af5528d9debaf6" - integrity sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg== +"@smithy/url-parser@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.4.tgz#36336ea90529ff00de473a2c82d1487d87a588b1" + integrity sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg== dependencies: - "@smithy/querystring-parser" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/querystring-parser" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-base64@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.1.0.tgz#5965026081d9aef4a8246f5702807570abe538b2" - integrity sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ== +"@smithy/util-base64@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.0.tgz#5e287b528793aa7363877c1a02cd880d2e76241d" + integrity sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ== dependencies: - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz#636bdf4bc878c546627dab4b9b0e4db31b475be7" - integrity sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ== +"@smithy/util-body-length-browser@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz#04e9fc51ee7a3e7f648a4b4bcdf96c350cfa4d61" + integrity sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz#646750e4af58f97254a5d5cfeaba7d992f0152ec" - integrity sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ== +"@smithy/util-body-length-node@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz#79c8a5d18e010cce6c42d5cbaf6c1958523e6fec" + integrity sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA== dependencies: tslib "^2.6.2" @@ -2223,96 +2265,95 @@ "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz#21f9e644a0eb41226d92e4eff763f76a7db7e9cc" - integrity sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw== +"@smithy/util-buffer-from@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz#7abd12c4991b546e7cee24d1e8b4bfaa35c68a9d" + integrity sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew== dependencies: - "@smithy/is-array-buffer" "^4.1.0" + "@smithy/is-array-buffer" "^4.2.0" tslib "^2.6.2" -"@smithy/util-config-provider@^4.0.0", "@smithy/util-config-provider@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz#6a07d73446c1e9a46d7a3c125f2a9301060bc957" - integrity sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ== +"@smithy/util-config-provider@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz#2e4722937f8feda4dcb09672c59925a4e6286cfc" + integrity sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q== dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.1.tgz#40b9659d6fc15aa1101e440d1a92579cb66ebfa3" - integrity sha512-hA1AKIHFUMa9Tl6q6y8p0pJ9aWHCCG8s57flmIyLE0W7HcJeYrYtnqXDcGnftvXEhdQnSexyegXnzzTGk8bKLA== +"@smithy/util-defaults-mode-browser@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.5.tgz#c74f357b048d20c95aa636fa79d33bcfa799e2d0" + integrity sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ== dependencies: - "@smithy/property-provider" "^4.1.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" - bowser "^2.11.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.1.tgz#bca834c5ee16949bf8d0db9ac7bf988ad0d3ce10" - integrity sha512-RGSpmoBrA+5D2WjwtK7tto6Pc2wO9KSXKLpLONhFZ8VyuCbqlLdiDAfuDTNY9AJe4JoE+Cx806cpTQQoQ71zPQ== - dependencies: - "@smithy/config-resolver" "^4.2.1" - "@smithy/credential-provider-imds" "^4.1.1" - "@smithy/node-config-provider" "^4.2.1" - "@smithy/property-provider" "^4.1.1" - "@smithy/smithy-client" "^4.6.1" - "@smithy/types" "^4.5.0" +"@smithy/util-defaults-mode-node@^4.2.7": + version "4.2.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.7.tgz#2657623ff6f326f152966bfa52a593cd3b5cd70e" + integrity sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw== + dependencies: + "@smithy/config-resolver" "^4.4.1" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-endpoints@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.1.1.tgz#62c7e10e3a685c9cbb4080220d9e819ee79be8ff" - integrity sha512-qB4R9kO0SetA11Rzu6MVGFIaGYX3p6SGGGfWwsKnC6nXIf0n/0AKVwRTsYsz9ToN8CeNNtNgQRwKFBndGJZdyw== +"@smithy/util-endpoints@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.4.tgz#d68a4692a55b14f2060de75715bd4664b93a4353" + integrity sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg== dependencies: - "@smithy/node-config-provider" "^4.2.1" - "@smithy/types" "^4.5.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-hex-encoding@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz#9b27cf0c25d0de2c8ebfe75cc20df84e5014ccc9" - integrity sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w== +"@smithy/util-hex-encoding@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz#1c22ea3d1e2c3a81ff81c0a4f9c056a175068a7b" + integrity sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.1.1.tgz#e19749a127499c9bdada713a8afd807d92d846e2" - integrity sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg== +"@smithy/util-middleware@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.4.tgz#d66d6b67c4c90be7bf0659f57000122b1a6bbf82" + integrity sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-retry@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.1.1.tgz#f4a99d9b0ffb9e4bb119ac5a24e54e54d891e22c" - integrity sha512-jGeybqEZ/LIordPLMh5bnmnoIgsqnp4IEimmUp5c5voZ8yx+5kAlN5+juyr7p+f7AtZTgvhmInQk4Q0UVbrZ0Q== +"@smithy/util-retry@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.4.tgz#1f466d3bc5b5f114994ac2298e859815f3a8deec" + integrity sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA== dependencies: - "@smithy/service-error-classification" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/service-error-classification" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@smithy/util-stream@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.3.1.tgz#63cce0f09d99d75142c6dc8fe03e55ac0171de47" - integrity sha512-khKkW/Jqkgh6caxMWbMuox9+YfGlsk9OnHOYCGVEdYQb/XVzcORXHLYUubHmmda0pubEDncofUrPNniS9d+uAA== - dependencies: - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-hex-encoding" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" +"@smithy/util-stream@^4.5.5": + version "4.5.5" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.5.tgz#a3fd73775c65dd23370d021b8818914a2c44f28e" + integrity sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w== + dependencies: + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-uri-escape@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz#ed4a5c498f1da07122ca1e3df4ca3e2c67c6c18a" - integrity sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg== +"@smithy/util-uri-escape@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz#096a4cec537d108ac24a68a9c60bee73fc7e3a9e" + integrity sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA== dependencies: tslib "^2.6.2" @@ -2324,21 +2365,28 @@ "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.1.0.tgz#912c33c1a06913f39daa53da79cb8f7ab740d97b" - integrity sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ== +"@smithy/util-utf8@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz#8b19d1514f621c44a3a68151f3d43e51087fed9d" + integrity sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw== dependencies: - "@smithy/util-buffer-from" "^4.1.0" + "@smithy/util-buffer-from" "^4.2.0" tslib "^2.6.2" -"@smithy/util-waiter@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.1.1.tgz#5b74429ca9e37f61838800b919d0063b1a865bef" - integrity sha512-PJBmyayrlfxM7nbqjomF4YcT1sApQwZio0NHSsT0EzhJqljRmvhzqZua43TyEs80nJk2Cn2FGPg/N8phH6KeCQ== +"@smithy/util-waiter@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.4.tgz#a28b7835aacd82ae2d10da5af5bf21b3c21b34ac" + integrity sha512-roKXtXIC6fopFvVOju8VYHtguc/jAcMlK8IlDOHsrQn0ayMkHynjm/D2DCMRf7MJFXzjHhlzg2edr3QPEakchQ== + dependencies: + "@smithy/abort-controller" "^4.2.4" + "@smithy/types" "^4.8.1" + tslib "^2.6.2" + +"@smithy/uuid@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.0.tgz#9fd09d3f91375eab94f478858123387df1cda987" + integrity sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw== dependencies: - "@smithy/abort-controller" "^4.1.1" - "@smithy/types" "^4.5.0" tslib "^2.6.2" "@swc/cli@^0.7.7": @@ -2356,81 +2404,81 @@ source-map "^0.7.3" tinyglobby "^0.2.13" -"@swc/core-darwin-arm64@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz#7638c073946f9297753ed9a2eb198d07b2336a24" - integrity sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ== - -"@swc/core-darwin-x64@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz#18061167378f0fb285e17818494bc6c89dd07551" - integrity sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng== - -"@swc/core-linux-arm-gnueabihf@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz#4c8062bd598049b5b9b0beb762e075e76b4c23c3" - integrity sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ== - -"@swc/core-linux-arm64-gnu@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz#7222d321197ea9304e387933e87d775849fc1ae6" - integrity sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw== - -"@swc/core-linux-arm64-musl@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz#51e7958deaf37edc212bd9dc0ea1476f151d2bea" - integrity sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ== - -"@swc/core-linux-x64-gnu@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz#3476beab93ab03e92844d955ca9d9289aa4a5993" - integrity sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA== - -"@swc/core-linux-x64-musl@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz#f4934b1e77e2a297909bb3ab977836205c36e5e0" - integrity sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q== - -"@swc/core-win32-arm64-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz#5084c107435cfc82d4d901bfb388dc319d38a236" - integrity sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw== - -"@swc/core-win32-ia32-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz#f8b2e28bc51b30467e316ed736a130c1324b9880" - integrity sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw== - -"@swc/core-win32-x64-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz#13883cf3c63bf11b787e28dcdf75ca0cc49efa83" - integrity sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q== +"@swc/core-darwin-arm64@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.14.0.tgz#1db614b52ed7369f47be2a1c6b5e80b6be923898" + integrity sha512-uHPC8rlCt04nvYNczWzKVdgnRhxCa3ndKTBBbBpResOZsRmiwRAvByIGh599j+Oo6Z5eyTPrgY+XfJzVmXnN7Q== + +"@swc/core-darwin-x64@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.14.0.tgz#900e56924994d0e723e6088e2a2e1a1c08c59a95" + integrity sha512-2SHrlpl68vtePRknv9shvM9YKKg7B9T13tcTg9aFCwR318QTYo+FzsKGmQSv9ox/Ua0Q2/5y2BNjieffJoo4nA== + +"@swc/core-linux-arm-gnueabihf@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.14.0.tgz#3c84966a8c6e308b0788d1c7875bce23c65134c6" + integrity sha512-SMH8zn01dxt809svetnxpeg/jWdpi6dqHKO3Eb11u4OzU2PK7I5uKS6gf2hx5LlTbcJMFKULZiVwjlQLe8eqtg== + +"@swc/core-linux-arm64-gnu@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.14.0.tgz#5190097d2ca4ea8b198f46a3abe2272331575b54" + integrity sha512-q2JRu2D8LVqGeHkmpVCljVNltG0tB4o4eYg+dElFwCS8l2Mnt9qurMCxIeo9mgoqz0ax+k7jWtIRHktnVCbjvQ== + +"@swc/core-linux-arm64-musl@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.14.0.tgz#420f510102a37feda0e3dfb8d21651515251476b" + integrity sha512-uofpVoPCEUjYIv454ZEZ3sLgMD17nIwlz2z7bsn7rl301Kt/01umFA7MscUovFfAK2IRGck6XB+uulMu6aFhKQ== + +"@swc/core-linux-x64-gnu@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.14.0.tgz#953f741d577a81f6e1e1b434856c48eb674cdeb7" + integrity sha512-quTTx1Olm05fBfv66DEBuOsOgqdypnZ/1Bh3yGXWY7ANLFeeRpCDZpljD9BSjdsNdPOlwJmEUZXMHtGm3v1TZQ== + +"@swc/core-linux-x64-musl@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.14.0.tgz#bdf241062d1433ba617ffe1451dccde8923a28a2" + integrity sha512-caaNAu+aIqT8seLtCf08i8C3/UC5ttQujUjejhMcuS1/LoCKtNiUs4VekJd2UGt+pyuuSrQ6dKl8CbCfWvWeXw== + +"@swc/core-win32-arm64-msvc@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.14.0.tgz#960919015bc31c46a8fc10df5c384add651df91e" + integrity sha512-EeW3jFlT3YNckJ6V/JnTfGcX7UHGyh6/AiCPopZ1HNaGiXVCKHPpVQZicmtyr/UpqxCXLrTgjHOvyMke7YN26A== + +"@swc/core-win32-ia32-msvc@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.14.0.tgz#826a76b2af0e4df4dee3674e91734cb85eb7b21f" + integrity sha512-dPai3KUIcihV5hfoO4QNQF5HAaw8+2bT7dvi8E5zLtecW2SfL3mUZipzampXq5FHll0RSCLzlrXnSx+dBRZIIQ== + +"@swc/core-win32-x64-msvc@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.14.0.tgz#75fe708a702f57f176fd640eb9af394cf767be91" + integrity sha512-nm+JajGrTqUA6sEHdghDlHMNfH1WKSiuvljhdmBACW4ta4LC3gKurX2qZuiBARvPkephW9V/i5S8QPY1PzFEqg== "@swc/core@^1.10.7": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.5.tgz#93874b831d3bd121560e6fcd688972b7fc7baa26" - integrity sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ== + version "1.14.0" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.14.0.tgz#ff7d287fbac6b6fd3adedf7b440cadfd0c389df6" + integrity sha512-oExhY90bes5pDTVrei0xlMVosTxwd/NMafIpqsC4dMbRYZ5KB981l/CX8tMnGsagTplj/RcG9BeRYmV6/J5m3w== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.24" + "@swc/types" "^0.1.25" optionalDependencies: - "@swc/core-darwin-arm64" "1.13.5" - "@swc/core-darwin-x64" "1.13.5" - "@swc/core-linux-arm-gnueabihf" "1.13.5" - "@swc/core-linux-arm64-gnu" "1.13.5" - "@swc/core-linux-arm64-musl" "1.13.5" - "@swc/core-linux-x64-gnu" "1.13.5" - "@swc/core-linux-x64-musl" "1.13.5" - "@swc/core-win32-arm64-msvc" "1.13.5" - "@swc/core-win32-ia32-msvc" "1.13.5" - "@swc/core-win32-x64-msvc" "1.13.5" + "@swc/core-darwin-arm64" "1.14.0" + "@swc/core-darwin-x64" "1.14.0" + "@swc/core-linux-arm-gnueabihf" "1.14.0" + "@swc/core-linux-arm64-gnu" "1.14.0" + "@swc/core-linux-arm64-musl" "1.14.0" + "@swc/core-linux-x64-gnu" "1.14.0" + "@swc/core-linux-x64-musl" "1.14.0" + "@swc/core-win32-arm64-msvc" "1.14.0" + "@swc/core-win32-ia32-msvc" "1.14.0" + "@swc/core-win32-x64-msvc" "1.14.0" "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/types@^0.1.24": +"@swc/types@^0.1.25": version "0.1.25" resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.25.tgz#b517b2a60feb37dd933e542d93093719e4cf1078" integrity sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g== @@ -2458,14 +2506,14 @@ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== -"@ts-morph/common@~0.27.0": - version "0.27.0" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.27.0.tgz#e83a1bd7cbac054045c6246a7c4c99eab7692d46" - integrity sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ== +"@ts-morph/common@~0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.28.1.tgz#10ec52182d5c310832b669af7784a34fc3da3ca1" + integrity sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g== dependencies: - fast-glob "^3.3.3" minimatch "^10.0.1" path-browserify "^1.0.1" + tinyglobby "^0.2.14" "@tsconfig/node10@^1.0.7": version "1.0.11" @@ -2520,6 +2568,13 @@ dependencies: "@babel/types" "^7.28.2" +"@types/bcrypt@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/bcrypt/-/bcrypt-6.0.0.tgz#0d20587924663607fb59ae373d3d6fbc7b339a92" + integrity sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ== + dependencies: + "@types/node" "*" + "@types/body-parser@*": version "1.19.6" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" @@ -2536,9 +2591,9 @@ "@types/node" "*" "@types/cookie-parser@^1.4.8": - version "1.4.9" - resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.9.tgz#f0e79c766a58ee7369a52e7509b3840222f68ed2" - integrity sha512-tGZiZ2Gtc4m3wIdLkZ8mkj1T6CEHb35+VApbL2T14Dew8HA7c+04dmKqsKRNC+8RJPm16JEK0tFSwdZqubfc4g== + version "1.4.10" + resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.10.tgz#a045272a383a30597a01955d4f9c790018f214e4" + integrity sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg== "@types/cookiejar@^2.1.5": version "2.1.5" @@ -2567,9 +2622,9 @@ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@^5.0.0": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" - integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2577,13 +2632,13 @@ "@types/send" "*" "@types/express@*", "@types/express@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" - integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== + version "5.0.5" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.5.tgz#3ba069177caa34ab96585ca23b3984d752300cdc" + integrity sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "*" + "@types/serve-static" "^1" "@types/graceful-fs@^4.1.3": version "4.1.9" @@ -2634,7 +2689,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/jsonwebtoken@*": +"@types/jsonwebtoken@*", "@types/jsonwebtoken@9.0.10": version "9.0.10" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== @@ -2642,13 +2697,6 @@ "@types/ms" "*" "@types/node" "*" -"@types/jsonwebtoken@9.0.7": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz#e49b96c2b29356ed462e9708fc73b833014727d2" - integrity sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== - dependencies: - "@types/node" "*" - "@types/methods@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547" @@ -2672,16 +2720,16 @@ "@types/express" "*" "@types/node@*": - version "24.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.3.tgz#6d195b95af3cda4e74dcef7bb3797a1941e7d2d1" - integrity sha512-GKBNHjoNw3Kra1Qg5UXttsY5kiWMEfoHq2TmXb+b1rcm6N7B3wTrFYIf/oSZ1xNQ+hVVijgLkiDZh7jRRsh+Gw== + version "24.9.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.2.tgz#90ded2422dbfcafcf72080f28975adc21366148d" + integrity sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA== dependencies: - undici-types "~7.10.0" + undici-types "~7.16.0" "@types/node@^22.10.7": - version "22.18.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.3.tgz#e1a4eb680a688141cdd369c5a035f48cf8ece9e3" - integrity sha512-gTVM8js2twdtqM+AE2PdGEe9zGQY4UvmFjan9rZcVb6FGdStfjWoWejdmy4CfWVO9rh5MiYQGZloKAGkJt8lMw== + version "22.18.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.13.tgz#a037c4f474b860be660e05dbe92a9ef945472e28" + integrity sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A== dependencies: undici-types "~6.21.0" @@ -2719,21 +2767,28 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/send@*": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" - integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== dependencies: "@types/mime" "^1" "@types/node" "*" -"@types/serve-static@*": - version "1.15.8" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" - integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== +"@types/serve-static@^1": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "*" + "@types/send" "<1" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -2763,15 +2818,10 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== -"@types/uuid@^9.0.1": - version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== - "@types/validator@^13.11.8": - version "13.15.3" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.3.tgz#67e8aeacbace03517f9bd3f99e750bb666207ff4" - integrity sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q== + version "13.15.4" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.4.tgz#38a97ae54747416f745afdfc678f041713082635" + integrity sha512-LSFfpSnJJY9wbC0LQxgvfb+ynbHftFo0tMsFOl/J4wexLnYMmDSPaj2ZyDv3TkfL1UePxPrxOWJfbiRS8mQv7A== "@types/yargs-parser@*": version "21.0.3" @@ -2779,85 +2829,85 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.34" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.34.tgz#1c2f9635b71d5401827373a01ce2e8a7670ea839" + integrity sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz#4d730c2becd8e47ef76e59f68aee0fb560927cfc" - integrity sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ== +"@typescript-eslint/eslint-plugin@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz#dc4ab93ee3d7e6c8e38820a0d6c7c93c7183e2dc" + integrity sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.43.0" - "@typescript-eslint/type-utils" "8.43.0" - "@typescript-eslint/utils" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/type-utils" "8.46.2" + "@typescript-eslint/utils" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.43.0.tgz#4024159925e7671f1782bdd3498bdcfbd48f9137" - integrity sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw== +"@typescript-eslint/parser@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.46.2.tgz#dd938d45d581ac8ffa9d8a418a50282b306f7ebf" + integrity sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g== dependencies: - "@typescript-eslint/scope-manager" "8.43.0" - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" -"@typescript-eslint/project-service@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.43.0.tgz#958dbaa16fbd1e81d46ab86e139f6276757140f8" - integrity sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw== +"@typescript-eslint/project-service@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.2.tgz#ab2f02a0de4da6a7eeb885af5e059be57819d608" + integrity sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.43.0" - "@typescript-eslint/types" "^8.43.0" + "@typescript-eslint/tsconfig-utils" "^8.46.2" + "@typescript-eslint/types" "^8.46.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz#009ebc09cc6e7e0dd67898a0e9a70d295361c6b9" - integrity sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg== +"@typescript-eslint/scope-manager@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz#7d37df2493c404450589acb3b5d0c69cc0670a88" + integrity sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA== dependencies: - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" -"@typescript-eslint/tsconfig-utils@8.43.0", "@typescript-eslint/tsconfig-utils@^8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz#e6721dba183d61769a90ffdad202aebc383b18c8" - integrity sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA== +"@typescript-eslint/tsconfig-utils@8.46.2", "@typescript-eslint/tsconfig-utils@^8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz#d110451cb93bbd189865206ea37ef677c196828c" + integrity sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag== -"@typescript-eslint/type-utils@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz#29ea2e34eeae5b8e9fe4f4730c5659fa330aa04e" - integrity sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg== +"@typescript-eslint/type-utils@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz#802d027864e6fb752e65425ed09f3e089fb4d384" + integrity sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA== dependencies: - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" - "@typescript-eslint/utils" "8.43.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/utils" "8.46.2" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.43.0", "@typescript-eslint/types@^8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.43.0.tgz#00d34a5099504eb1b263e022cc17c4243ff2302e" - integrity sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw== +"@typescript-eslint/types@8.46.2", "@typescript-eslint/types@^8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.2.tgz#2bad7348511b31e6e42579820e62b73145635763" + integrity sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ== -"@typescript-eslint/typescript-estree@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz#39e5d431239b4d90787072ae0c2290cbd3e0a562" - integrity sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw== +"@typescript-eslint/typescript-estree@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz#ab547a27e4222bb6a3281cb7e98705272e2c7d08" + integrity sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ== dependencies: - "@typescript-eslint/project-service" "8.43.0" - "@typescript-eslint/tsconfig-utils" "8.43.0" - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/visitor-keys" "8.43.0" + "@typescript-eslint/project-service" "8.46.2" + "@typescript-eslint/tsconfig-utils" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -2865,22 +2915,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.43.0.tgz#5c391133a52f8500dfdabd7026be72a537d7b59e" - integrity sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g== +"@typescript-eslint/utils@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.46.2.tgz#b313d33d67f9918583af205bd7bcebf20f231732" + integrity sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.43.0" - "@typescript-eslint/types" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" -"@typescript-eslint/visitor-keys@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz#633d3414afec3cf0a0e4583e1575f4101ef51d30" - integrity sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw== +"@typescript-eslint/visitor-keys@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz#803fa298948c39acf810af21bdce6f8babfa9738" + integrity sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w== dependencies: - "@typescript-eslint/types" "8.43.0" + "@typescript-eslint/types" "8.46.2" eslint-visitor-keys "^4.2.1" "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": @@ -3192,7 +3242,7 @@ ansi-colors@4.1.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -3292,18 +3342,18 @@ aws-ssl-profiles@^1.1.1: integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== axios@^1.11.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.1.tgz#0747b39c5b615f81f93f2c138e6d82a71426937f" - integrity sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ== + version "1.13.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.1.tgz#45b62dc8fe04e0e92274e08b98e910ba3d7963a7" + integrity sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.4" proxy-from-env "^1.1.0" b4a@^1.6.4: - version "1.7.1" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.7.1.tgz#6fd4ec2fb33ba7a4ff341a2869bbfc88a6e57850" - integrity sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q== + version "1.7.3" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.7.3.tgz#24cf7ccda28f5465b66aec2bac69e32809bf112f" + integrity sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q== babel-jest@^29.7.0: version "29.7.0" @@ -3373,20 +3423,28 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@^2.2.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.6.1.tgz#f793b28bdc3dcf147d7cf01f882a6f0b12ccc4a2" - integrity sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g== +bare-events@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.1.tgz#121afaeee9e9a8eb92e71d125bc85753d39913d0" + integrity sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ== base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.2.tgz#1cfd362e07d8f2eadff369461ae847d40fefe578" - integrity sha512-NvcIedLxrs9llVpX7wI+Jz4Hn9vJQkCPKrTaHIE0sW/Rj1iq6Fzby4NbyTZjQJNoypBXNaG7tEHkTgONZpwgxQ== +baseline-browser-mapping@^2.8.19: + version "2.8.22" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.22.tgz#9d98661721ebe0812def25858f4cb2561820d2e6" + integrity sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ== + +bcrypt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-6.0.0.tgz#86643fddde9bcd0ad91400b063003fa4b0312835" + integrity sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg== + dependencies: + node-addon-api "^8.3.0" + node-gyp-build "^4.8.4" bin-version-check@^5.1.0: version "5.1.0" @@ -3457,15 +3515,15 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.24.0: - version "4.26.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.0.tgz#035ca84b4ff312a3c6a7014a77beb83456a882dd" - integrity sha512-P9go2WrP9FiPwLv3zqRD/Uoxo0RSHjzFCiQz7d4vbmwNqQFo9T9WCeP/Qn5EbcKQY6DBbkxEXNcpJOmncNrb7A== + version "4.27.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697" + integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw== dependencies: - baseline-browser-mapping "^2.8.2" - caniuse-lite "^1.0.30001741" - electron-to-chromium "^1.5.218" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.8.19" + caniuse-lite "^1.0.30001751" + electron-to-chromium "^1.5.238" + node-releases "^2.0.26" + update-browserslist-db "^1.1.4" bs-logger@^0.2.6: version "0.2.6" @@ -3565,10 +3623,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001741: - version "1.0.30001741" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz#67fb92953edc536442f3c9da74320774aa523143" - integrity sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw== +caniuse-lite@^1.0.30001751: + version "1.0.30001752" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz#afa28d0830709507162bc6ed3f7cb23b00926a99" + integrity sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g== chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" @@ -3584,9 +3642,9 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chardet@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" - integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== chokidar@4.0.3, chokidar@^4.0.1: version "4.0.3" @@ -3675,9 +3733,9 @@ code-block-writer@^13.0.3: integrity sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg== collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== color-convert@^2.0.1: version "2.0.1" @@ -3714,9 +3772,9 @@ commander@^10.0.0: integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^14.0.0: - version "14.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.1.tgz#2f9225c19e6ebd0dc4404dd45821b2caa17ea09b" - integrity sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A== + version "14.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.2.tgz#b71fd37fe4069e4c3c7c13925252ada4eba14e8e" + integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== commander@^2.20.0: version "2.20.3" @@ -3733,16 +3791,14 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -comment-json@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.2.5.tgz#482e085f759c2704b60bc6f97f55b8c01bc41e70" - integrity sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw== +comment-json@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.4.1.tgz#0757e3ba31a9e56f3f6e00bdaae114384ac8bcf3" + integrity sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg== dependencies: array-timsort "^1.0.3" core-util-is "^1.0.3" esprima "^4.0.1" - has-own-prop "^2.0.0" - repeat-string "^1.6.1" component-emitter@^1.3.1: version "1.3.1" @@ -3884,9 +3940,9 @@ debug@4.3.4: ms "2.1.2" debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.7, debug@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -3986,10 +4042,10 @@ dotenv@16.4.7: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== -dotenv@17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.1.tgz#6f32e10faf014883515538dc922a0fb8765d9b32" - integrity sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ== +dotenv@17.2.3: + version "17.2.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== dotenv@^16.4.5: version "16.6.1" @@ -4022,10 +4078,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.218: - version "1.5.218" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.218.tgz#921042a011a98a4620853c9d391ab62bcc124400" - integrity sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg== +electron-to-chromium@^1.5.238: + version "1.5.244" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz#b9b61e3d24ef4203489951468614f2a360763820" + integrity sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw== emittery@^0.13.1: version "0.13.1" @@ -4056,9 +4112,9 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.2, enhanced-resolve@^5.7.0: tapable "^2.2.0" error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" @@ -4154,23 +4210,22 @@ eslint-visitor-keys@^4.2.1: integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9.34.0: - version "9.35.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.35.0.tgz#7a89054b7b9ee1dfd1b62035d8ce75547773f47e" - integrity sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg== + version "9.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.0.tgz#33c90ddf62b64e1e3f83b689934b336f21b5f0e5" + integrity sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg== dependencies: "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.1" - "@eslint/core" "^0.15.2" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.35.0" - "@eslint/plugin-kit" "^0.3.5" + "@eslint/js" "9.39.0" + "@eslint/plugin-kit" "^0.4.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.6" @@ -4247,6 +4302,13 @@ etag@^1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +events-universal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" + integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== + dependencies: + bare-events "^2.7.0" + events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4346,7 +4408,7 @@ fast-fifo@^1.2.0, fast-fifo@^1.3.2: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -4409,9 +4471,9 @@ fflate@^0.8.2: integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== figlet@^1.5.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.9.1.tgz#2760642afc600199065c229d1e7ced7bb39c7107" - integrity sha512-DpKC89iXFjq6NCaIQ1O91R+ofpfyvkwuBfoVd8LpP/JZGZQpelMXgiTStGOfksuMYaDoBAwFlvx7mk+wX+3rrA== + version "1.9.3" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.9.3.tgz#d30906aa6017608e924e7fb82ca6c11802f55680" + integrity sha512-majPgOpVtrZN1iyNGbsUP6bOtZ6eaJgg5HHh0vFvm5DJhh8dc+FJpOC4GABvMZ/A7XHAJUuJujhgUY/2jPWgMA== dependencies: commander "^14.0.0" @@ -4575,10 +4637,10 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== -fs-extra@11.3.1: - version "11.3.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz#ba7a1f97a85f94c6db2e52ff69570db3671d5a74" - integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== +fs-extra@11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -4718,9 +4780,9 @@ globals@^14.0.0: integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globals@^16.0.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-16.4.0.tgz#574bc7e72993d40cf27cf6c241f324ee77808e51" - integrity sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw== + version "16.5.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" + integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== globby@11.1.0: version "11.1.0" @@ -4783,11 +4845,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-own-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" - integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== - has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" @@ -4926,7 +4983,7 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-core-module@^2.16.0: +is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -5580,24 +5637,24 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.11.1: - version "1.12.17" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.17.tgz#ec01c8f1cf123748923746925bdb6f379b0d3f35" - integrity sha512-bsxi8FoceAYR/bjHcLYc2ShJ/aVAzo5jaxAYiMHF0BD+NTp47405CGuPNKYpw+lHadN9k/ClFGc9X5vaZswIrA== + version "1.12.25" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.25.tgz#1af48b816082100bf88f47d342387fbac1f1a773" + integrity sha512-u90tUu/SEF8b+RaDKCoW7ZNFDakyBtFlX1ex3J+VH+ElWes/UaitJLt/w4jGu8uAE41lltV/s+kMVtywcMEg7g== lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-esm@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/load-esm/-/load-esm-1.0.2.tgz#35dbac8a1a3abdb802cf236008048fcc8a9289a6" - integrity sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw== +load-esm@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/load-esm/-/load-esm-1.0.3.tgz#2073afe3da63902c323e80d9f135c301173ac92c" + integrity sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA== loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== locate-path@^5.0.0: version "5.0.0" @@ -5682,9 +5739,9 @@ lowercase-keys@^3.0.0: integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^11.0.0: - version "11.2.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.1.tgz#d426ac471521729c6c1acda5f7a633eadaa28db2" - integrity sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ== + version "11.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.2.tgz#40fd37edffcfae4b2940379c0722dc6eeaa75f24" + integrity sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg== lru-cache@^5.1.1: version "5.1.1" @@ -5779,10 +5836,10 @@ micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mikro-orm@6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/mikro-orm/-/mikro-orm-6.5.2.tgz#4e0532cf214af60332ea2c907cddb9b30527c56a" - integrity sha512-D+W2MwdA1XerqxN+33hP86apCdJb5wAPV2r5cSKNXv9RXXv4o9KvCu9BOm/ydVHdCGQXYTO9S/+MqiSIKDQ2Aw== +mikro-orm@6.5.9: + version "6.5.9" + resolved "https://registry.yarnpkg.com/mikro-orm/-/mikro-orm-6.5.9.tgz#a72fe4310de789ca8979552c2ed53ed01ff929b7" + integrity sha512-qbEZsQG8HbGfBHeeSpmWGD+bcaZmYEE8TU3Mi9iXRoJ1yPBd6GXbUjBejMVUAkqzBL+LMZjE9sRyIG+Fg+kTvw== mime-db@1.52.0: version "1.52.0" @@ -5829,9 +5886,9 @@ mimic-response@^4.0.0: integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== minimatch@^10.0.1, minimatch@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" - integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== dependencies: "@isaacs/brace-expansion" "^5.0.0" @@ -5894,25 +5951,10 @@ mute-stream@^2.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== -mysql2@3.14.4: - version "3.14.4" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.14.4.tgz#36e33a8d33820a299fb9e9221486310b1a4c8767" - integrity sha512-Cs/jx3WZPNrYHVz+Iunp9ziahaG5uFMvD2R8Zlmc194AqXNxt9HBNu7ZsPYrUtmJsF0egETCWIdMIYAwOGjL1w== - dependencies: - aws-ssl-profiles "^1.1.1" - denque "^2.1.0" - generate-function "^2.3.1" - iconv-lite "^0.7.0" - long "^5.2.1" - lru.min "^1.0.0" - named-placeholders "^1.1.3" - seq-queue "^0.0.5" - sqlstring "^2.3.2" - -mysql2@^3.14.0: - version "3.14.5" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.14.5.tgz#b832ddf4917557c32a08e93104101a31d10cde51" - integrity sha512-40hDf8LPUsuuJ2hFq+UgOuPwt2IFLIRDvMv6ez9hKbXeYuZPxDDwiJW7KdknvOsQqKznaKczOT1kELgFkhDvFg== +mysql2@3.15.3, mysql2@^3.14.0: + version "3.15.3" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.15.3.tgz#f0348d9c7401bb98cb1f45ffc5a773b109f70808" + integrity sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg== dependencies: aws-ssl-profiles "^1.1.1" denque "^2.1.0" @@ -5951,6 +5993,11 @@ node-abort-controller@^3.0.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== +node-addon-api@^8.3.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.5.0.tgz#c91b2d7682fa457d2e1c388150f0dff9aafb8f3f" + integrity sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A== + node-emoji@1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -5958,15 +6005,20 @@ node-emoji@1.11.0: dependencies: lodash "^4.17.21" +node-gyp-build@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.21: - version "2.0.21" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" - integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== +node-releases@^2.0.26: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== normalize-path@^3.0.0: version "3.0.0" @@ -6175,12 +6227,7 @@ path-scurry@^2.0.0: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" - integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== - -path-to-regexp@^8.0.0: +path-to-regexp@8.3.0, path-to-regexp@^8.0.0: version "8.3.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== @@ -6376,11 +6423,6 @@ reflect-metadata@0.2.2, reflect-metadata@^0.2.2: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6419,11 +6461,11 @@ resolve.exports@^2.0.0: integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.20.0: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.16.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -6499,9 +6541,9 @@ schema-utils@^3.1.1: ajv-keywords "^3.5.2" schema-utils@^4.3.0, schema-utils@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" - integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -6532,10 +6574,10 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.2: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== send@^1.1.0, send@^1.2.0: version "1.2.0" @@ -6731,14 +6773,13 @@ streamsearch@^1.1.0: integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== streamx@^2.15.0: - version "2.22.1" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.1.tgz#c97cbb0ce18da4f4db5a971dc9ab68ff5dc7f5a5" - integrity sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA== + version "2.23.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" + integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg== dependencies: + events-universal "^1.0.0" fast-fifo "^1.3.2" text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" string-length@^4.0.1: version "4.0.2" @@ -6885,10 +6926,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -swagger-ui-dist@5.21.0: - version "5.21.0" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.21.0.tgz#aed230fe6e294c9470217e67697d601e3bb8eb9d" - integrity sha512-E0K3AB6HvQd8yQNSMR7eE5bk+323AUxjtCz/4ZNKiahOlPhPJxqn3UPIGs00cyY/dhrTDJ61L7C/a8u6zhGrZg== +swagger-ui-dist@5.29.4: + version "5.29.4" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.29.4.tgz#ba86ff7e18b6b23eecfc32a81220f032d748b468" + integrity sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng== dependencies: "@scarf/scarf" "=1.4.0" @@ -6905,9 +6946,9 @@ synckit@^0.11.7: "@pkgr/core" "^0.2.9" tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.3.tgz#4b67b635b2d97578a06a2713d2f04800c237e99b" - integrity sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar-stream@^3.1.7: version "3.1.7" @@ -6970,7 +7011,7 @@ tildify@2.0.0: resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== -tinyglobby@^0.2.13: +tinyglobby@^0.2.13, tinyglobby@^0.2.14: version "0.2.15" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== @@ -7015,9 +7056,9 @@ ts-api-utils@^2.1.0: integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== ts-jest@^29.4.0: - version "29.4.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.1.tgz#42d33beb74657751d315efb9a871fe99e3b9b519" - integrity sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw== + version "29.4.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.5.tgz#a6b0dc401e521515d5342234be87f1ca96390a6f" + integrity sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q== dependencies: bs-logger "^0.2.6" fast-json-stable-stringify "^2.1.0" @@ -7025,7 +7066,7 @@ ts-jest@^29.4.0: json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.7.2" + semver "^7.7.3" type-fest "^4.41.0" yargs-parser "^21.1.1" @@ -7040,12 +7081,12 @@ ts-loader@^9.5.2: semver "^7.3.4" source-map "^0.7.4" -ts-morph@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-26.0.0.tgz#d435ccac9421d4615fde8be86fee782f18cd9f73" - integrity sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug== +ts-morph@27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-27.0.2.tgz#7b2fcce6822eeca3942fa6c601f159d5920b1422" + integrity sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w== dependencies: - "@ts-morph/common" "~0.27.0" + "@ts-morph/common" "~0.28.1" code-block-writer "^13.0.3" ts-node@^10.9.2: @@ -7136,14 +7177,14 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript-eslint@^8.34.1: - version "8.43.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.43.0.tgz#335ac16a859f385dfb23022e0d8298962364d099" - integrity sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w== + version "8.46.2" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.46.2.tgz#da1adec683ba93a1b6c3850a4efb0922ffbc627d" + integrity sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg== dependencies: - "@typescript-eslint/eslint-plugin" "8.43.0" - "@typescript-eslint/parser" "8.43.0" - "@typescript-eslint/typescript-estree" "8.43.0" - "@typescript-eslint/utils" "8.43.0" + "@typescript-eslint/eslint-plugin" "8.46.2" + "@typescript-eslint/parser" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/utils" "8.46.2" typescript@5.8.3: version "5.8.3" @@ -7151,9 +7192,9 @@ typescript@5.8.3: integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== typescript@^5.7.3: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uglify-js@^3.1.4: version "3.19.3" @@ -7185,10 +7226,10 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" - integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== universalify@^2.0.0: version "2.0.1" @@ -7200,10 +7241,10 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -7230,11 +7271,6 @@ uuid@^11.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -7250,9 +7286,9 @@ v8-to-istanbul@^9.0.1: convert-source-map "^2.0.0" validator@^13.9.0: - version "13.15.15" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.15.tgz#246594be5671dc09daa35caec5689fcd18c6e7e4" - integrity sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A== + version "13.15.20" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.20.tgz#054e9238109538a1bf46ae3e1290845a64fa2186" + integrity sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw== vary@^1, vary@^1.1.2: version "1.1.2" From bd33c14b84763fd9d177244bc22c0701cc2a140f Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 02:22:35 +0900 Subject: [PATCH 16/67] =?UTF-8?q?chore:=20auth=20=EB=94=94=EB=A0=89?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/auth-event.handler.ts | 4 +- src/app.module.ts | 2 + .../authorize-oauth.use-case.ts | 0 .../dto/authorize-oauth.request.dto.ts | 2 +- .../dto/authorize-oauth.response.dto.ts | 0 .../logout/dto/logout.request.dto.ts | 0 .../application/logout/logout.use-case.ts | 2 +- .../dto/oauth-login.response.dto.ts | 0 .../oauth-login/oauth-login.command.ts | 2 +- .../oauth-login/oauth-login.handler.ts | 8 ++-- .../dto/renew-token.request.dto.ts | 0 .../dto/renew-token.response.dto.ts | 0 .../renew-token/renew-token.use-case.ts | 2 +- .../domain}/auth.repository.ts | 2 +- .../entity => auth-user/domain}/auth.ts | 4 +- .../domain/event/auth-created.event.ts | 0 .../domain/event/login-succeeded.event.ts | 0 .../value-object/oauth-provider.enum.ts | 0 .../infrasturcture}/auth.entity.ts | 2 +- .../infrasturcture}/auth.mapper.ts | 4 +- .../infrasturcture}/auth.repository.impl.ts | 10 ++-- .../presentation/auth.controller.spec.ts | 0 .../presentation/auth.controller.ts | 0 .../{ => auth-user}/presentation/auth.docs.ts | 0 src/auth/auth.module.ts | 16 +++---- .../oauth/base-oauth.provider.ts | 2 +- .../infrastructure/oauth/kakao.provider.ts | 4 +- .../oauth/oauth-provider.factory.ts | 2 +- src/shared/exception/custom-exception-code.ts | 46 +++++++++++++++++++ src/shared/shared.module.ts | 6 +-- .../create/create-user.listener.ts | 2 +- .../application/delete/delete.handler.ts | 2 +- .../command/infrastructure/user.entity.ts | 2 +- 33 files changed, 87 insertions(+), 39 deletions(-) rename src/auth/{ => auth-user}/application/authorize-oauth/authorize-oauth.use-case.ts (100%) rename src/auth/{ => auth-user}/application/authorize-oauth/dto/authorize-oauth.request.dto.ts (70%) rename src/auth/{ => auth-user}/application/authorize-oauth/dto/authorize-oauth.response.dto.ts (100%) rename src/auth/{ => auth-user}/application/logout/dto/logout.request.dto.ts (100%) rename src/auth/{ => auth-user}/application/logout/logout.use-case.ts (89%) rename src/auth/{ => auth-user}/application/oauth-login/dto/oauth-login.response.dto.ts (100%) rename src/auth/{ => auth-user}/application/oauth-login/oauth-login.command.ts (72%) rename src/auth/{ => auth-user}/application/oauth-login/oauth-login.handler.ts (91%) rename src/auth/{ => auth-user}/application/renew-token/dto/renew-token.request.dto.ts (100%) rename src/auth/{ => auth-user}/application/renew-token/dto/renew-token.response.dto.ts (100%) rename src/auth/{ => auth-user}/application/renew-token/renew-token.use-case.ts (94%) rename src/auth/{domain/repository => auth-user/domain}/auth.repository.ts (90%) rename src/auth/{domain/entity => auth-user/domain}/auth.ts (93%) rename src/auth/{ => auth-user}/domain/event/auth-created.event.ts (100%) rename src/auth/{ => auth-user}/domain/event/login-succeeded.event.ts (100%) rename src/auth/{ => auth-user}/domain/value-object/oauth-provider.enum.ts (100%) rename src/auth/{infrastructure/orm-entity => auth-user/infrasturcture}/auth.entity.ts (89%) rename src/auth/{infrastructure/mapper => auth-user/infrasturcture}/auth.mapper.ts (91%) rename src/auth/{infrastructure/repository => auth-user/infrasturcture}/auth.repository.impl.ts (81%) rename src/auth/{ => auth-user}/presentation/auth.controller.spec.ts (100%) rename src/auth/{ => auth-user}/presentation/auth.controller.ts (100%) rename src/auth/{ => auth-user}/presentation/auth.docs.ts (100%) diff --git a/src/analytics/application/auth-event.handler.ts b/src/analytics/application/auth-event.handler.ts index a79e984..acd57f6 100644 --- a/src/analytics/application/auth-event.handler.ts +++ b/src/analytics/application/auth-event.handler.ts @@ -1,7 +1,7 @@ import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; -import { AuthCreatedEvent } from 'src/auth/domain/event/auth-created.event'; +import { AuthCreatedEvent } from 'src/auth/auth-user/domain/event/auth-created.event'; import { AnalyticsService } from '../infrastructure/analytics.service'; -import { LoginSucceededEvent } from 'src/auth/domain/event/login-succeeded.event'; +import { LoginSucceededEvent } from 'src/auth/auth-user/domain/event/login-succeeded.event'; @EventsHandler(AuthCreatedEvent) export class AuthCreatedEventHandler implements IEventHandler { diff --git a/src/app.module.ts b/src/app.module.ts index c48edf1..ab62e1c 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,6 +14,7 @@ import mikroOrmConfig from './shared/config/mikro-orm.config'; import config from 'src/shared/config/configuration'; import { AnalyticsModule } from './analytics/analytics.module'; import { OrganizationModule } from './organization/organization.module'; +import { AuthOrganizationModule } from './auth/auth-organization/auth-organization.module'; @Module({ imports: [ @@ -24,6 +25,7 @@ import { OrganizationModule } from './organization/organization.module'; }), AnalyticsModule, AuthModule, + AuthOrganizationModule, ArticleModule, UserModule, SharedModule, diff --git a/src/auth/application/authorize-oauth/authorize-oauth.use-case.ts b/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts similarity index 100% rename from src/auth/application/authorize-oauth/authorize-oauth.use-case.ts rename to src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts diff --git a/src/auth/application/authorize-oauth/dto/authorize-oauth.request.dto.ts b/src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.request.dto.ts similarity index 70% rename from src/auth/application/authorize-oauth/dto/authorize-oauth.request.dto.ts rename to src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.request.dto.ts index 028223b..e2beddd 100644 --- a/src/auth/application/authorize-oauth/dto/authorize-oauth.request.dto.ts +++ b/src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.request.dto.ts @@ -1,5 +1,5 @@ import { IsEnum, IsNotEmpty, IsString } from 'class-validator'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; export class AuthorizeOAuthRequestDto { @IsEnum(OAuthProviderType) diff --git a/src/auth/application/authorize-oauth/dto/authorize-oauth.response.dto.ts b/src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.response.dto.ts similarity index 100% rename from src/auth/application/authorize-oauth/dto/authorize-oauth.response.dto.ts rename to src/auth/auth-user/application/authorize-oauth/dto/authorize-oauth.response.dto.ts diff --git a/src/auth/application/logout/dto/logout.request.dto.ts b/src/auth/auth-user/application/logout/dto/logout.request.dto.ts similarity index 100% rename from src/auth/application/logout/dto/logout.request.dto.ts rename to src/auth/auth-user/application/logout/dto/logout.request.dto.ts diff --git a/src/auth/application/logout/logout.use-case.ts b/src/auth/auth-user/application/logout/logout.use-case.ts similarity index 89% rename from src/auth/application/logout/logout.use-case.ts rename to src/auth/auth-user/application/logout/logout.use-case.ts index 1be16af..996ed14 100644 --- a/src/auth/application/logout/logout.use-case.ts +++ b/src/auth/auth-user/application/logout/logout.use-case.ts @@ -1,8 +1,8 @@ import { Inject, Injectable } from '@nestjs/common'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; import { LogoutRequestDto } from './dto/logout.request.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; @Injectable() export class LogoutUseCase { diff --git a/src/auth/application/oauth-login/dto/oauth-login.response.dto.ts b/src/auth/auth-user/application/oauth-login/dto/oauth-login.response.dto.ts similarity index 100% rename from src/auth/application/oauth-login/dto/oauth-login.response.dto.ts rename to src/auth/auth-user/application/oauth-login/dto/oauth-login.response.dto.ts diff --git a/src/auth/application/oauth-login/oauth-login.command.ts b/src/auth/auth-user/application/oauth-login/oauth-login.command.ts similarity index 72% rename from src/auth/application/oauth-login/oauth-login.command.ts rename to src/auth/auth-user/application/oauth-login/oauth-login.command.ts index 6a05f95..c9cf5c8 100644 --- a/src/auth/application/oauth-login/oauth-login.command.ts +++ b/src/auth/auth-user/application/oauth-login/oauth-login.command.ts @@ -1,5 +1,5 @@ import { ICommand } from '@nestjs/cqrs'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; export class OAuthLoginCommand implements ICommand { constructor( diff --git a/src/auth/application/oauth-login/oauth-login.handler.ts b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts similarity index 91% rename from src/auth/application/oauth-login/oauth-login.handler.ts rename to src/auth/auth-user/application/oauth-login/oauth-login.handler.ts index 76c5a70..539c70a 100644 --- a/src/auth/application/oauth-login/oauth-login.handler.ts +++ b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts @@ -1,17 +1,17 @@ import { Inject, Injectable } from '@nestjs/common'; -import { Auth } from 'src/auth/domain/entity/auth'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; +import { Auth } from 'src/auth/auth-user/domain/auth'; import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; import { Identifier } from 'src/shared/core/domain/identifier'; import { OAuthLoginResponseDto } from './dto/oauth-login.response.dto'; import { Transactional } from '@mikro-orm/core'; import { Role } from 'src/user/command/domain/value-object/role.enum'; import { CommandHandler, EventBus } from '@nestjs/cqrs'; -import { AuthCreatedEvent } from 'src/auth/domain/event/auth-created.event'; +import { AuthCreatedEvent } from 'src/auth/auth-user/domain/event/auth-created.event'; import { OAuthLoginCommand } from './oauth-login.command'; +import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; @Injectable() @CommandHandler(OAuthLoginCommand) diff --git a/src/auth/application/renew-token/dto/renew-token.request.dto.ts b/src/auth/auth-user/application/renew-token/dto/renew-token.request.dto.ts similarity index 100% rename from src/auth/application/renew-token/dto/renew-token.request.dto.ts rename to src/auth/auth-user/application/renew-token/dto/renew-token.request.dto.ts diff --git a/src/auth/application/renew-token/dto/renew-token.response.dto.ts b/src/auth/auth-user/application/renew-token/dto/renew-token.response.dto.ts similarity index 100% rename from src/auth/application/renew-token/dto/renew-token.response.dto.ts rename to src/auth/auth-user/application/renew-token/dto/renew-token.response.dto.ts diff --git a/src/auth/application/renew-token/renew-token.use-case.ts b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts similarity index 94% rename from src/auth/application/renew-token/renew-token.use-case.ts rename to src/auth/auth-user/application/renew-token/renew-token.use-case.ts index 54b4905..68f6862 100644 --- a/src/auth/application/renew-token/renew-token.use-case.ts +++ b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts @@ -1,5 +1,4 @@ import { Inject, Injectable } from '@nestjs/common'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; import { RenewTokenRequestDto } from './dto/renew-token.request.dto'; @@ -7,6 +6,7 @@ import { RenewTokenResponseDto } from './dto/renew-token.response.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { EventBus } from '@nestjs/cqrs'; +import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; @Injectable() export class RenewTokenUseCase { diff --git a/src/auth/domain/repository/auth.repository.ts b/src/auth/auth-user/domain/auth.repository.ts similarity index 90% rename from src/auth/domain/repository/auth.repository.ts rename to src/auth/auth-user/domain/auth.repository.ts index 08d695c..5ce5bb9 100644 --- a/src/auth/domain/repository/auth.repository.ts +++ b/src/auth/auth-user/domain/auth.repository.ts @@ -1,4 +1,4 @@ -import { Auth } from '../entity/auth'; +import { Auth } from './auth'; export interface AuthRepository { save(auth: Auth): Promise; diff --git a/src/auth/domain/entity/auth.ts b/src/auth/auth-user/domain/auth.ts similarity index 93% rename from src/auth/domain/entity/auth.ts rename to src/auth/auth-user/domain/auth.ts index ad54c97..fba1363 100644 --- a/src/auth/domain/entity/auth.ts +++ b/src/auth/auth-user/domain/auth.ts @@ -1,10 +1,10 @@ import { BaseEntityProps } from 'src/shared/core/domain/base.entity'; import { Identifier } from 'src/shared/core/domain/identifier'; -import { OAuthProviderType } from '../value-object/oauth-provider.enum'; +import { OAuthProviderType } from './value-object/oauth-provider.enum'; import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; -import { LoginSucceededEvent } from '../event/login-succeeded.event'; +import { LoginSucceededEvent } from './event/login-succeeded.event'; export interface AuthProps extends BaseEntityProps { oauthId: string; diff --git a/src/auth/domain/event/auth-created.event.ts b/src/auth/auth-user/domain/event/auth-created.event.ts similarity index 100% rename from src/auth/domain/event/auth-created.event.ts rename to src/auth/auth-user/domain/event/auth-created.event.ts diff --git a/src/auth/domain/event/login-succeeded.event.ts b/src/auth/auth-user/domain/event/login-succeeded.event.ts similarity index 100% rename from src/auth/domain/event/login-succeeded.event.ts rename to src/auth/auth-user/domain/event/login-succeeded.event.ts diff --git a/src/auth/domain/value-object/oauth-provider.enum.ts b/src/auth/auth-user/domain/value-object/oauth-provider.enum.ts similarity index 100% rename from src/auth/domain/value-object/oauth-provider.enum.ts rename to src/auth/auth-user/domain/value-object/oauth-provider.enum.ts diff --git a/src/auth/infrastructure/orm-entity/auth.entity.ts b/src/auth/auth-user/infrasturcture/auth.entity.ts similarity index 89% rename from src/auth/infrastructure/orm-entity/auth.entity.ts rename to src/auth/auth-user/infrasturcture/auth.entity.ts index 9ef40a0..52d8920 100644 --- a/src/auth/infrastructure/orm-entity/auth.entity.ts +++ b/src/auth/auth-user/infrasturcture/auth.entity.ts @@ -1,6 +1,6 @@ import { Cascade, Entity, OneToOne, Property, Unique } from '@mikro-orm/core'; import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { UserEntity } from 'src/user/command/infrastructure/user.entity'; @Entity({ tableName: 'auth' }) diff --git a/src/auth/infrastructure/mapper/auth.mapper.ts b/src/auth/auth-user/infrasturcture/auth.mapper.ts similarity index 91% rename from src/auth/infrastructure/mapper/auth.mapper.ts rename to src/auth/auth-user/infrasturcture/auth.mapper.ts index 82637be..7f07b87 100644 --- a/src/auth/infrastructure/mapper/auth.mapper.ts +++ b/src/auth/auth-user/infrasturcture/auth.mapper.ts @@ -1,8 +1,8 @@ -import { Auth } from 'src/auth/domain/entity/auth'; -import { AuthEntity } from '../orm-entity/auth.entity'; +import { Auth } from 'src/auth/auth-user/domain/auth'; import { Identifier } from 'src/shared/core/domain/identifier'; import { EntityManager } from '@mikro-orm/mysql'; import { UserEntity } from 'src/user/command/infrastructure/user.entity'; +import { AuthEntity } from './auth.entity'; export class AuthMapper { static toDomain(entity: AuthEntity): Auth { diff --git a/src/auth/infrastructure/repository/auth.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth.repository.impl.ts similarity index 81% rename from src/auth/infrastructure/repository/auth.repository.impl.ts rename to src/auth/auth-user/infrasturcture/auth.repository.impl.ts index 4b6dfad..ca5e6dd 100644 --- a/src/auth/infrastructure/repository/auth.repository.impl.ts +++ b/src/auth/auth-user/infrasturcture/auth.repository.impl.ts @@ -1,10 +1,10 @@ import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; -import { Auth } from 'src/auth/domain/entity/auth'; -import { AuthRepository } from 'src/auth/domain/repository/auth.repository'; -import { AuthMapper } from '../mapper/auth.mapper'; -import { AuthEntity } from '../orm-entity/auth.entity'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { Auth } from 'src/auth/auth-user/domain/auth'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { InjectRepository } from '@mikro-orm/nestjs'; +import { AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; +import { AuthEntity } from './auth.entity'; +import { AuthMapper } from './auth.mapper'; export class AuthRepositoryImpl implements AuthRepository { constructor( diff --git a/src/auth/presentation/auth.controller.spec.ts b/src/auth/auth-user/presentation/auth.controller.spec.ts similarity index 100% rename from src/auth/presentation/auth.controller.spec.ts rename to src/auth/auth-user/presentation/auth.controller.spec.ts diff --git a/src/auth/presentation/auth.controller.ts b/src/auth/auth-user/presentation/auth.controller.ts similarity index 100% rename from src/auth/presentation/auth.controller.ts rename to src/auth/auth-user/presentation/auth.controller.ts diff --git a/src/auth/presentation/auth.docs.ts b/src/auth/auth-user/presentation/auth.docs.ts similarity index 100% rename from src/auth/presentation/auth.docs.ts rename to src/auth/auth-user/presentation/auth.docs.ts diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 5a27642..7e5805f 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,22 +1,22 @@ import { Module } from '@nestjs/common'; -import { AUTH_REPOSITORY } from './domain/repository/auth.repository'; -import { AuthRepositoryImpl } from './infrastructure/repository/auth.repository.impl'; -import { AuthController } from './presentation/auth.controller'; +import { AuthRepositoryImpl } from './auth-user/infrasturcture/auth.repository.impl'; +import { AuthController } from './auth-user/presentation/auth.controller'; import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthEntity } from './infrastructure/orm-entity/auth.entity'; -import { OAuthLoginUseCase } from './application/oauth-login/oauth-login.handler'; +import { AuthEntity } from './auth-user/infrasturcture/auth.entity'; +import { OAuthLoginUseCase } from './auth-user/application/oauth-login/oauth-login.handler'; import { OAuthProviderFactory } from '../shared/core/infrastructure/oauth/oauth-provider.factory'; import { KakaoOAuthProvider } from '../shared/core/infrastructure/oauth/kakao.provider'; -import { AuthorizeOAuthUseCase } from './application/authorize-oauth/authorize-oauth.use-case'; +import { AuthorizeOAuthUseCase } from './auth-user/application/authorize-oauth/authorize-oauth.use-case'; import { JwtProvider } from './infrastructure/jwt/jwt.provider'; import { JwtModule } from '@nestjs/jwt'; import { JwtAccessStrategy } from './infrastructure/jwt/jwt-access.strategy'; import { JwtRefreshStrategy } from './infrastructure/jwt/jwt-refresh.strategy'; import { PassportModule } from '@nestjs/passport'; -import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; -import { LogoutUseCase } from './application/logout/logout.use-case'; +import { RenewTokenUseCase } from './auth-user/application/renew-token/renew-token.use-case'; +import { LogoutUseCase } from './auth-user/application/logout/logout.use-case'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; +import { AUTH_REPOSITORY } from './auth-user/domain/auth.repository'; const useCases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; diff --git a/src/shared/core/infrastructure/oauth/base-oauth.provider.ts b/src/shared/core/infrastructure/oauth/base-oauth.provider.ts index 649d4dd..2ed1207 100644 --- a/src/shared/core/infrastructure/oauth/base-oauth.provider.ts +++ b/src/shared/core/infrastructure/oauth/base-oauth.provider.ts @@ -1,4 +1,4 @@ -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; export interface BaseOAuthProvider { getToken(code: string): Promise; diff --git a/src/shared/core/infrastructure/oauth/kakao.provider.ts b/src/shared/core/infrastructure/oauth/kakao.provider.ts index d2de518..631ae50 100644 --- a/src/shared/core/infrastructure/oauth/kakao.provider.ts +++ b/src/shared/core/infrastructure/oauth/kakao.provider.ts @@ -2,8 +2,8 @@ import { Inject, Injectable, NotFoundException, UnauthorizedException } from '@n import axios from 'axios'; import { ConfigService } from '@nestjs/config'; import { BaseOAuthProvider, OAuthUser } from './base-oauth.provider'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/domain/repository/auth.repository'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; +import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; interface KakaoTokenResponse { access_token: string; diff --git a/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts b/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts index fb4eaa3..edb8156 100644 --- a/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts +++ b/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { BaseOAuthProvider } from './base-oauth.provider'; import { KakaoOAuthProvider } from './kakao.provider'; -import { OAuthProviderType } from 'src/auth/domain/value-object/oauth-provider.enum'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; @Injectable() export class OAuthProviderFactory { diff --git a/src/shared/exception/custom-exception-code.ts b/src/shared/exception/custom-exception-code.ts index 0e6f9a2..033598b 100644 --- a/src/shared/exception/custom-exception-code.ts +++ b/src/shared/exception/custom-exception-code.ts @@ -39,6 +39,17 @@ export enum CustomExceptionCode { SCRAP_ARTICLE_ID_OR_USER_ID_EMPTY = 'SCRAP_ARTICLE_ID_OR_USER_ID_EMPTY', SCRAP_ALREADY_EXISTS = 'SCRAP_ALREADY_EXISTS', SCRAP_NOT_FOUND = 'SCRAP_NOT_FOUND', + + // Auth Organization + AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_FORMAT = 'AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_FORMAT', + AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH = 'AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH', + AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH = 'AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH', + AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT = 'AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT', + + // Organization + ORGANIZATION_INVALID_NAME_LENGTH = 'ORGANIZATION_INVALID_NAME_LENGTH', + ORGANIZATION_INVALID_CONTACT_FORMAT = 'ORGANIZATION_INVALID_CONTACT_FORMAT', + ORGANIZATION_NOT_FOUND = 'ORGANIZATION_NOT_FOUND', } export const ExceptionInfo: Record = { @@ -180,4 +191,39 @@ export const ExceptionInfo: Record Date: Sun, 2 Nov 2025 15:35:23 +0900 Subject: [PATCH 17/67] =?UTF-8?q?chore:=20=EB=8C=80=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 2 - .../authorize-oauth.use-case.ts | 2 +- .../application/logout/logout.use-case.ts | 6 +-- .../oauth-login/oauth-login.handler.ts | 42 +++++++-------- .../renew-token/renew-token.use-case.ts | 21 ++++---- src/auth/auth-user/auth-user.module.ts | 29 +++++++++++ .../auth-user/domain/auth-user.repository.ts | 11 ++++ .../domain/{auth.ts => auth-user.ts} | 20 +++---- src/auth/auth-user/domain/auth.repository.ts | 11 ---- .../{auth.entity.ts => auth-user.entity.ts} | 4 +- .../{auth.mapper.ts => auth-user.mapper.ts} | 14 ++--- .../auth-user.repository.impl.ts | 52 +++++++++++++++++++ .../infrasturcture/auth.repository.impl.ts | 52 ------------------- ....controller.ts => auth-user.controller.ts} | 14 ++--- .../{auth.docs.ts => auth-user.docs.ts} | 4 +- .../presentation/auth.controller.spec.ts | 18 ------- src/auth/auth.module.ts | 38 ++------------ .../infrastructure/jwt/jwt-access.strategy.ts | 0 .../jwt/jwt-refresh.strategy.ts | 0 .../core/infrastructure/jwt/jwt.factory.ts | 28 ++++++++++ .../infrastructure/jwt/jwt.provider.ts | 8 +-- .../oauth/base-oauth.provider.ts | 0 .../infrastructure/oauth/kakao.provider.ts | 6 +-- .../oauth/oauth-provider.factory.ts | 0 src/auth/infrastructure/jwt/jwt.factory.ts | 19 ------- src/shared/shared.module.ts | 19 ++----- .../application/delete/delete.handler.ts | 2 +- .../user.command.repository.impl.ts | 2 +- .../command/infrastructure/user.entity.ts | 6 +-- 29 files changed, 204 insertions(+), 226 deletions(-) create mode 100644 src/auth/auth-user/auth-user.module.ts create mode 100644 src/auth/auth-user/domain/auth-user.repository.ts rename src/auth/auth-user/domain/{auth.ts => auth-user.ts} (78%) delete mode 100644 src/auth/auth-user/domain/auth.repository.ts rename src/auth/auth-user/infrasturcture/{auth.entity.ts => auth-user.entity.ts} (88%) rename src/auth/auth-user/infrasturcture/{auth.mapper.ts => auth-user.mapper.ts} (72%) create mode 100644 src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts delete mode 100644 src/auth/auth-user/infrasturcture/auth.repository.impl.ts rename src/auth/auth-user/presentation/{auth.controller.ts => auth-user.controller.ts} (92%) rename src/auth/auth-user/presentation/{auth.docs.ts => auth-user.docs.ts} (93%) delete mode 100644 src/auth/auth-user/presentation/auth.controller.spec.ts rename src/auth/{ => core}/infrastructure/jwt/jwt-access.strategy.ts (100%) rename src/auth/{ => core}/infrastructure/jwt/jwt-refresh.strategy.ts (100%) create mode 100644 src/auth/core/infrastructure/jwt/jwt.factory.ts rename src/auth/{ => core}/infrastructure/jwt/jwt.provider.ts (69%) rename src/{shared => auth}/core/infrastructure/oauth/base-oauth.provider.ts (100%) rename src/{shared => auth}/core/infrastructure/oauth/kakao.provider.ts (94%) rename src/{shared => auth}/core/infrastructure/oauth/oauth-provider.factory.ts (100%) delete mode 100644 src/auth/infrastructure/jwt/jwt.factory.ts diff --git a/src/app.module.ts b/src/app.module.ts index ab62e1c..c48edf1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,7 +14,6 @@ import mikroOrmConfig from './shared/config/mikro-orm.config'; import config from 'src/shared/config/configuration'; import { AnalyticsModule } from './analytics/analytics.module'; import { OrganizationModule } from './organization/organization.module'; -import { AuthOrganizationModule } from './auth/auth-organization/auth-organization.module'; @Module({ imports: [ @@ -25,7 +24,6 @@ import { AuthOrganizationModule } from './auth/auth-organization/auth-organizati }), AnalyticsModule, AuthModule, - AuthOrganizationModule, ArticleModule, UserModule, SharedModule, diff --git a/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts b/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts index 2bd6828..2c4c5df 100644 --- a/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts +++ b/src/auth/auth-user/application/authorize-oauth/authorize-oauth.use-case.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; import { AuthorizeOAuthRequestDto } from './dto/authorize-oauth.request.dto'; import { AuthorizeOAuthResponseDto } from './dto/authorize-oauth.response.dto'; diff --git a/src/auth/auth-user/application/logout/logout.use-case.ts b/src/auth/auth-user/application/logout/logout.use-case.ts index 996ed14..dee96e0 100644 --- a/src/auth/auth-user/application/logout/logout.use-case.ts +++ b/src/auth/auth-user/application/logout/logout.use-case.ts @@ -2,13 +2,13 @@ import { Inject, Injectable } from '@nestjs/common'; import { LogoutRequestDto } from './dto/logout.request.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; -import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; @Injectable() export class LogoutUseCase { constructor( - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authRepository: AuthUserRepository, ) {} async execute(requestDto: LogoutRequestDto): Promise { diff --git a/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts index 539c70a..e457a94 100644 --- a/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts +++ b/src/auth/auth-user/application/oauth-login/oauth-login.handler.ts @@ -1,9 +1,9 @@ import { Inject, Injectable } from '@nestjs/common'; -import { Auth } from 'src/auth/auth-user/domain/auth'; -import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; -import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; +import { TokenType } from 'src/auth/core/infrastructure/jwt/jwt.factory'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; +import { JwtProvider } from 'src/auth/core/infrastructure/jwt/jwt.provider'; import { Identifier } from 'src/shared/core/domain/identifier'; import { OAuthLoginResponseDto } from './dto/oauth-login.response.dto'; import { Transactional } from '@mikro-orm/core'; @@ -11,7 +11,7 @@ import { Role } from 'src/user/command/domain/value-object/role.enum'; import { CommandHandler, EventBus } from '@nestjs/cqrs'; import { AuthCreatedEvent } from 'src/auth/auth-user/domain/event/auth-created.event'; import { OAuthLoginCommand } from './oauth-login.command'; -import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; @Injectable() @CommandHandler(OAuthLoginCommand) @@ -20,8 +20,8 @@ export class OAuthLoginUseCase { constructor( private readonly oAuthProviderFactory: OAuthProviderFactory, private readonly jwtProvider: JwtProvider, - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authUserRepository: AuthUserRepository, private readonly eventBus: EventBus, ) { this.now = new Date(); @@ -31,11 +31,11 @@ export class OAuthLoginUseCase { async execute(command: OAuthLoginCommand): Promise { const { oAuthProviderType, code } = command; const { oauthId, provider, email } = await this.getOAuthUserInfo(oAuthProviderType, code); - const auth = await this.findOrCreateAuth(oauthId, provider, email); - const { accessToken, refreshToken } = await this.generateAndSaveTokens(auth); + const authUser = await this.findOrCreateAuth(oauthId, provider, email); + const { accessToken, refreshToken } = await this.generateAndSaveTokens(authUser); const redirectUrl = this.decodeRedirectUrl(command.state); - return { accessToken, refreshToken, userId: auth.userId.value, redirectUrl }; + return { accessToken, refreshToken, userId: authUser.userId.value, redirectUrl }; } // 소셜로그인 유저저 정보 가져오기 @@ -47,8 +47,8 @@ export class OAuthLoginUseCase { } // 유저 생성 및 정보 가져오기 - private async findOrCreateAuth(oauthId: string, provider: OAuthProviderType, email: string): Promise { - const existingAuth = await this.authRepository.findByOAuthIdandProvider(oauthId, provider); + private async findOrCreateAuth(oauthId: string, provider: OAuthProviderType, email: string): Promise { + const existingAuth = await this.authUserRepository.findByOAuthIdandProvider(oauthId, provider); if (existingAuth) { this.eventBus.publish(existingAuth); return existingAuth; @@ -58,7 +58,7 @@ export class OAuthLoginUseCase { await this.eventBus.publish(new AuthCreatedEvent(userId, email, Role.GENERAL, provider)); - const auth = Auth.create({ + const authUser = AuthUser.create({ id: Identifier.create(), createdAt: this.now, updatedAt: this.now, @@ -69,20 +69,20 @@ export class OAuthLoginUseCase { userId: userId, }); - await this.authRepository.save(auth); + await this.authUserRepository.save(authUser); - await this.eventBus.publishAll(auth.pullDomainEvents()); + await this.eventBus.publishAll(authUser.pullDomainEvents()); - return auth; + return authUser; } // 토큰 생성 및 저장 - private async generateAndSaveTokens(auth: Auth) { - const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, auth.userId.value); - const { token: refreshToken, jti } = await this.jwtProvider.generateToken(TokenType.REFRESH, auth.userId.value); + private async generateAndSaveTokens(authUser: AuthUser) { + const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, authUser.userId.value); + const { token: refreshToken, jti } = await this.jwtProvider.generateToken(TokenType.REFRESH, authUser.userId.value); - auth.updateRefreshToken(jti, this.now); - await this.authRepository.update(auth); + authUser.updateRefreshToken(jti, this.now); + await this.authUserRepository.update(authUser); return { accessToken, refreshToken }; } diff --git a/src/auth/auth-user/application/renew-token/renew-token.use-case.ts b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts index 68f6862..62d0b4c 100644 --- a/src/auth/auth-user/application/renew-token/renew-token.use-case.ts +++ b/src/auth/auth-user/application/renew-token/renew-token.use-case.ts @@ -1,34 +1,35 @@ import { Inject, Injectable } from '@nestjs/common'; -import { TokenType } from 'src/auth/infrastructure/jwt/jwt.factory'; -import { JwtProvider } from 'src/auth/infrastructure/jwt/jwt.provider'; +import { TokenType } from 'src/auth/core/infrastructure/jwt/jwt.factory'; +import { JwtProvider } from 'src/auth/core/infrastructure/jwt/jwt.provider'; import { RenewTokenRequestDto } from './dto/renew-token.request.dto'; import { RenewTokenResponseDto } from './dto/renew-token.response.dto'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { EventBus } from '@nestjs/cqrs'; -import { AUTH_REPOSITORY, AuthRepository } from '../../domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; @Injectable() export class RenewTokenUseCase { constructor( private readonly jwtProvider: JwtProvider, - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authUserRepository: AuthUserRepository, private readonly eventBus: EventBus, ) {} async execute(reqeustDto: RenewTokenRequestDto): Promise { const { userId, jti } = reqeustDto; - const auth = await this.authRepository.findByRefreshToken(jti); - if (!auth || userId != auth.userId.value) throw new CustomException(CustomExceptionCode.AUTH_INVALID_REFRESH_TOKEN); + const authUser = await this.authUserRepository.findByRefreshToken(jti); + if (!authUser || userId != authUser.userId.value) + throw new CustomException(CustomExceptionCode.AUTH_INVALID_REFRESH_TOKEN); const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, userId); const { token: refreshToken, jti: newJti } = await this.jwtProvider.generateToken(TokenType.REFRESH, userId); - auth.updateRefreshToken(newJti, new Date()); - await this.authRepository.update(auth); + authUser.updateRefreshToken(newJti, new Date()); + await this.authUserRepository.update(authUser); - await this.eventBus.publishAll(auth.pullDomainEvents()); + await this.eventBus.publishAll(authUser.pullDomainEvents()); return { accessToken, refreshToken }; } diff --git a/src/auth/auth-user/auth-user.module.ts b/src/auth/auth-user/auth-user.module.ts new file mode 100644 index 0000000..58074eb --- /dev/null +++ b/src/auth/auth-user/auth-user.module.ts @@ -0,0 +1,29 @@ +import { Module } from '@nestjs/common'; +import { AuthUserRepositoryImpl } from './infrasturcture/auth-user.repository.impl'; +import { AUTH_USER_REPOSITORY } from './domain/auth-user.repository'; +import { OAuthLoginUseCase } from './application/oauth-login/oauth-login.handler'; +import { AuthorizeOAuthUseCase } from './application/authorize-oauth/authorize-oauth.use-case'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { AuthUserEntity } from './infrasturcture/auth-user.entity'; +import { AuthUserController } from './presentation/auth-user.controller'; +import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; +import { LogoutUseCase } from './application/logout/logout.use-case'; +import { AuthCoreModule } from '../core/auth-core.module'; +import { SharedModule } from 'src/shared/shared.module'; +import { CqrsModule } from '@nestjs/cqrs'; + +const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; + +@Module({ + imports: [MikroOrmModule.forFeature([AuthUserEntity]), AuthCoreModule, SharedModule, CqrsModule], + providers: [ + { + provide: AUTH_USER_REPOSITORY, + useClass: AuthUserRepositoryImpl, + }, + ...usecases, + ], + controllers: [AuthUserController], + exports: [], +}) +export class AuthUserModule {} diff --git a/src/auth/auth-user/domain/auth-user.repository.ts b/src/auth/auth-user/domain/auth-user.repository.ts new file mode 100644 index 0000000..9769b07 --- /dev/null +++ b/src/auth/auth-user/domain/auth-user.repository.ts @@ -0,0 +1,11 @@ +import { AuthUser } from './auth-user'; + +export interface AuthUserRepository { + save(authUser: AuthUser): Promise; + update(authUser: AuthUser): Promise; + findByOAuthIdandProvider(oauthId: string, provider: string): Promise; + findByRefreshToken(refreshToken: string): Promise; + findByUserId(userId: string): Promise; +} + +export const AUTH_USER_REPOSITORY = Symbol('AUTH_USER_REPOSITORY'); diff --git a/src/auth/auth-user/domain/auth.ts b/src/auth/auth-user/domain/auth-user.ts similarity index 78% rename from src/auth/auth-user/domain/auth.ts rename to src/auth/auth-user/domain/auth-user.ts index fba1363..d6ba3df 100644 --- a/src/auth/auth-user/domain/auth.ts +++ b/src/auth/auth-user/domain/auth-user.ts @@ -6,7 +6,7 @@ import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { LoginSucceededEvent } from './event/login-succeeded.event'; -export interface AuthProps extends BaseEntityProps { +export interface AuthUserProps extends BaseEntityProps { oauthId: string; provider: OAuthProviderType; refreshToken: string | null; @@ -14,21 +14,21 @@ export interface AuthProps extends BaseEntityProps { userId: Identifier; } -export class Auth extends AggregateRoot { - constructor(props: AuthProps) { +export class AuthUser extends AggregateRoot { + constructor(props: AuthUserProps) { super(props); } - public static create(props: AuthProps): Auth { - const auth = new Auth(props); - auth.validate(); - auth.addDomainEvent(new LoginSucceededEvent(auth.userId, auth.provider)); + public static create(props: AuthUserProps): AuthUser { + const authUser = new AuthUser(props); + authUser.validate(); + authUser.addDomainEvent(new LoginSucceededEvent(authUser.userId, authUser.provider)); - return auth; + return authUser; } - public static of(props: AuthProps): Auth { - return new Auth(props); + public static of(props: AuthUserProps): AuthUser { + return new AuthUser(props); } public validate(): void { diff --git a/src/auth/auth-user/domain/auth.repository.ts b/src/auth/auth-user/domain/auth.repository.ts deleted file mode 100644 index 5ce5bb9..0000000 --- a/src/auth/auth-user/domain/auth.repository.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Auth } from './auth'; - -export interface AuthRepository { - save(auth: Auth): Promise; - update(auth: Auth): Promise; - findByOAuthIdandProvider(oauthId: string, provider: string): Promise; - findByRefreshToken(refreshToken: string): Promise; - findByUserId(userId: string): Promise; -} - -export const AUTH_REPOSITORY = Symbol('AUTH_REPOSITORY'); diff --git a/src/auth/auth-user/infrasturcture/auth.entity.ts b/src/auth/auth-user/infrasturcture/auth-user.entity.ts similarity index 88% rename from src/auth/auth-user/infrasturcture/auth.entity.ts rename to src/auth/auth-user/infrasturcture/auth-user.entity.ts index 52d8920..a6f21d9 100644 --- a/src/auth/auth-user/infrasturcture/auth.entity.ts +++ b/src/auth/auth-user/infrasturcture/auth-user.entity.ts @@ -5,7 +5,7 @@ import { UserEntity } from 'src/user/command/infrastructure/user.entity'; @Entity({ tableName: 'auth' }) @Unique({ properties: ['oauthId', 'provider'] }) -export class AuthEntity extends BaseEntity { +export class AuthUserEntity extends BaseEntity { @Property({ type: 'varchar', unique: true }) oauthId: string; @@ -18,7 +18,7 @@ export class AuthEntity extends BaseEntity { @Property({ type: 'varchar', unique: true, nullable: true }) oauthAccessToken: string | null; - @OneToOne(() => UserEntity, (user) => user.auth, { + @OneToOne(() => UserEntity, (user) => user.authUser, { owner: true, cascade: [Cascade.PERSIST, Cascade.REMOVE], unique: true, diff --git a/src/auth/auth-user/infrasturcture/auth.mapper.ts b/src/auth/auth-user/infrasturcture/auth-user.mapper.ts similarity index 72% rename from src/auth/auth-user/infrasturcture/auth.mapper.ts rename to src/auth/auth-user/infrasturcture/auth-user.mapper.ts index 7f07b87..1de14fc 100644 --- a/src/auth/auth-user/infrasturcture/auth.mapper.ts +++ b/src/auth/auth-user/infrasturcture/auth-user.mapper.ts @@ -1,12 +1,12 @@ -import { Auth } from 'src/auth/auth-user/domain/auth'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; import { Identifier } from 'src/shared/core/domain/identifier'; import { EntityManager } from '@mikro-orm/mysql'; import { UserEntity } from 'src/user/command/infrastructure/user.entity'; -import { AuthEntity } from './auth.entity'; +import { AuthUserEntity } from './auth-user.entity'; -export class AuthMapper { - static toDomain(entity: AuthEntity): Auth { - return Auth.of({ +export class AuthUserMapper { + static toDomain(entity: AuthUserEntity): AuthUser { + return AuthUser.of({ id: Identifier.from(entity.id), createdAt: entity.createdAt, updatedAt: entity.updatedAt, @@ -18,8 +18,8 @@ export class AuthMapper { }); } - static toEntity(domain: Auth, em: EntityManager): AuthEntity { - const entity = new AuthEntity(); + static toEntity(domain: AuthUser, em: EntityManager): AuthUserEntity { + const entity = new AuthUserEntity(); entity.id = domain.id.value; entity.createdAt = domain.createdAt; entity.updatedAt = domain.updatedAt; diff --git a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts new file mode 100644 index 0000000..23b6bf9 --- /dev/null +++ b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts @@ -0,0 +1,52 @@ +import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; +import { InjectRepository } from '@mikro-orm/nestjs'; +import { AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; +import { AuthUserEntity } from './auth-user.entity'; +import { AuthUserMapper } from './auth-user.mapper'; + +export class AuthUserRepositoryImpl implements AuthUserRepository { + constructor( + @InjectRepository(AuthUserEntity) + private readonly authOrmRepository: EntityRepository, + private readonly em: EntityManager, + ) {} + + async save(authUser: AuthUser): Promise { + const authUserEntity = AuthUserMapper.toEntity(authUser, this.em); + await this.em.persistAndFlush(authUserEntity); + } + + async findByOAuthIdandProvider(oauthId: string, provider: OAuthProviderType): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ oauthId, provider }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async findByRefreshToken(refreshToken: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ refreshToken }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async update(authUser: AuthUser): Promise { + await this.em.nativeUpdate( + AuthUserEntity, + { id: authUser.id.value }, + { + refreshToken: authUser.refreshToken, + updatedAt: authUser.updatedAt, + }, + ); + } + + async findByUserId(userId: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ user: userId }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } +} diff --git a/src/auth/auth-user/infrasturcture/auth.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth.repository.impl.ts deleted file mode 100644 index ca5e6dd..0000000 --- a/src/auth/auth-user/infrasturcture/auth.repository.impl.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; -import { Auth } from 'src/auth/auth-user/domain/auth'; -import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { InjectRepository } from '@mikro-orm/nestjs'; -import { AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; -import { AuthEntity } from './auth.entity'; -import { AuthMapper } from './auth.mapper'; - -export class AuthRepositoryImpl implements AuthRepository { - constructor( - @InjectRepository(AuthEntity) - private readonly authOrmRepository: EntityRepository, - private readonly em: EntityManager, - ) {} - - async save(auth: Auth): Promise { - const authEntity = AuthMapper.toEntity(auth, this.em); - await this.em.persistAndFlush(authEntity); - } - - async findByOAuthIdandProvider(oauthId: string, provider: OAuthProviderType): Promise { - const authEntity = await this.authOrmRepository.findOne({ oauthId, provider }); - if (!authEntity) return null; - - return AuthMapper.toDomain(authEntity); - } - - async findByRefreshToken(refreshToken: string): Promise { - const authEntity = await this.authOrmRepository.findOne({ refreshToken }); - if (!authEntity) return null; - - return AuthMapper.toDomain(authEntity); - } - - async update(auth: Auth): Promise { - await this.em.nativeUpdate( - AuthEntity, - { id: auth.id.value }, - { - refreshToken: auth.refreshToken, - updatedAt: auth.updatedAt, - }, - ); - } - - async findByUserId(userId: string): Promise { - const authEntity = await this.authOrmRepository.findOne({ user: userId }); - if (!authEntity) return null; - - return AuthMapper.toDomain(authEntity); - } -} diff --git a/src/auth/auth-user/presentation/auth.controller.ts b/src/auth/auth-user/presentation/auth-user.controller.ts similarity index 92% rename from src/auth/auth-user/presentation/auth.controller.ts rename to src/auth/auth-user/presentation/auth-user.controller.ts index 5d63a7d..c5b38e6 100644 --- a/src/auth/auth-user/presentation/auth.controller.ts +++ b/src/auth/auth-user/presentation/auth-user.controller.ts @@ -9,12 +9,12 @@ import { RenewTokenUseCase } from '../application/renew-token/renew-token.use-ca import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; import { LogoutUseCase } from '../application/logout/logout.use-case'; import { OAuthProviderType } from '../domain/value-object/oauth-provider.enum'; -import { AuthDocs } from './auth.docs'; import { ConfigService } from '@nestjs/config'; +import { AuthUserDocs } from './auth-user.docs'; -@ApiTags('auth') +@ApiTags('auth-user') @Controller('auth') -export class AuthController { +export class AuthUserController { constructor( private readonly oAuthLoginUseCase: OAuthLoginUseCase, private readonly authorizeOAuthUseCase: AuthorizeOAuthUseCase, @@ -24,7 +24,7 @@ export class AuthController { ) {} @Get('oauth/authorization') - @AuthDocs('oauthAuthorization') + @AuthUserDocs('oauthAuthorization') authorizeOAuth(@Query('returnPath') returnPath?: string) { const { authUrl } = this.authorizeOAuthUseCase.execute({ oAuthProviderType: OAuthProviderType.KAKAO, @@ -35,7 +35,7 @@ export class AuthController { } @Post('login/oauth/callback') - @AuthDocs('oauthCallback') + @AuthUserDocs('oauthCallback') async oAuthLogin( @Res() res: Response, @Query('code') code: string, @@ -60,7 +60,7 @@ export class AuthController { @Get('refresh') @UseGuards(AuthGuard('jwt-refresh')) - @AuthDocs('renewToken') + @AuthUserDocs('renewToken') async renewToken(@User() user: UserPayload, @Res() res: Response) { const { accessToken, refreshToken } = await this.renewTokenUseCase.execute({ userId: user.userId, jti: user.jti }); @@ -72,7 +72,7 @@ export class AuthController { @Post('logout') @UseGuards(AuthGuard('jwt-access')) - @AuthDocs('logout') + @AuthUserDocs('logout') async logout(@User() user: UserPayload, @Res() res: Response) { await this.logoutUseCase.execute({ userId: user.userId }); diff --git a/src/auth/auth-user/presentation/auth.docs.ts b/src/auth/auth-user/presentation/auth-user.docs.ts similarity index 93% rename from src/auth/auth-user/presentation/auth.docs.ts rename to src/auth/auth-user/presentation/auth-user.docs.ts index b6b1815..e5f80b0 100644 --- a/src/auth/auth-user/presentation/auth.docs.ts +++ b/src/auth/auth-user/presentation/auth-user.docs.ts @@ -9,9 +9,9 @@ import { } from '@nestjs/swagger'; import { createDocs } from 'src/shared/core/presentation/base.docs'; -export type AuthEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout'; +export type AuthUserEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout'; -export const AuthDocs = createDocs({ +export const AuthUserDocs = createDocs({ oauthAuthorization: () => applyDecorators( ApiOperation({ diff --git a/src/auth/auth-user/presentation/auth.controller.spec.ts b/src/auth/auth-user/presentation/auth.controller.spec.ts deleted file mode 100644 index 27a31e6..0000000 --- a/src/auth/auth-user/presentation/auth.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AuthController } from './auth.controller'; - -describe('AuthController', () => { - let controller: AuthController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [AuthController], - }).compile(); - - controller = module.get(AuthController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 7e5805f..76f3682 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,40 +1,12 @@ import { Module } from '@nestjs/common'; -import { AuthRepositoryImpl } from './auth-user/infrasturcture/auth.repository.impl'; -import { AuthController } from './auth-user/presentation/auth.controller'; -import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthEntity } from './auth-user/infrasturcture/auth.entity'; -import { OAuthLoginUseCase } from './auth-user/application/oauth-login/oauth-login.handler'; -import { OAuthProviderFactory } from '../shared/core/infrastructure/oauth/oauth-provider.factory'; -import { KakaoOAuthProvider } from '../shared/core/infrastructure/oauth/kakao.provider'; -import { AuthorizeOAuthUseCase } from './auth-user/application/authorize-oauth/authorize-oauth.use-case'; -import { JwtProvider } from './infrastructure/jwt/jwt.provider'; -import { JwtModule } from '@nestjs/jwt'; -import { JwtAccessStrategy } from './infrastructure/jwt/jwt-access.strategy'; -import { JwtRefreshStrategy } from './infrastructure/jwt/jwt-refresh.strategy'; -import { PassportModule } from '@nestjs/passport'; -import { RenewTokenUseCase } from './auth-user/application/renew-token/renew-token.use-case'; -import { LogoutUseCase } from './auth-user/application/logout/logout.use-case'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; -import { AUTH_REPOSITORY } from './auth-user/domain/auth.repository'; - -const useCases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; +import { AuthUserModule } from './auth-user/auth-user.module'; +import { AuthOrganizationModule } from './auth-organization/auth-organization.module'; +import { AuthCoreModule } from './core/auth-core.module'; @Module({ - controllers: [AuthController], - imports: [JwtModule.register({}), MikroOrmModule.forFeature([AuthEntity]), PassportModule, SharedModule, CqrsModule], - providers: [ - ...useCases, - { - provide: AUTH_REPOSITORY, - useClass: AuthRepositoryImpl, - }, - OAuthProviderFactory, - KakaoOAuthProvider, - JwtProvider, - JwtAccessStrategy, - JwtRefreshStrategy, - ], - exports: [OAuthProviderFactory], + imports: [SharedModule, CqrsModule, AuthUserModule, AuthOrganizationModule, AuthCoreModule], + providers: [], }) export class AuthModule {} diff --git a/src/auth/infrastructure/jwt/jwt-access.strategy.ts b/src/auth/core/infrastructure/jwt/jwt-access.strategy.ts similarity index 100% rename from src/auth/infrastructure/jwt/jwt-access.strategy.ts rename to src/auth/core/infrastructure/jwt/jwt-access.strategy.ts diff --git a/src/auth/infrastructure/jwt/jwt-refresh.strategy.ts b/src/auth/core/infrastructure/jwt/jwt-refresh.strategy.ts similarity index 100% rename from src/auth/infrastructure/jwt/jwt-refresh.strategy.ts rename to src/auth/core/infrastructure/jwt/jwt-refresh.strategy.ts diff --git a/src/auth/core/infrastructure/jwt/jwt.factory.ts b/src/auth/core/infrastructure/jwt/jwt.factory.ts new file mode 100644 index 0000000..aa939b5 --- /dev/null +++ b/src/auth/core/infrastructure/jwt/jwt.factory.ts @@ -0,0 +1,28 @@ +// jwt-token-options.factory.ts +import { ConfigService } from '@nestjs/config'; +import { JwtSignOptions, JwtVerifyOptions } from '@nestjs/jwt'; + +export enum TokenType { + ACCESS = 'access', + REFRESH = 'refresh', +} + +export const JwtSignOptionsMapper = (config: ConfigService): Record => ({ + [TokenType.ACCESS]: { + secret: config.getOrThrow('jwt.access.secret'), + expiresIn: config.getOrThrow('jwt.access.expiration'), + }, + [TokenType.REFRESH]: { + secret: config.getOrThrow('jwt.refresh.secret'), + expiresIn: config.getOrThrow('jwt.refresh.expiration'), + }, +}); + +export const JwtVerifyOptionsMapper = (config: ConfigService): Record => ({ + [TokenType.ACCESS]: { + secret: config.getOrThrow('jwt.access.secret'), + }, + [TokenType.REFRESH]: { + secret: config.getOrThrow('jwt.refresh.secret'), + }, +}); diff --git a/src/auth/infrastructure/jwt/jwt.provider.ts b/src/auth/core/infrastructure/jwt/jwt.provider.ts similarity index 69% rename from src/auth/infrastructure/jwt/jwt.provider.ts rename to src/auth/core/infrastructure/jwt/jwt.provider.ts index ddcbac7..004ef12 100644 --- a/src/auth/infrastructure/jwt/jwt.provider.ts +++ b/src/auth/core/infrastructure/jwt/jwt.provider.ts @@ -1,6 +1,6 @@ import { ConfigService } from '@nestjs/config'; import { JwtService } from '@nestjs/jwt'; -import { JwtTokenOptions, TokenType } from './jwt.factory'; +import { JwtSignOptionsMapper, JwtVerifyOptionsMapper, TokenType } from './jwt.factory'; import { Injectable } from '@nestjs/common'; import { v4 as uuidV4 } from 'uuid'; @@ -12,7 +12,7 @@ export class JwtProvider { ) {} async generateToken(tokenType: TokenType, userId: string): Promise<{ token: string; jti: string }> { - const jwtSignOptions = JwtTokenOptions(this.configService)[tokenType]; + const jwtSignOptions = JwtSignOptionsMapper(this.configService)[tokenType]; const jti = uuidV4(); const payload = { userId, jti }; const token = await this.jwtService.signAsync(payload, jwtSignOptions); @@ -21,9 +21,9 @@ export class JwtProvider { } async verifyToken(token: string, tokenType: TokenType): Promise { - const jwtSignOptions = JwtTokenOptions(this.configService)[tokenType]; + const jwtVerifyOptions = JwtVerifyOptionsMapper(this.configService)[tokenType]; - return this.jwtService.verifyAsync(token, jwtSignOptions); + return this.jwtService.verifyAsync(token, jwtVerifyOptions); } async saveRefreshToken(): Promise {} diff --git a/src/shared/core/infrastructure/oauth/base-oauth.provider.ts b/src/auth/core/infrastructure/oauth/base-oauth.provider.ts similarity index 100% rename from src/shared/core/infrastructure/oauth/base-oauth.provider.ts rename to src/auth/core/infrastructure/oauth/base-oauth.provider.ts diff --git a/src/shared/core/infrastructure/oauth/kakao.provider.ts b/src/auth/core/infrastructure/oauth/kakao.provider.ts similarity index 94% rename from src/shared/core/infrastructure/oauth/kakao.provider.ts rename to src/auth/core/infrastructure/oauth/kakao.provider.ts index 631ae50..bec9cb7 100644 --- a/src/shared/core/infrastructure/oauth/kakao.provider.ts +++ b/src/auth/core/infrastructure/oauth/kakao.provider.ts @@ -3,7 +3,7 @@ import axios from 'axios'; import { ConfigService } from '@nestjs/config'; import { BaseOAuthProvider, OAuthUser } from './base-oauth.provider'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { AUTH_REPOSITORY, AuthRepository } from 'src/auth/auth-user/domain/auth.repository'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; interface KakaoTokenResponse { access_token: string; @@ -28,8 +28,8 @@ interface KakaoUserResponse { export class KakaoOAuthProvider implements BaseOAuthProvider { constructor( private readonly configService: ConfigService, - @Inject(AUTH_REPOSITORY) - private readonly authRepository: AuthRepository, + @Inject(AUTH_USER_REPOSITORY) + private readonly authRepository: AuthUserRepository, ) {} async getUserInfo(token: string): Promise { diff --git a/src/shared/core/infrastructure/oauth/oauth-provider.factory.ts b/src/auth/core/infrastructure/oauth/oauth-provider.factory.ts similarity index 100% rename from src/shared/core/infrastructure/oauth/oauth-provider.factory.ts rename to src/auth/core/infrastructure/oauth/oauth-provider.factory.ts diff --git a/src/auth/infrastructure/jwt/jwt.factory.ts b/src/auth/infrastructure/jwt/jwt.factory.ts deleted file mode 100644 index c60f936..0000000 --- a/src/auth/infrastructure/jwt/jwt.factory.ts +++ /dev/null @@ -1,19 +0,0 @@ -// jwt-token-options.factory.ts -import { ConfigService } from '@nestjs/config'; -import { JwtSignOptions } from '@nestjs/jwt'; - -export enum TokenType { - ACCESS = 'access', - REFRESH = 'refresh', -} - -export const JwtTokenOptions = (config: ConfigService): Record => ({ - [TokenType.ACCESS]: { - secret: config.getOrThrow('jwt.access.secret'), - expiresIn: config.getOrThrow('jwt.access.expiration'), - }, - [TokenType.REFRESH]: { - secret: config.getOrThrow('jwt.refresh.secret'), - expiresIn: config.getOrThrow('jwt.refresh.expiration'), - }, -}); diff --git a/src/shared/shared.module.ts b/src/shared/shared.module.ts index 823f3de..3534626 100644 --- a/src/shared/shared.module.ts +++ b/src/shared/shared.module.ts @@ -1,21 +1,8 @@ import { Module } from '@nestjs/common'; -import { OAuthProviderFactory } from './core/infrastructure/oauth/oauth-provider.factory'; -import { KakaoOAuthProvider } from './core/infrastructure/oauth/kakao.provider'; -import { AuthRepositoryImpl } from 'src/auth/auth-user/infrasturcture/auth.repository.impl'; -import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthEntity } from 'src/auth/auth-user/infrasturcture/auth.entity'; -import { AUTH_REPOSITORY } from 'src/auth/auth-user/domain/auth.repository'; @Module({ - imports: [MikroOrmModule.forFeature([AuthEntity])], - providers: [ - OAuthProviderFactory, - KakaoOAuthProvider, - { - provide: AUTH_REPOSITORY, - useClass: AuthRepositoryImpl, - }, - ], - exports: [OAuthProviderFactory], + imports: [], + providers: [], + exports: [], }) export class SharedModule {} diff --git a/src/user/command/application/delete/delete.handler.ts b/src/user/command/application/delete/delete.handler.ts index 18c6729..99f1ac0 100644 --- a/src/user/command/application/delete/delete.handler.ts +++ b/src/user/command/application/delete/delete.handler.ts @@ -1,5 +1,5 @@ import { Inject, Injectable } from '@nestjs/common'; -import { OAuthProviderFactory } from 'src/shared/core/infrastructure/oauth/oauth-provider.factory'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { USER_COMMAND_REPOSITORY, UserCommandRepository } from '../../domain/user.command.repository'; import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; diff --git a/src/user/command/infrastructure/user.command.repository.impl.ts b/src/user/command/infrastructure/user.command.repository.impl.ts index a0fd6b5..5ca8215 100644 --- a/src/user/command/infrastructure/user.command.repository.impl.ts +++ b/src/user/command/infrastructure/user.command.repository.impl.ts @@ -20,7 +20,7 @@ export class UserCommandRepositoryImpl implements UserCommandRepository { } async deleteById(userId: string): Promise { - const userEntity = await this.ormRepository.findOne({ id: userId }, { populate: ['auth', 'scraps'] }); + const userEntity = await this.ormRepository.findOne({ id: userId }, { populate: ['authUser', 'scraps'] }); if (!userEntity) throw new CustomException( CustomExceptionCode.USER_NOT_FOUND, diff --git a/src/user/command/infrastructure/user.entity.ts b/src/user/command/infrastructure/user.entity.ts index 7890b6f..b4cec82 100644 --- a/src/user/command/infrastructure/user.entity.ts +++ b/src/user/command/infrastructure/user.entity.ts @@ -1,5 +1,5 @@ import { Cascade, Collection, Entity, OneToMany, OneToOne, Property } from '@mikro-orm/core'; -import { AuthEntity } from 'src/auth/auth-user/infrasturcture/auth.entity'; +import { AuthUserEntity } from 'src/auth/auth-user/infrasturcture/auth-user.entity'; import { ScrapEntity } from 'src/scrap/command/infrastructure/scrap.entity'; import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; import { Role } from '../domain/value-object/role.enum'; @@ -12,8 +12,8 @@ export class UserEntity extends BaseEntity { @Property({ type: 'varchar' }) role: Role; - @OneToOne(() => AuthEntity, (auth) => auth.user, { unique: true }) - auth: AuthEntity; + @OneToOne(() => AuthUserEntity, (authUser) => authUser.user, { unique: true }) + authUser: AuthUserEntity; @OneToMany(() => ScrapEntity, (scrap) => scrap.user, { nullable: true, cascade: [Cascade.ALL] }) scraps = new Collection(this); From 28f1a047e5e08b1f3cfeff95997447610b72720f Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:53:13 +0900 Subject: [PATCH 18/67] =?UTF-8?q?fix:=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=ED=95=B4=EC=A0=9C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=82=B4=EC=97=90=EC=84=9C=20repository=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/oauth/base-oauth.provider.ts | 2 +- .../core/infrastructure/oauth/kakao.provider.ts | 17 ++++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/auth/core/infrastructure/oauth/base-oauth.provider.ts b/src/auth/core/infrastructure/oauth/base-oauth.provider.ts index 2ed1207..e2d19bc 100644 --- a/src/auth/core/infrastructure/oauth/base-oauth.provider.ts +++ b/src/auth/core/infrastructure/oauth/base-oauth.provider.ts @@ -4,7 +4,7 @@ export interface BaseOAuthProvider { getToken(code: string): Promise; getUserInfo(token: string): Promise; getAuthorizationUrl(state?: string): string; - unlinkAccount(userId: string): Promise; + unlinkAccount(oAuthId: string): Promise; } export interface OAuthUser { diff --git a/src/auth/core/infrastructure/oauth/kakao.provider.ts b/src/auth/core/infrastructure/oauth/kakao.provider.ts index bec9cb7..9d82027 100644 --- a/src/auth/core/infrastructure/oauth/kakao.provider.ts +++ b/src/auth/core/infrastructure/oauth/kakao.provider.ts @@ -1,9 +1,8 @@ -import { Inject, Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common'; +import { Injectable, UnauthorizedException } from '@nestjs/common'; import axios from 'axios'; import { ConfigService } from '@nestjs/config'; import { BaseOAuthProvider, OAuthUser } from './base-oauth.provider'; import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { AUTH_USER_REPOSITORY, AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; interface KakaoTokenResponse { access_token: string; @@ -26,11 +25,7 @@ interface KakaoUserResponse { @Injectable() export class KakaoOAuthProvider implements BaseOAuthProvider { - constructor( - private readonly configService: ConfigService, - @Inject(AUTH_USER_REPOSITORY) - private readonly authRepository: AuthUserRepository, - ) {} + constructor(private readonly configService: ConfigService) {} async getUserInfo(token: string): Promise { const res = await axios.get('https://kapi.kakao.com/v2/user/me', { @@ -91,11 +86,7 @@ export class KakaoOAuthProvider implements BaseOAuthProvider { return `${authorizeUrl}?${params.toString()}`; } - async unlinkAccount(userId: string): Promise { - const auth = await this.authRepository.findByUserId(userId); - if (!auth) throw new NotFoundException('해당 유저의 인증 정보가 존재하지 않습니다.'); - - const oauthId = auth.oauthId; + async unlinkAccount(oAuthId: string): Promise { const adminKey = this.configService.getOrThrow('kakao.adminKey'); const unlinkUrl = 'https://kapi.kakao.com/v1/user/unlink'; @@ -103,7 +94,7 @@ export class KakaoOAuthProvider implements BaseOAuthProvider { Authorization: `KakaoAK ${adminKey}`, 'Content-Type': 'application/x-www-form-urlencoded', }; - const data = `target_id_type=user_id&target_id=${oauthId}`; + const data = `target_id_type=user_id&target_id=${oAuthId}`; try { return await axios.post(unlinkUrl, data, { headers }); From f1fa22abb876a4f77e016afba33bb4df2a4085c5 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:55:23 +0900 Subject: [PATCH 19/67] =?UTF-8?q?feat:=20auth=20repository=EC=97=90=20dele?= =?UTF-8?q?teById=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-user/domain/auth-user.repository.ts | 1 + .../infrasturcture/auth-user.repository.impl.ts | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/auth/auth-user/domain/auth-user.repository.ts b/src/auth/auth-user/domain/auth-user.repository.ts index 9769b07..904c83c 100644 --- a/src/auth/auth-user/domain/auth-user.repository.ts +++ b/src/auth/auth-user/domain/auth-user.repository.ts @@ -6,6 +6,7 @@ export interface AuthUserRepository { findByOAuthIdandProvider(oauthId: string, provider: string): Promise; findByRefreshToken(refreshToken: string): Promise; findByUserId(userId: string): Promise; + deleteById(id: string): Promise; } export const AUTH_USER_REPOSITORY = Symbol('AUTH_USER_REPOSITORY'); diff --git a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts index 23b6bf9..2e847c0 100644 --- a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts +++ b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts @@ -5,6 +5,8 @@ import { InjectRepository } from '@mikro-orm/nestjs'; import { AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; import { AuthUserEntity } from './auth-user.entity'; import { AuthUserMapper } from './auth-user.mapper'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; export class AuthUserRepositoryImpl implements AuthUserRepository { constructor( @@ -12,7 +14,6 @@ export class AuthUserRepositoryImpl implements AuthUserRepository { private readonly authOrmRepository: EntityRepository, private readonly em: EntityManager, ) {} - async save(authUser: AuthUser): Promise { const authUserEntity = AuthUserMapper.toEntity(authUser, this.em); await this.em.persistAndFlush(authUserEntity); @@ -49,4 +50,11 @@ export class AuthUserRepositoryImpl implements AuthUserRepository { return AuthUserMapper.toDomain(authUserEntity); } + + async deleteById(id: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ id }); + if (!authUserEntity) throw new CustomException(CustomExceptionCode.AUTH_USER_NOT_FOUND); + + await this.em.removeAndFlush(authUserEntity); + } } From 0a4599b6cbec8551c83a14fc54b541c30a0ce177 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:56:39 +0900 Subject: [PATCH 20/67] =?UTF-8?q?feat:=20auth=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B0=8F=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-user/domain/auth-user.ts | 5 +++++ src/auth/auth-user/domain/event/auth-deleted.event.ts | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 src/auth/auth-user/domain/event/auth-deleted.event.ts diff --git a/src/auth/auth-user/domain/auth-user.ts b/src/auth/auth-user/domain/auth-user.ts index d6ba3df..85b8fdd 100644 --- a/src/auth/auth-user/domain/auth-user.ts +++ b/src/auth/auth-user/domain/auth-user.ts @@ -5,6 +5,7 @@ import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; import { LoginSucceededEvent } from './event/login-succeeded.event'; +import { AuthDeletedEvent } from './event/auth-deleted.event'; export interface AuthUserProps extends BaseEntityProps { oauthId: string; @@ -53,6 +54,10 @@ export class AuthUser extends AggregateRoot { this.props.updatedAt = updatedAt; } + delete() { + this.addDomainEvent(new AuthDeletedEvent(this.userId.value)); + } + get oauthId(): string { return this.props.oauthId; } diff --git a/src/auth/auth-user/domain/event/auth-deleted.event.ts b/src/auth/auth-user/domain/event/auth-deleted.event.ts new file mode 100644 index 0000000..b702f35 --- /dev/null +++ b/src/auth/auth-user/domain/event/auth-deleted.event.ts @@ -0,0 +1,9 @@ +import { BaseDomainEvent } from 'src/shared/core/domain/base.domain-event'; + +export class AuthDeletedEvent implements BaseDomainEvent { + readonly timesstamp: Date; + + constructor(public readonly userId: string) { + this.timesstamp = new Date(); + } +} From 7846fead5aa515ae7ab334922d12785a4fd3cfdc Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:58:24 +0900 Subject: [PATCH 21/67] =?UTF-8?q?feat:=20=EC=9D=BC=EB=B0=98=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20oauth=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20=ED=95=B4=EC=A0=9C=20usecase=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unlink-oauth/unlink-oauth.command.ts | 9 +++++ .../unlink-oauth/unlink-oauth.use-case.ts | 33 +++++++++++++++++++ src/auth/auth-user/auth-user.module.ts | 3 +- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts create mode 100644 src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts diff --git a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts new file mode 100644 index 0000000..27c9b92 --- /dev/null +++ b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.command.ts @@ -0,0 +1,9 @@ +import { ICommand } from '@nestjs/cqrs'; +import { OAuthProviderType } from '../../domain/value-object/oauth-provider.enum'; + +export class UnlinkOAuthCommand implements ICommand { + constructor( + public readonly oAuthProviderType: OAuthProviderType, + public readonly userId: string, + ) {} +} diff --git a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts new file mode 100644 index 0000000..1b6a63e --- /dev/null +++ b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts @@ -0,0 +1,33 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; +import { CommandHandler, EventBus } from '@nestjs/cqrs'; +import { UnlinkOAuthCommand } from './unlink-oauth.command'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; + +@Injectable() +@CommandHandler(UnlinkOAuthCommand) +export class UnlinkOAuthUseCase { + constructor( + @Inject(AUTH_USER_REPOSITORY) + private readonly authUserRepository: AuthUserRepository, + private readonly oAuthProviderFactory: OAuthProviderFactory, + private readonly eventBus: EventBus, + ) {} + + async execute(command: UnlinkOAuthCommand) { + const { userId, oAuthProviderType } = command; + + const authUser = await this.authUserRepository.findByUserId(userId); + if (!authUser) throw new CustomException(CustomExceptionCode.AUTH_USER_NOT_FOUND); + + const oAuthProvider = this.oAuthProviderFactory.getProvider(oAuthProviderType); + await oAuthProvider.unlinkAccount(authUser.oauthId); + + authUser.delete(); + await this.authUserRepository.deleteById(authUser.id.value); + + this.eventBus.publishAll(authUser.pullDomainEvents()); + } +} diff --git a/src/auth/auth-user/auth-user.module.ts b/src/auth/auth-user/auth-user.module.ts index 58074eb..19b91c9 100644 --- a/src/auth/auth-user/auth-user.module.ts +++ b/src/auth/auth-user/auth-user.module.ts @@ -11,8 +11,9 @@ import { LogoutUseCase } from './application/logout/logout.use-case'; import { AuthCoreModule } from '../core/auth-core.module'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; +import { UnlinkOAuthUseCase } from './application/unlink-oauth/unlink-oauth.use-case'; -const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase]; +const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase, UnlinkOAuthUseCase]; @Module({ imports: [MikroOrmModule.forFeature([AuthUserEntity]), AuthCoreModule, SharedModule, CqrsModule], From 577651c8234ffb7949f1b0b11e1e2e654bc49ae4 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 19:59:31 +0900 Subject: [PATCH 22/67] =?UTF-8?q?fix:=20=EC=9D=BC=EB=B0=98=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C?= =?UTF-8?q?=20oAuth=20=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/user/command/application/delete/delete.handler.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/user/command/application/delete/delete.handler.ts b/src/user/command/application/delete/delete.handler.ts index 99f1ac0..e6942ea 100644 --- a/src/user/command/application/delete/delete.handler.ts +++ b/src/user/command/application/delete/delete.handler.ts @@ -1,6 +1,4 @@ import { Inject, Injectable } from '@nestjs/common'; -import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; -import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; import { USER_COMMAND_REPOSITORY, UserCommandRepository } from '../../domain/user.command.repository'; import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; import { DeleteMyInfoCommand } from './delete.command'; @@ -11,14 +9,10 @@ export class DeleteMyInfoHandler implements ICommandHandler constructor( @Inject(USER_COMMAND_REPOSITORY) private readonly userCommandRepository: UserCommandRepository, - private readonly oAuthProviderFactory: OAuthProviderFactory, ) {} async execute(command: DeleteMyInfoCommand): Promise { const { userId } = command; - const oAuthProvider = this.oAuthProviderFactory.getProvider(OAuthProviderType.KAKAO); - console.log(1); - await oAuthProvider.unlinkAccount(userId); await this.userCommandRepository.deleteById(userId); } From e071d5f9243a602f77b9046e6e3688541e2144cc Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 20:00:20 +0900 Subject: [PATCH 23/67] =?UTF-8?q?fix:=20=EC=9D=BC=EB=B0=98=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EC=82=AD=EC=A0=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20=EC=9D=B8=EC=A6=9D=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20listener=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/application/delete/delete.listener.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/user/command/application/delete/delete.listener.ts diff --git a/src/user/command/application/delete/delete.listener.ts b/src/user/command/application/delete/delete.listener.ts new file mode 100644 index 0000000..c42df59 --- /dev/null +++ b/src/user/command/application/delete/delete.listener.ts @@ -0,0 +1,15 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { AuthDeletedEvent } from 'src/auth/auth-user/domain/event/auth-deleted.event'; +import { DeleteMyInfoHandler } from './delete.handler'; +import { DeleteMyInfoCommand } from './delete.command'; + +@EventsHandler(AuthDeletedEvent) +export class DeleteUserListener implements IEventHandler { + constructor(private readonly deleteMyInfoHandler: DeleteMyInfoHandler) {} + + async handle(event: AuthDeletedEvent) { + const deleteMyInfoCommand = new DeleteMyInfoCommand(event.userId); + + await this.deleteMyInfoHandler.execute(deleteMyInfoCommand); + } +} From d2738c3a1f8c227ec8f88b0fb1432d15238c907b Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 20:12:44 +0900 Subject: [PATCH 24/67] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=20api=20auth=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BF=A0=ED=82=A4=20=EC=82=AD=EC=A0=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-user.controller.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/auth/auth-user/presentation/auth-user.controller.ts b/src/auth/auth-user/presentation/auth-user.controller.ts index c5b38e6..71e273d 100644 --- a/src/auth/auth-user/presentation/auth-user.controller.ts +++ b/src/auth/auth-user/presentation/auth-user.controller.ts @@ -9,8 +9,8 @@ import { RenewTokenUseCase } from '../application/renew-token/renew-token.use-ca import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; import { LogoutUseCase } from '../application/logout/logout.use-case'; import { OAuthProviderType } from '../domain/value-object/oauth-provider.enum'; -import { ConfigService } from '@nestjs/config'; import { AuthUserDocs } from './auth-user.docs'; +import { UnlinkOAuthUseCase } from '../application/unlink-oauth/unlink-oauth.use-case'; @ApiTags('auth-user') @Controller('auth') @@ -20,7 +20,7 @@ export class AuthUserController { private readonly authorizeOAuthUseCase: AuthorizeOAuthUseCase, private readonly renewTokenUseCase: RenewTokenUseCase, private readonly logoutUseCase: LogoutUseCase, - private readonly configService: ConfigService, + private readonly unlinkOAuthUseCase: UnlinkOAuthUseCase, ) {} @Get('oauth/authorization') @@ -81,4 +81,15 @@ export class AuthUserController { res.status(HttpStatus.OK).send(); } + + @Post('withdraw') + @UseGuards(AuthGuard('jwt-access')) + async withdraw(@User() user: UserPayload, @Res() res: Response) { + await this.unlinkOAuthUseCase.execute({ userId: user.userId, oAuthProviderType: OAuthProviderType.KAKAO }); + + res.clearCookie('accessToken', accessTokenCookieOptions); + res.clearCookie('refreshToken', refreshTokenCookieOptions); + + res.status(HttpStatus.NO_CONTENT).send(); + } } From f84a0af72707b7fa1d7142b67deca6a3deb655d7 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 2 Nov 2025 20:21:07 +0900 Subject: [PATCH 25/67] =?UTF-8?q?docs:=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=20api=20swagger=20=EB=AC=B8=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-user.controller.ts | 1 + .../auth-user/presentation/auth-user.docs.ts | 20 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/auth/auth-user/presentation/auth-user.controller.ts b/src/auth/auth-user/presentation/auth-user.controller.ts index 71e273d..fa12ade 100644 --- a/src/auth/auth-user/presentation/auth-user.controller.ts +++ b/src/auth/auth-user/presentation/auth-user.controller.ts @@ -84,6 +84,7 @@ export class AuthUserController { @Post('withdraw') @UseGuards(AuthGuard('jwt-access')) + @AuthUserDocs('withdraw') async withdraw(@User() user: UserPayload, @Res() res: Response) { await this.unlinkOAuthUseCase.execute({ userId: user.userId, oAuthProviderType: OAuthProviderType.KAKAO }); diff --git a/src/auth/auth-user/presentation/auth-user.docs.ts b/src/auth/auth-user/presentation/auth-user.docs.ts index e5f80b0..184f833 100644 --- a/src/auth/auth-user/presentation/auth-user.docs.ts +++ b/src/auth/auth-user/presentation/auth-user.docs.ts @@ -3,13 +3,14 @@ import { ApiCreatedResponse, ApiFoundResponse, ApiInternalServerErrorResponse, + ApiNoContentResponse, ApiOkResponse, ApiOperation, ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { createDocs } from 'src/shared/core/presentation/base.docs'; -export type AuthUserEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout'; +export type AuthUserEndpoint = 'oauthAuthorization' | 'oauthCallback' | 'renewToken' | 'logout' | 'withdraw'; export const AuthUserDocs = createDocs({ oauthAuthorization: () => @@ -70,4 +71,21 @@ export const AuthUserDocs = createDocs({ description: '유저 인증 정보가 존재하지 않음', }), ), + + withdraw: () => + applyDecorators( + ApiOperation({ + summary: '회원탈퇴', + description: '사용자 정보 및 인증 정보 삭제 및 토큰 무효화', + }), + ApiNoContentResponse({ + description: '회원탈퇴 성공', + }), + ApiUnauthorizedResponse({ + description: '유효하지 않은 토큰', + }), + ApiInternalServerErrorResponse({ + description: '유저 인증 정보가 존재하지 않음', + }), + ), }); From bd9f2743b50cfd5c57e5240f513ce250b2ca3b86 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 3 Nov 2025 21:49:21 +0900 Subject: [PATCH 26/67] =?UTF-8?q?chore:=20auth=20organization=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/exception/custom-exception-code.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/shared/exception/custom-exception-code.ts b/src/shared/exception/custom-exception-code.ts index 033598b..9c6c4bb 100644 --- a/src/shared/exception/custom-exception-code.ts +++ b/src/shared/exception/custom-exception-code.ts @@ -29,6 +29,9 @@ export enum CustomExceptionCode { AUTH_INVALID_REFRESH_TOKEN = 'AUTH_INVALID_REFRESH_TOKEN', AUTH_INVALID_ACCESS_TOKEN = 'AUTH_INVALID_ACCESS_TOKEN', + // Auth User + AUTH_USER_NOT_FOUND = 'AUTH_USER_NOT_FOUND', + // Media MEDIA_PATH_EMPTY = 'MEDIA_PATH_EMPTY', MEDIA_INVALID_PATH = 'MEDIA_INVALID_PATH', @@ -154,6 +157,12 @@ export const ExceptionInfo: Record Date: Tue, 4 Nov 2025 22:57:25 +0900 Subject: [PATCH 27/67] =?UTF-8?q?feat:=20AccountId=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization/domain/vo/account-id.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/auth/auth-organization/domain/vo/account-id.ts diff --git a/src/auth/auth-organization/domain/vo/account-id.ts b/src/auth/auth-organization/domain/vo/account-id.ts new file mode 100644 index 0000000..05e3c21 --- /dev/null +++ b/src/auth/auth-organization/domain/vo/account-id.ts @@ -0,0 +1,23 @@ +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +export class AccountId { + private constructor(readonly value: string) {} + + public static create(value: string): AccountId { + const accountId = new AccountId(value); + accountId.validate(); + + return accountId; + } + + public validate(): void { + if (this.value.length < 4 || this.value.length > 20) { + throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH); + } + + if (/^[a-z0-9_]+$/.test(this.value) === false) { + throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_FORMAT); + } + } +} From 8c1cf8343d750be3bd306b283b5fb8ca83725f90 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 22:57:48 +0900 Subject: [PATCH 28/67] =?UTF-8?q?feat:=20RawPassword=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/vo/raw-password.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/auth/auth-organization/domain/vo/raw-password.ts diff --git a/src/auth/auth-organization/domain/vo/raw-password.ts b/src/auth/auth-organization/domain/vo/raw-password.ts new file mode 100644 index 0000000..6c88785 --- /dev/null +++ b/src/auth/auth-organization/domain/vo/raw-password.ts @@ -0,0 +1,26 @@ +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +export class RawPassword { + private constructor(readonly value: string) {} + + public static create(value: string): RawPassword { + const rawPassword = new RawPassword(value); + rawPassword.validate(); + + return rawPassword; + } + + public validate(): void { + const hasLetter = /[a-zA-Z]/.test(this.value); + const hasNumber = /[0-9]/.test(this.value); + + if (this.value.length < 10 || this.value.length > 30) { + throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH); + } + + if (!hasLetter || !hasNumber) { + throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT); + } + } +} From 6c7a53e0dceaca54e3ffd14a5d04d190e067724f Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 22:58:01 +0900 Subject: [PATCH 29/67] =?UTF-8?q?feat:=20PasswordHash=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-organization/domain/vo/password-hash.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/auth/auth-organization/domain/vo/password-hash.ts diff --git a/src/auth/auth-organization/domain/vo/password-hash.ts b/src/auth/auth-organization/domain/vo/password-hash.ts new file mode 100644 index 0000000..683a817 --- /dev/null +++ b/src/auth/auth-organization/domain/vo/password-hash.ts @@ -0,0 +1,9 @@ +export class PasswordHash { + private constructor(readonly value: string) {} + + public static create(value: string): PasswordHash { + const passwordHash = new PasswordHash(value); + + return passwordHash; + } +} From ab319810a499970bd30a3842cf0d09cd357fccba Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 22:58:39 +0900 Subject: [PATCH 30/67] =?UTF-8?q?feat:=20AuthOrganization=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth-organization.ts | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/auth/auth-organization/domain/auth-organization.ts diff --git a/src/auth/auth-organization/domain/auth-organization.ts b/src/auth/auth-organization/domain/auth-organization.ts new file mode 100644 index 0000000..a252e18 --- /dev/null +++ b/src/auth/auth-organization/domain/auth-organization.ts @@ -0,0 +1,87 @@ +import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; +import { BaseEntityProps } from 'src/shared/core/domain/base.entity'; +import { Identifier } from 'src/shared/core/domain/identifier'; +import { AccountId } from './vo/account-id'; +import { PasswordHash } from './vo/password-hash'; + +export interface AuthOrganizationProps extends BaseEntityProps { + accountId: AccountId; + passwordHash: PasswordHash; + refreshToken: string | null; + organizationId: Identifier; + isDeleted: boolean; + deletedAt: Date | null; +} + +export class AuthOrganization extends AggregateRoot { + constructor(props: AuthOrganizationProps) { + super(props); + } + + public static create(props: AuthOrganizationProps): AuthOrganization { + const authOrganization = new AuthOrganization(props); + authOrganization.validate(); + + return authOrganization; + } + + public static of(props: AuthOrganizationProps): AuthOrganization { + return new AuthOrganization(props); + } + + public validate(): void {} + + update( + accountId: AccountId | null, + passwordHash: PasswordHash | null, + refreshToken: string | null, + organizationId: Identifier | null, + ) { + if (accountId) this.props.accountId = accountId; + if (passwordHash) this.props.passwordHash = passwordHash; + if (refreshToken) this.props.refreshToken = refreshToken; + if (organizationId) this.props.organizationId = organizationId; + this.props.updatedAt = new Date(); + + this.validate(); + } + + updateRefreshToken(refreshToken: string | null) { + this.props.refreshToken = refreshToken; + this.props.updatedAt = new Date(); + } + + delete() { + this.props.isDeleted = true; + this.props.deletedAt = new Date(); + } + + unDelete() { + this.props.isDeleted = false; + this.props.deletedAt = null; + } + + get accountId(): AccountId { + return this.props.accountId; + } + + get passwordHash(): PasswordHash { + return this.props.passwordHash; + } + + get refreshToken(): string | null { + return this.props.refreshToken; + } + + get organizationId(): Identifier { + return this.props.organizationId; + } + + get isDeleted(): boolean { + return this.props.isDeleted; + } + + get deletedAt(): Date | null { + return this.props.deletedAt; + } +} From e521d3cd1c3c5fb03fb135895442ed6121184148 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 22:59:50 +0900 Subject: [PATCH 31/67] =?UTF-8?q?feat:=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20hash=20=EA=B4=80=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-organization/domain/password-hasher.ts | 6 ++++++ .../infrastructure/password-hasher.impl.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/auth/auth-organization/domain/password-hasher.ts create mode 100644 src/auth/auth-organization/infrastructure/password-hasher.impl.ts diff --git a/src/auth/auth-organization/domain/password-hasher.ts b/src/auth/auth-organization/domain/password-hasher.ts new file mode 100644 index 0000000..416fced --- /dev/null +++ b/src/auth/auth-organization/domain/password-hasher.ts @@ -0,0 +1,6 @@ +export interface PasswordHasher { + hash(plain: string): Promise; + compare(plain: string, hashed: string): Promise; +} + +export const PASSWORD_HASHER = Symbol('PASSWORD_HASHER'); diff --git a/src/auth/auth-organization/infrastructure/password-hasher.impl.ts b/src/auth/auth-organization/infrastructure/password-hasher.impl.ts new file mode 100644 index 0000000..f4d7ee6 --- /dev/null +++ b/src/auth/auth-organization/infrastructure/password-hasher.impl.ts @@ -0,0 +1,12 @@ +import * as bcrypt from 'bcrypt'; +import { PasswordHasher } from '../domain/password-hasher'; + +export class PasswordHasherImpl implements PasswordHasher { + async hash(plain: string): Promise { + return await bcrypt.hash(plain, 10); + } + + async compare(plain: string, hashed: string): Promise { + return await bcrypt.compare(plain, hashed); + } +} From 85f985c628a866025ca2203507b8e348bbe7ee62 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:00:17 +0900 Subject: [PATCH 32/67] =?UTF-8?q?feat:=20AuthOrganization=20repository=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth-organization.store.ts | 11 ++++ .../auth-organization.store.impl.ts | 51 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/auth/auth-organization/domain/auth-organization.store.ts create mode 100644 src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts diff --git a/src/auth/auth-organization/domain/auth-organization.store.ts b/src/auth/auth-organization/domain/auth-organization.store.ts new file mode 100644 index 0000000..8d62710 --- /dev/null +++ b/src/auth/auth-organization/domain/auth-organization.store.ts @@ -0,0 +1,11 @@ +import { AuthOrganization } from './auth-organization'; + +export interface AuthOrganizationStore { + save(authOrganization: AuthOrganization): Promise; + update(authOrganization: AuthOrganization): Promise; + loadByOrganizationId(organizationId: string): Promise; + loadByRefreshToken(refreshToken: string): Promise; + loadByAccountId(accountId: string): Promise; +} + +export const AUTH_ORGANIZATION_STORE = Symbol('AUTH_ORGANIZATION_STORE'); diff --git a/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts b/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts new file mode 100644 index 0000000..4309564 --- /dev/null +++ b/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts @@ -0,0 +1,51 @@ +import { InjectRepository } from '@mikro-orm/nestjs'; +import { AuthOrganization } from '../domain/auth-organization'; +import { AuthOrganizationStore } from '../domain/auth-organization.store'; +import { AuthOrganizationEntity } from './auth-organization.entity'; +import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; +import { AuthOrganizationMapper } from './auth-organization.mapper'; + +export class AuthOrganizationStoreImpl implements AuthOrganizationStore { + constructor( + @InjectRepository(AuthOrganizationEntity) + private readonly ormRepository: EntityRepository, + private readonly em: EntityManager, + ) {} + + async save(authOrganization: AuthOrganization): Promise { + const authOrganizationEntity = AuthOrganizationMapper.toPersistence(authOrganization); + await this.em.persistAndFlush(authOrganizationEntity); + } + + async update(authOrganization: AuthOrganization): Promise { + await this.em.nativeUpdate( + AuthOrganizationEntity, + { id: authOrganization.id.value }, + { + refreshToken: authOrganization.refreshToken, + updatedAt: authOrganization.updatedAt, + }, + ); + } + + async loadByOrganizationId(organizationId: string): Promise { + const authOrganizationEntity = await this.ormRepository.findOne({ organizationId }); + if (authOrganizationEntity == null) return null; + + return AuthOrganizationMapper.toDomain(authOrganizationEntity); + } + + async loadByRefreshToken(refreshToken: string): Promise { + const authOrganizationEntity = await this.ormRepository.findOne({ refreshToken }); + if (authOrganizationEntity == null) return null; + + return AuthOrganizationMapper.toDomain(authOrganizationEntity); + } + + async loadByAccountId(accountId: string): Promise { + const authOrganizationEntity = await this.ormRepository.findOne({ accountId }); + if (authOrganizationEntity == null) return null; + + return AuthOrganizationMapper.toDomain(authOrganizationEntity); + } +} From 5da2dd675dad763e51ff9a249ae8eccebeab7084 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:00:44 +0900 Subject: [PATCH 33/67] =?UTF-8?q?feat:=20AuthOrganization=20orm=20entity?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.entity.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/auth/auth-organization/infrastructure/auth-organization.entity.ts diff --git a/src/auth/auth-organization/infrastructure/auth-organization.entity.ts b/src/auth/auth-organization/infrastructure/auth-organization.entity.ts new file mode 100644 index 0000000..b4092b3 --- /dev/null +++ b/src/auth/auth-organization/infrastructure/auth-organization.entity.ts @@ -0,0 +1,24 @@ +import { Entity, Property, Unique } from '@mikro-orm/core'; +import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; + +@Entity({ tableName: 'auth_organization' }) +@Unique({ properties: ['accountId'] }) +export class AuthOrganizationEntity extends BaseEntity { + @Property({ type: 'varchar', unique: true }) + accountId: string; + + @Property({ type: 'varchar' }) + passwordHash: string; + + @Property({ type: 'varchar', nullable: true }) + refreshToken: string | null; + + @Property({ type: 'varchar' }) + organizationId: string; + + @Property({ type: 'boolean' }) + isDeleted: boolean; + + @Property({ type: 'datetime', nullable: true }) + deletedAt: Date | null; +} From 47a6076d466878da2c9ce25689485c18ddc07de4 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:01:19 +0900 Subject: [PATCH 34/67] =?UTF-8?q?feat:=20AuthOrganiztion=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=EA=B3=BC=20=EC=9D=B8=ED=94=84=EB=9D=BC=20?= =?UTF-8?q?=EA=B0=84=20mapper=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.mapper.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/auth/auth-organization/infrastructure/auth-organization.mapper.ts diff --git a/src/auth/auth-organization/infrastructure/auth-organization.mapper.ts b/src/auth/auth-organization/infrastructure/auth-organization.mapper.ts new file mode 100644 index 0000000..8b3dd1f --- /dev/null +++ b/src/auth/auth-organization/infrastructure/auth-organization.mapper.ts @@ -0,0 +1,36 @@ +import { Identifier } from 'src/shared/core/domain/identifier'; +import { AuthOrganization } from '../domain/auth-organization'; +import { AuthOrganizationEntity } from './auth-organization.entity'; +import { AccountId } from '../domain/vo/account-id'; +import { PasswordHash } from '../domain/vo/password-hash'; + +export class AuthOrganizationMapper { + static toDomain(entity: AuthOrganizationEntity): AuthOrganization { + return AuthOrganization.of({ + id: Identifier.from(entity.id), + accountId: AccountId.create(entity.accountId), + passwordHash: PasswordHash.create(entity.passwordHash), + refreshToken: entity.refreshToken, + organizationId: Identifier.from(entity.organizationId), + createdAt: entity.createdAt, + updatedAt: entity.updatedAt, + isDeleted: entity.isDeleted, + deletedAt: entity.deletedAt, + }); + } + + static toPersistence(domain: AuthOrganization): AuthOrganizationEntity { + const entity = new AuthOrganizationEntity(); + entity.id = domain.id.value; + entity.accountId = domain.accountId.value; + entity.passwordHash = domain.passwordHash.value; + entity.refreshToken = domain.refreshToken; + entity.organizationId = domain.organizationId.value; + entity.createdAt = domain.createdAt; + entity.updatedAt = domain.updatedAt; + entity.isDeleted = domain.isDeleted; + entity.deletedAt = domain.deletedAt; + + return entity; + } +} From 032f11602d26e6be590161d4ffd8f8a296b72b7d Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:03:48 +0900 Subject: [PATCH 35/67] =?UTF-8?q?feat:=20AuthOrganization=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.module.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/auth/auth-organization/auth-organization.module.ts diff --git a/src/auth/auth-organization/auth-organization.module.ts b/src/auth/auth-organization/auth-organization.module.ts new file mode 100644 index 0000000..a466df9 --- /dev/null +++ b/src/auth/auth-organization/auth-organization.module.ts @@ -0,0 +1,32 @@ +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { Module } from '@nestjs/common'; +import { SharedModule } from 'src/shared/shared.module'; +import { AuthOrganizationController } from './presentation/auth-organization.controller'; +import { AUTH_ORGANIZATION_STORE } from './domain/auth-organization.store'; +import { AuthOrganizationStoreImpl } from './infrastructure/auth-organization.store.impl'; +import { AuthCoreModule } from '../core/auth-core.module'; +import { AuthOrganizationEntity } from './infrastructure/auth-organization.entity'; +import { CreateAuthOrganizationUseCase } from './application/create/create.use-case'; +import { CqrsModule } from '@nestjs/cqrs'; +import { PASSWORD_HASHER } from './domain/password-hasher'; +import { PasswordHasherImpl } from './infrastructure/password-hasher.impl'; + +const usecases = [CreateAuthOrganizationUseCase]; + +@Module({ + imports: [SharedModule, MikroOrmModule.forFeature([AuthOrganizationEntity]), AuthCoreModule, CqrsModule], + providers: [ + { + provide: AUTH_ORGANIZATION_STORE, + useClass: AuthOrganizationStoreImpl, + }, + { + provide: PASSWORD_HASHER, + useClass: PasswordHasherImpl, + }, + ...usecases, + ], + controllers: [AuthOrganizationController], + exports: [], +}) +export class AuthOrganizationModule {} From 2f5cbeb7723154387ebc918e6f8b40c5053d4a16 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:04:41 +0900 Subject: [PATCH 36/67] =?UTF-8?q?feat:=20Organization=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EA=B0=9D=EC=B2=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/domain/organization.ts | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/organization/command/domain/organization.ts diff --git a/src/organization/command/domain/organization.ts b/src/organization/command/domain/organization.ts new file mode 100644 index 0000000..ad373dd --- /dev/null +++ b/src/organization/command/domain/organization.ts @@ -0,0 +1,52 @@ +import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; +import { BaseEntityProps } from 'src/shared/core/domain/base.entity'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +export interface OrganizationProps extends BaseEntityProps { + name: string; + contact: string; +} + +export class Organization extends AggregateRoot { + protected constructor(props: OrganizationProps) { + super(props); + } + + public static create(props: OrganizationProps): Organization { + const organization = new Organization(props); + organization.validate(); + + return organization; + } + + public static of(props: OrganizationProps): Organization { + return new Organization(props); + } + + public validate(): void { + if (this.props.name.length < 1 || this.props.name.length > 63) { + throw new CustomException(CustomExceptionCode.ORGANIZATION_INVALID_NAME_LENGTH); + } + + if (!/^010-\d{4}-\d{4}$/.test(this.props.contact)) { + throw new CustomException(CustomExceptionCode.ORGANIZATION_INVALID_CONTACT_FORMAT); + } + } + + public update(name: string | null, contact: string | null): void { + if (name) this.props.name = name; + if (contact) this.props.contact = contact; + this.props.updatedAt = new Date(); + + this.validate(); + } + + get name(): string { + return this.props.name; + } + + get contact(): string { + return this.props.contact; + } +} From a7e7295ce94b73627348546ea9c0d74768cc869a Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:05:16 +0900 Subject: [PATCH 37/67] =?UTF-8?q?feat:=20Organization=20orm=20entity=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/infrastructure/organization.entity.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/organization/command/infrastructure/organization.entity.ts diff --git a/src/organization/command/infrastructure/organization.entity.ts b/src/organization/command/infrastructure/organization.entity.ts new file mode 100644 index 0000000..8e8271b --- /dev/null +++ b/src/organization/command/infrastructure/organization.entity.ts @@ -0,0 +1,11 @@ +import { Entity, Property } from '@mikro-orm/core'; +import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; + +@Entity({ tableName: 'organization' }) +export class OrganizationEntity extends BaseEntity { + @Property({ type: 'varchar' }) + name: string; + + @Property({ type: 'varchar' }) + contact: string; +} From c8e6f93d0d69894d82bf3dd45b92db8b857dfefb Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:05:43 +0900 Subject: [PATCH 38/67] =?UTF-8?q?feat:=20Organization=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20<->=20=EC=9D=B8=ED=94=84=EB=9D=BC=20=EA=B0=84=20map?= =?UTF-8?q?per=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/organization.mapper.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/organization/command/infrastructure/organization.mapper.ts diff --git a/src/organization/command/infrastructure/organization.mapper.ts b/src/organization/command/infrastructure/organization.mapper.ts new file mode 100644 index 0000000..a7d702f --- /dev/null +++ b/src/organization/command/infrastructure/organization.mapper.ts @@ -0,0 +1,26 @@ +import { Identifier } from 'src/shared/core/domain/identifier'; +import { Organization } from '../domain/organization'; +import { OrganizationEntity } from './organization.entity'; + +export class OrganizationMapper { + static toDomain(entity: OrganizationEntity): Organization { + return Organization.create({ + id: Identifier.from(entity.id), + name: entity.name, + contact: entity.contact, + createdAt: entity.createdAt, + updatedAt: entity.updatedAt, + }); + } + + static toEntity(domain: Organization): OrganizationEntity { + const entity = new OrganizationEntity(); + entity.id = domain.id.value; + entity.name = domain.name; + entity.contact = domain.contact; + entity.createdAt = domain.createdAt; + entity.updatedAt = domain.updatedAt; + + return entity; + } +} From d1d584c92d8b39ac7a5a480c6895a0e3d688538b Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Tue, 4 Nov 2025 23:09:29 +0900 Subject: [PATCH 39/67] =?UTF-8?q?feat:=20Organization=20repository=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/domain/organization.store.ts | 8 +++++ .../infrastructure/organization.store.impl.ts | 30 +++++++++++++++++++ .../command/organization.command.module.ts | 11 ++++--- 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 src/organization/command/domain/organization.store.ts create mode 100644 src/organization/command/infrastructure/organization.store.impl.ts diff --git a/src/organization/command/domain/organization.store.ts b/src/organization/command/domain/organization.store.ts new file mode 100644 index 0000000..a68cbc3 --- /dev/null +++ b/src/organization/command/domain/organization.store.ts @@ -0,0 +1,8 @@ +import { Organization } from './organization'; + +export interface OrganizationStore { + save(organization: Organization): Promise; + deleteById(organizationId: string): Promise; +} + +export const ORGANIZATION_STORE = Symbol('ORGANIZATION_STORE'); diff --git a/src/organization/command/infrastructure/organization.store.impl.ts b/src/organization/command/infrastructure/organization.store.impl.ts new file mode 100644 index 0000000..37f43e6 --- /dev/null +++ b/src/organization/command/infrastructure/organization.store.impl.ts @@ -0,0 +1,30 @@ +import { InjectRepository } from '@mikro-orm/nestjs'; +import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; +import { Organization } from '../domain/organization'; +import { OrganizationEntity } from './organization.entity'; +import { OrganizationMapper } from './organization.mapper'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { OrganizationStore } from '../domain/organization.store'; + +export class OrganizationStoreImpl implements OrganizationStore { + constructor( + @InjectRepository(OrganizationEntity) + private readonly ormRepository: EntityRepository, + private readonly em: EntityManager, + ) {} + + async save(organization: Organization): Promise { + const entity = OrganizationMapper.toEntity(organization); + await this.em.persistAndFlush(entity); + } + + async deleteById(organizationId: string): Promise { + const entity = await this.ormRepository.findOne({ id: organizationId }); + if (!entity) + throw new CustomException( + CustomExceptionCode.ORGANIZATION_NOT_FOUND, + `[OrganizationCommandRepository] ${organizationId}에 해당하는 기관이 존재하지 않습니다.`, + ); + } +} diff --git a/src/organization/command/organization.command.module.ts b/src/organization/command/organization.command.module.ts index d2978dc..5710aad 100644 --- a/src/organization/command/organization.command.module.ts +++ b/src/organization/command/organization.command.module.ts @@ -1,20 +1,23 @@ import { Module } from '@nestjs/common'; -import { ORGANIZATION_COMMAND_REPOSITORY } from './domain/organization.command.repository'; -import { OrganizationCommandRepositoryImpl } from './infrastructure/organization.command.repository.impl'; +import { OrganizationStoreImpl } from './infrastructure/organization.store.impl'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { OrganizationEntity } from './infrastructure/organization.entity'; import { CreateOrganizationUseCase } from './application/create-organization/create-organization.use-case'; +import { CreateOrganizationListener } from './application/create-organization/create-organization.listener'; +import { ORGANIZATION_STORE } from './domain/organization.store'; const usecases = [CreateOrganizationUseCase]; +const listeners = [CreateOrganizationListener]; @Module({ imports: [MikroOrmModule.forFeature([OrganizationEntity])], providers: [ { - provide: ORGANIZATION_COMMAND_REPOSITORY, - useClass: OrganizationCommandRepositoryImpl, + provide: ORGANIZATION_STORE, + useClass: OrganizationStoreImpl, }, ...usecases, + ...listeners, ], controllers: [], }) From 35969f1d1aa491a9b1c94d79b68297ccc713c802 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Wed, 5 Nov 2025 21:47:57 +0900 Subject: [PATCH 40/67] =?UTF-8?q?feat:=20organization=20model=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/organization/query/domain/organization.model.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/organization/query/domain/organization.model.ts diff --git a/src/organization/query/domain/organization.model.ts b/src/organization/query/domain/organization.model.ts new file mode 100644 index 0000000..7ef3773 --- /dev/null +++ b/src/organization/query/domain/organization.model.ts @@ -0,0 +1,9 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class OrganizationModel { + @ApiProperty() + name: string; + + @ApiProperty() + contact: string; +} From 22959cac5b3dcc247e496a750d937c790bcce088 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Wed, 5 Nov 2025 21:48:17 +0900 Subject: [PATCH 41/67] =?UTF-8?q?feat:=20organization=20view=20entity=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization.view.entity.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/organization/query/infrastructure/organization.view.entity.ts diff --git a/src/organization/query/infrastructure/organization.view.entity.ts b/src/organization/query/infrastructure/organization.view.entity.ts new file mode 100644 index 0000000..f54c285 --- /dev/null +++ b/src/organization/query/infrastructure/organization.view.entity.ts @@ -0,0 +1,22 @@ +import { Entity, Property } from '@mikro-orm/core'; + +@Entity({ + expression: ` + SELECT + o.id, + o.name, + o.contact + FROM + organizations o + `, +}) +export class OrganizationViewEntity { + @Property() + id: string; + + @Property() + name: string; + + @Property() + contact: string; +} From 5999e32a760c5da298ffdfa8756d18460d66e426 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Wed, 5 Nov 2025 21:50:38 +0900 Subject: [PATCH 42/67] =?UTF-8?q?feat:=20organization=20repository=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/domain/organization.reader.ts | 7 ++++ .../organization.reader.impl.ts | 33 +++++++++++++++++++ .../query/organization.query.module.ts | 8 +++++ 3 files changed, 48 insertions(+) create mode 100644 src/organization/query/domain/organization.reader.ts create mode 100644 src/organization/query/infrastructure/organization.reader.impl.ts diff --git a/src/organization/query/domain/organization.reader.ts b/src/organization/query/domain/organization.reader.ts new file mode 100644 index 0000000..3d727e4 --- /dev/null +++ b/src/organization/query/domain/organization.reader.ts @@ -0,0 +1,7 @@ +import { OrganizationModel } from './organization.model'; + +export interface OrganizationReader { + findById(organizationId: string): Promise; +} + +export const ORGANIZATION_READER = Symbol('ORGANIZATION_READER'); diff --git a/src/organization/query/infrastructure/organization.reader.impl.ts b/src/organization/query/infrastructure/organization.reader.impl.ts new file mode 100644 index 0000000..7e64aab --- /dev/null +++ b/src/organization/query/infrastructure/organization.reader.impl.ts @@ -0,0 +1,33 @@ +import { InjectRepository } from '@mikro-orm/nestjs'; +import { OrganizationModel } from '../domain/organization.model'; +import { OrganizationViewEntity } from './organization.view.entity'; +import { EntityRepository } from '@mikro-orm/mysql'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { OrganizationReader } from '../domain/organization.reader'; + +export class OrganizationReaderImpl implements OrganizationReader { + constructor( + @InjectRepository(OrganizationViewEntity) + private readonly organizationOrmRepository: EntityRepository, + ) {} + + async findById(organizationId: string): Promise { + const qb = this.organizationOrmRepository.createQueryBuilder('o'); + + qb.where({ id: organizationId }); + + const organizationEntity = await qb.getSingleResult(); + + if (!organizationEntity) + throw new CustomException( + CustomExceptionCode.ORGANIZATION_NOT_FOUND, + `[OrganizationQueryRepository] ${organizationId}에 해당하는 기관이 존재하지 않습니다.`, + ); + + return { + name: organizationEntity.name, + contact: organizationEntity.contact, + }; + } +} diff --git a/src/organization/query/organization.query.module.ts b/src/organization/query/organization.query.module.ts index 00774ec..2a8c8a8 100644 --- a/src/organization/query/organization.query.module.ts +++ b/src/organization/query/organization.query.module.ts @@ -1,8 +1,16 @@ import { MikroOrmModule } from '@mikro-orm/nestjs'; import { Module } from '@nestjs/common'; import { OrganizationViewEntity } from './infrastructure/organization.view.entity'; +import { ORGANIZATION_READER } from './domain/organization.reader'; +import { OrganizationReaderImpl } from './infrastructure/organization.reader.impl'; @Module({ imports: [MikroOrmModule.forFeature([OrganizationViewEntity])], + providers: [ + { + provide: ORGANIZATION_READER, + useClass: OrganizationReaderImpl, + }, + ], }) export class OrganizationQueryModule {} From 606b4b35a2a7e4a8e08d005c06955875694a3740 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Thu, 6 Nov 2025 23:57:56 +0900 Subject: [PATCH 43/67] =?UTF-8?q?feat:=20organization=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../create-organization.command.ts | 10 +++++++ .../create-organization.listener.ts | 19 +++++++++++++ .../create-organization.use-case.ts | 28 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 src/organization/command/application/create-organization/create-organization.command.ts create mode 100644 src/organization/command/application/create-organization/create-organization.listener.ts create mode 100644 src/organization/command/application/create-organization/create-organization.use-case.ts diff --git a/src/organization/command/application/create-organization/create-organization.command.ts b/src/organization/command/application/create-organization/create-organization.command.ts new file mode 100644 index 0000000..579d42b --- /dev/null +++ b/src/organization/command/application/create-organization/create-organization.command.ts @@ -0,0 +1,10 @@ +import { ICommand } from '@nestjs/cqrs'; +import { Identifier } from 'src/shared/core/domain/identifier'; + +export class CreateOrganizationCommand implements ICommand { + constructor( + public readonly organizationId: Identifier, + public readonly name: string, + public readonly contact: string, + ) {} +} diff --git a/src/organization/command/application/create-organization/create-organization.listener.ts b/src/organization/command/application/create-organization/create-organization.listener.ts new file mode 100644 index 0000000..b2350f0 --- /dev/null +++ b/src/organization/command/application/create-organization/create-organization.listener.ts @@ -0,0 +1,19 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { AuthOrganizationCreatedEvent } from 'src/auth/auth-organization/domain/event/auth-organization-created.event'; +import { CreateOrganizationUseCase } from './create-organization.use-case'; +import { Identifier } from 'src/shared/core/domain/identifier'; +import { Transactional } from '@mikro-orm/core'; + +@EventsHandler(AuthOrganizationCreatedEvent) +export class CreateOrganizationListener implements IEventHandler { + constructor(private readonly createOrganizationUseCase: CreateOrganizationUseCase) {} + + @Transactional() + async handle(event: AuthOrganizationCreatedEvent) { + await this.createOrganizationUseCase.execute({ + organizationId: Identifier.from(event.organizationId), + name: event.name, + contact: event.contact, + }); + } +} diff --git a/src/organization/command/application/create-organization/create-organization.use-case.ts b/src/organization/command/application/create-organization/create-organization.use-case.ts new file mode 100644 index 0000000..03bae1f --- /dev/null +++ b/src/organization/command/application/create-organization/create-organization.use-case.ts @@ -0,0 +1,28 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { CommandHandler } from '@nestjs/cqrs'; +import { CreateOrganizationCommand } from './create-organization.command'; +import { Organization } from '../../domain/organization'; +import { ORGANIZATION_STORE, OrganizationStore } from '../../domain/organization.store'; + +@Injectable() +@CommandHandler(CreateOrganizationCommand) +export class CreateOrganizationUseCase { + constructor( + @Inject(ORGANIZATION_STORE) + private readonly organizationStore: OrganizationStore, + ) {} + + async execute(command: CreateOrganizationCommand): Promise { + const { organizationId, name, contact } = command; + + const organization = Organization.create({ + id: organizationId, + name: name, + contact: contact, + createdAt: new Date(), + updatedAt: new Date(), + }); + + await this.organizationStore.save(organization); + } +} From ffa33f9de4e41da012dc52a44ea28db87770a5a6 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Fri, 7 Nov 2025 00:00:33 +0900 Subject: [PATCH 44/67] =?UTF-8?q?feat:=20orgnization=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delete-organization.command.ts | 5 +++++ .../delete-organization.use-case.ts | 21 +++++++++++++++++++ .../command/domain/organization.ts | 8 ++++--- 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/organization/command/application/delete-organization/delete-organization.command.ts create mode 100644 src/organization/command/application/delete-organization/delete-organization.use-case.ts diff --git a/src/organization/command/application/delete-organization/delete-organization.command.ts b/src/organization/command/application/delete-organization/delete-organization.command.ts new file mode 100644 index 0000000..e3f4a5b --- /dev/null +++ b/src/organization/command/application/delete-organization/delete-organization.command.ts @@ -0,0 +1,5 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class DeleteOrganizationCommand implements ICommand { + constructor(public readonly organizationId: string) {} +} diff --git a/src/organization/command/application/delete-organization/delete-organization.use-case.ts b/src/organization/command/application/delete-organization/delete-organization.use-case.ts new file mode 100644 index 0000000..f39c34e --- /dev/null +++ b/src/organization/command/application/delete-organization/delete-organization.use-case.ts @@ -0,0 +1,21 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { ORGANIZATION_STORE, OrganizationStore } from '../../domain/organization.store'; +import { DeleteOrganizationCommand } from './delete-organization.command'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +@Injectable() +export class DeleteOrganizationUseCase { + constructor( + @Inject(ORGANIZATION_STORE) + private readonly organizationStore: OrganizationStore, + ) {} + + async execute(command: DeleteOrganizationCommand): Promise { + const organization = await this.organizationStore.loadById(command.organizationId); + if (!organization) throw new CustomException(CustomExceptionCode.ORGANIZATION_NOT_FOUND); + + const { organizationId } = command; + await this.organizationStore.deleteById(organizationId); + } +} diff --git a/src/organization/command/domain/organization.ts b/src/organization/command/domain/organization.ts index ad373dd..2b877a0 100644 --- a/src/organization/command/domain/organization.ts +++ b/src/organization/command/domain/organization.ts @@ -34,14 +34,16 @@ export class Organization extends AggregateRoot { } } - public update(name: string | null, contact: string | null): void { - if (name) this.props.name = name; - if (contact) this.props.contact = contact; + public update(name?: string, contact?: string): void { + if (name !== undefined) this.props.name = name; + if (contact !== undefined) this.props.contact = contact; this.props.updatedAt = new Date(); this.validate(); } + delete(): void {} + get name(): string { return this.props.name; } From b5e8ec4c55d8c890aa61d71529bd09bc4ca7a6eb Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Fri, 7 Nov 2025 00:01:12 +0900 Subject: [PATCH 45/67] =?UTF-8?q?feat:=20organization=20repository=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/domain/organization.store.ts | 2 ++ .../infrastructure/organization.store.impl.ts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/organization/command/domain/organization.store.ts b/src/organization/command/domain/organization.store.ts index a68cbc3..e40d616 100644 --- a/src/organization/command/domain/organization.store.ts +++ b/src/organization/command/domain/organization.store.ts @@ -2,6 +2,8 @@ import { Organization } from './organization'; export interface OrganizationStore { save(organization: Organization): Promise; + loadById(organizationId: string): Promise; + updateById(organization: Organization): Promise; deleteById(organizationId: string): Promise; } diff --git a/src/organization/command/infrastructure/organization.store.impl.ts b/src/organization/command/infrastructure/organization.store.impl.ts index 37f43e6..d6580c1 100644 --- a/src/organization/command/infrastructure/organization.store.impl.ts +++ b/src/organization/command/infrastructure/organization.store.impl.ts @@ -27,4 +27,23 @@ export class OrganizationStoreImpl implements OrganizationStore { `[OrganizationCommandRepository] ${organizationId}에 해당하는 기관이 존재하지 않습니다.`, ); } + + async updateById(organization: Organization): Promise { + await this.em.nativeUpdate( + OrganizationEntity, + { id: organization.id.value }, + { + name: organization.name, + contact: organization.contact, + updatedAt: organization.updatedAt, + }, + ); + } + + async loadById(organizationId: string): Promise { + const entity = await this.ormRepository.findOne({ id: organizationId }); + if (!entity) return null; + + return OrganizationMapper.toDomain(entity); + } } From 591799db0f76b2449152aa3132fd6b28b743e123 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 15:11:34 +0900 Subject: [PATCH 46/67] =?UTF-8?q?feat:=20update=20organization=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update-organization.command.ts | 9 ++++++++ .../update-organization.use-case.ts | 22 +++++++++++++++++++ .../command/organization.command.module.ts | 7 ++++-- .../update-organization.request.dto.ts | 22 +++++++++++++++++++ .../organization.command.controller.ts | 19 ++++++++++++++++ 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/organization/command/application/update-organization/update-organization.command.ts create mode 100644 src/organization/command/application/update-organization/update-organization.use-case.ts create mode 100644 src/organization/command/presentation/dto/request/update-organization.request.dto.ts create mode 100644 src/organization/command/presentation/organization.command.controller.ts diff --git a/src/organization/command/application/update-organization/update-organization.command.ts b/src/organization/command/application/update-organization/update-organization.command.ts new file mode 100644 index 0000000..00e6ec1 --- /dev/null +++ b/src/organization/command/application/update-organization/update-organization.command.ts @@ -0,0 +1,9 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class UpdateOrganizationCommand implements ICommand { + constructor( + public readonly organizationId: string, + public readonly name?: string, + public readonly contact?: string, + ) {} +} diff --git a/src/organization/command/application/update-organization/update-organization.use-case.ts b/src/organization/command/application/update-organization/update-organization.use-case.ts new file mode 100644 index 0000000..8464658 --- /dev/null +++ b/src/organization/command/application/update-organization/update-organization.use-case.ts @@ -0,0 +1,22 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { UpdateOrganizationCommand } from './update-organization.command'; +import { ORGANIZATION_STORE, OrganizationStore } from '../../domain/organization.store'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +@Injectable() +export class UpdateOrganizationUseCase { + constructor( + @Inject(ORGANIZATION_STORE) + private readonly organizationStore: OrganizationStore, + ) {} + + async execute(command: UpdateOrganizationCommand): Promise { + const organization = await this.organizationStore.loadById(command.organizationId); + if (!organization) throw new CustomException(CustomExceptionCode.ORGANIZATION_NOT_FOUND); + + organization.update(command.name, command.contact); + + await this.organizationStore.updateById(organization); + } +} diff --git a/src/organization/command/organization.command.module.ts b/src/organization/command/organization.command.module.ts index 5710aad..7425cf1 100644 --- a/src/organization/command/organization.command.module.ts +++ b/src/organization/command/organization.command.module.ts @@ -5,8 +5,11 @@ import { OrganizationEntity } from './infrastructure/organization.entity'; import { CreateOrganizationUseCase } from './application/create-organization/create-organization.use-case'; import { CreateOrganizationListener } from './application/create-organization/create-organization.listener'; import { ORGANIZATION_STORE } from './domain/organization.store'; +import { DeleteOrganizationUseCase } from './application/delete-organization/delete-organization.use-case'; +import { UpdateOrganizationUseCase } from './application/update-organization/update-organization.use-case'; +import { OrganizationCommandController } from './presentation/organization.command.controller'; -const usecases = [CreateOrganizationUseCase]; +const usecases = [CreateOrganizationUseCase, UpdateOrganizationUseCase, DeleteOrganizationUseCase]; const listeners = [CreateOrganizationListener]; @Module({ @@ -19,6 +22,6 @@ const listeners = [CreateOrganizationListener]; ...usecases, ...listeners, ], - controllers: [], + controllers: [OrganizationCommandController], }) export class OrganizationCommandModule {} diff --git a/src/organization/command/presentation/dto/request/update-organization.request.dto.ts b/src/organization/command/presentation/dto/request/update-organization.request.dto.ts new file mode 100644 index 0000000..358c89d --- /dev/null +++ b/src/organization/command/presentation/dto/request/update-organization.request.dto.ts @@ -0,0 +1,22 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsOptional, IsString } from 'class-validator'; + +export class UpdateOrganizationDto { + @ApiProperty({ + description: '기관/단체 이름', + example: '한국스타트업협회', + required: false, + }) + @IsString() + @IsOptional() + name?: string; + + @ApiProperty({ + description: '연락처', + example: '010-1234-5678', + required: false, + }) + @IsString() + @IsOptional() + contact?: string; +} diff --git a/src/organization/command/presentation/organization.command.controller.ts b/src/organization/command/presentation/organization.command.controller.ts new file mode 100644 index 0000000..498d88d --- /dev/null +++ b/src/organization/command/presentation/organization.command.controller.ts @@ -0,0 +1,19 @@ +import { Body, Controller, Param, Patch } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { UpdateOrganizationUseCase } from '../application/update-organization/update-organization.use-case'; +import { UpdateOrganizationDto } from './dto/request/update-organization.request.dto'; + +@ApiTags('organization') +@Controller('organization') +export class OrganizationCommandController { + constructor(private readonly updateOrganizationUseCase: UpdateOrganizationUseCase) {} + + @Patch(':id') + async update(@Param('id') id: string, @Body() dto: UpdateOrganizationDto): Promise { + await this.updateOrganizationUseCase.execute({ + organizationId: id, + name: dto.name, + contact: dto.contact, + }); + } +} From f68db46e71dc2453f9fdd636b60a8e8dc0f50b78 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 15:13:52 +0900 Subject: [PATCH 47/67] =?UTF-8?q?feat:=20organization=20=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/create/create.command.ts | 10 ++++ .../application/create/create.use-case.ts | 50 +++++++++++++++++++ .../event/auth-organization-created.event.ts | 13 +++++ 3 files changed, 73 insertions(+) create mode 100644 src/auth/auth-organization/application/create/create.command.ts create mode 100644 src/auth/auth-organization/application/create/create.use-case.ts create mode 100644 src/auth/auth-organization/domain/event/auth-organization-created.event.ts diff --git a/src/auth/auth-organization/application/create/create.command.ts b/src/auth/auth-organization/application/create/create.command.ts new file mode 100644 index 0000000..03e453a --- /dev/null +++ b/src/auth/auth-organization/application/create/create.command.ts @@ -0,0 +1,10 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class CreateAuthOrganizationCommand implements ICommand { + constructor( + public readonly accountId: string, + public readonly password: string, + public readonly name: string, + public readonly contact: string, + ) {} +} diff --git a/src/auth/auth-organization/application/create/create.use-case.ts b/src/auth/auth-organization/application/create/create.use-case.ts new file mode 100644 index 0000000..bf4775d --- /dev/null +++ b/src/auth/auth-organization/application/create/create.use-case.ts @@ -0,0 +1,50 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { CreateAuthOrganizationCommand } from './create.command'; +import { AUTH_ORGANIZATION_STORE, AuthOrganizationStore } from '../../domain/auth-organization.store'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { Identifier } from 'src/shared/core/domain/identifier'; +import { AuthOrganization } from '../../domain/auth-organization'; +import { AccountId } from '../../domain/vo/account-id'; +import { PasswordHash } from '../../domain/vo/password-hash'; +import { EventBus } from '@nestjs/cqrs'; +import { AuthOrganizationCreatedEvent } from '../../domain/event/auth-organization-created.event'; +import { PASSWORD_HASHER, PasswordHasher } from '../../domain/password-hasher'; +import { RawPassword } from '../../domain/vo/raw-password'; + +@Injectable() +export class CreateAuthOrganizationUseCase { + constructor( + @Inject(AUTH_ORGANIZATION_STORE) + private readonly authOrganizationStore: AuthOrganizationStore, + @Inject(PASSWORD_HASHER) + private readonly passwordHasher: PasswordHasher, + private readonly eventBus: EventBus, + ) {} + + async execute(command: CreateAuthOrganizationCommand) { + const existingAuth = await this.authOrganizationStore.loadByAccountId(command.accountId); + if (existingAuth) throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_ACCOUNT_ID_ALREADY_EXISTS); + + const rawPassword = RawPassword.create(command.password); + const hashedPassword = await this.passwordHasher.hash(rawPassword.value); + + const authOrganization = AuthOrganization.create({ + id: Identifier.create(), + accountId: AccountId.create(command.accountId), + passwordHash: PasswordHash.create(hashedPassword), + refreshToken: null, + organizationId: Identifier.create(), + createdAt: new Date(), + updatedAt: new Date(), + isDeleted: false, + deletedAt: null, + }); + + await this.authOrganizationStore.save(authOrganization); + + await this.eventBus.publish( + new AuthOrganizationCreatedEvent(authOrganization.organizationId.value, command.name, command.contact), + ); + } +} diff --git a/src/auth/auth-organization/domain/event/auth-organization-created.event.ts b/src/auth/auth-organization/domain/event/auth-organization-created.event.ts new file mode 100644 index 0000000..cb11d22 --- /dev/null +++ b/src/auth/auth-organization/domain/event/auth-organization-created.event.ts @@ -0,0 +1,13 @@ +import { BaseDomainEvent } from 'src/shared/core/domain/base.domain-event'; + +export class AuthOrganizationCreatedEvent implements BaseDomainEvent { + readonly timesstamp: Date; + + constructor( + public readonly organizationId: string, + public readonly name: string, + public readonly contact: string, + ) { + this.timesstamp = new Date(); + } +} From ed84cd4d5a8d589cb1491fc27d5680d16a5a0073 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 15:14:08 +0900 Subject: [PATCH 48/67] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.controller.ts | 54 +++++++++++++++++++ .../register-organization.request.dto.ts | 19 +++++++ 2 files changed, 73 insertions(+) create mode 100644 src/auth/auth-organization/presentation/auth-organization.controller.ts create mode 100644 src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts diff --git a/src/auth/auth-organization/presentation/auth-organization.controller.ts b/src/auth/auth-organization/presentation/auth-organization.controller.ts new file mode 100644 index 0000000..90d9a5d --- /dev/null +++ b/src/auth/auth-organization/presentation/auth-organization.controller.ts @@ -0,0 +1,54 @@ +import { Body, Controller, HttpStatus, Post, Res } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { CreateAuthOrganizationUseCase } from '../application/create/create.use-case'; +import { RegisterOrganizationRequestDto } from './dto/request/register-organization.request.dto'; +import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; +import { Response } from 'express'; +import { RenewTokenUseCase } from '../application/renew-token/renew-token.use-case'; +import { accessTokenCookieOptions, refreshTokenCookieOptions } from 'src/shared/config/cookie.config'; +import { LogoutUseCase } from '../application/logout/logout.use-case'; + +@ApiTags('auth-organization') +@Controller('auth/organization') +export class AuthOrganizationController { + constructor( + private readonly createAuthOrganizationUseCase: CreateAuthOrganizationUseCase, + private readonly renewTokenUseCase: RenewTokenUseCase, + private readonly logoutUseCase: LogoutUseCase, + ) {} + + @Post('register') + async registerOrganization(@Body() dto: RegisterOrganizationRequestDto) { + await this.createAuthOrganizationUseCase.execute({ + accountId: dto.accountId, + password: dto.password, + name: dto.name, + contact: dto.contact, + }); + } + + @Post('refresh') + async renewToken(@User() user: UserPayload, @Res() res: Response) { + const { userId, jti } = user; + const { newAccessToken, newRefreshToken } = await this.renewTokenUseCase.execute({ + organizationId: userId, + jti: jti, + }); + + res.cookie('accessToken', newAccessToken, accessTokenCookieOptions); + res.cookie('refreshToken', newRefreshToken, refreshTokenCookieOptions); + + res.status(HttpStatus.OK).send(); + } + + @Post('logout') + async logout(@User() user: UserPayload, @Res() res: Response) { + const { userId } = user; + await this.logoutUseCase.execute({ organizationId: userId }); + + res.clearCookie('accessToken', accessTokenCookieOptions); + res.clearCookie('refreshToken', refreshTokenCookieOptions); + + res.status(HttpStatus.OK).send(); + } +} diff --git a/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts b/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts new file mode 100644 index 0000000..83d48fd --- /dev/null +++ b/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts @@ -0,0 +1,19 @@ +import { IsNotEmpty, IsString } from 'class-validator'; + +export class RegisterOrganizationRequestDto { + @IsString() + @IsNotEmpty() + accountId: string; + + @IsString() + @IsNotEmpty() + password: string; + + @IsString() + @IsNotEmpty() + name: string; + + @IsString() + @IsNotEmpty() + contact: string; +} From 82aad0ad076cac5ba981653beda69d30c513424b Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 15:15:01 +0900 Subject: [PATCH 49/67] =?UTF-8?q?feat:=20organization=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=95=84=EC=9B=83=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/logout/logout.command.ts | 5 ++++ .../application/logout/logout.use-case.ts | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/auth/auth-organization/application/logout/logout.command.ts create mode 100644 src/auth/auth-organization/application/logout/logout.use-case.ts diff --git a/src/auth/auth-organization/application/logout/logout.command.ts b/src/auth/auth-organization/application/logout/logout.command.ts new file mode 100644 index 0000000..0da833f --- /dev/null +++ b/src/auth/auth-organization/application/logout/logout.command.ts @@ -0,0 +1,5 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class LogoutCommand implements ICommand { + constructor(public readonly organizationId: string) {} +} diff --git a/src/auth/auth-organization/application/logout/logout.use-case.ts b/src/auth/auth-organization/application/logout/logout.use-case.ts new file mode 100644 index 0000000..a42b5be --- /dev/null +++ b/src/auth/auth-organization/application/logout/logout.use-case.ts @@ -0,0 +1,25 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { CommandHandler } from '@nestjs/cqrs'; +import { LogoutCommand } from './logout.command'; +import { AUTH_ORGANIZATION_STORE, AuthOrganizationStore } from '../../domain/auth-organization.store'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +@Injectable() +@CommandHandler(LogoutCommand) +export class LogoutUseCase { + constructor( + @Inject(AUTH_ORGANIZATION_STORE) + private readonly authOrganizationStore: AuthOrganizationStore, + ) {} + + async execute(command: LogoutCommand): Promise { + const { organizationId } = command; + + const authOrganization = await this.authOrganizationStore.loadByOrganizationId(organizationId); + if (!authOrganization) throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_ACCESS_TOKEN); + + authOrganization.updateRefreshToken(null); + await this.authOrganizationStore.update(authOrganization); + } +} From 1356c70090e9bf69d19676f213521f05d3929d90 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 16:15:14 +0900 Subject: [PATCH 50/67] =?UTF-8?q?feat:=20organization=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/dto/login.response.dto.ts | 11 ++++ .../application/login/login.command.ts | 8 +++ .../application/login/login.use-case.ts | 57 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 src/auth/auth-organization/application/login/dto/login.response.dto.ts create mode 100644 src/auth/auth-organization/application/login/login.command.ts create mode 100644 src/auth/auth-organization/application/login/login.use-case.ts diff --git a/src/auth/auth-organization/application/login/dto/login.response.dto.ts b/src/auth/auth-organization/application/login/dto/login.response.dto.ts new file mode 100644 index 0000000..b65819b --- /dev/null +++ b/src/auth/auth-organization/application/login/dto/login.response.dto.ts @@ -0,0 +1,11 @@ +import { IsNotEmpty, IsString } from 'class-validator'; + +export class LoginResponseDto { + @IsString() + @IsNotEmpty() + accessToken: string; + + @IsString() + @IsNotEmpty() + refreshToken: string; +} diff --git a/src/auth/auth-organization/application/login/login.command.ts b/src/auth/auth-organization/application/login/login.command.ts new file mode 100644 index 0000000..3895850 --- /dev/null +++ b/src/auth/auth-organization/application/login/login.command.ts @@ -0,0 +1,8 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class LoginCommand implements ICommand { + constructor( + public readonly accountId: string, + public readonly password: string, + ) {} +} diff --git a/src/auth/auth-organization/application/login/login.use-case.ts b/src/auth/auth-organization/application/login/login.use-case.ts new file mode 100644 index 0000000..bd21759 --- /dev/null +++ b/src/auth/auth-organization/application/login/login.use-case.ts @@ -0,0 +1,57 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { CommandHandler } from '@nestjs/cqrs'; +import { LoginCommand } from './login.command'; +import { AUTH_ORGANIZATION_STORE, AuthOrganizationStore } from '../../domain/auth-organization.store'; +import { PASSWORD_HASHER, PasswordHasher } from '../../domain/password-hasher'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { JwtProvider } from 'src/auth/core/infrastructure/jwt/jwt.provider'; +import { TokenType } from 'src/auth/core/infrastructure/jwt/jwt.factory'; +import { LoginResponseDto } from './dto/login.response.dto'; +import { AuthOrganization } from '../../domain/auth-organization'; + +@Injectable() +@CommandHandler(LoginCommand) +export class LoginUseCase { + constructor( + @Inject(AUTH_ORGANIZATION_STORE) + private readonly authOrganizationStore: AuthOrganizationStore, + @Inject(PASSWORD_HASHER) + private readonly passwordHasher: PasswordHasher, + private readonly jwtProvider: JwtProvider, + ) {} + + async execute(command: LoginCommand): Promise { + const { accountId, password } = command; + + const authOrganization = await this.validateAccount(accountId, password); + const { accessToken, refreshToken, jti } = await this.generateTokens(authOrganization.organizationId.value); + await this.saveRefreshToken(authOrganization, jti); + + return { accessToken, refreshToken }; + } + + private async validateAccount(accountId: string, password: string): Promise { + const authOrganization = await this.authOrganizationStore.loadByAccountId(accountId); + if (!authOrganization) throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_NOT_FOUND); + + const isPasswordValid = await this.passwordHasher.compare(password, authOrganization.passwordHash.value); + if (!isPasswordValid) throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_PASSWORD); + + return authOrganization; + } + + private async generateTokens( + organizationId: string, + ): Promise<{ accessToken: string; refreshToken: string; jti: string }> { + const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, organizationId); + const { token: refreshToken, jti } = await this.jwtProvider.generateToken(TokenType.REFRESH, organizationId); + + return { accessToken, refreshToken, jti }; + } + + private async saveRefreshToken(authOrganization: AuthOrganization, jti: string): Promise { + authOrganization.updateRefreshToken(jti); + await this.authOrganizationStore.update(authOrganization); + } +} From 64b566827e2b4999bab5fecbfe044b9c88cd1ea4 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 16:15:45 +0900 Subject: [PATCH 51/67] =?UTF-8?q?feat:=20organization=20=ED=86=A0=ED=81=B0?= =?UTF-8?q?=20=EA=B0=B1=EC=8B=A0=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/renew-token.response.dto.ts | 11 ++++ .../renew-token/renew-token.command.ts | 8 +++ .../renew-token/renew-token.use-case.ts | 53 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 src/auth/auth-organization/application/renew-token/dto/renew-token.response.dto.ts create mode 100644 src/auth/auth-organization/application/renew-token/renew-token.command.ts create mode 100644 src/auth/auth-organization/application/renew-token/renew-token.use-case.ts diff --git a/src/auth/auth-organization/application/renew-token/dto/renew-token.response.dto.ts b/src/auth/auth-organization/application/renew-token/dto/renew-token.response.dto.ts new file mode 100644 index 0000000..939d5ad --- /dev/null +++ b/src/auth/auth-organization/application/renew-token/dto/renew-token.response.dto.ts @@ -0,0 +1,11 @@ +import { IsNotEmpty, IsString } from 'class-validator'; + +export class RenewTokenResponseDto { + @IsString() + @IsNotEmpty() + accessToken: string; + + @IsString() + @IsNotEmpty() + refreshToken: string; +} diff --git a/src/auth/auth-organization/application/renew-token/renew-token.command.ts b/src/auth/auth-organization/application/renew-token/renew-token.command.ts new file mode 100644 index 0000000..00d655f --- /dev/null +++ b/src/auth/auth-organization/application/renew-token/renew-token.command.ts @@ -0,0 +1,8 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class RenewTokenCommand implements ICommand { + constructor( + public readonly organizationId: string, + public readonly jti: string, + ) {} +} diff --git a/src/auth/auth-organization/application/renew-token/renew-token.use-case.ts b/src/auth/auth-organization/application/renew-token/renew-token.use-case.ts new file mode 100644 index 0000000..545aa6e --- /dev/null +++ b/src/auth/auth-organization/application/renew-token/renew-token.use-case.ts @@ -0,0 +1,53 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { JwtProvider } from 'src/auth/core/infrastructure/jwt/jwt.provider'; +import { AUTH_ORGANIZATION_STORE, AuthOrganizationStore } from '../../domain/auth-organization.store'; +import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; +import { RenewTokenCommand } from './renew-token.command'; +import { TokenType } from 'src/auth/core/infrastructure/jwt/jwt.factory'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { RenewTokenResponseDto } from './dto/renew-token.response.dto'; +import { AuthOrganization } from '../../domain/auth-organization'; + +@Injectable() +@CommandHandler(RenewTokenCommand) +export class RenewTokenUseCase implements ICommandHandler { + constructor( + @Inject(AUTH_ORGANIZATION_STORE) + private readonly authOrganizationStore: AuthOrganizationStore, + private readonly jwtProvider: JwtProvider, + ) {} + + async execute(command: RenewTokenCommand): Promise { + const { organizationId, jti } = command; + + const authOrganization = await this.validateRefreshToken(organizationId, jti); + const { accessToken, refreshToken, jti: newJti } = await this.generateTokens(organizationId); + await this.saveRefreshToken(authOrganization, newJti); + + return { accessToken, refreshToken }; + } + + private async validateRefreshToken(organizationId: string, jti: string): Promise { + const authOrganization = await this.authOrganizationStore.loadByRefreshToken(jti); + if (!authOrganization || authOrganization.organizationId.value !== organizationId) { + throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_INVALID_REFRESH_TOKEN); + } + + return authOrganization; + } + + private async generateTokens( + organizationId: string, + ): Promise<{ accessToken: string; refreshToken: string; jti: string }> { + const { token: accessToken } = await this.jwtProvider.generateToken(TokenType.ACCESS, organizationId); + const { token: refreshToken, jti } = await this.jwtProvider.generateToken(TokenType.REFRESH, organizationId); + + return { accessToken, refreshToken, jti }; + } + + private async saveRefreshToken(authOrganization: AuthOrganization, jti: string): Promise { + authOrganization.updateRefreshToken(jti); + await this.authOrganizationStore.update(authOrganization); + } +} From 9ad9f63a0a584c61ca153b10c3de1491b0cf659e Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 16:16:16 +0900 Subject: [PATCH 52/67] =?UTF-8?q?feat:=20organization=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8,=20=ED=86=A0=ED=81=B0=20=EA=B0=B1=EC=8B=A0=20api=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.module.ts | 5 +++- .../auth-organization.controller.ts | 30 +++++++++++++++---- .../dto/request/login.request.dto.ts | 20 +++++++++++++ src/auth/core/auth-core.module.ts | 18 +++++++++++ 4 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 src/auth/auth-organization/presentation/dto/request/login.request.dto.ts create mode 100644 src/auth/core/auth-core.module.ts diff --git a/src/auth/auth-organization/auth-organization.module.ts b/src/auth/auth-organization/auth-organization.module.ts index a466df9..fb925fc 100644 --- a/src/auth/auth-organization/auth-organization.module.ts +++ b/src/auth/auth-organization/auth-organization.module.ts @@ -10,8 +10,11 @@ import { CreateAuthOrganizationUseCase } from './application/create/create.use-c import { CqrsModule } from '@nestjs/cqrs'; import { PASSWORD_HASHER } from './domain/password-hasher'; import { PasswordHasherImpl } from './infrastructure/password-hasher.impl'; +import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; +import { LogoutUseCase } from './application/logout/logout.use-case'; +import { LoginUseCase } from './application/login/login.use-case'; -const usecases = [CreateAuthOrganizationUseCase]; +const usecases = [CreateAuthOrganizationUseCase, RenewTokenUseCase, LoginUseCase, LogoutUseCase]; @Module({ imports: [SharedModule, MikroOrmModule.forFeature([AuthOrganizationEntity]), AuthCoreModule, CqrsModule], diff --git a/src/auth/auth-organization/presentation/auth-organization.controller.ts b/src/auth/auth-organization/presentation/auth-organization.controller.ts index 90d9a5d..0498dcb 100644 --- a/src/auth/auth-organization/presentation/auth-organization.controller.ts +++ b/src/auth/auth-organization/presentation/auth-organization.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, HttpStatus, Post, Res } from '@nestjs/common'; +import { Body, Controller, HttpStatus, Post, Res, UseGuards } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { CreateAuthOrganizationUseCase } from '../application/create/create.use-case'; import { RegisterOrganizationRequestDto } from './dto/request/register-organization.request.dto'; @@ -7,6 +7,9 @@ import { Response } from 'express'; import { RenewTokenUseCase } from '../application/renew-token/renew-token.use-case'; import { accessTokenCookieOptions, refreshTokenCookieOptions } from 'src/shared/config/cookie.config'; import { LogoutUseCase } from '../application/logout/logout.use-case'; +import { LoginRequestDto } from './dto/request/login.request.dto'; +import { LoginUseCase } from '../application/login/login.use-case'; +import { AuthGuard } from '@nestjs/passport'; @ApiTags('auth-organization') @Controller('auth/organization') @@ -14,6 +17,7 @@ export class AuthOrganizationController { constructor( private readonly createAuthOrganizationUseCase: CreateAuthOrganizationUseCase, private readonly renewTokenUseCase: RenewTokenUseCase, + private readonly loginUseCase: LoginUseCase, private readonly logoutUseCase: LogoutUseCase, ) {} @@ -27,24 +31,38 @@ export class AuthOrganizationController { }); } + @Post('login') + async login(@Body() dto: LoginRequestDto, @Res() res: Response) { + const { accessToken, refreshToken } = await this.loginUseCase.execute({ + accountId: dto.accountId, + password: dto.password, + }); + + res.cookie('accessToken', accessToken, accessTokenCookieOptions); + res.cookie('refreshToken', refreshToken, refreshTokenCookieOptions); + + res.status(HttpStatus.OK).send(); + } + @Post('refresh') + @UseGuards(AuthGuard('jwt-refresh')) async renewToken(@User() user: UserPayload, @Res() res: Response) { const { userId, jti } = user; - const { newAccessToken, newRefreshToken } = await this.renewTokenUseCase.execute({ + const { accessToken, refreshToken } = await this.renewTokenUseCase.execute({ organizationId: userId, jti: jti, }); - res.cookie('accessToken', newAccessToken, accessTokenCookieOptions); - res.cookie('refreshToken', newRefreshToken, refreshTokenCookieOptions); + res.cookie('accessToken', accessToken, accessTokenCookieOptions); + res.cookie('refreshToken', refreshToken, refreshTokenCookieOptions); res.status(HttpStatus.OK).send(); } @Post('logout') + @UseGuards(AuthGuard('jwt-access')) async logout(@User() user: UserPayload, @Res() res: Response) { - const { userId } = user; - await this.logoutUseCase.execute({ organizationId: userId }); + await this.logoutUseCase.execute({ organizationId: user.userId }); res.clearCookie('accessToken', accessTokenCookieOptions); res.clearCookie('refreshToken', refreshTokenCookieOptions); diff --git a/src/auth/auth-organization/presentation/dto/request/login.request.dto.ts b/src/auth/auth-organization/presentation/dto/request/login.request.dto.ts new file mode 100644 index 0000000..cd729e5 --- /dev/null +++ b/src/auth/auth-organization/presentation/dto/request/login.request.dto.ts @@ -0,0 +1,20 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class LoginRequestDto { + @IsString() + @IsNotEmpty() + @ApiProperty({ + description: '아이디', + example: 'org_123456', + }) + accountId: string; + + @IsString() + @IsNotEmpty() + @ApiProperty({ + description: '비밀번호', + example: 'password123', + }) + password: string; +} diff --git a/src/auth/core/auth-core.module.ts b/src/auth/core/auth-core.module.ts new file mode 100644 index 0000000..b4a5ca0 --- /dev/null +++ b/src/auth/core/auth-core.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { JwtRefreshStrategy } from './infrastructure/jwt/jwt-refresh.strategy'; +import { JwtAccessStrategy } from './infrastructure/jwt/jwt-access.strategy'; +import { JwtProvider } from './infrastructure/jwt/jwt.provider'; +import { PassportModule } from '@nestjs/passport'; +import { JwtModule } from '@nestjs/jwt'; +import { OAuthProviderFactory } from 'src/auth/core/infrastructure/oauth/oauth-provider.factory'; +import { KakaoOAuthProvider } from './infrastructure/oauth/kakao.provider'; + +const jwt = [JwtProvider, JwtAccessStrategy, JwtRefreshStrategy]; + +@Module({ + imports: [PassportModule, JwtModule.register({})], + providers: [...jwt, OAuthProviderFactory, KakaoOAuthProvider], + controllers: [], + exports: [OAuthProviderFactory, ...jwt], +}) +export class AuthCoreModule {} From 8943e31c77e4c90a338121f28034ea2b02d68abb Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 16:17:18 +0900 Subject: [PATCH 53/67] =?UTF-8?q?feat:=20auth-organization=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/exception/custom-exception-code.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/shared/exception/custom-exception-code.ts b/src/shared/exception/custom-exception-code.ts index 9c6c4bb..d481e78 100644 --- a/src/shared/exception/custom-exception-code.ts +++ b/src/shared/exception/custom-exception-code.ts @@ -48,6 +48,11 @@ export enum CustomExceptionCode { AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH = 'AUTH_ORGANIZATION_INVALID_ACCOUNT_ID_LENGTH', AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH = 'AUTH_ORGANIZATION_INVALID_PASSWORD_LENGTH', AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT = 'AUTH_ORGANIZATION_INVALID_PASSWORD_FORMAT', + AUTH_ORGANIZATION_ACCOUNT_ID_ALREADY_EXISTS = 'AUTH_ORGANIZATION_ACCOUNT_ID_ALREADY_EXISTS', + AUTH_ORGANIZATION_INVALID_REFRESH_TOKEN = 'AUTH_ORGANIZATION_INVALID_REFRESH_TOKEN', + AUTH_ORGANIZATION_INVALID_ACCESS_TOKEN = 'AUTH_ORGANIZATION_INVALID_ACCESS_TOKEN', + AUTH_ORGANIZATION_NOT_FOUND = 'AUTH_ORGANIZATION_NOT_FOUND', + AUTH_ORGANIZATION_INVALID_PASSWORD = 'AUTH_ORGANIZATION_INVALID_PASSWORD', // Organization ORGANIZATION_INVALID_NAME_LENGTH = 'ORGANIZATION_INVALID_NAME_LENGTH', @@ -218,6 +223,28 @@ export const ExceptionInfo: Record Date: Sun, 9 Nov 2025 21:12:44 +0900 Subject: [PATCH 54/67] =?UTF-8?q?docs:=20auth-organization=20swagger=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.controller.ts | 5 ++ .../presentation/auth-organization.docs.ts | 74 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/auth/auth-organization/presentation/auth-organization.docs.ts diff --git a/src/auth/auth-organization/presentation/auth-organization.controller.ts b/src/auth/auth-organization/presentation/auth-organization.controller.ts index 0498dcb..1c65da7 100644 --- a/src/auth/auth-organization/presentation/auth-organization.controller.ts +++ b/src/auth/auth-organization/presentation/auth-organization.controller.ts @@ -10,6 +10,7 @@ import { LogoutUseCase } from '../application/logout/logout.use-case'; import { LoginRequestDto } from './dto/request/login.request.dto'; import { LoginUseCase } from '../application/login/login.use-case'; import { AuthGuard } from '@nestjs/passport'; +import { AuthOrganizationDocs } from './auth-organization.docs'; @ApiTags('auth-organization') @Controller('auth/organization') @@ -22,6 +23,7 @@ export class AuthOrganizationController { ) {} @Post('register') + @AuthOrganizationDocs('register') async registerOrganization(@Body() dto: RegisterOrganizationRequestDto) { await this.createAuthOrganizationUseCase.execute({ accountId: dto.accountId, @@ -32,6 +34,7 @@ export class AuthOrganizationController { } @Post('login') + @AuthOrganizationDocs('login') async login(@Body() dto: LoginRequestDto, @Res() res: Response) { const { accessToken, refreshToken } = await this.loginUseCase.execute({ accountId: dto.accountId, @@ -46,6 +49,7 @@ export class AuthOrganizationController { @Post('refresh') @UseGuards(AuthGuard('jwt-refresh')) + @AuthOrganizationDocs('refresh') async renewToken(@User() user: UserPayload, @Res() res: Response) { const { userId, jti } = user; const { accessToken, refreshToken } = await this.renewTokenUseCase.execute({ @@ -61,6 +65,7 @@ export class AuthOrganizationController { @Post('logout') @UseGuards(AuthGuard('jwt-access')) + @AuthOrganizationDocs('logout') async logout(@User() user: UserPayload, @Res() res: Response) { await this.logoutUseCase.execute({ organizationId: user.userId }); diff --git a/src/auth/auth-organization/presentation/auth-organization.docs.ts b/src/auth/auth-organization/presentation/auth-organization.docs.ts new file mode 100644 index 0000000..b421256 --- /dev/null +++ b/src/auth/auth-organization/presentation/auth-organization.docs.ts @@ -0,0 +1,74 @@ +import { applyDecorators } from '@nestjs/common'; +import { + ApiBody, + ApiCreatedResponse, + ApiNotFoundResponse, + ApiOkResponse, + ApiOperation, + ApiUnauthorizedResponse, +} from '@nestjs/swagger'; +import { createDocs } from 'src/shared/core/presentation/base.docs'; +import { RegisterOrganizationRequestDto } from './dto/request/register-organization.request.dto'; +import { LoginRequestDto } from './dto/request/login.request.dto'; + +export type AuthOrganizationEndpoint = 'register' | 'login' | 'logout' | 'refresh'; + +export const AuthOrganizationDocs = createDocs({ + register: () => + applyDecorators( + ApiOperation({ + summary: '회원가입', + description: '아이디, 비밀번호, 연락처, 조직명을 받아 회원가입 처리', + }), + ApiBody({ + description: '회원가입 요청 DTO', + type: RegisterOrganizationRequestDto, + }), + ApiCreatedResponse({ + description: '회원가입 성공', + }), + ), + login: () => + applyDecorators( + ApiOperation({ + summary: '로그인', + description: '아이디, 비밀번호를 받아 로그인 처리', + }), + ApiBody({ + description: '로그인 요청 DTO', + type: LoginRequestDto, + }), + ApiOkResponse({ + description: '로그인 성공', + }), + ApiNotFoundResponse({ + description: '아이디 또는 비밀번호 불일치', + }), + ), + logout: () => + applyDecorators( + ApiOperation({ + summary: '로그아웃', + description: '현재 사용자를 로그아웃 처리', + }), + ApiOkResponse({ + description: '로그아웃 성공', + }), + ApiUnauthorizedResponse({ + description: '유효하지 않은 access token', + }), + ), + refresh: () => + applyDecorators( + ApiOperation({ + summary: '토큰 갱신', + description: '쿠키의 Refresh Token을 추출해 토큰 갱신 처리', + }), + ApiOkResponse({ + description: '토큰 갱신 성공', + }), + ApiUnauthorizedResponse({ + description: '유효하지 않은 refresh token', + }), + ), +}); From e8290013b09139dc54bd43163b19006c1fbe3b29 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Sun, 9 Nov 2025 21:36:11 +0900 Subject: [PATCH 55/67] =?UTF-8?q?docs:=20organization=20swagger=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization.command.controller.ts | 13 +++++++--- .../presentation/organization.command.docs.ts | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/organization/command/presentation/organization.command.docs.ts diff --git a/src/organization/command/presentation/organization.command.controller.ts b/src/organization/command/presentation/organization.command.controller.ts index 498d88d..419dd59 100644 --- a/src/organization/command/presentation/organization.command.controller.ts +++ b/src/organization/command/presentation/organization.command.controller.ts @@ -1,17 +1,22 @@ -import { Body, Controller, Param, Patch } from '@nestjs/common'; +import { Body, Controller, Patch, UseGuards } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { UpdateOrganizationUseCase } from '../application/update-organization/update-organization.use-case'; import { UpdateOrganizationDto } from './dto/request/update-organization.request.dto'; +import { AuthGuard } from '@nestjs/passport'; +import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; +import { OrganizationCommandDocs } from './organization.command.docs'; @ApiTags('organization') @Controller('organization') export class OrganizationCommandController { constructor(private readonly updateOrganizationUseCase: UpdateOrganizationUseCase) {} - @Patch(':id') - async update(@Param('id') id: string, @Body() dto: UpdateOrganizationDto): Promise { + @Patch() + @UseGuards(AuthGuard('jwt-access')) + @OrganizationCommandDocs('update') + async update(@User() user: UserPayload, @Body() dto: UpdateOrganizationDto): Promise { await this.updateOrganizationUseCase.execute({ - organizationId: id, + organizationId: user.userId, name: dto.name, contact: dto.contact, }); diff --git a/src/organization/command/presentation/organization.command.docs.ts b/src/organization/command/presentation/organization.command.docs.ts new file mode 100644 index 0000000..5414819 --- /dev/null +++ b/src/organization/command/presentation/organization.command.docs.ts @@ -0,0 +1,26 @@ +import { applyDecorators } from '@nestjs/common'; +import { ApiBody, ApiOkResponse, ApiOperation, ApiUnauthorizedResponse } from '@nestjs/swagger'; +import { createDocs } from 'src/shared/core/presentation/base.docs'; +import { UpdateOrganizationDto } from './dto/request/update-organization.request.dto'; + +export type OrganizationCommandEndpoint = 'update'; + +export const OrganizationCommandDocs = createDocs({ + update: () => + applyDecorators( + ApiOperation({ + summary: 'organization 정보 수정', + description: '조직의 이름과 연락처를 수정합니다.', + }), + ApiBody({ + description: 'organization 정보 수정 요청 DTO', + type: UpdateOrganizationDto, + }), + ApiOkResponse({ + description: 'organization 정보 수정 성공', + }), + ApiUnauthorizedResponse({ + description: '유효하지 않은 access token', + }), + ), +}); From d6e11f8aea7e92228e76bdbed64dc9ec07a24384 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 00:26:55 +0900 Subject: [PATCH 56/67] =?UTF-8?q?fix:=20=EC=95=84=EC=9D=B4=EB=94=94/?= =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EC=B2=AB=20=EB=B2=88?= =?UTF-8?q?=EC=A7=B8=EC=99=80=20=EB=A7=88=EC=A7=80=EB=A7=89=EC=97=90=20?= =?UTF-8?q?=EA=B3=B5=EB=B0=B1=EB=AC=B8=EC=9E=90=20=EB=AC=B4=ED=9A=A8?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization/application/create/create.use-case.ts | 6 +++--- .../auth-organization/application/login/login.use-case.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/auth/auth-organization/application/create/create.use-case.ts b/src/auth/auth-organization/application/create/create.use-case.ts index bf4775d..d5a0bea 100644 --- a/src/auth/auth-organization/application/create/create.use-case.ts +++ b/src/auth/auth-organization/application/create/create.use-case.ts @@ -23,15 +23,15 @@ export class CreateAuthOrganizationUseCase { ) {} async execute(command: CreateAuthOrganizationCommand) { - const existingAuth = await this.authOrganizationStore.loadByAccountId(command.accountId); + const existingAuth = await this.authOrganizationStore.loadByAccountId(command.accountId.trim()); if (existingAuth) throw new CustomException(CustomExceptionCode.AUTH_ORGANIZATION_ACCOUNT_ID_ALREADY_EXISTS); - const rawPassword = RawPassword.create(command.password); + const rawPassword = RawPassword.create(command.password.trim()); const hashedPassword = await this.passwordHasher.hash(rawPassword.value); const authOrganization = AuthOrganization.create({ id: Identifier.create(), - accountId: AccountId.create(command.accountId), + accountId: AccountId.create(command.accountId.trim()), passwordHash: PasswordHash.create(hashedPassword), refreshToken: null, organizationId: Identifier.create(), diff --git a/src/auth/auth-organization/application/login/login.use-case.ts b/src/auth/auth-organization/application/login/login.use-case.ts index bd21759..77e9c02 100644 --- a/src/auth/auth-organization/application/login/login.use-case.ts +++ b/src/auth/auth-organization/application/login/login.use-case.ts @@ -24,7 +24,7 @@ export class LoginUseCase { async execute(command: LoginCommand): Promise { const { accountId, password } = command; - const authOrganization = await this.validateAccount(accountId, password); + const authOrganization = await this.validateAccount(accountId.trim(), password.trim()); const { accessToken, refreshToken, jti } = await this.generateTokens(authOrganization.organizationId.value); await this.saveRefreshToken(authOrganization, jti); From 25b3b53bc1f0514505d8f7097954efb6b5b41bf3 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 00:28:01 +0900 Subject: [PATCH 57/67] =?UTF-8?q?feat:=20repository=EC=97=90=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=20=EC=A1=B4=EC=9E=AC=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth-organization/domain/auth-organization.store.ts | 1 + .../infrastructure/auth-organization.store.impl.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/auth/auth-organization/domain/auth-organization.store.ts b/src/auth/auth-organization/domain/auth-organization.store.ts index 8d62710..71ecced 100644 --- a/src/auth/auth-organization/domain/auth-organization.store.ts +++ b/src/auth/auth-organization/domain/auth-organization.store.ts @@ -6,6 +6,7 @@ export interface AuthOrganizationStore { loadByOrganizationId(organizationId: string): Promise; loadByRefreshToken(refreshToken: string): Promise; loadByAccountId(accountId: string): Promise; + existsByAccountId(accountId: string): Promise; } export const AUTH_ORGANIZATION_STORE = Symbol('AUTH_ORGANIZATION_STORE'); diff --git a/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts b/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts index 4309564..6067c3f 100644 --- a/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts +++ b/src/auth/auth-organization/infrastructure/auth-organization.store.impl.ts @@ -48,4 +48,9 @@ export class AuthOrganizationStoreImpl implements AuthOrganizationStore { return AuthOrganizationMapper.toDomain(authOrganizationEntity); } + + async existsByAccountId(accountId: string): Promise { + const count = await this.ormRepository.count({ accountId }); + return count > 0; + } } From b33a13300221115f21e9eb3cd953453ea6f42bcf Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 00:28:35 +0900 Subject: [PATCH 58/67] =?UTF-8?q?feat:=20id=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-account-id.command.ts | 5 +++++ .../check-account-id.use-case.ts | 19 +++++++++++++++++++ .../auth-organization.module.ts | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/auth/auth-organization/application/check-account-id/check-account-id.command.ts create mode 100644 src/auth/auth-organization/application/check-account-id/check-account-id.use-case.ts diff --git a/src/auth/auth-organization/application/check-account-id/check-account-id.command.ts b/src/auth/auth-organization/application/check-account-id/check-account-id.command.ts new file mode 100644 index 0000000..b600702 --- /dev/null +++ b/src/auth/auth-organization/application/check-account-id/check-account-id.command.ts @@ -0,0 +1,5 @@ +import { ICommand } from '@nestjs/cqrs'; + +export class CheckAccountIdCommand implements ICommand { + constructor(public readonly accountId: string) {} +} diff --git a/src/auth/auth-organization/application/check-account-id/check-account-id.use-case.ts b/src/auth/auth-organization/application/check-account-id/check-account-id.use-case.ts new file mode 100644 index 0000000..e8234e6 --- /dev/null +++ b/src/auth/auth-organization/application/check-account-id/check-account-id.use-case.ts @@ -0,0 +1,19 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { AUTH_ORGANIZATION_STORE, AuthOrganizationStore } from '../../domain/auth-organization.store'; +import { CommandHandler } from '@nestjs/cqrs'; +import { CheckAccountIdCommand } from './check-account-id.command'; + +@Injectable() +@CommandHandler(CheckAccountIdCommand) +export class CheckAccountIdUseCase { + constructor( + @Inject(AUTH_ORGANIZATION_STORE) + private readonly authOrganizationStore: AuthOrganizationStore, + ) {} + + async execute(command: CheckAccountIdCommand): Promise { + const { accountId } = command; + const exists = await this.authOrganizationStore.existsByAccountId(accountId.trim()); + return exists; + } +} diff --git a/src/auth/auth-organization/auth-organization.module.ts b/src/auth/auth-organization/auth-organization.module.ts index fb925fc..17a898e 100644 --- a/src/auth/auth-organization/auth-organization.module.ts +++ b/src/auth/auth-organization/auth-organization.module.ts @@ -13,8 +13,9 @@ import { PasswordHasherImpl } from './infrastructure/password-hasher.impl'; import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; import { LogoutUseCase } from './application/logout/logout.use-case'; import { LoginUseCase } from './application/login/login.use-case'; +import { CheckAccountIdUseCase } from './application/check-account-id/check-account-id.use-case'; -const usecases = [CreateAuthOrganizationUseCase, RenewTokenUseCase, LoginUseCase, LogoutUseCase]; +const usecases = [CreateAuthOrganizationUseCase, RenewTokenUseCase, LoginUseCase, LogoutUseCase, CheckAccountIdUseCase]; @Module({ imports: [SharedModule, MikroOrmModule.forFeature([AuthOrganizationEntity]), AuthCoreModule, CqrsModule], From 897536a15f31ca8e9187cc68e90078fa5fe58694 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 00:28:51 +0900 Subject: [PATCH 59/67] =?UTF-8?q?feat:=20id=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-organization.controller.ts | 11 +++++++++++ .../dto/request/check-account-id.request.dto.ts | 13 +++++++++++++ .../dto/response/check-account-id.response.dto.ts | 9 +++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/auth/auth-organization/presentation/dto/request/check-account-id.request.dto.ts create mode 100644 src/auth/auth-organization/presentation/dto/response/check-account-id.response.dto.ts diff --git a/src/auth/auth-organization/presentation/auth-organization.controller.ts b/src/auth/auth-organization/presentation/auth-organization.controller.ts index 1c65da7..d1a47ca 100644 --- a/src/auth/auth-organization/presentation/auth-organization.controller.ts +++ b/src/auth/auth-organization/presentation/auth-organization.controller.ts @@ -11,6 +11,9 @@ import { LoginRequestDto } from './dto/request/login.request.dto'; import { LoginUseCase } from '../application/login/login.use-case'; import { AuthGuard } from '@nestjs/passport'; import { AuthOrganizationDocs } from './auth-organization.docs'; +import { CheckAccountIdRequestDto } from './dto/request/check-account-id.request.dto'; +import { CheckAccountIdUseCase } from '../application/check-account-id/check-account-id.use-case'; +import { CheckAccountIdResponseDto } from './dto/response/check-account-id.response.dto'; @ApiTags('auth-organization') @Controller('auth/organization') @@ -20,6 +23,7 @@ export class AuthOrganizationController { private readonly renewTokenUseCase: RenewTokenUseCase, private readonly loginUseCase: LoginUseCase, private readonly logoutUseCase: LogoutUseCase, + private readonly checkAccountIdUseCase: CheckAccountIdUseCase, ) {} @Post('register') @@ -33,6 +37,13 @@ export class AuthOrganizationController { }); } + @Post('check-account-id') + async checkAccountId(@Body() dto: CheckAccountIdRequestDto): Promise { + const isDuplicated = await this.checkAccountIdUseCase.execute({ accountId: dto.accountId }); + + return { isDuplicated }; + } + @Post('login') @AuthOrganizationDocs('login') async login(@Body() dto: LoginRequestDto, @Res() res: Response) { diff --git a/src/auth/auth-organization/presentation/dto/request/check-account-id.request.dto.ts b/src/auth/auth-organization/presentation/dto/request/check-account-id.request.dto.ts new file mode 100644 index 0000000..ab87eaa --- /dev/null +++ b/src/auth/auth-organization/presentation/dto/request/check-account-id.request.dto.ts @@ -0,0 +1,13 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class CheckAccountIdRequestDto { + @IsString() + @IsNotEmpty() + @ApiProperty({ + description: '계정 ID', + example: 'organization123', + required: true, + }) + accountId: string; +} diff --git a/src/auth/auth-organization/presentation/dto/response/check-account-id.response.dto.ts b/src/auth/auth-organization/presentation/dto/response/check-account-id.response.dto.ts new file mode 100644 index 0000000..1e8664a --- /dev/null +++ b/src/auth/auth-organization/presentation/dto/response/check-account-id.response.dto.ts @@ -0,0 +1,9 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class CheckAccountIdResponseDto { + @ApiProperty({ + description: '중복 여부', + example: false, + }) + isDuplicated: boolean; +} From 287c80a87376d6f67e7fa5e4aefc1e284bb441b5 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 00:31:11 +0900 Subject: [PATCH 60/67] =?UTF-8?q?docs:=20=EC=95=84=EC=9D=B4=EB=94=94=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=B2=B4=ED=81=AC=20api=20swagger=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-organization.docs.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/auth/auth-organization/presentation/auth-organization.docs.ts b/src/auth/auth-organization/presentation/auth-organization.docs.ts index b421256..06e9a5c 100644 --- a/src/auth/auth-organization/presentation/auth-organization.docs.ts +++ b/src/auth/auth-organization/presentation/auth-organization.docs.ts @@ -10,8 +10,10 @@ import { import { createDocs } from 'src/shared/core/presentation/base.docs'; import { RegisterOrganizationRequestDto } from './dto/request/register-organization.request.dto'; import { LoginRequestDto } from './dto/request/login.request.dto'; +import { CheckAccountIdRequestDto } from './dto/request/check-account-id.request.dto'; +import { CheckAccountIdResponseDto } from './dto/response/check-account-id.response.dto'; -export type AuthOrganizationEndpoint = 'register' | 'login' | 'logout' | 'refresh'; +export type AuthOrganizationEndpoint = 'register' | 'login' | 'logout' | 'refresh' | 'checkAccountId'; export const AuthOrganizationDocs = createDocs({ register: () => @@ -45,6 +47,24 @@ export const AuthOrganizationDocs = createDocs({ description: '아이디 또는 비밀번호 불일치', }), ), + checkAccountId: () => + applyDecorators( + ApiOperation({ + summary: '아이디 중복 체크', + description: '아이디 중복 체크', + }), + ApiBody({ + description: '아이디 중복 체크 요청 DTO', + type: CheckAccountIdRequestDto, + }), + ApiOkResponse({ + description: '아이디 중복 체크 성공', + type: CheckAccountIdResponseDto, + }), + ApiNotFoundResponse({ + description: '아이디가 존재하지 않음', + }), + ), logout: () => applyDecorators( ApiOperation({ From 66b681c0d600726b3512ff6ca5276d2abdbd071c Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 19:40:53 +0900 Subject: [PATCH 61/67] =?UTF-8?q?fix:=20=EA=B8=B0=EA=B4=80=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=EC=BF=A0=ED=82=A4=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth-organization.controller.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/auth/auth-organization/presentation/auth-organization.controller.ts b/src/auth/auth-organization/presentation/auth-organization.controller.ts index d1a47ca..d831fb0 100644 --- a/src/auth/auth-organization/presentation/auth-organization.controller.ts +++ b/src/auth/auth-organization/presentation/auth-organization.controller.ts @@ -52,8 +52,8 @@ export class AuthOrganizationController { password: dto.password, }); - res.cookie('accessToken', accessToken, accessTokenCookieOptions); - res.cookie('refreshToken', refreshToken, refreshTokenCookieOptions); + res.cookie('orgAccessToken', accessToken, accessTokenCookieOptions); + res.cookie('orgRefreshToken', refreshToken, refreshTokenCookieOptions); res.status(HttpStatus.OK).send(); } @@ -68,8 +68,8 @@ export class AuthOrganizationController { jti: jti, }); - res.cookie('accessToken', accessToken, accessTokenCookieOptions); - res.cookie('refreshToken', refreshToken, refreshTokenCookieOptions); + res.cookie('orgAccessToken', accessToken, accessTokenCookieOptions); + res.cookie('orgRefreshToken', refreshToken, refreshTokenCookieOptions); res.status(HttpStatus.OK).send(); } @@ -80,8 +80,8 @@ export class AuthOrganizationController { async logout(@User() user: UserPayload, @Res() res: Response) { await this.logoutUseCase.execute({ organizationId: user.userId }); - res.clearCookie('accessToken', accessTokenCookieOptions); - res.clearCookie('refreshToken', refreshTokenCookieOptions); + res.clearCookie('orgAccessToken', accessTokenCookieOptions); + res.clearCookie('orgRefreshToken', refreshTokenCookieOptions); res.status(HttpStatus.OK).send(); } From 66c555034acb9fe19a1a3535accc94f7133b4254 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 22:48:23 +0900 Subject: [PATCH 62/67] =?UTF-8?q?fix:=20typo=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrasturcture/auth-user.entity.ts | 27 --------- .../infrasturcture/auth-user.mapper.ts | 34 ----------- .../auth-user.repository.impl.ts | 60 ------------------- .../application/delete/delete.listener.ts | 15 ----- 4 files changed, 136 deletions(-) delete mode 100644 src/auth/auth-user/infrasturcture/auth-user.entity.ts delete mode 100644 src/auth/auth-user/infrasturcture/auth-user.mapper.ts delete mode 100644 src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts delete mode 100644 src/user/command/application/delete/delete.listener.ts diff --git a/src/auth/auth-user/infrasturcture/auth-user.entity.ts b/src/auth/auth-user/infrasturcture/auth-user.entity.ts deleted file mode 100644 index a6f21d9..0000000 --- a/src/auth/auth-user/infrasturcture/auth-user.entity.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Cascade, Entity, OneToOne, Property, Unique } from '@mikro-orm/core'; -import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; -import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { UserEntity } from 'src/user/command/infrastructure/user.entity'; - -@Entity({ tableName: 'auth' }) -@Unique({ properties: ['oauthId', 'provider'] }) -export class AuthUserEntity extends BaseEntity { - @Property({ type: 'varchar', unique: true }) - oauthId: string; - - @Property({ type: 'varchar' }) - provider: OAuthProviderType; - - @Property({ type: 'varchar', unique: true, nullable: true }) - refreshToken: string | null; - - @Property({ type: 'varchar', unique: true, nullable: true }) - oauthAccessToken: string | null; - - @OneToOne(() => UserEntity, (user) => user.authUser, { - owner: true, - cascade: [Cascade.PERSIST, Cascade.REMOVE], - unique: true, - }) - user: UserEntity; -} diff --git a/src/auth/auth-user/infrasturcture/auth-user.mapper.ts b/src/auth/auth-user/infrasturcture/auth-user.mapper.ts deleted file mode 100644 index 1de14fc..0000000 --- a/src/auth/auth-user/infrasturcture/auth-user.mapper.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; -import { Identifier } from 'src/shared/core/domain/identifier'; -import { EntityManager } from '@mikro-orm/mysql'; -import { UserEntity } from 'src/user/command/infrastructure/user.entity'; -import { AuthUserEntity } from './auth-user.entity'; - -export class AuthUserMapper { - static toDomain(entity: AuthUserEntity): AuthUser { - return AuthUser.of({ - id: Identifier.from(entity.id), - createdAt: entity.createdAt, - updatedAt: entity.updatedAt, - oauthId: entity.oauthId, - provider: entity.provider, - refreshToken: entity.refreshToken, - oauthAccessToken: entity.oauthAccessToken, - userId: Identifier.from(entity.user.id), - }); - } - - static toEntity(domain: AuthUser, em: EntityManager): AuthUserEntity { - const entity = new AuthUserEntity(); - entity.id = domain.id.value; - entity.createdAt = domain.createdAt; - entity.updatedAt = domain.updatedAt; - entity.oauthId = domain.oauthId; - entity.provider = domain.provider; - entity.refreshToken = domain.refreshToken; - entity.oauthAccessToken = domain.oauthAccessToken; - entity.user = em.getReference(UserEntity, domain.userId.value); - - return entity; - } -} diff --git a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts b/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts deleted file mode 100644 index 2e847c0..0000000 --- a/src/auth/auth-user/infrasturcture/auth-user.repository.impl.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; -import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; -import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; -import { InjectRepository } from '@mikro-orm/nestjs'; -import { AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; -import { AuthUserEntity } from './auth-user.entity'; -import { AuthUserMapper } from './auth-user.mapper'; -import { CustomException } from 'src/shared/exception/custom-exception'; -import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; - -export class AuthUserRepositoryImpl implements AuthUserRepository { - constructor( - @InjectRepository(AuthUserEntity) - private readonly authOrmRepository: EntityRepository, - private readonly em: EntityManager, - ) {} - async save(authUser: AuthUser): Promise { - const authUserEntity = AuthUserMapper.toEntity(authUser, this.em); - await this.em.persistAndFlush(authUserEntity); - } - - async findByOAuthIdandProvider(oauthId: string, provider: OAuthProviderType): Promise { - const authUserEntity = await this.authOrmRepository.findOne({ oauthId, provider }); - if (!authUserEntity) return null; - - return AuthUserMapper.toDomain(authUserEntity); - } - - async findByRefreshToken(refreshToken: string): Promise { - const authUserEntity = await this.authOrmRepository.findOne({ refreshToken }); - if (!authUserEntity) return null; - - return AuthUserMapper.toDomain(authUserEntity); - } - - async update(authUser: AuthUser): Promise { - await this.em.nativeUpdate( - AuthUserEntity, - { id: authUser.id.value }, - { - refreshToken: authUser.refreshToken, - updatedAt: authUser.updatedAt, - }, - ); - } - - async findByUserId(userId: string): Promise { - const authUserEntity = await this.authOrmRepository.findOne({ user: userId }); - if (!authUserEntity) return null; - - return AuthUserMapper.toDomain(authUserEntity); - } - - async deleteById(id: string): Promise { - const authUserEntity = await this.authOrmRepository.findOne({ id }); - if (!authUserEntity) throw new CustomException(CustomExceptionCode.AUTH_USER_NOT_FOUND); - - await this.em.removeAndFlush(authUserEntity); - } -} diff --git a/src/user/command/application/delete/delete.listener.ts b/src/user/command/application/delete/delete.listener.ts deleted file mode 100644 index c42df59..0000000 --- a/src/user/command/application/delete/delete.listener.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; -import { AuthDeletedEvent } from 'src/auth/auth-user/domain/event/auth-deleted.event'; -import { DeleteMyInfoHandler } from './delete.handler'; -import { DeleteMyInfoCommand } from './delete.command'; - -@EventsHandler(AuthDeletedEvent) -export class DeleteUserListener implements IEventHandler { - constructor(private readonly deleteMyInfoHandler: DeleteMyInfoHandler) {} - - async handle(event: AuthDeletedEvent) { - const deleteMyInfoCommand = new DeleteMyInfoCommand(event.userId); - - await this.deleteMyInfoHandler.execute(deleteMyInfoCommand); - } -} From 2700c3f752bff5e4a0d266e1c71d0c9e60cf22f9 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 22:49:10 +0900 Subject: [PATCH 63/67] =?UTF-8?q?fix:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unlink-oauth/unlink-oauth.listener.ts | 16 ++++++++++++++++ .../unlink-oauth/unlink-oauth.use-case.ts | 5 +---- src/auth/auth-user/auth-user.module.ts | 7 +++++-- .../command/application/delete/delete.handler.ts | 14 +++++++++++++- .../command/domain/event/user-deleted.event.ts | 9 +++++++++ src/user/command/domain/user.ts | 10 ++++++++-- 6 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 src/auth/auth-user/application/unlink-oauth/unlink-oauth.listener.ts create mode 100644 src/user/command/domain/event/user-deleted.event.ts diff --git a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.listener.ts b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.listener.ts new file mode 100644 index 0000000..8c89944 --- /dev/null +++ b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.listener.ts @@ -0,0 +1,16 @@ +import { EventsHandler } from '@nestjs/cqrs'; +import { UserDeletedEvent } from 'src/user/command/domain/event/user-deleted.event'; +import { UnlinkOAuthUseCase } from './unlink-oauth.use-case'; +import { OAuthProviderType } from '../../domain/value-object/oauth-provider.enum'; +import { Transactional } from '@mikro-orm/core'; + +@EventsHandler(UserDeletedEvent) +export class UnlinkOAuthListener { + constructor(private readonly unlinkOAuthUseCase: UnlinkOAuthUseCase) {} + + @Transactional() + async handle(event: UserDeletedEvent): Promise { + const { userId } = event; + await this.unlinkOAuthUseCase.execute({ userId, oAuthProviderType: OAuthProviderType.KAKAO }); + } +} diff --git a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts index 1b6a63e..a8e0734 100644 --- a/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts +++ b/src/auth/auth-user/application/unlink-oauth/unlink-oauth.use-case.ts @@ -1,6 +1,6 @@ import { Inject, Injectable } from '@nestjs/common'; import { AUTH_USER_REPOSITORY, AuthUserRepository } from '../../domain/auth-user.repository'; -import { CommandHandler, EventBus } from '@nestjs/cqrs'; +import { CommandHandler } from '@nestjs/cqrs'; import { UnlinkOAuthCommand } from './unlink-oauth.command'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; @@ -13,7 +13,6 @@ export class UnlinkOAuthUseCase { @Inject(AUTH_USER_REPOSITORY) private readonly authUserRepository: AuthUserRepository, private readonly oAuthProviderFactory: OAuthProviderFactory, - private readonly eventBus: EventBus, ) {} async execute(command: UnlinkOAuthCommand) { @@ -27,7 +26,5 @@ export class UnlinkOAuthUseCase { authUser.delete(); await this.authUserRepository.deleteById(authUser.id.value); - - this.eventBus.publishAll(authUser.pullDomainEvents()); } } diff --git a/src/auth/auth-user/auth-user.module.ts b/src/auth/auth-user/auth-user.module.ts index 19b91c9..bf2c146 100644 --- a/src/auth/auth-user/auth-user.module.ts +++ b/src/auth/auth-user/auth-user.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; -import { AuthUserRepositoryImpl } from './infrasturcture/auth-user.repository.impl'; +import { AuthUserRepositoryImpl } from './infrastructure/auth-user.repository.impl'; import { AUTH_USER_REPOSITORY } from './domain/auth-user.repository'; import { OAuthLoginUseCase } from './application/oauth-login/oauth-login.handler'; import { AuthorizeOAuthUseCase } from './application/authorize-oauth/authorize-oauth.use-case'; import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { AuthUserEntity } from './infrasturcture/auth-user.entity'; +import { AuthUserEntity } from './infrastructure/auth-user.entity'; import { AuthUserController } from './presentation/auth-user.controller'; import { RenewTokenUseCase } from './application/renew-token/renew-token.use-case'; import { LogoutUseCase } from './application/logout/logout.use-case'; @@ -12,8 +12,10 @@ import { AuthCoreModule } from '../core/auth-core.module'; import { SharedModule } from 'src/shared/shared.module'; import { CqrsModule } from '@nestjs/cqrs'; import { UnlinkOAuthUseCase } from './application/unlink-oauth/unlink-oauth.use-case'; +import { UnlinkOAuthListener } from './application/unlink-oauth/unlink-oauth.listener'; const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, LogoutUseCase, UnlinkOAuthUseCase]; +const listeners = [UnlinkOAuthListener]; @Module({ imports: [MikroOrmModule.forFeature([AuthUserEntity]), AuthCoreModule, SharedModule, CqrsModule], @@ -23,6 +25,7 @@ const usecases = [OAuthLoginUseCase, AuthorizeOAuthUseCase, RenewTokenUseCase, L useClass: AuthUserRepositoryImpl, }, ...usecases, + ...listeners, ], controllers: [AuthUserController], exports: [], diff --git a/src/user/command/application/delete/delete.handler.ts b/src/user/command/application/delete/delete.handler.ts index e6942ea..dcaa292 100644 --- a/src/user/command/application/delete/delete.handler.ts +++ b/src/user/command/application/delete/delete.handler.ts @@ -1,7 +1,9 @@ import { Inject, Injectable } from '@nestjs/common'; import { USER_COMMAND_REPOSITORY, UserCommandRepository } from '../../domain/user.command.repository'; -import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; +import { CommandHandler, EventBus, ICommandHandler } from '@nestjs/cqrs'; import { DeleteMyInfoCommand } from './delete.command'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; @Injectable() @CommandHandler(DeleteMyInfoCommand) @@ -9,11 +11,21 @@ export class DeleteMyInfoHandler implements ICommandHandler constructor( @Inject(USER_COMMAND_REPOSITORY) private readonly userCommandRepository: UserCommandRepository, + private readonly eventBus: EventBus, ) {} async execute(command: DeleteMyInfoCommand): Promise { const { userId } = command; + const user = await this.userCommandRepository.findById(userId); + if (!user) { + throw new CustomException(CustomExceptionCode.USER_NOT_FOUND); + } + + user.delete(); + await this.userCommandRepository.deleteById(userId); + + await this.eventBus.publishAll(user.pullDomainEvents()); } } diff --git a/src/user/command/domain/event/user-deleted.event.ts b/src/user/command/domain/event/user-deleted.event.ts new file mode 100644 index 0000000..2ea0ba9 --- /dev/null +++ b/src/user/command/domain/event/user-deleted.event.ts @@ -0,0 +1,9 @@ +import { BaseDomainEvent } from 'src/shared/core/domain/base.domain-event'; + +export class UserDeletedEvent implements BaseDomainEvent { + readonly timesstamp: Date; + + constructor(public readonly userId: string) { + this.timesstamp = new Date(); + } +} diff --git a/src/user/command/domain/user.ts b/src/user/command/domain/user.ts index 73356fe..0c712c5 100644 --- a/src/user/command/domain/user.ts +++ b/src/user/command/domain/user.ts @@ -1,13 +1,15 @@ -import { BaseDomainEntity, BaseEntityProps } from 'src/shared/core/domain/base.entity'; +import { BaseEntityProps } from 'src/shared/core/domain/base.entity'; import { Role } from './value-object/role.enum'; import { CustomException } from 'src/shared/exception/custom-exception'; import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; +import { AggregateRoot } from 'src/shared/core/domain/base.aggregate'; +import { UserDeletedEvent } from './event/user-deleted.event'; export interface UserProps extends BaseEntityProps { email: string; role: Role; } -export class User extends BaseDomainEntity { +export class User extends AggregateRoot { protected constructor(props: UserProps) { super(props); } @@ -19,6 +21,10 @@ export class User extends BaseDomainEntity { return user; } + delete(): void { + this.addDomainEvent(new UserDeletedEvent(this.id.value)); + } + public validate(): void { if (!this.props.email) { throw new CustomException(CustomExceptionCode.USER_EMAIL_EMPTY); From 3827daef3c223412e061e90b30080dc98d704939 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 22:50:09 +0900 Subject: [PATCH 64/67] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=8B=9C=20=EC=A1=B4=EC=9E=AC=20=EC=97=AC=EB=B6=80?= =?UTF-8?q?=20=ED=99=95=EC=9D=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/user/command/domain/user.command.repository.ts | 1 + .../infrastructure/user.command.repository.impl.ts | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/user/command/domain/user.command.repository.ts b/src/user/command/domain/user.command.repository.ts index 243f9e2..95f6a43 100644 --- a/src/user/command/domain/user.command.repository.ts +++ b/src/user/command/domain/user.command.repository.ts @@ -2,6 +2,7 @@ import { User } from './user'; export interface UserCommandRepository { save(user: User): Promise; + findById(userId: string): Promise; deleteById(userId: string): Promise; } diff --git a/src/user/command/infrastructure/user.command.repository.impl.ts b/src/user/command/infrastructure/user.command.repository.impl.ts index 5ca8215..64dd497 100644 --- a/src/user/command/infrastructure/user.command.repository.impl.ts +++ b/src/user/command/infrastructure/user.command.repository.impl.ts @@ -19,8 +19,16 @@ export class UserCommandRepositoryImpl implements UserCommandRepository { await this.em.persistAndFlush(userEntity); } + async findById(userId: string): Promise { + const userEntity = await this.ormRepository.findOne({ id: userId }); + if (!userEntity) { + return null; + } + return UserMapper.toDomain(userEntity); + } + async deleteById(userId: string): Promise { - const userEntity = await this.ormRepository.findOne({ id: userId }, { populate: ['authUser', 'scraps'] }); + const userEntity = await this.ormRepository.findOne({ id: userId }, { populate: ['scraps'] }); if (!userEntity) throw new CustomException( CustomExceptionCode.USER_NOT_FOUND, From 0a4f6d4669a73e92aa086f7d25aa0889e5c1d445 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 22:50:35 +0900 Subject: [PATCH 65/67] =?UTF-8?q?fix:=20=ED=9A=8C=EC=9B=90=20=ED=83=88?= =?UTF-8?q?=ED=87=B4=20=EC=8B=9C=20=EC=BF=A0=ED=82=A4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/presentation/user.command.controller.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/user/command/presentation/user.command.controller.ts b/src/user/command/presentation/user.command.controller.ts index 2d7af18..5991997 100644 --- a/src/user/command/presentation/user.command.controller.ts +++ b/src/user/command/presentation/user.command.controller.ts @@ -1,10 +1,12 @@ -import { Controller, Delete, UseGuards } from '@nestjs/common'; +import { Controller, Delete, HttpStatus, Res, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiTags } from '@nestjs/swagger'; import { User, UserPayload } from 'src/shared/core/presentation/user.decorator'; import { UserCommandDocs } from './user.command.docs'; import { CommandBus } from '@nestjs/cqrs'; import { DeleteMyInfoCommand } from '../application/delete/delete.command'; +import { Response } from 'express'; +import { accessTokenCookieOptions, refreshTokenCookieOptions } from 'src/shared/config/cookie.config'; @ApiTags('user') @Controller('user') @@ -13,8 +15,13 @@ export class UserCommandController { @Delete('me') @UseGuards(AuthGuard('jwt-access')) @UserCommandDocs('deleteMyInfo') - async deleteMyInfo(@User() user: UserPayload) { + async deleteMyInfo(@User() user: UserPayload, @Res() res: Response) { const command = new DeleteMyInfoCommand(user.userId); await this.commandBus.execute(command); + + res.clearCookie('accessToken', accessTokenCookieOptions); + res.clearCookie('refreshToken', refreshTokenCookieOptions); + + res.status(HttpStatus.NO_CONTENT).send(); } } From 7da640778c5b6f3201f3f275edf5efe4ba602a9d Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Mon, 10 Nov 2025 22:50:56 +0900 Subject: [PATCH 66/67] =?UTF-8?q?fix:=20auth=20entity=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/auth-user.entity.ts | 22 +++++++ .../infrastructure/auth-user.mapper.ts | 32 ++++++++++ .../auth-user.repository.impl.ts | 60 +++++++++++++++++++ .../command/infrastructure/user.entity.ts | 6 +- 4 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 src/auth/auth-user/infrastructure/auth-user.entity.ts create mode 100644 src/auth/auth-user/infrastructure/auth-user.mapper.ts create mode 100644 src/auth/auth-user/infrastructure/auth-user.repository.impl.ts diff --git a/src/auth/auth-user/infrastructure/auth-user.entity.ts b/src/auth/auth-user/infrastructure/auth-user.entity.ts new file mode 100644 index 0000000..41feab9 --- /dev/null +++ b/src/auth/auth-user/infrastructure/auth-user.entity.ts @@ -0,0 +1,22 @@ +import { Entity, Property, Unique } from '@mikro-orm/core'; +import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; + +@Entity({ tableName: 'auth' }) +@Unique({ properties: ['oauthId', 'provider'] }) +export class AuthUserEntity extends BaseEntity { + @Property({ type: 'varchar', unique: true }) + oauthId: string; + + @Property({ type: 'varchar' }) + provider: OAuthProviderType; + + @Property({ type: 'varchar', unique: true, nullable: true }) + refreshToken: string | null; + + @Property({ type: 'varchar', unique: true, nullable: true }) + oauthAccessToken: string | null; + + @Property({ type: 'varchar', unique: true }) + userId: string; +} diff --git a/src/auth/auth-user/infrastructure/auth-user.mapper.ts b/src/auth/auth-user/infrastructure/auth-user.mapper.ts new file mode 100644 index 0000000..b9289b9 --- /dev/null +++ b/src/auth/auth-user/infrastructure/auth-user.mapper.ts @@ -0,0 +1,32 @@ +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; +import { Identifier } from 'src/shared/core/domain/identifier'; +import { AuthUserEntity } from './auth-user.entity'; + +export class AuthUserMapper { + static toDomain(entity: AuthUserEntity): AuthUser { + return AuthUser.of({ + id: Identifier.from(entity.id), + createdAt: entity.createdAt, + updatedAt: entity.updatedAt, + oauthId: entity.oauthId, + provider: entity.provider, + refreshToken: entity.refreshToken, + oauthAccessToken: entity.oauthAccessToken, + userId: Identifier.from(entity.userId), + }); + } + + static toEntity(domain: AuthUser): AuthUserEntity { + const entity = new AuthUserEntity(); + entity.id = domain.id.value; + entity.createdAt = domain.createdAt; + entity.updatedAt = domain.updatedAt; + entity.oauthId = domain.oauthId; + entity.provider = domain.provider; + entity.refreshToken = domain.refreshToken; + entity.oauthAccessToken = domain.oauthAccessToken; + entity.userId = domain.userId.value; + + return entity; + } +} diff --git a/src/auth/auth-user/infrastructure/auth-user.repository.impl.ts b/src/auth/auth-user/infrastructure/auth-user.repository.impl.ts new file mode 100644 index 0000000..6960aa2 --- /dev/null +++ b/src/auth/auth-user/infrastructure/auth-user.repository.impl.ts @@ -0,0 +1,60 @@ +import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; +import { AuthUser } from 'src/auth/auth-user/domain/auth-user'; +import { OAuthProviderType } from 'src/auth/auth-user/domain/value-object/oauth-provider.enum'; +import { InjectRepository } from '@mikro-orm/nestjs'; +import { AuthUserRepository } from 'src/auth/auth-user/domain/auth-user.repository'; +import { AuthUserEntity } from './auth-user.entity'; +import { AuthUserMapper } from './auth-user.mapper'; +import { CustomException } from 'src/shared/exception/custom-exception'; +import { CustomExceptionCode } from 'src/shared/exception/custom-exception-code'; + +export class AuthUserRepositoryImpl implements AuthUserRepository { + constructor( + @InjectRepository(AuthUserEntity) + private readonly authOrmRepository: EntityRepository, + private readonly em: EntityManager, + ) {} + async save(authUser: AuthUser): Promise { + const authUserEntity = AuthUserMapper.toEntity(authUser); + await this.em.persistAndFlush(authUserEntity); + } + + async findByOAuthIdandProvider(oauthId: string, provider: OAuthProviderType): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ oauthId, provider }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async findByRefreshToken(refreshToken: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ refreshToken }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async update(authUser: AuthUser): Promise { + await this.em.nativeUpdate( + AuthUserEntity, + { id: authUser.id.value }, + { + refreshToken: authUser.refreshToken, + updatedAt: authUser.updatedAt, + }, + ); + } + + async findByUserId(userId: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ userId }); + if (!authUserEntity) return null; + + return AuthUserMapper.toDomain(authUserEntity); + } + + async deleteById(id: string): Promise { + const authUserEntity = await this.authOrmRepository.findOne({ id }); + if (!authUserEntity) throw new CustomException(CustomExceptionCode.AUTH_USER_NOT_FOUND); + + await this.em.removeAndFlush(authUserEntity); + } +} diff --git a/src/user/command/infrastructure/user.entity.ts b/src/user/command/infrastructure/user.entity.ts index b4cec82..6f212e8 100644 --- a/src/user/command/infrastructure/user.entity.ts +++ b/src/user/command/infrastructure/user.entity.ts @@ -1,5 +1,4 @@ -import { Cascade, Collection, Entity, OneToMany, OneToOne, Property } from '@mikro-orm/core'; -import { AuthUserEntity } from 'src/auth/auth-user/infrasturcture/auth-user.entity'; +import { Cascade, Collection, Entity, OneToMany, Property } from '@mikro-orm/core'; import { ScrapEntity } from 'src/scrap/command/infrastructure/scrap.entity'; import { BaseEntity } from 'src/shared/core/infrastructure/orm-entity/base.entity'; import { Role } from '../domain/value-object/role.enum'; @@ -12,9 +11,6 @@ export class UserEntity extends BaseEntity { @Property({ type: 'varchar' }) role: Role; - @OneToOne(() => AuthUserEntity, (authUser) => authUser.user, { unique: true }) - authUser: AuthUserEntity; - @OneToMany(() => ScrapEntity, (scrap) => scrap.user, { nullable: true, cascade: [Cascade.ALL] }) scraps = new Collection(this); } From a11db7f90237b5861fb096aef5893731b5ae1802 Mon Sep 17 00:00:00 2001 From: liverforpresent Date: Thu, 13 Nov 2025 13:34:49 +0900 Subject: [PATCH 67/67] =?UTF-8?q?docs:=20swagger=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth-organization.controller.ts | 1 + .../presentation/auth-organization.docs.ts | 4 ++++ .../register-organization.request.dto.ts | 21 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/auth/auth-organization/presentation/auth-organization.controller.ts b/src/auth/auth-organization/presentation/auth-organization.controller.ts index d831fb0..d394aff 100644 --- a/src/auth/auth-organization/presentation/auth-organization.controller.ts +++ b/src/auth/auth-organization/presentation/auth-organization.controller.ts @@ -38,6 +38,7 @@ export class AuthOrganizationController { } @Post('check-account-id') + @AuthOrganizationDocs('checkAccountId') async checkAccountId(@Body() dto: CheckAccountIdRequestDto): Promise { const isDuplicated = await this.checkAccountIdUseCase.execute({ accountId: dto.accountId }); diff --git a/src/auth/auth-organization/presentation/auth-organization.docs.ts b/src/auth/auth-organization/presentation/auth-organization.docs.ts index 06e9a5c..bf4b994 100644 --- a/src/auth/auth-organization/presentation/auth-organization.docs.ts +++ b/src/auth/auth-organization/presentation/auth-organization.docs.ts @@ -1,6 +1,7 @@ import { applyDecorators } from '@nestjs/common'; import { ApiBody, + ApiConflictResponse, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, @@ -29,6 +30,9 @@ export const AuthOrganizationDocs = createDocs({ ApiCreatedResponse({ description: '회원가입 성공', }), + ApiConflictResponse({ + description: '이미 존재하는 계정', + }), ), login: () => applyDecorators( diff --git a/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts b/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts index 83d48fd..87d3b1a 100644 --- a/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts +++ b/src/auth/auth-organization/presentation/dto/request/register-organization.request.dto.ts @@ -1,19 +1,40 @@ +import { ApiProperty } from '@nestjs/swagger'; import { IsNotEmpty, IsString } from 'class-validator'; export class RegisterOrganizationRequestDto { @IsString() @IsNotEmpty() + @ApiProperty({ + description: '조직 아이디', + example: 'org123', + required: true, + }) accountId: string; @IsString() @IsNotEmpty() + @ApiProperty({ + description: '조직 비밀번호', + example: 'password123', + required: true, + }) password: string; @IsString() @IsNotEmpty() + @ApiProperty({ + description: '조직명', + example: 'Organization Name', + required: true, + }) name: string; @IsString() @IsNotEmpty() + @ApiProperty({ + description: '연락처', + example: '010-1234-5678', + required: true, + }) contact: string; }