diff --git a/.env.example b/.env.example
index 769e0fa8..ea107da9 100644
--- a/.env.example
+++ b/.env.example
@@ -16,3 +16,10 @@ CORS_WHITELIST=[CORS 정책에서 허용하는 도메인의 목록(e.g. ["http:/
GOOGLE_APPLICATION_CREDENTIALS=[GOOGLE_APPLICATION_CREDENTIALS JSON]
TEST_ACCOUNTS=[스팍스SSO로 로그인시 무조건 테스트로 로그인이 가능한 허용 아이디 목록]
SLACK_REPORT_WEBHOOK_URL=[Slack 웹훅 URL들이 담긴 JSON]
+
+# optional environment variables for taxiSampleGenerator
+SAMPLE_NUM_OF_ROOMS=[방의 개수]
+SAMPLE_NUM_OF_CHATS=[각 방의 채팅 개수]
+SAMPLE_MAXIMUM_INTERVAL_BETWEEN_CHATS=[채팅 간 최대 시간 간격(단위: 초, 실수도 가능)]
+SAMPLE_OCCURENCE_OF_JOIN=[새로운 채팅이 입장 메세지일 확률(0 ~ 1 사이의 값)]
+SAMPLE_OCCURENCE_OF_ABORT=[새로운 채팅이 퇴장 메세지일 확률(0 ~ 1 사이의 값)]
\ No newline at end of file
diff --git a/.github/workflows/test_ci.yml b/.github/workflows/test_ci.yml
index 29f7f21b..2ccc5415 100644
--- a/.github/workflows/test_ci.yml
+++ b/.github/workflows/test_ci.yml
@@ -29,20 +29,6 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- - id: submodule-local
- name: Save local version of submodule
- run: echo "ver=`cd sampleGenerator && git log --pretty="%h" -1 && cd ..`" >> $GITHUB_OUTPUT
- - id: submodule-origin
- name: Save origin version of submodule
- run: echo "ver=`cd sampleGenerator && git log origin --pretty="%h" -1 && cd ..`" >> $GITHUB_OUTPUT
- - name: Check submodule version
- if: ${{ steps.submodule-local.outputs.ver != steps.submodule-origin.outputs.ver }}
- uses: actions/github-script@v3
- with:
- script: |
- core.setFailed('Please update submodule to the latest version by using \"git submodule update --remote\"')
- - name: Install sampleGenerator dependencies from package-lock.json
- run: cd sampleGenerator && pnpm i --force --frozen-lockfile && cd ..
- name: Install taxi-back dependencies from package-lock.json
run: pnpm i --force --frozen-lockfile
- name: Run unit tests
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index f15db4d8..00000000
--- a/.gitmodules
+++ /dev/null
@@ -1,4 +0,0 @@
-[submodule "sampleGenerator"]
- path = sampleGenerator
- url = https://github.com/sparcs-kaist/taxiSampleGenerator
- branch = main
diff --git a/README.md b/README.md
index 26cda418..9a335131 100644
--- a/README.md
+++ b/README.md
@@ -49,4 +49,3 @@ See [contributors](https://github.com/sparcs-kaist/taxi-front/graphs/contributor
- app : https://github.com/sparcs-kaist/taxi-app
- docker : https://github.com/sparcs-kaist/taxi-docker
- figma : https://www.figma.com/file/li34hP1oStJAzLNjcG5KjN/SPARCS-Taxi?node-id=0%3A1
- - taxiSampleGenerator : https://github.com/sparcs-kaist/taxiSampleGenerator
diff --git a/app.js b/app.js
index 3394dec0..a26c4b46 100644
--- a/app.js
+++ b/app.js
@@ -1,7 +1,12 @@
// 모듈 require
const express = require("express");
const http = require("http");
-const { port: httpPort, eventConfig } = require("./loadenv");
+const {
+ nodeEnv,
+ port: httpPort,
+ eventConfig,
+ mongo: mongoUrl,
+} = require("./loadenv");
const logger = require("./src/modules/logger");
const { connectDatabase } = require("./src/modules/stores/mongo");
const { startSocketServer } = require("./src/modules/socket");
@@ -13,14 +18,14 @@ require("./src/modules/fcm").initializeApp();
const app = express();
// 데이터베이스 연결
-connectDatabase();
+connectDatabase(mongoUrl);
// [Middleware] request body 파싱
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
// reverse proxy가 설정한 헤더를 신뢰합니다.
-app.set("trust proxy", true);
+if (nodeEnv === "production") app.set("trust proxy", 2);
// [Middleware] CORS 설정
app.use(require("./src/middlewares/cors"));
diff --git a/loadenv.js b/loadenv.js
index a79692f8..13939bb6 100644
--- a/loadenv.js
+++ b/loadenv.js
@@ -1,9 +1,12 @@
// 환경 변수에 따라 .env.production 또는 .env.development 파일을 읽어옴
require("dotenv").config({ path: `./.env.${process.env.NODE_ENV}` });
module.exports = {
- nodeEnv: process.env.NODE_ENV,
+ nodeEnv: process.env.NODE_ENV, // required
mongo: process.env.DB_PATH, // required
- session: process.env.SESSION_KEY || "TAXI_SESSION_KEY", // optional
+ session: {
+ secret: process.env.SESSION_KEY || "TAXI_SESSION_KEY", // optional
+ expiry: 14 * 24 * 3600 * 1000, // 14일, ms 단위입니다.
+ },
redis: process.env.REDIS_PATH, // optional
sparcssso: {
id: process.env.SPARCSSSO_CLIENT_ID || "", // optional
diff --git a/package.json b/package.json
index 3f1c9418..db1e5730 100644
--- a/package.json
+++ b/package.json
@@ -11,8 +11,9 @@
"test": "npm run sample && cross-env TZ='Asia/Seoul' npm run mocha",
"mocha": "cross-env TZ='Asia/Seoul' NODE_ENV=test mocha --recursive --reporter spec --exit",
"serve": "cross-env TZ='Asia/Seoul' NODE_ENV=production node app.js",
+ "runscript": "cross-env TZ='Asia/Seoul' NODE_ENV=production node",
"lint": "npx eslint --fix .",
- "sample": "cd sampleGenerator && npm start && cd .."
+ "sample": "cd src/sampleGenerator && npm start && cd .."
},
"engines": {
"node": ">=18.0.0",
@@ -61,6 +62,7 @@
"eslint": "^8.22.0",
"eslint-plugin-mocha": "^10.1.0",
"mocha": "^10.2.0",
+ "mongodb": "^4.1.0",
"nodemon": "^3.0.1",
"supertest": "^6.2.4"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f7a570a2..0e0e8aea 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,19 +7,19 @@ settings:
dependencies:
'@adminjs/express':
specifier: ^5.1.0
- version: 5.1.0(adminjs@6.8.7)(express-formidable@1.2.0)(express-session@1.17.3)(express@4.18.2)(tslib@2.6.1)
+ version: 5.1.0(adminjs@6.8.7)(express-formidable@1.2.0)(express-session@1.17.3)(express@4.18.2)(tslib@2.6.2)
'@adminjs/mongoose':
specifier: ^3.0.3
version: 3.0.3(adminjs@6.8.7)(mongoose@6.12.0)
'@aws-sdk/client-s3':
specifier: ^3.391.0
- version: 3.391.0
+ version: 3.507.0
'@aws-sdk/client-ses':
specifier: ^3.391.0
- version: 3.391.0
+ version: 3.507.0
'@aws-sdk/s3-request-presigner':
specifier: ^3.391.0
- version: 3.391.0
+ version: 3.507.0
adminjs:
specifier: ^6.8.7
version: 6.8.7
@@ -127,6 +127,9 @@ devDependencies:
mocha:
specifier: ^10.2.0
version: 10.2.0
+ mongodb:
+ specifier: ^4.1.0
+ version: 4.17.1
nodemon:
specifier: ^3.0.1
version: 3.0.1
@@ -187,7 +190,7 @@ packages:
- prop-types
dev: false
- /@adminjs/express@5.1.0(adminjs@6.8.7)(express-formidable@1.2.0)(express-session@1.17.3)(express@4.18.2)(tslib@2.6.1):
+ /@adminjs/express@5.1.0(adminjs@6.8.7)(express-formidable@1.2.0)(express-session@1.17.3)(express@4.18.2)(tslib@2.6.2):
resolution: {integrity: sha512-+mrtDmoAYA9R+/FTYWOLL48g005yrgcAWC2phdwqGzznIxGKSp2YERcfzdTI7Svtnlaal72/QW8Q3OhzJjVLzQ==}
peerDependencies:
adminjs: '>=6.0.0'
@@ -201,7 +204,7 @@ packages:
express-formidable: 1.2.0
express-session: 1.17.3
path-to-regexp: 6.2.1
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@adminjs/mongoose@3.0.3(adminjs@6.8.7)(mongoose@6.12.0):
@@ -226,25 +229,25 @@ packages:
/@aws-crypto/crc32@3.0.0:
resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==}
+ requiresBuild: true
dependencies:
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.391.0
+ '@aws-sdk/types': 3.502.0
tslib: 1.14.1
- dev: false
/@aws-crypto/crc32c@3.0.0:
resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==}
dependencies:
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.391.0
+ '@aws-sdk/types': 3.502.0
tslib: 1.14.1
dev: false
/@aws-crypto/ie11-detection@3.0.0:
resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==}
+ requiresBuild: true
dependencies:
tslib: 1.14.1
- dev: false
/@aws-crypto/sha1-browser@3.0.0:
resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==}
@@ -252,7 +255,7 @@ packages:
'@aws-crypto/ie11-detection': 3.0.0
'@aws-crypto/supports-web-crypto': 3.0.0
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.391.0
+ '@aws-sdk/types': 3.502.0
'@aws-sdk/util-locate-window': 3.310.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
@@ -260,957 +263,1094 @@ packages:
/@aws-crypto/sha256-browser@3.0.0:
resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==}
+ requiresBuild: true
dependencies:
'@aws-crypto/ie11-detection': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
'@aws-crypto/supports-web-crypto': 3.0.0
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.391.0
+ '@aws-sdk/types': 3.502.0
'@aws-sdk/util-locate-window': 3.310.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
- dev: false
/@aws-crypto/sha256-js@3.0.0:
resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==}
+ requiresBuild: true
dependencies:
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.391.0
+ '@aws-sdk/types': 3.502.0
tslib: 1.14.1
- dev: false
/@aws-crypto/supports-web-crypto@3.0.0:
resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==}
+ requiresBuild: true
dependencies:
tslib: 1.14.1
- dev: false
/@aws-crypto/util@3.0.0:
resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.391.0
+ '@aws-sdk/types': 3.502.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
- dev: false
- /@aws-sdk/client-cognito-identity@3.385.0:
- resolution: {integrity: sha512-fRXZhxvBBeK/Jxb+sLPhyQmcduNSugSKJDz474A/wLK5UIuDOnKhDTjsa0OXMpY5DkqwdYLwDcGZtxUbEZ8DCQ==}
+ /@aws-sdk/client-cognito-identity@3.427.0:
+ resolution: {integrity: sha512-9brRaNnl6haE7R3R43A5CSNw0k1YtB3xjuArbMg/p6NDUpvRSRgOVNWu2R02Yjh/j2ZuaLOCPLuCipb+PHQPKQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sts': 3.385.0
- '@aws-sdk/credential-provider-node': 3.385.0
- '@aws-sdk/middleware-host-header': 3.379.1
- '@aws-sdk/middleware-logger': 3.378.0
- '@aws-sdk/middleware-recursion-detection': 3.378.0
- '@aws-sdk/middleware-signing': 3.379.1
- '@aws-sdk/middleware-user-agent': 3.382.0
- '@aws-sdk/types': 3.378.0
- '@aws-sdk/util-endpoints': 3.382.0
- '@aws-sdk/util-user-agent-browser': 3.378.0
- '@aws-sdk/util-user-agent-node': 3.378.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
+ '@aws-sdk/client-sts': 3.427.0
+ '@aws-sdk/credential-provider-node': 3.427.0
+ '@aws-sdk/middleware-host-header': 3.425.0
+ '@aws-sdk/middleware-logger': 3.425.0
+ '@aws-sdk/middleware-recursion-detection': 3.425.0
+ '@aws-sdk/middleware-signing': 3.425.0
+ '@aws-sdk/middleware-user-agent': 3.427.0
+ '@aws-sdk/region-config-resolver': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@aws-sdk/util-endpoints': 3.427.0
+ '@aws-sdk/util-user-agent-browser': 3.425.0
+ '@aws-sdk/util-user-agent-node': 3.425.0
+ '@smithy/config-resolver': 2.0.14
+ '@smithy/fetch-http-handler': 2.2.2
+ '@smithy/hash-node': 2.0.11
+ '@smithy/invalid-dependency': 2.0.11
+ '@smithy/middleware-content-length': 2.0.13
+ '@smithy/middleware-endpoint': 2.0.11
+ '@smithy/middleware-retry': 2.0.16
+ '@smithy/middleware-serde': 2.0.11
+ '@smithy/middleware-stack': 2.0.5
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/node-http-handler': 2.1.7
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/smithy-client': 2.1.10
+ '@smithy/types': 2.3.5
+ '@smithy/url-parser': 2.0.11
'@smithy/util-base64': 2.0.0
'@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
+ '@smithy/util-body-length-node': 2.1.0
+ '@smithy/util-defaults-mode-browser': 2.0.14
+ '@smithy/util-defaults-mode-node': 2.0.18
+ '@smithy/util-retry': 2.0.4
'@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/client-s3@3.391.0:
- resolution: {integrity: sha512-QGRcawQFYM/WtaKgr15oi2xzoqhniqp9aAGDVW+iClbOtMfXr2o79RDqPGKge+uQsmw2we0qgvphypDm7RMMgw==}
+ /@aws-sdk/client-s3@3.507.0:
+ resolution: {integrity: sha512-rRLiC5Ly3e7kZVNoRsG6JhZ8Yat5uEnDeShdWNdHchyTO88AaEnHaeyiVG9ecmKI8jYl6NbWSHB8xL0l9KIr/w==}
engines: {node: '>=14.0.0'}
dependencies:
'@aws-crypto/sha1-browser': 3.0.0
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sts': 3.391.0
- '@aws-sdk/credential-provider-node': 3.391.0
- '@aws-sdk/middleware-bucket-endpoint': 3.391.0
- '@aws-sdk/middleware-expect-continue': 3.391.0
- '@aws-sdk/middleware-flexible-checksums': 3.391.0
- '@aws-sdk/middleware-host-header': 3.391.0
- '@aws-sdk/middleware-location-constraint': 3.391.0
- '@aws-sdk/middleware-logger': 3.391.0
- '@aws-sdk/middleware-recursion-detection': 3.391.0
- '@aws-sdk/middleware-sdk-s3': 3.391.0
- '@aws-sdk/middleware-signing': 3.391.0
- '@aws-sdk/middleware-ssec': 3.391.0
- '@aws-sdk/middleware-user-agent': 3.391.0
- '@aws-sdk/signature-v4-multi-region': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-endpoints': 3.391.0
- '@aws-sdk/util-user-agent-browser': 3.391.0
- '@aws-sdk/util-user-agent-node': 3.391.0
- '@aws-sdk/xml-builder': 3.310.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/eventstream-serde-browser': 2.0.3
- '@smithy/eventstream-serde-config-resolver': 2.0.3
- '@smithy/eventstream-serde-node': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-blob-browser': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/hash-stream-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/md5-js': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
- '@smithy/util-base64': 2.0.0
- '@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
- '@smithy/util-stream': 2.0.3
- '@smithy/util-utf8': 2.0.0
- '@smithy/util-waiter': 2.0.3
+ '@aws-sdk/client-sts': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/core': 3.496.0
+ '@aws-sdk/credential-provider-node': 3.507.0
+ '@aws-sdk/middleware-bucket-endpoint': 3.502.0
+ '@aws-sdk/middleware-expect-continue': 3.502.0
+ '@aws-sdk/middleware-flexible-checksums': 3.502.0
+ '@aws-sdk/middleware-host-header': 3.502.0
+ '@aws-sdk/middleware-location-constraint': 3.502.0
+ '@aws-sdk/middleware-logger': 3.502.0
+ '@aws-sdk/middleware-recursion-detection': 3.502.0
+ '@aws-sdk/middleware-sdk-s3': 3.502.0
+ '@aws-sdk/middleware-signing': 3.502.0
+ '@aws-sdk/middleware-ssec': 3.502.0
+ '@aws-sdk/middleware-user-agent': 3.502.0
+ '@aws-sdk/region-config-resolver': 3.502.0
+ '@aws-sdk/signature-v4-multi-region': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-endpoints': 3.502.0
+ '@aws-sdk/util-user-agent-browser': 3.502.0
+ '@aws-sdk/util-user-agent-node': 3.502.0
+ '@aws-sdk/xml-builder': 3.496.0
+ '@smithy/config-resolver': 2.1.1
+ '@smithy/core': 1.3.1
+ '@smithy/eventstream-serde-browser': 2.1.1
+ '@smithy/eventstream-serde-config-resolver': 2.1.1
+ '@smithy/eventstream-serde-node': 2.1.1
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/hash-blob-browser': 2.1.1
+ '@smithy/hash-node': 2.1.1
+ '@smithy/hash-stream-node': 2.1.1
+ '@smithy/invalid-dependency': 2.1.1
+ '@smithy/md5-js': 2.1.1
+ '@smithy/middleware-content-length': 2.1.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-retry': 2.1.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/middleware-stack': 2.1.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ '@smithy/util-base64': 2.1.1
+ '@smithy/util-body-length-browser': 2.1.1
+ '@smithy/util-body-length-node': 2.2.1
+ '@smithy/util-defaults-mode-browser': 2.1.1
+ '@smithy/util-defaults-mode-node': 2.1.1
+ '@smithy/util-endpoints': 1.1.1
+ '@smithy/util-retry': 2.1.1
+ '@smithy/util-stream': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ '@smithy/util-waiter': 2.1.1
fast-xml-parser: 4.2.5
- tslib: 2.6.1
+ tslib: 2.6.2
transitivePeerDependencies:
- - '@aws-sdk/signature-v4-crt'
- aws-crt
dev: false
- /@aws-sdk/client-ses@3.391.0:
- resolution: {integrity: sha512-FWSFRGtwykNQaqCov7YxHrCAIxy7NIhoffeNkGVvxPRcu4zzvvgqiGaBMfm2tyT/j6n91xp+I1kj/Zs+RjTBhA==}
+ /@aws-sdk/client-ses@3.507.0:
+ resolution: {integrity: sha512-eX/OHHA4Zk7EgsaPnL4sQmghekipmiGJBm/E+JEoiaBoPJOPj0q28pnJKm6rMVUnhddaQZUuAYw9cSCyT3zoDg==}
engines: {node: '>=14.0.0'}
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sts': 3.391.0
- '@aws-sdk/credential-provider-node': 3.391.0
- '@aws-sdk/middleware-host-header': 3.391.0
- '@aws-sdk/middleware-logger': 3.391.0
- '@aws-sdk/middleware-recursion-detection': 3.391.0
- '@aws-sdk/middleware-signing': 3.391.0
- '@aws-sdk/middleware-user-agent': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-endpoints': 3.391.0
- '@aws-sdk/util-user-agent-browser': 3.391.0
- '@aws-sdk/util-user-agent-node': 3.391.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
- '@smithy/util-base64': 2.0.0
- '@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
- '@smithy/util-utf8': 2.0.0
- '@smithy/util-waiter': 2.0.3
+ '@aws-sdk/client-sts': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/core': 3.496.0
+ '@aws-sdk/credential-provider-node': 3.507.0
+ '@aws-sdk/middleware-host-header': 3.502.0
+ '@aws-sdk/middleware-logger': 3.502.0
+ '@aws-sdk/middleware-recursion-detection': 3.502.0
+ '@aws-sdk/middleware-signing': 3.502.0
+ '@aws-sdk/middleware-user-agent': 3.502.0
+ '@aws-sdk/region-config-resolver': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-endpoints': 3.502.0
+ '@aws-sdk/util-user-agent-browser': 3.502.0
+ '@aws-sdk/util-user-agent-node': 3.502.0
+ '@smithy/config-resolver': 2.1.1
+ '@smithy/core': 1.3.1
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/hash-node': 2.1.1
+ '@smithy/invalid-dependency': 2.1.1
+ '@smithy/middleware-content-length': 2.1.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-retry': 2.1.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/middleware-stack': 2.1.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ '@smithy/util-base64': 2.1.1
+ '@smithy/util-body-length-browser': 2.1.1
+ '@smithy/util-body-length-node': 2.2.1
+ '@smithy/util-defaults-mode-browser': 2.1.1
+ '@smithy/util-defaults-mode-node': 2.1.1
+ '@smithy/util-endpoints': 1.1.1
+ '@smithy/util-retry': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ '@smithy/util-waiter': 2.1.1
fast-xml-parser: 4.2.5
- tslib: 2.6.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
dev: false
- /@aws-sdk/client-sso@3.382.0:
- resolution: {integrity: sha512-ge11t4hJllOF8pBNF0p1X52lLqUsLGAoey24fvk3fyvvczeLpegGYh2kdLG0iwFTDgRxaUqK+kboH5Wy9ux/pw==}
+ /@aws-sdk/client-sso-oidc@3.507.0(@aws-sdk/credential-provider-node@3.507.0):
+ resolution: {integrity: sha512-ms5CH2ImhqqCIbo5irxayByuPOlVAmSiqDVfjZKwgIziqng2bVgNZMeKcT6t0bmrcgScEAVnZwY7j/iZTIw73g==}
engines: {node: '>=14.0.0'}
+ peerDependencies:
+ '@aws-sdk/credential-provider-node': ^3.507.0
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/middleware-host-header': 3.379.1
- '@aws-sdk/middleware-logger': 3.378.0
- '@aws-sdk/middleware-recursion-detection': 3.378.0
- '@aws-sdk/middleware-user-agent': 3.382.0
- '@aws-sdk/types': 3.378.0
- '@aws-sdk/util-endpoints': 3.382.0
- '@aws-sdk/util-user-agent-browser': 3.378.0
- '@aws-sdk/util-user-agent-node': 3.378.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
- '@smithy/util-base64': 2.0.0
- '@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
- '@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ '@aws-sdk/client-sts': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/core': 3.496.0
+ '@aws-sdk/credential-provider-node': 3.507.0
+ '@aws-sdk/middleware-host-header': 3.502.0
+ '@aws-sdk/middleware-logger': 3.502.0
+ '@aws-sdk/middleware-recursion-detection': 3.502.0
+ '@aws-sdk/middleware-signing': 3.502.0
+ '@aws-sdk/middleware-user-agent': 3.502.0
+ '@aws-sdk/region-config-resolver': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-endpoints': 3.502.0
+ '@aws-sdk/util-user-agent-browser': 3.502.0
+ '@aws-sdk/util-user-agent-node': 3.502.0
+ '@smithy/config-resolver': 2.1.1
+ '@smithy/core': 1.3.1
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/hash-node': 2.1.1
+ '@smithy/invalid-dependency': 2.1.1
+ '@smithy/middleware-content-length': 2.1.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-retry': 2.1.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/middleware-stack': 2.1.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ '@smithy/util-base64': 2.1.1
+ '@smithy/util-body-length-browser': 2.1.1
+ '@smithy/util-body-length-node': 2.2.1
+ '@smithy/util-defaults-mode-browser': 2.1.1
+ '@smithy/util-defaults-mode-node': 2.1.1
+ '@smithy/util-endpoints': 1.1.1
+ '@smithy/util-retry': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
dev: false
- optional: true
- /@aws-sdk/client-sso@3.391.0:
- resolution: {integrity: sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==}
+ /@aws-sdk/client-sso@3.427.0:
+ resolution: {integrity: sha512-sFVFEmsQ1rmgYO1SgrOTxE/MTKpeE4hpOkm1WqhLQK7Ij136vXpjCxjH1JYZiHiUzO1wr9t4ex4dlB5J3VS/Xg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/middleware-host-header': 3.391.0
- '@aws-sdk/middleware-logger': 3.391.0
- '@aws-sdk/middleware-recursion-detection': 3.391.0
- '@aws-sdk/middleware-user-agent': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-endpoints': 3.391.0
- '@aws-sdk/util-user-agent-browser': 3.391.0
- '@aws-sdk/util-user-agent-node': 3.391.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
+ '@aws-sdk/middleware-host-header': 3.425.0
+ '@aws-sdk/middleware-logger': 3.425.0
+ '@aws-sdk/middleware-recursion-detection': 3.425.0
+ '@aws-sdk/middleware-user-agent': 3.427.0
+ '@aws-sdk/region-config-resolver': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@aws-sdk/util-endpoints': 3.427.0
+ '@aws-sdk/util-user-agent-browser': 3.425.0
+ '@aws-sdk/util-user-agent-node': 3.425.0
+ '@smithy/config-resolver': 2.0.14
+ '@smithy/fetch-http-handler': 2.2.2
+ '@smithy/hash-node': 2.0.11
+ '@smithy/invalid-dependency': 2.0.11
+ '@smithy/middleware-content-length': 2.0.13
+ '@smithy/middleware-endpoint': 2.0.11
+ '@smithy/middleware-retry': 2.0.16
+ '@smithy/middleware-serde': 2.0.11
+ '@smithy/middleware-stack': 2.0.5
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/node-http-handler': 2.1.7
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/smithy-client': 2.1.10
+ '@smithy/types': 2.3.5
+ '@smithy/url-parser': 2.0.11
'@smithy/util-base64': 2.0.0
'@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
+ '@smithy/util-body-length-node': 2.1.0
+ '@smithy/util-defaults-mode-browser': 2.0.14
+ '@smithy/util-defaults-mode-node': 2.0.18
+ '@smithy/util-retry': 2.0.4
'@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - aws-crt
+ optional: true
+
+ /@aws-sdk/client-sso@3.507.0:
+ resolution: {integrity: sha512-pFeaKwqv4tXD6QVxWC2V4N62DUoP3bPSm/mCe2SPhaNjNsmwwA53viUHz/nwxIbs8w4vV44UQsygb0AgKm+HoQ==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@aws-crypto/sha256-browser': 3.0.0
+ '@aws-crypto/sha256-js': 3.0.0
+ '@aws-sdk/core': 3.496.0
+ '@aws-sdk/middleware-host-header': 3.502.0
+ '@aws-sdk/middleware-logger': 3.502.0
+ '@aws-sdk/middleware-recursion-detection': 3.502.0
+ '@aws-sdk/middleware-user-agent': 3.502.0
+ '@aws-sdk/region-config-resolver': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-endpoints': 3.502.0
+ '@aws-sdk/util-user-agent-browser': 3.502.0
+ '@aws-sdk/util-user-agent-node': 3.502.0
+ '@smithy/config-resolver': 2.1.1
+ '@smithy/core': 1.3.1
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/hash-node': 2.1.1
+ '@smithy/invalid-dependency': 2.1.1
+ '@smithy/middleware-content-length': 2.1.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-retry': 2.1.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/middleware-stack': 2.1.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ '@smithy/util-base64': 2.1.1
+ '@smithy/util-body-length-browser': 2.1.1
+ '@smithy/util-body-length-node': 2.2.1
+ '@smithy/util-defaults-mode-browser': 2.1.1
+ '@smithy/util-defaults-mode-node': 2.1.1
+ '@smithy/util-endpoints': 1.1.1
+ '@smithy/util-retry': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
dev: false
- /@aws-sdk/client-sts@3.385.0:
- resolution: {integrity: sha512-VdSDwICW2cBttbdj1izu6VYflJbZZKu3/FSaJGuGu8SgTvRsa56g6E5xfbUfR/SCstuETObKLusSfQZ6yxUnzA==}
+ /@aws-sdk/client-sts@3.427.0:
+ resolution: {integrity: sha512-le2wLJKILyWuRfPz2HbyaNtu5kEki+ojUkTqCU6FPDRrqUvEkaaCBH9Awo/2AtrCfRkiobop8RuTTj6cAnpiJg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/credential-provider-node': 3.385.0
- '@aws-sdk/middleware-host-header': 3.379.1
- '@aws-sdk/middleware-logger': 3.378.0
- '@aws-sdk/middleware-recursion-detection': 3.378.0
- '@aws-sdk/middleware-sdk-sts': 3.379.1
- '@aws-sdk/middleware-signing': 3.379.1
- '@aws-sdk/middleware-user-agent': 3.382.0
- '@aws-sdk/types': 3.378.0
- '@aws-sdk/util-endpoints': 3.382.0
- '@aws-sdk/util-user-agent-browser': 3.378.0
- '@aws-sdk/util-user-agent-node': 3.378.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
+ '@aws-sdk/credential-provider-node': 3.427.0
+ '@aws-sdk/middleware-host-header': 3.425.0
+ '@aws-sdk/middleware-logger': 3.425.0
+ '@aws-sdk/middleware-recursion-detection': 3.425.0
+ '@aws-sdk/middleware-sdk-sts': 3.425.0
+ '@aws-sdk/middleware-signing': 3.425.0
+ '@aws-sdk/middleware-user-agent': 3.427.0
+ '@aws-sdk/region-config-resolver': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@aws-sdk/util-endpoints': 3.427.0
+ '@aws-sdk/util-user-agent-browser': 3.425.0
+ '@aws-sdk/util-user-agent-node': 3.425.0
+ '@smithy/config-resolver': 2.0.14
+ '@smithy/fetch-http-handler': 2.2.2
+ '@smithy/hash-node': 2.0.11
+ '@smithy/invalid-dependency': 2.0.11
+ '@smithy/middleware-content-length': 2.0.13
+ '@smithy/middleware-endpoint': 2.0.11
+ '@smithy/middleware-retry': 2.0.16
+ '@smithy/middleware-serde': 2.0.11
+ '@smithy/middleware-stack': 2.0.5
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/node-http-handler': 2.1.7
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/smithy-client': 2.1.10
+ '@smithy/types': 2.3.5
+ '@smithy/url-parser': 2.0.11
'@smithy/util-base64': 2.0.0
'@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
+ '@smithy/util-body-length-node': 2.1.0
+ '@smithy/util-defaults-mode-browser': 2.0.14
+ '@smithy/util-defaults-mode-node': 2.0.18
+ '@smithy/util-retry': 2.0.4
'@smithy/util-utf8': 2.0.0
fast-xml-parser: 4.2.5
- tslib: 2.6.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/client-sts@3.391.0:
- resolution: {integrity: sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==}
+ /@aws-sdk/client-sts@3.507.0(@aws-sdk/credential-provider-node@3.507.0):
+ resolution: {integrity: sha512-TOWBe0ApEh32QOib0R+irWGjd1F9wnhbGV5PcB9SakyRwvqwG5MKOfYxG7ocoDqLlaRwzZMidcy/PV8/OEVNKg==}
engines: {node: '>=14.0.0'}
+ peerDependencies:
+ '@aws-sdk/credential-provider-node': ^3.507.0
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/credential-provider-node': 3.391.0
- '@aws-sdk/middleware-host-header': 3.391.0
- '@aws-sdk/middleware-logger': 3.391.0
- '@aws-sdk/middleware-recursion-detection': 3.391.0
- '@aws-sdk/middleware-sdk-sts': 3.391.0
- '@aws-sdk/middleware-signing': 3.391.0
- '@aws-sdk/middleware-user-agent': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-endpoints': 3.391.0
- '@aws-sdk/util-user-agent-browser': 3.391.0
- '@aws-sdk/util-user-agent-node': 3.391.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
- '@smithy/util-base64': 2.0.0
- '@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
- '@smithy/util-utf8': 2.0.0
+ '@aws-sdk/core': 3.496.0
+ '@aws-sdk/credential-provider-node': 3.507.0
+ '@aws-sdk/middleware-host-header': 3.502.0
+ '@aws-sdk/middleware-logger': 3.502.0
+ '@aws-sdk/middleware-recursion-detection': 3.502.0
+ '@aws-sdk/middleware-user-agent': 3.502.0
+ '@aws-sdk/region-config-resolver': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-endpoints': 3.502.0
+ '@aws-sdk/util-user-agent-browser': 3.502.0
+ '@aws-sdk/util-user-agent-node': 3.502.0
+ '@smithy/config-resolver': 2.1.1
+ '@smithy/core': 1.3.1
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/hash-node': 2.1.1
+ '@smithy/invalid-dependency': 2.1.1
+ '@smithy/middleware-content-length': 2.1.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-retry': 2.1.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/middleware-stack': 2.1.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ '@smithy/util-base64': 2.1.1
+ '@smithy/util-body-length-browser': 2.1.1
+ '@smithy/util-body-length-node': 2.2.1
+ '@smithy/util-defaults-mode-browser': 2.1.1
+ '@smithy/util-defaults-mode-node': 2.1.1
+ '@smithy/util-endpoints': 1.1.1
+ '@smithy/util-middleware': 2.1.1
+ '@smithy/util-retry': 2.1.1
+ '@smithy/util-utf8': 2.1.1
fast-xml-parser: 4.2.5
- tslib: 2.6.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
dev: false
- /@aws-sdk/credential-provider-cognito-identity@3.385.0:
- resolution: {integrity: sha512-NeWJgI2XdfO0ZM25KsfNx9CDmLByY3ymVc0ae4Os+bd8pJsFeo1rX3NSkyw8XGryEbOlVJ3Jz5W5huhjo4LvqQ==}
+ /@aws-sdk/core@3.496.0:
+ resolution: {integrity: sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/core': 1.3.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/signature-v4': 2.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
+ dev: false
+
+ /@aws-sdk/credential-provider-cognito-identity@3.427.0:
+ resolution: {integrity: sha512-BQNzNrMJlBAfXhYNdAUqaVASpT9Aho5swj7glZKxx4Uds1w5Pih2e14JWgnl8XgUWAZ36pchTrV1aA4JT7N8vw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/client-cognito-identity': 3.385.0
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-cognito-identity': 3.427.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/property-provider': 2.0.12
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/credential-provider-env@3.378.0:
- resolution: {integrity: sha512-B2OVdO9kBClDwGgWTBLAQwFV8qYTYGyVujg++1FZFSFMt8ORFdZ5fNpErvJtiSjYiOOQMzyBeSNhKyYNXCiJjQ==}
+ /@aws-sdk/credential-provider-env@3.425.0:
+ resolution: {integrity: sha512-J20etnLvMKXRVi5FK4F8yOCNm2RTaQn5psQTGdDEPWJNGxohcSpzzls8U2KcMyUJ+vItlrThr4qwgpHG3i/N0w==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@aws-sdk/types': 3.425.0
+ '@smithy/property-provider': 2.0.12
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@aws-sdk/credential-provider-env@3.502.0:
+ resolution: {integrity: sha512-KIB8Ae1Z7domMU/jU4KiIgK4tmYgvuXlhR54ehwlVHxnEoFPoPuGHFZU7oFn79jhhSLUFQ1lRYMxP0cEwb7XeQ==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
+
+ /@aws-sdk/credential-provider-http@3.425.0:
+ resolution: {integrity: sha512-aP9nkoVWf+OlNMecrUqe4+RuQrX13nucVbty0HTvuwfwJJj0T6ByWZzle+fo1D+5OxvJmtzTflBWt6jUERdHWA==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@aws-sdk/types': 3.425.0
+ '@smithy/fetch-http-handler': 2.2.2
+ '@smithy/node-http-handler': 2.1.7
+ '@smithy/property-provider': 2.0.12
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/credential-provider-env@3.391.0:
- resolution: {integrity: sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==}
+ /@aws-sdk/credential-provider-http@3.503.1:
+ resolution: {integrity: sha512-rTdlFFGoPPFMF2YjtlfRuSgKI+XsF49u7d98255hySwhsbwd3Xp+utTTPquxP+CwDxMHbDlI7NxDzFiFdsoZug==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/property-provider': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/property-provider': 2.1.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-stream': 2.1.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/credential-provider-ini@3.385.0:
- resolution: {integrity: sha512-WBIR5GdfUzCGzynQYX/TuCXw3KJCkHBk6bVAsO1YmfR68XKVAxWmJPKovlK/rR6LIuV+iwUMNludO+SkmG0efg==}
+ /@aws-sdk/credential-provider-ini@3.427.0:
+ resolution: {integrity: sha512-NmH1cO/w98CKMltYec3IrJIIco19wRjATFNiw83c+FGXZ+InJwReqBnruxIOmKTx2KDzd6fwU1HOewS7UjaaaQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/credential-provider-env': 3.378.0
- '@aws-sdk/credential-provider-process': 3.378.0
- '@aws-sdk/credential-provider-sso': 3.385.0
- '@aws-sdk/credential-provider-web-identity': 3.378.0
- '@aws-sdk/types': 3.378.0
- '@smithy/credential-provider-imds': 2.0.3
- '@smithy/property-provider': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/credential-provider-env': 3.425.0
+ '@aws-sdk/credential-provider-process': 3.425.0
+ '@aws-sdk/credential-provider-sso': 3.427.0
+ '@aws-sdk/credential-provider-web-identity': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/credential-provider-imds': 2.0.16
+ '@smithy/property-provider': 2.0.12
+ '@smithy/shared-ini-file-loader': 2.2.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/credential-provider-ini@3.391.0:
- resolution: {integrity: sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==}
+ /@aws-sdk/credential-provider-ini@3.507.0(@aws-sdk/credential-provider-node@3.507.0):
+ resolution: {integrity: sha512-2CnyduoR9COgd7qH1LPYK8UggGqVs8R4ASDMB5bwGxbg9ZerlStDiHpqvJNNg1k+VlejBr++utxfmHd236XgmQ==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/credential-provider-env': 3.391.0
- '@aws-sdk/credential-provider-process': 3.391.0
- '@aws-sdk/credential-provider-sso': 3.391.0
- '@aws-sdk/credential-provider-web-identity': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@smithy/credential-provider-imds': 2.0.1
- '@smithy/property-provider': 2.0.1
- '@smithy/shared-ini-file-loader': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-sts': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/credential-provider-env': 3.502.0
+ '@aws-sdk/credential-provider-process': 3.502.0
+ '@aws-sdk/credential-provider-sso': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/credential-provider-web-identity': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/types': 3.502.0
+ '@smithy/credential-provider-imds': 2.2.1
+ '@smithy/property-provider': 2.1.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
transitivePeerDependencies:
+ - '@aws-sdk/credential-provider-node'
- aws-crt
dev: false
- /@aws-sdk/credential-provider-node@3.385.0:
- resolution: {integrity: sha512-Lk8uu6jm/8OkbLX4Qnss8o5bnt0yQa0Tb7Azbh5/5otju5kStVAD2E+zMGrMP++NriGyZV87crduh0J8l4JUTA==}
+ /@aws-sdk/credential-provider-node@3.427.0:
+ resolution: {integrity: sha512-wYYbQ57nKL8OfgRbl8k6uXcdnYml+p3LSSfDUAuUEp1HKlQ8lOXFJ3BdLr5qrk7LhpyppSRnWBmh2c3kWa7ANQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/credential-provider-env': 3.378.0
- '@aws-sdk/credential-provider-ini': 3.385.0
- '@aws-sdk/credential-provider-process': 3.378.0
- '@aws-sdk/credential-provider-sso': 3.385.0
- '@aws-sdk/credential-provider-web-identity': 3.378.0
- '@aws-sdk/types': 3.378.0
- '@smithy/credential-provider-imds': 2.0.3
- '@smithy/property-provider': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/credential-provider-env': 3.425.0
+ '@aws-sdk/credential-provider-ini': 3.427.0
+ '@aws-sdk/credential-provider-process': 3.425.0
+ '@aws-sdk/credential-provider-sso': 3.427.0
+ '@aws-sdk/credential-provider-web-identity': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/credential-provider-imds': 2.0.16
+ '@smithy/property-provider': 2.0.12
+ '@smithy/shared-ini-file-loader': 2.2.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/credential-provider-node@3.391.0:
- resolution: {integrity: sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==}
+ /@aws-sdk/credential-provider-node@3.507.0:
+ resolution: {integrity: sha512-tkQnmOLkRBXfMLgDYHzogrqTNdtl0Im0ipzJb2IV5hfM5NoTfCf795e9A9isgwjSP/g/YEU0xQWxa4lq8LRtuA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/credential-provider-env': 3.391.0
- '@aws-sdk/credential-provider-ini': 3.391.0
- '@aws-sdk/credential-provider-process': 3.391.0
- '@aws-sdk/credential-provider-sso': 3.391.0
- '@aws-sdk/credential-provider-web-identity': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@smithy/credential-provider-imds': 2.0.1
- '@smithy/property-provider': 2.0.1
- '@smithy/shared-ini-file-loader': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/credential-provider-env': 3.502.0
+ '@aws-sdk/credential-provider-http': 3.503.1
+ '@aws-sdk/credential-provider-ini': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/credential-provider-process': 3.502.0
+ '@aws-sdk/credential-provider-sso': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/credential-provider-web-identity': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/types': 3.502.0
+ '@smithy/credential-provider-imds': 2.2.1
+ '@smithy/property-provider': 2.1.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
dev: false
- /@aws-sdk/credential-provider-process@3.378.0:
- resolution: {integrity: sha512-KFTIy7u+wXj3eDua4rgS0tODzMnXtXhAm1RxzCW9FL5JLBBrd82ymCj1Dp72217Sw5Do6NjCnDTTNkCHZMA77w==}
+ /@aws-sdk/credential-provider-process@3.425.0:
+ resolution: {integrity: sha512-YY6tkLdvtb1Fgofp3b1UWO+5vwS14LJ/smGmuGpSba0V7gFJRdcrJ9bcb9vVgAGuMdjzRJ+bUKlLLtqXkaykEw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/property-provider': 2.0.12
+ '@smithy/shared-ini-file-loader': 2.2.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/credential-provider-process@3.391.0:
- resolution: {integrity: sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==}
+ /@aws-sdk/credential-provider-process@3.502.0:
+ resolution: {integrity: sha512-fJJowOjQ4infYQX0E1J3xFVlmuwEYJAFk0Mo1qwafWmEthsBJs+6BR2RiWDELHKrSK35u4Pf3fu3RkYuCtmQFw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/property-provider': 2.0.1
- '@smithy/shared-ini-file-loader': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/credential-provider-sso@3.385.0:
- resolution: {integrity: sha512-ETFnS+4ZKTAgT8boVpIpRuXA9wWGpNqOcI1RXtjsaIgQ9s8uNn2JPa8l71gZh861mzBC8Hadp1EpNu+43w4lkg==}
+ /@aws-sdk/credential-provider-sso@3.427.0:
+ resolution: {integrity: sha512-c+tXyS/i49erHs4bAp6vKNYeYlyQ0VNMBgoco0LCn1rL0REtHbfhWMnqDLF6c2n3yIWDOTrQu0D73Idnpy16eA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/client-sso': 3.382.0
- '@aws-sdk/token-providers': 3.385.0
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-sso': 3.427.0
+ '@aws-sdk/token-providers': 3.427.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/property-provider': 2.0.12
+ '@smithy/shared-ini-file-loader': 2.2.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/credential-provider-sso@3.391.0:
- resolution: {integrity: sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==}
+ /@aws-sdk/credential-provider-sso@3.507.0(@aws-sdk/credential-provider-node@3.507.0):
+ resolution: {integrity: sha512-6WBjou52QukFpDi4ezb19bcAx/bM8ge8qnJnRT02WVRmU6zFQ5yLD2fW1MFsbX3cwbey+wSqKd5FGE1Hukd5wQ==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/client-sso': 3.391.0
- '@aws-sdk/token-providers': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@smithy/property-provider': 2.0.1
- '@smithy/shared-ini-file-loader': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-sso': 3.507.0
+ '@aws-sdk/token-providers': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/types': 3.502.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
transitivePeerDependencies:
+ - '@aws-sdk/credential-provider-node'
- aws-crt
dev: false
- /@aws-sdk/credential-provider-web-identity@3.378.0:
- resolution: {integrity: sha512-GWjydOszhc4xDF8xuPtBvboglXQr0gwCW1oHAvmLcOT38+Hd6qnKywnMSeoXYRPgoKfF9TkWQgW1jxplzCG0UA==}
+ /@aws-sdk/credential-provider-web-identity@3.425.0:
+ resolution: {integrity: sha512-/0R65TgRzL01JU3SzloivWNwdkbIhr06uY/F5pBHf/DynQqaspKNfdHn6AiozgSVDfwRHFjKBTUy6wvf3QFkuA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/property-provider': 2.0.12
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/credential-provider-web-identity@3.391.0:
- resolution: {integrity: sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==}
+ /@aws-sdk/credential-provider-web-identity@3.507.0(@aws-sdk/credential-provider-node@3.507.0):
+ resolution: {integrity: sha512-f+aGMfazBimX7S06224JRYzGTaMh1uIhfj23tZylPJ05KxTVi5IO1RoqeI/uHLJ+bDOx+JHBC04g/oCdO4kHvw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/property-provider': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-sts': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/types': 3.502.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - '@aws-sdk/credential-provider-node'
+ - aws-crt
dev: false
- /@aws-sdk/credential-providers@3.385.0:
- resolution: {integrity: sha512-II4WAFMk061Ud6n1Pux+5T3FQe6gLIwmpF+QgMH97TxJZWFiKyhmJ1Z0VArjo1wwcEPMyIN21Ij91ayop8agwQ==}
+ /@aws-sdk/credential-providers@3.427.0:
+ resolution: {integrity: sha512-rKKohSHju462vo+uQnPjcEZPBAfAMgGH6K1XyyCNpuOC0yYLkG87PYpvAQeb8riTrkHPX0dYUHuTHZ6zQgMGjA==}
engines: {node: '>=14.0.0'}
requiresBuild: true
dependencies:
- '@aws-sdk/client-cognito-identity': 3.385.0
- '@aws-sdk/client-sso': 3.382.0
- '@aws-sdk/client-sts': 3.385.0
- '@aws-sdk/credential-provider-cognito-identity': 3.385.0
- '@aws-sdk/credential-provider-env': 3.378.0
- '@aws-sdk/credential-provider-ini': 3.385.0
- '@aws-sdk/credential-provider-node': 3.385.0
- '@aws-sdk/credential-provider-process': 3.378.0
- '@aws-sdk/credential-provider-sso': 3.385.0
- '@aws-sdk/credential-provider-web-identity': 3.378.0
- '@aws-sdk/types': 3.378.0
- '@smithy/credential-provider-imds': 2.0.3
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-cognito-identity': 3.427.0
+ '@aws-sdk/client-sso': 3.427.0
+ '@aws-sdk/client-sts': 3.427.0
+ '@aws-sdk/credential-provider-cognito-identity': 3.427.0
+ '@aws-sdk/credential-provider-env': 3.425.0
+ '@aws-sdk/credential-provider-http': 3.425.0
+ '@aws-sdk/credential-provider-ini': 3.427.0
+ '@aws-sdk/credential-provider-node': 3.427.0
+ '@aws-sdk/credential-provider-process': 3.425.0
+ '@aws-sdk/credential-provider-sso': 3.427.0
+ '@aws-sdk/credential-provider-web-identity': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/credential-provider-imds': 2.0.16
+ '@smithy/property-provider': 2.0.12
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
optional: true
- /@aws-sdk/middleware-bucket-endpoint@3.391.0:
- resolution: {integrity: sha512-R8poMkfi54kce6b0d9RQjNm2E+je/dpA1y/TTjCAoWfaBoq6X8UhX6ZD5wdlgg+38FK/2TPjrnXdsm4gtDJuUQ==}
+ /@aws-sdk/middleware-bucket-endpoint@3.502.0:
+ resolution: {integrity: sha512-mUSP2DUcjhO5zM2b21CvZ9AqwI8DaAeZA6NYHOxWGTV9BUxHcdGWXEjDkcVj9CQ0gvNwTtw6B5L/q52rVAnZbw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-arn-parser': 3.310.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/util-config-provider': 2.0.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-arn-parser': 3.495.0
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-config-provider': 2.2.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-expect-continue@3.391.0:
- resolution: {integrity: sha512-BdZetUens7vx6PFcDehGTJGFYh/s2SyQk51r5u7OlzYTkdX6DhuBX2CzfzJbswFGKgSHXoiQY0WbSGmNOkRF3A==}
+ /@aws-sdk/middleware-expect-continue@3.502.0:
+ resolution: {integrity: sha512-DxfAuBVuPSt8as9xP57o8ks6ySVSjwO2NNNAdpLwk4KhEAPYEpHlf2yWYorYLrS+dDmwfYgOhRNoguuBdCu6ow==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-flexible-checksums@3.391.0:
- resolution: {integrity: sha512-To9gjXzLvNQ6xbN2FtTFNjirvy1OmAuQR+mzZPgxFGgGKVPAKYz1+gFqHAEoFJVDyaxHMd8x4F7hEgDoPWQe7Q==}
+ /@aws-sdk/middleware-flexible-checksums@3.502.0:
+ resolution: {integrity: sha512-kCt2zQDFumz/LnJJJOSd2GW4dr8oT8YMJKgxC/pph3aRXoSHXRwhrMbFnQ8swEE9vjywxtcED8sym0b0tNhhoA==}
engines: {node: '>=14.0.0'}
dependencies:
'@aws-crypto/crc32': 3.0.0
'@aws-crypto/crc32c': 3.0.0
- '@aws-sdk/types': 3.391.0
- '@smithy/is-array-buffer': 2.0.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/is-array-buffer': 2.1.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-host-header@3.379.1:
- resolution: {integrity: sha512-LI4KpAFWNWVr2aH2vRVblr0Y8tvDz23lj8LOmbDmCrzd5M21nxuocI/8nEAQj55LiTIf9Zs+dHCdsyegnFXdrA==}
+ /@aws-sdk/middleware-host-header@3.425.0:
+ resolution: {integrity: sha512-E5Gt41LObQ+cr8QnLthwsH3MtVSNXy1AKJMowDr85h0vzqA/FHUkgHyOGntgozzjXT5M0MaSRYxS0xwTR5D4Ew==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/middleware-host-header@3.391.0:
- resolution: {integrity: sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==}
+ /@aws-sdk/middleware-host-header@3.502.0:
+ resolution: {integrity: sha512-EjnG0GTYXT/wJBmm5/mTjDcAkzU8L7wQjOzd3FTXuTCNNyvAvwrszbOj5FlarEw5XJBbQiZtBs+I5u9+zy560w==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-location-constraint@3.391.0:
- resolution: {integrity: sha512-2ff6/OU7XTMqIZHkyMu4V1xD1iAER/pyT0FNCX2fcc8b0wr0ltBmsJ5Zh+hfMs06/oPO36NDcvJMat/waghHgQ==}
+ /@aws-sdk/middleware-location-constraint@3.502.0:
+ resolution: {integrity: sha512-fLRwPuTZvEWQkPjys03m3D6tYN4kf7zU6+c8mJxwvEg+yfBuv2RBsbd+Vn2bTisUjXvIg1kyBzONlpHoIyFneg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-logger@3.378.0:
- resolution: {integrity: sha512-l1DyaDLm3KeBMNMuANI3scWh8Xvu248x+vw6Z7ExWOhGXFmQ1MW7YvASg/SdxWkhlF9HmkkTif1LdMB22x6QDA==}
+ /@aws-sdk/middleware-logger@3.425.0:
+ resolution: {integrity: sha512-INE9XWRXx2f4a/r2vOU0tAmgctVp7nEaEasemNtVBYhqbKLZvr9ndLBSgKGgJ8LIcXAoISipaMuFiqIGkFsm7A==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/middleware-logger@3.391.0:
- resolution: {integrity: sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==}
+ /@aws-sdk/middleware-logger@3.502.0:
+ resolution: {integrity: sha512-FDyv6K4nCoHxbjLGS2H8ex8I0KDIiu4FJgVRPs140ZJy6gE5Pwxzv6YTzZGLMrnqcIs9gh065Lf6DjwMelZqaw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-recursion-detection@3.378.0:
- resolution: {integrity: sha512-mUMfHAz0oGNIWiTZHTVJb+I515Hqs2zx1j36Le4MMiiaMkPW1SRUF1FIwGuc1wh6E8jB5q+XfEMriDjRi4TZRA==}
+ /@aws-sdk/middleware-recursion-detection@3.425.0:
+ resolution: {integrity: sha512-77gnzJ5b91bgD75L/ugpOyerx6lR3oyS4080X1YI58EzdyBMkDrHM4FbMcY2RynETi3lwXCFzLRyZjWXY1mRlw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/middleware-recursion-detection@3.391.0:
- resolution: {integrity: sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==}
+ /@aws-sdk/middleware-recursion-detection@3.502.0:
+ resolution: {integrity: sha512-hvbyGJbxeuezxOu8VfFmcV4ql1hKXLxHTe5FNYfEBat2KaZXVhc1Hg+4TvB06/53p+E8J99Afmumkqbxs2esUA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-sdk-s3@3.391.0:
- resolution: {integrity: sha512-/G77j3IdZFtzI6CWns5f//xOOJ8DezDD9sEvAlfSiBgJLaL3SUFZLmG+lHqEPzCQyNpNSY5RvuojtjloaLDi5A==}
+ /@aws-sdk/middleware-sdk-s3@3.502.0:
+ resolution: {integrity: sha512-GbGugrfyL5bNA/zw8iQll92yXBONfWSC8Ns00DtkOU1saPXp4/7WHtyyZGYdvPa73T1IsuZy9egpoYRBmRcd5Q==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-arn-parser': 3.310.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-arn-parser': 3.495.0
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/signature-v4': 2.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-config-provider': 2.2.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-sdk-sts@3.379.1:
- resolution: {integrity: sha512-SK3gSyT0XbLiY12+AjLFYL9YngxOXHnZF3Z33Cdd4a+AUYrVBV7JBEEGD1Nlwrcmko+3XgaKlmgUaR5s91MYvg==}
+ /@aws-sdk/middleware-sdk-sts@3.425.0:
+ resolution: {integrity: sha512-JFojrg76oKAoBknnr9EL5N2aJ1mRCtBqXoZYST58GSx8uYdFQ89qS65VNQ8JviBXzsrCNAn4vDhZ5Ch5E6TxGQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/middleware-signing': 3.379.1
- '@aws-sdk/types': 3.378.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/middleware-signing': 3.425.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/middleware-sdk-sts@3.391.0:
- resolution: {integrity: sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==}
+ /@aws-sdk/middleware-signing@3.425.0:
+ resolution: {integrity: sha512-ZpOfgJHk7ovQ0sSwg3tU4NxFOnz53lJlkJRf7S+wxQALHM0P2MJ6LYBrZaFMVsKiJxNIdZBXD6jclgHg72ZW6Q==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/middleware-signing': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/property-provider': 2.0.12
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/signature-v4': 2.0.11
+ '@smithy/types': 2.3.5
+ '@smithy/util-middleware': 2.0.4
+ tslib: 2.6.2
+ optional: true
- /@aws-sdk/middleware-signing@3.379.1:
- resolution: {integrity: sha512-kBk2ZUvR84EM4fICjr8K+Ykpf8SI1UzzPp2/UVYZ0X+4H/ZCjfSqohGRwHykMqeplne9qHSL7/rGJs1H3l3gPg==}
+ /@aws-sdk/middleware-signing@3.502.0:
+ resolution: {integrity: sha512-4hF08vSzJ7L6sB+393gOFj3s2N6nLusYS0XrMW6wYNFU10IDdbf8Z3TZ7gysDJJHEGQPmTAesPEDBsasGWcMxg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/signature-v4': 2.0.1
- '@smithy/types': 2.2.0
- '@smithy/util-middleware': 2.0.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/signature-v4': 2.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-middleware': 2.1.1
+ tslib: 2.6.2
dev: false
- optional: true
- /@aws-sdk/middleware-signing@3.391.0:
- resolution: {integrity: sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==}
+ /@aws-sdk/middleware-ssec@3.502.0:
+ resolution: {integrity: sha512-1nidVTIba6/aVjjzD/WNqWdzSyTrXOHO3Ddz2MGD8S1yGSrYz4iYaq4Bm/uosfdr8B1L0Ws0pjdRXrNfzSw/DQ==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/property-provider': 2.0.1
- '@smithy/protocol-http': 2.0.3
- '@smithy/signature-v4': 2.0.1
- '@smithy/types': 2.2.0
- '@smithy/util-middleware': 2.0.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/middleware-ssec@3.391.0:
- resolution: {integrity: sha512-Mhz0wBWccjwmFNb9zNLQD9HpPfU/Ygv7HtaPAkcmnWOMuUNhAS6aXExZc3QGE2owzAaLS2g3m24JEE3LsIYZJQ==}
+ /@aws-sdk/middleware-user-agent@3.427.0:
+ resolution: {integrity: sha512-y9HxYsNvnA3KqDl8w1jHeCwz4P9CuBEtu/G+KYffLeAMBsMZmh4SIkFFCO9wE/dyYg6+yo07rYcnnIfy7WA0bw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@aws-sdk/util-endpoints': 3.427.0
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
- /@aws-sdk/middleware-user-agent@3.382.0:
- resolution: {integrity: sha512-LFRW1jmXOrOAd3911ktn6oaYmuurNnulbdRMOUdwz99GGdLVFipQhOi9idKswb8IOhPa4jEVQt25Kcv7ctvu0A==}
+ /@aws-sdk/middleware-user-agent@3.502.0:
+ resolution: {integrity: sha512-TxbBZbRiXPH0AUxegqiNd9aM9zNSbfjtBs5MEfcBsweeT/B2O7K1EjP9+CkB8Xmk/5FLKhAKLr19b1TNoE27rw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.378.0
- '@aws-sdk/util-endpoints': 3.382.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-endpoints': 3.502.0
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- optional: true
- /@aws-sdk/middleware-user-agent@3.391.0:
- resolution: {integrity: sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==}
+ /@aws-sdk/region-config-resolver@3.425.0:
+ resolution: {integrity: sha512-u7uv/iUOapIJdRgRkO3wnpYsUgV6ponsZJQgVg/8L+n+Vo5PQL5gAcIuAOwcYSKQPFaeK+KbmByI4SyOK203Vw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-endpoints': 3.391.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/types': 2.3.5
+ '@smithy/util-config-provider': 2.0.0
+ '@smithy/util-middleware': 2.0.4
+ tslib: 2.6.2
+ optional: true
- /@aws-sdk/s3-request-presigner@3.391.0:
- resolution: {integrity: sha512-2cV6utjfV/8EvJjyBSowoYpmCy4HWb7b7PhkdJB5a3hItxi2NdWX2AZhSBit6xYhUdHvOuXcfG4TMGyH5S2NVQ==}
+ /@aws-sdk/region-config-resolver@3.502.0:
+ resolution: {integrity: sha512-mxmsX2AGgnSM+Sah7mcQCIneOsJQNiLX0COwEttuf8eO+6cLMAZvVudH3BnWTfea4/A9nuri9DLCqBvEmPrilg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/signature-v4-multi-region': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-format-url': 3.391.0
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- transitivePeerDependencies:
- - '@aws-sdk/signature-v4-crt'
+ '@aws-sdk/types': 3.502.0
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-config-provider': 2.2.1
+ '@smithy/util-middleware': 2.1.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/signature-v4-multi-region@3.391.0:
- resolution: {integrity: sha512-YMBWCkk8/Q85mqyf5eOn/XxAYflmxikYAU9ZL11fu9zPTUU2JsrsMJrsQmqia+Lp1jhQNQ9K3QFngG1hECflgQ==}
+ /@aws-sdk/s3-request-presigner@3.507.0:
+ resolution: {integrity: sha512-A3EGvXMeOvnG+qtAsmlcQyLP7+PlCePS+PsVqLm3Pz3C16avOTxTqOZIkYCqBBX2fnASr2qUr0d3cezBfsU7PQ==}
engines: {node: '>=14.0.0'}
- peerDependencies:
- '@aws-sdk/signature-v4-crt': ^3.118.0
- peerDependenciesMeta:
- '@aws-sdk/signature-v4-crt':
- optional: true
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/protocol-http': 2.0.3
- '@smithy/signature-v4': 2.0.1
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/signature-v4-multi-region': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@aws-sdk/util-format-url': 3.502.0
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/token-providers@3.385.0:
- resolution: {integrity: sha512-2A2Y7/bU5EaxQwLwLy7ojs+Wy5VOBkIlGPH7ZcpPaoQ1Hscwn3Wvx/DZmOvbyYfZ1CbIFutoHJlVxh6KZldUDw==}
+ /@aws-sdk/signature-v4-multi-region@3.502.0:
+ resolution: {integrity: sha512-NpOXtUXH0ZAgnyI3Y3s2fPrgwbsWoNMwdoXdFZvH0eDzzX80tim7Yuy6dzVA5zrxSzOYs1xjcOhM+4CmM0QZiw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/property-provider': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/middleware-sdk-s3': 3.502.0
+ '@aws-sdk/types': 3.502.0
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/signature-v4': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- optional: true
- /@aws-sdk/token-providers@3.391.0:
- resolution: {integrity: sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==}
+ /@aws-sdk/token-providers@3.427.0:
+ resolution: {integrity: sha512-4E5E+4p8lJ69PBY400dJXF06LUHYx5lkKzBEsYqWWhoZcoftrvi24ltIhUDoGVLkrLcTHZIWSdFAWSos4hXqeg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/middleware-host-header': 3.391.0
- '@aws-sdk/middleware-logger': 3.391.0
- '@aws-sdk/middleware-recursion-detection': 3.391.0
- '@aws-sdk/middleware-user-agent': 3.391.0
- '@aws-sdk/types': 3.391.0
- '@aws-sdk/util-endpoints': 3.391.0
- '@aws-sdk/util-user-agent-browser': 3.391.0
- '@aws-sdk/util-user-agent-node': 3.391.0
- '@smithy/config-resolver': 2.0.3
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/hash-node': 2.0.3
- '@smithy/invalid-dependency': 2.0.3
- '@smithy/middleware-content-length': 2.0.3
- '@smithy/middleware-endpoint': 2.0.3
- '@smithy/middleware-retry': 2.0.3
- '@smithy/middleware-serde': 2.0.3
- '@smithy/middleware-stack': 2.0.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/property-provider': 2.0.1
- '@smithy/protocol-http': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.1
- '@smithy/smithy-client': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
+ '@aws-sdk/middleware-host-header': 3.425.0
+ '@aws-sdk/middleware-logger': 3.425.0
+ '@aws-sdk/middleware-recursion-detection': 3.425.0
+ '@aws-sdk/middleware-user-agent': 3.427.0
+ '@aws-sdk/types': 3.425.0
+ '@aws-sdk/util-endpoints': 3.427.0
+ '@aws-sdk/util-user-agent-browser': 3.425.0
+ '@aws-sdk/util-user-agent-node': 3.425.0
+ '@smithy/config-resolver': 2.0.14
+ '@smithy/fetch-http-handler': 2.2.2
+ '@smithy/hash-node': 2.0.11
+ '@smithy/invalid-dependency': 2.0.11
+ '@smithy/middleware-content-length': 2.0.13
+ '@smithy/middleware-endpoint': 2.0.11
+ '@smithy/middleware-retry': 2.0.16
+ '@smithy/middleware-serde': 2.0.11
+ '@smithy/middleware-stack': 2.0.5
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/node-http-handler': 2.1.7
+ '@smithy/property-provider': 2.0.12
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/shared-ini-file-loader': 2.2.0
+ '@smithy/smithy-client': 2.1.10
+ '@smithy/types': 2.3.5
+ '@smithy/url-parser': 2.0.11
'@smithy/util-base64': 2.0.0
'@smithy/util-body-length-browser': 2.0.0
- '@smithy/util-body-length-node': 2.0.0
- '@smithy/util-defaults-mode-browser': 2.0.3
- '@smithy/util-defaults-mode-node': 2.0.3
- '@smithy/util-retry': 2.0.0
+ '@smithy/util-body-length-node': 2.1.0
+ '@smithy/util-defaults-mode-browser': 2.0.14
+ '@smithy/util-defaults-mode-node': 2.0.18
+ '@smithy/util-retry': 2.0.4
'@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
transitivePeerDependencies:
- aws-crt
- dev: false
+ optional: true
- /@aws-sdk/types@3.378.0:
- resolution: {integrity: sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w==}
+ /@aws-sdk/token-providers@3.507.0(@aws-sdk/credential-provider-node@3.507.0):
+ resolution: {integrity: sha512-ehOINGjoGJc6Puzon7ev4bXckkaZx18WNgMTNttYJhj3vTpj5LPSQbI/5SS927bEbpGMFz1+hJ6Ra5WGfbTcEQ==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/client-sso-oidc': 3.507.0(@aws-sdk/credential-provider-node@3.507.0)
+ '@aws-sdk/types': 3.502.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - '@aws-sdk/credential-provider-node'
+ - aws-crt
dev: false
+
+ /@aws-sdk/types@3.425.0:
+ resolution: {integrity: sha512-6lqbmorwerN4v+J5dqbHPAsjynI0mkEF+blf+69QTaKKGaxBBVaXgqoqul9RXYcK5MMrrYRbQIMd0zYOoy90kA==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/types@3.391.0:
- resolution: {integrity: sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==}
+ /@aws-sdk/types@3.502.0:
+ resolution: {integrity: sha512-M0DSPYe/gXhwD2QHgoukaZv5oDxhW3FfvYIrJptyqUq3OnPJBcDbihHjrE0PBtfh/9kgMZT60/fQ2NVFANfa2g==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
- /@aws-sdk/util-arn-parser@3.310.0:
- resolution: {integrity: sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==}
+ /@aws-sdk/util-arn-parser@3.495.0:
+ resolution: {integrity: sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==}
engines: {node: '>=14.0.0'}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/util-endpoints@3.382.0:
- resolution: {integrity: sha512-flajPyjmjNG67fXk7l4GoTB/7J11VBqtFZXuuAZKhKU07Ia3IQupsFqNf5lV8D44ZgjnKH0fTGnv3dUALjW7Wg==}
+ /@aws-sdk/util-endpoints@3.427.0:
+ resolution: {integrity: sha512-rSyiAIFF/EVvity/+LWUqoTMJ0a25RAc9iqx0WZ4tf1UjuEXRRXxZEb+jEZg1bk+pY84gdLdx9z5E+MSJCZxNQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/node-config-provider': 2.1.1
+ tslib: 2.6.2
optional: true
- /@aws-sdk/util-endpoints@3.391.0:
- resolution: {integrity: sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==}
+ /@aws-sdk/util-endpoints@3.502.0:
+ resolution: {integrity: sha512-6LKFlJPp2J24r1Kpfoz5ESQn+1v5fEjDB3mtUKRdpwarhm3syu7HbKlHCF3KbcCOyahobvLvhoedT78rJFEeeg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/types': 2.9.1
+ '@smithy/util-endpoints': 1.1.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/util-format-url@3.391.0:
- resolution: {integrity: sha512-cddtpaYxKy8Hi2pCZonJ4RHx+T+nx3ESwr/A+r56jou2PQJiQZGg10rt366waU/GsgnVHvXHcC00CzGSbDkDGg==}
+ /@aws-sdk/util-format-url@3.502.0:
+ resolution: {integrity: sha512-4+0zBD0ZIJqtTzSE6VRruRwUx3lG+is8Egv+LN99X5y7i6OdrS9ePYHbCJ9FxkzTThgbkUq6k2W7psEDYvn4VA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/querystring-builder': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/querystring-builder': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@aws-sdk/util-locate-window@3.310.0:
resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
- /@aws-sdk/util-user-agent-browser@3.378.0:
- resolution: {integrity: sha512-FSCpagzftK1W+m7Ar6lpX7/Gr9y5P56nhFYz8U4EYQ4PkufS6czWX9YW+/FA5OYV0vlQ/SvPqMnzoHIPUNhZrQ==}
+ /@aws-sdk/util-user-agent-browser@3.425.0:
+ resolution: {integrity: sha512-22Y9iMtjGcFjGILR6/xdp1qRezlHVLyXtnpEsbuPTiernRCPk6zfAnK/ATH77r02MUjU057tdxVkd5umUBTn9Q==}
+ requiresBuild: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/types': 2.2.0
+ '@aws-sdk/types': 3.425.0
+ '@smithy/types': 2.3.5
bowser: 2.11.0
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
optional: true
- /@aws-sdk/util-user-agent-browser@3.391.0:
- resolution: {integrity: sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==}
+ /@aws-sdk/util-user-agent-browser@3.502.0:
+ resolution: {integrity: sha512-v8gKyCs2obXoIkLETAeEQ3AM+QmhHhst9xbM1cJtKUGsRlVIak/XyyD+kVE6kmMm1cjfudHpHKABWk9apQcIZQ==}
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/types': 2.2.0
+ '@aws-sdk/types': 3.502.0
+ '@smithy/types': 2.9.1
bowser: 2.11.0
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
- /@aws-sdk/util-user-agent-node@3.378.0:
- resolution: {integrity: sha512-IdwVJV0E96MkJeFte4dlWqvB+oiqCiZ5lOlheY3W9NynTuuX0GGYNC8Y9yIsV8Oava1+ujpJq0ww6qXdYxmO4A==}
+ /@aws-sdk/util-user-agent-node@3.425.0:
+ resolution: {integrity: sha512-SIR4F5uQeeVAi8lv4OgRirtdtNi5zeyogTuQgGi9su8F/WP1N6JqxofcwpUY5f8/oJ2UlXr/tx1f09UHfJJzvA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
peerDependencies:
aws-crt: '>=1.0.0'
peerDependenciesMeta:
aws-crt:
optional: true
dependencies:
- '@aws-sdk/types': 3.378.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@aws-sdk/types': 3.425.0
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
optional: true
- /@aws-sdk/util-user-agent-node@3.391.0:
- resolution: {integrity: sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==}
+ /@aws-sdk/util-user-agent-node@3.502.0:
+ resolution: {integrity: sha512-9RjxpkGZKbTdl96tIJvAo+vZoz4P/cQh36SBUt9xfRfW0BtsaLyvSrvlR5wyUYhvRcC12Axqh/8JtnAPq//+Vw==}
engines: {node: '>=14.0.0'}
peerDependencies:
aws-crt: '>=1.0.0'
@@ -1218,23 +1358,24 @@ packages:
aws-crt:
optional: true
dependencies:
- '@aws-sdk/types': 3.391.0
- '@smithy/node-config-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@aws-sdk/types': 3.502.0
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@aws-sdk/util-utf8-browser@3.259.0:
resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
- /@aws-sdk/xml-builder@3.310.0:
- resolution: {integrity: sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==}
+ /@aws-sdk/xml-builder@3.496.0:
+ resolution: {integrity: sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw==}
engines: {node: '>=14.0.0'}
dependencies:
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@babel/code-frame@7.22.5:
@@ -2742,7 +2883,7 @@ packages:
resolution: {integrity: sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==}
dependencies:
'@firebase/util': 1.9.3
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@firebase/database-compat@0.3.4:
@@ -2753,7 +2894,7 @@ packages:
'@firebase/database-types': 0.10.4
'@firebase/logger': 0.4.0
'@firebase/util': 1.9.3
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@firebase/database-types@0.10.4:
@@ -2771,19 +2912,19 @@ packages:
'@firebase/logger': 0.4.0
'@firebase/util': 1.9.3
faye-websocket: 0.11.4
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@firebase/logger@0.4.0:
resolution: {integrity: sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@firebase/util@1.9.3:
resolution: {integrity: sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@floating-ui/core@1.4.1:
@@ -2803,15 +2944,15 @@ packages:
resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==}
dev: false
- /@google-cloud/firestore@6.7.0:
- resolution: {integrity: sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg==}
+ /@google-cloud/firestore@6.8.0:
+ resolution: {integrity: sha512-JRpk06SmZXLGz0pNx1x7yU3YhkUXheKgH5hbDZ4kMsdhtfV5qPLJLRI4wv69K0cZorIk+zTMOwptue7hizo0eA==}
engines: {node: '>=12.0.0'}
requiresBuild: true
dependencies:
fast-deep-equal: 3.1.3
functional-red-black-tree: 1.0.1
google-gax: 3.6.1
- protobufjs: 7.2.4
+ protobufjs: 7.2.5
transitivePeerDependencies:
- encoding
- supports-color
@@ -2821,6 +2962,7 @@ packages:
/@google-cloud/paginator@3.0.7:
resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==}
engines: {node: '>=10'}
+ requiresBuild: true
dependencies:
arrify: 2.0.1
extend: 3.0.2
@@ -2830,12 +2972,14 @@ packages:
/@google-cloud/projectify@3.0.0:
resolution: {integrity: sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==}
engines: {node: '>=12.0.0'}
+ requiresBuild: true
dev: false
optional: true
/@google-cloud/promisify@3.0.1:
resolution: {integrity: sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==}
engines: {node: '>=12'}
+ requiresBuild: true
dev: false
optional: true
@@ -2871,6 +3015,7 @@ packages:
/@grpc/grpc-js@1.8.21:
resolution: {integrity: sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==}
engines: {node: ^8.13.0 || >=10.10.0}
+ requiresBuild: true
dependencies:
'@grpc/proto-loader': 0.7.8
'@types/node': 20.4.7
@@ -2881,11 +3026,12 @@ packages:
resolution: {integrity: sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA==}
engines: {node: '>=6'}
hasBin: true
+ requiresBuild: true
dependencies:
'@types/long': 4.0.2
lodash.camelcase: 4.3.0
long: 4.0.0
- protobufjs: 7.2.4
+ protobufjs: 7.2.5
yargs: 17.7.2
dev: false
optional: true
@@ -2983,17 +3129,17 @@ packages:
/@jsdoc/salty@0.2.5:
resolution: {integrity: sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==}
engines: {node: '>=v12.0.0'}
+ requiresBuild: true
dependencies:
lodash: 4.17.21
dev: false
optional: true
- /@mongodb-js/saslprep@1.1.1:
- resolution: {integrity: sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==}
+ /@mongodb-js/saslprep@1.1.0:
+ resolution: {integrity: sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==}
requiresBuild: true
dependencies:
sparse-bitfield: 3.0.3
- dev: false
optional: true
/@nodelib/fs.scandir@2.1.5:
@@ -3020,26 +3166,31 @@ packages:
/@protobufjs/aspromise@1.1.2:
resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/base64@1.1.2:
resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/codegen@2.0.4:
resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/eventemitter@1.1.0:
resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/fetch@1.1.0:
resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+ requiresBuild: true
dependencies:
'@protobufjs/aspromise': 1.1.2
'@protobufjs/inquire': 1.1.0
@@ -3048,26 +3199,31 @@ packages:
/@protobufjs/float@1.0.2:
resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/inquire@1.1.0:
resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/path@1.1.2:
resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/pool@1.1.0:
resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+ requiresBuild: true
dev: false
optional: true
/@protobufjs/utf8@1.1.0:
resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+ requiresBuild: true
dev: false
optional: true
@@ -3232,491 +3388,840 @@ packages:
rollup: 2.79.1
dev: false
- /@smithy/abort-controller@2.0.3:
- resolution: {integrity: sha512-LbQ4fdsVuQC3/18Z/uia5wnk9fk8ikfHl3laYCEGhboEMJ/6oVk3zhydqljMxBCftHGUv7yUrTnZ6EAQhOf+PA==}
+ /@smithy/abort-controller@2.0.11:
+ resolution: {integrity: sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/abort-controller@2.1.1:
+ resolution: {integrity: sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/chunked-blob-reader-native@2.0.0:
- resolution: {integrity: sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==}
+ /@smithy/chunked-blob-reader-native@2.1.1:
+ resolution: {integrity: sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==}
dependencies:
- '@smithy/util-base64': 2.0.0
- tslib: 2.6.1
+ '@smithy/util-base64': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/chunked-blob-reader@2.0.0:
- resolution: {integrity: sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==}
+ /@smithy/chunked-blob-reader@2.1.1:
+ resolution: {integrity: sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
- /@smithy/config-resolver@2.0.3:
- resolution: {integrity: sha512-E+fsc6BOzFOc6U6y9ogRH8Pw2HF1NVW14AAYy7l3OTXYWuYxHb/fzDZaA0FvD/dXyFoMy7AV1rYZsGzD4bMKzw==}
+ /@smithy/config-resolver@2.0.14:
+ resolution: {integrity: sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/types': 2.3.5
'@smithy/util-config-provider': 2.0.0
- '@smithy/util-middleware': 2.0.0
- tslib: 2.6.1
+ '@smithy/util-middleware': 2.0.4
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/config-resolver@2.1.1:
+ resolution: {integrity: sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-config-provider': 2.2.1
+ '@smithy/util-middleware': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/credential-provider-imds@2.0.1:
- resolution: {integrity: sha512-8VxriuRINNEfVZjEFKBY75y9ZWAx73DZ5K/u+3LmB6r8WR2h3NaFxFKMlwlq0uzNdGhD1ouKBn9XWEGYHKiPLw==}
+ /@smithy/core@1.3.1:
+ resolution: {integrity: sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/node-config-provider': 2.0.1
- '@smithy/property-provider': 2.0.1
- '@smithy/types': 2.0.2
- '@smithy/url-parser': 2.0.1
- tslib: 2.6.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-retry': 2.1.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-middleware': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/credential-provider-imds@2.0.3:
- resolution: {integrity: sha512-2e85iLgSuiGQ8BBFkot88kuv6sT5DHvkDO8FDvGwNunn2ybf24HhEkaWCMxK4pUeHtnA2dMa3hZbtfmJ7KJQig==}
+ /@smithy/credential-provider-imds@2.0.16:
+ resolution: {integrity: sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/property-provider': 2.0.12
+ '@smithy/types': 2.3.5
+ '@smithy/url-parser': 2.0.11
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/credential-provider-imds@2.2.1:
+ resolution: {integrity: sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/node-config-provider': 2.0.3
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
- tslib: 2.6.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/property-provider': 2.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/eventstream-codec@2.0.1:
- resolution: {integrity: sha512-/IiNB7gQM2y2ZC/GAWOWDa8+iXfhr1g9Xe5979cQEOdCWDISvrAiv18cn3OtIQUhbYOR3gm7QtCpkq1to2takQ==}
+ /@smithy/eventstream-codec@2.0.11:
+ resolution: {integrity: sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==}
+ requiresBuild: true
dependencies:
'@aws-crypto/crc32': 3.0.0
- '@smithy/types': 2.2.0
+ '@smithy/types': 2.3.5
'@smithy/util-hex-encoding': 2.0.0
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
+ optional: true
- /@smithy/eventstream-codec@2.0.3:
- resolution: {integrity: sha512-3l/uKZBsV/6uMe2qXvh1C8ut/w6JHKgy7ic7N2QPR1SSuNWKNQBX0iVBqJpPtQz0UDeQYM4cNmwDBX+hw74EEw==}
+ /@smithy/eventstream-codec@2.1.1:
+ resolution: {integrity: sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==}
dependencies:
'@aws-crypto/crc32': 3.0.0
- '@smithy/types': 2.2.0
- '@smithy/util-hex-encoding': 2.0.0
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-hex-encoding': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/eventstream-serde-browser@2.0.3:
- resolution: {integrity: sha512-RwQeTFnc6nOP6iGjdnMFgDG8QtneHKptrVZxjc+be4KIoXGPyF3QAourxnrClxTl+MACXYUaCg6bWCozqfHMOw==}
+ /@smithy/eventstream-serde-browser@2.1.1:
+ resolution: {integrity: sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/eventstream-serde-universal': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/eventstream-serde-universal': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/eventstream-serde-config-resolver@2.0.3:
- resolution: {integrity: sha512-J8QzPnarBiJaPw5DBsZ5O2GHjfPHhCmKV5iVzdcAFt0PD81UWNL9HMwAKx99mY5WWPCaFKvb1yBeN2g/v4uA2w==}
+ /@smithy/eventstream-serde-config-resolver@2.1.1:
+ resolution: {integrity: sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/eventstream-serde-node@2.0.3:
- resolution: {integrity: sha512-085r0AHMhwVF99rlAy8RVMhXMkxay4SdSwRdDUIe4MXQ6r2957BVpm3BcoxRpjcGgnoCldRc9tCRa0TclvUS5w==}
+ /@smithy/eventstream-serde-node@2.1.1:
+ resolution: {integrity: sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/eventstream-serde-universal': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/eventstream-serde-universal': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/eventstream-serde-universal@2.0.3:
- resolution: {integrity: sha512-51nLy47MmU9Nb4dwlwsmP1XJViP72kuLtIqTeDeRSe5Ah4xfSP/df11roEhzUmE/rUYEkErj64RHkseeuFkCgg==}
+ /@smithy/eventstream-serde-universal@2.1.1:
+ resolution: {integrity: sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/eventstream-codec': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/eventstream-codec': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/fetch-http-handler@2.0.3:
- resolution: {integrity: sha512-0if2hyn+tDkyK9Tg1bXpo3IMUaezz/FKlaUTwTey3m87hF8gb7a0nKaST4NURE2eUVimViGCB7SH3/i4wFXALg==}
+ /@smithy/fetch-http-handler@2.2.2:
+ resolution: {integrity: sha512-K7aRtRuaBjzlk+jWWeyfDTLAmRRvmA4fU8eHUXtjsuEDgi3f356ZE32VD2ssxIH13RCLVZbXMt5h7wHzYiSuVA==}
+ requiresBuild: true
dependencies:
- '@smithy/protocol-http': 2.0.3
- '@smithy/querystring-builder': 2.0.3
- '@smithy/types': 2.2.0
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/querystring-builder': 2.0.11
+ '@smithy/types': 2.3.5
'@smithy/util-base64': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/fetch-http-handler@2.4.1:
+ resolution: {integrity: sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==}
+ dependencies:
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/querystring-builder': 2.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-base64': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/hash-blob-browser@2.0.3:
- resolution: {integrity: sha512-YQywO2eGG4x3klQZ+R7G8X3oCgrzQaCNC3zYq7kcGibE2Z+q9Lzt3prYiODUwAihDJTCG09xHq1p9IW+z/fp+Q==}
+ /@smithy/hash-blob-browser@2.1.1:
+ resolution: {integrity: sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A==}
dependencies:
- '@smithy/chunked-blob-reader': 2.0.0
- '@smithy/chunked-blob-reader-native': 2.0.0
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/chunked-blob-reader': 2.1.1
+ '@smithy/chunked-blob-reader-native': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/hash-node@2.0.3:
- resolution: {integrity: sha512-wtN9eiRKEiryXrPbWQ7Acu0D3Uk65+PowtTqOslViMZNcKNlYHsxOP1S9rb2klnzA3yY1WSPO1tG78pjhRlvrQ==}
+ /@smithy/hash-node@2.0.11:
+ resolution: {integrity: sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
+ '@smithy/types': 2.3.5
'@smithy/util-buffer-from': 2.0.0
'@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/hash-node@2.1.1:
+ resolution: {integrity: sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/types': 2.9.1
+ '@smithy/util-buffer-from': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/hash-stream-node@2.0.3:
- resolution: {integrity: sha512-rFUhbuynRMd1DlYewqXRog2bZIMaDL3sNTAK7fg+7DngPpus7hiIGuXn3tJNnCiqiNuxVrhi/ffWpwt21+8DtA==}
+ /@smithy/hash-stream-node@2.1.1:
+ resolution: {integrity: sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- '@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/invalid-dependency@2.0.3:
- resolution: {integrity: sha512-GtmVXD/s+OZlFG1o3HfUI55aBJZXX5/iznAQkgjRGf8prYoO8GvSZLDWHXJp91arybaJxYd133oJORGf4YxGAg==}
+ /@smithy/invalid-dependency@2.0.11:
+ resolution: {integrity: sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/invalid-dependency@2.1.1:
+ resolution: {integrity: sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==}
+ dependencies:
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@smithy/is-array-buffer@2.0.0:
resolution: {integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/is-array-buffer@2.1.1:
+ resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ tslib: 2.6.2
dev: false
- /@smithy/md5-js@2.0.3:
- resolution: {integrity: sha512-pYnD2US3SioMynHytq4n2BsB5L6uJ7pWKxl9sQqvWwYJXcT3VSnJ0/9adbVcWE+GrMRlGO4CpRg9SIKpdQYR+Q==}
+ /@smithy/md5-js@2.1.1:
+ resolution: {integrity: sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg==}
dependencies:
- '@smithy/types': 2.2.0
- '@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/middleware-content-length@2.0.3:
- resolution: {integrity: sha512-2FiZ5vu2+iMRL8XWNaREUqqNHjtBubaY9Jb2b3huZ9EbgrXsJfCszK6PPidHTLe+B4T7AISqdF4ZSp9VPXuelg==}
+ /@smithy/middleware-content-length@2.0.13:
+ resolution: {integrity: sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/middleware-content-length@2.1.1:
+ resolution: {integrity: sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/protocol-http': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/middleware-endpoint@2.0.3:
- resolution: {integrity: sha512-gNleUHhu5OKk/nrA6WbpLUk/Wk2hcyCvaw7sZiKMazs+zdzWb0kYzynRf675uCWolbvlw9BvkrVaSJo5TRz+Mg==}
+ /@smithy/middleware-endpoint@2.0.11:
+ resolution: {integrity: sha512-mCugsvB15up6fqpzUEpMT4CuJmFkEI+KcozA7QMzYguXCaIilyMKsyxgamwmr+o7lo3QdjN0//XLQ9bWFL129g==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/middleware-serde': 2.0.11
+ '@smithy/types': 2.3.5
+ '@smithy/url-parser': 2.0.11
+ '@smithy/util-middleware': 2.0.4
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/middleware-endpoint@2.4.1:
+ resolution: {integrity: sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/middleware-serde': 2.0.3
- '@smithy/types': 2.2.0
- '@smithy/url-parser': 2.0.3
- '@smithy/util-middleware': 2.0.0
- tslib: 2.6.1
+ '@smithy/middleware-serde': 2.1.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/url-parser': 2.1.1
+ '@smithy/util-middleware': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/middleware-retry@2.0.3:
- resolution: {integrity: sha512-BpfaUwgOh8LpWP/x6KBb5IdBmd5+tEpTKIjDt7LWi3IVOYmRX5DjQo1eCEUqlKS1nxws/T7+/IyzvgBq8gF9rw==}
+ /@smithy/middleware-retry@2.0.16:
+ resolution: {integrity: sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/protocol-http': 2.0.3
- '@smithy/service-error-classification': 2.0.0
- '@smithy/types': 2.2.0
- '@smithy/util-middleware': 2.0.0
- '@smithy/util-retry': 2.0.0
- tslib: 2.6.1
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/service-error-classification': 2.0.4
+ '@smithy/types': 2.3.5
+ '@smithy/util-middleware': 2.0.4
+ '@smithy/util-retry': 2.0.4
+ tslib: 2.6.2
uuid: 8.3.2
- dev: false
+ optional: true
- /@smithy/middleware-serde@2.0.3:
- resolution: {integrity: sha512-5BxuOKL7pXqesvtunniDlvYQXVr7UJEF5nFVoK6+5chf5wplLA8IZWAn3NUcGq/f1u01w2m2q7atCoA6ftRLKA==}
+ /@smithy/middleware-retry@2.1.1:
+ resolution: {integrity: sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/service-error-classification': 2.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-middleware': 2.1.1
+ '@smithy/util-retry': 2.1.1
+ tslib: 2.6.2
+ uuid: 8.3.2
dev: false
- /@smithy/middleware-stack@2.0.0:
- resolution: {integrity: sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==}
+ /@smithy/middleware-serde@2.0.11:
+ resolution: {integrity: sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
- dev: false
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
- /@smithy/node-config-provider@2.0.1:
- resolution: {integrity: sha512-Zoel4CPkKRTQ2XxmozZUfqBYqjPKL53/SvTDhJHj+VBSiJy6MXRav1iDCyFPS92t40Uh+Yi+Km5Ch3hQ+c/zSA==}
+ /@smithy/middleware-serde@2.1.1:
+ resolution: {integrity: sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/property-provider': 2.0.1
- '@smithy/shared-ini-file-loader': 2.0.1
- '@smithy/types': 2.0.2
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/node-config-provider@2.0.3:
- resolution: {integrity: sha512-dYSVxOQMqtdmSOBW/J4RPvSYE4KKdGLgFHDJQGNsGo1d3y9IoNLwE32lT7doWwV0ryntlm4QZZwhfb3gISrTtA==}
+ /@smithy/middleware-stack@2.0.5:
+ resolution: {integrity: sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/property-provider': 2.0.3
- '@smithy/shared-ini-file-loader': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/middleware-stack@2.1.1:
+ resolution: {integrity: sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/node-http-handler@2.0.3:
- resolution: {integrity: sha512-wUO78aa0VVJVz54Lr1Nw6FYnkatbvh2saHgkT8fdtNWc7I/osaPMUJnRkBmTZZ5w+BIQ1rvr9dbGyYBTlRg2+Q==}
+ /@smithy/node-config-provider@2.1.1:
+ resolution: {integrity: sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/property-provider': 2.0.12
+ '@smithy/shared-ini-file-loader': 2.2.0
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/node-config-provider@2.2.1:
+ resolution: {integrity: sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/abort-controller': 2.0.3
- '@smithy/protocol-http': 2.0.3
- '@smithy/querystring-builder': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/property-provider': 2.1.1
+ '@smithy/shared-ini-file-loader': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/property-provider@2.0.1:
- resolution: {integrity: sha512-pmJRyY9SF6sutWIktIhe+bUdSQDxv/qZ4mYr3/u+u45riTPN7nmRxPo+e4sjWVoM0caKFjRSlj3tf5teRFy0Vg==}
+ /@smithy/node-http-handler@2.1.7:
+ resolution: {integrity: sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/abort-controller': 2.0.11
+ '@smithy/protocol-http': 3.0.7
+ '@smithy/querystring-builder': 2.0.11
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/node-http-handler@2.3.1:
+ resolution: {integrity: sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.0.2
- tslib: 2.6.1
+ '@smithy/abort-controller': 2.1.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/querystring-builder': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/property-provider@2.0.3:
- resolution: {integrity: sha512-SHV1SINUNysJ5HyPrMLHLkdofgalk9+5FnQCB/985hqcUxstN616hPZ7ngOjLpdhKp0yu1ul/esE9Gd4qh1tgg==}
+ /@smithy/property-provider@2.0.12:
+ resolution: {integrity: sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/property-provider@2.1.1:
+ resolution: {integrity: sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/protocol-http@2.0.3:
- resolution: {integrity: sha512-yzBYloviSLOwo2RT62vBRCPtk8mc/O2RMJfynEahbX8ZnduHpKaajvx3IuGubhamIbesi7M5HBVecDehBnlb9Q==}
+ /@smithy/protocol-http@3.0.7:
+ resolution: {integrity: sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/protocol-http@3.1.1:
+ resolution: {integrity: sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/querystring-builder@2.0.3:
- resolution: {integrity: sha512-HPSviVgGj9FT4jPdprkfSGF3nhFzpQMST1hOC1Oh6eaRB2KTQCsOZmS7U4IqGErVPafe6f/yRa1DV73B5gO50w==}
+ /@smithy/querystring-builder@2.0.11:
+ resolution: {integrity: sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
+ '@smithy/types': 2.3.5
'@smithy/util-uri-escape': 2.0.0
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
+ optional: true
- /@smithy/querystring-parser@2.0.1:
- resolution: {integrity: sha512-h+e7k1z+IvI2sSbUBG9Aq46JsgLl4UqIUl6aigAlRBj+P6ocNXpM6Yn1vMBw5ijtXeZbYpd1YvCxwDgdw3jhmg==}
+ /@smithy/querystring-builder@2.1.1:
+ resolution: {integrity: sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.0.2
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-uri-escape': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/querystring-parser@2.0.3:
- resolution: {integrity: sha512-AaiZ2osstDbmOTz5uY+96o0G1E7k1U7dCYrNT8FFcyffdhScTzG7fXr12f5peie2W0XFu2Ub+b6tQwFuZwPoBA==}
+ /@smithy/querystring-parser@2.0.11:
+ resolution: {integrity: sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
- dev: false
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
- /@smithy/service-error-classification@2.0.0:
- resolution: {integrity: sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==}
+ /@smithy/querystring-parser@2.1.1:
+ resolution: {integrity: sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==}
engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/shared-ini-file-loader@2.0.1:
- resolution: {integrity: sha512-a463YiZrPGvM+F336rIF8pLfQsHAdCRAn/BiI/EWzg5xLoxbC7GSxIgliDDXrOu0z8gT3nhVsif85eU6jyct3A==}
+ /@smithy/service-error-classification@2.0.4:
+ resolution: {integrity: sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.3.5
+ optional: true
+
+ /@smithy/service-error-classification@2.1.1:
+ resolution: {integrity: sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/types': 2.9.1
dev: false
- /@smithy/shared-ini-file-loader@2.0.3:
- resolution: {integrity: sha512-1Vgco3K0rN5YG2OStoS2zUrBzdcFqgqp475rGdag206PCh7AHzmVSGXL6OpWPAqZl29WUqXfMP8tHOLG0H6vkA==}
+ /@smithy/shared-ini-file-loader@2.2.0:
+ resolution: {integrity: sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/shared-ini-file-loader@2.3.1:
+ resolution: {integrity: sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/signature-v4@2.0.1:
- resolution: {integrity: sha512-jztv5Mirca42ilxmMDjzLdXcoAmRhZskGafGL49sRo5u7swEZcToEFrq6vtX5YMbSyTVrE9Teog5EFexY5Ff2Q==}
+ /@smithy/signature-v4@2.0.11:
+ resolution: {integrity: sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/eventstream-codec': 2.0.1
+ '@smithy/eventstream-codec': 2.0.11
'@smithy/is-array-buffer': 2.0.0
- '@smithy/types': 2.2.0
+ '@smithy/types': 2.3.5
'@smithy/util-hex-encoding': 2.0.0
- '@smithy/util-middleware': 2.0.0
+ '@smithy/util-middleware': 2.0.4
'@smithy/util-uri-escape': 2.0.0
'@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
+ optional: true
- /@smithy/smithy-client@2.0.3:
- resolution: {integrity: sha512-YP0HakPOJgvX2wvPEAGH9GB3NfuQE8CmBhR13bWtqWuIErmJnInTiSQcLSc0QiXHclH/8Qlq+qjKCR7N/4wvtQ==}
+ /@smithy/signature-v4@2.1.1:
+ resolution: {integrity: sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/middleware-stack': 2.0.0
- '@smithy/types': 2.2.0
- '@smithy/util-stream': 2.0.3
- tslib: 2.6.1
+ '@smithy/eventstream-codec': 2.1.1
+ '@smithy/is-array-buffer': 2.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-hex-encoding': 2.1.1
+ '@smithy/util-middleware': 2.1.1
+ '@smithy/util-uri-escape': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/types@2.0.2:
- resolution: {integrity: sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw==}
+ /@smithy/smithy-client@2.1.10:
+ resolution: {integrity: sha512-2OEmZDiW1Z196QHuQZ5M6cBE8FCSG0H2HADP1G+DY8P3agsvb0YJyfhyKuJbxIQy15tr3eDAK6FOrlbxgKOOew==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
- dev: false
+ '@smithy/middleware-stack': 2.0.5
+ '@smithy/types': 2.3.5
+ '@smithy/util-stream': 2.0.15
+ tslib: 2.6.2
+ optional: true
- /@smithy/types@2.2.0:
- resolution: {integrity: sha512-Ahpt9KvD0mWeWiyaGo5EBE7KOByLl3jl4CD9Ps/r8qySgzVzo/4qsa+vvstOU3ZEriALmrPqUKIhqHt0Rn+m6g==}
+ /@smithy/smithy-client@2.3.1:
+ resolution: {integrity: sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==}
engines: {node: '>=14.0.0'}
dependencies:
- tslib: 2.6.1
+ '@smithy/middleware-endpoint': 2.4.1
+ '@smithy/middleware-stack': 2.1.1
+ '@smithy/protocol-http': 3.1.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-stream': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/url-parser@2.0.1:
- resolution: {integrity: sha512-NpHVOAwddo+OyyIoujDL9zGL96piHWrTNXqltWmBvlUoWgt1HPyBuKs6oHjioyFnNZXUqveTOkEEq0U5w6Uv8A==}
+ /@smithy/types@2.3.5:
+ resolution: {integrity: sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/querystring-parser': 2.0.1
- '@smithy/types': 2.0.2
- tslib: 2.6.1
- dev: false
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/types@2.9.1:
+ resolution: {integrity: sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ tslib: 2.6.2
+
+ /@smithy/url-parser@2.0.11:
+ resolution: {integrity: sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==}
+ requiresBuild: true
+ dependencies:
+ '@smithy/querystring-parser': 2.0.11
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
- /@smithy/url-parser@2.0.3:
- resolution: {integrity: sha512-O7NlbDL4kh+th6qwtL7wNRcPCuOXFRWJzWKywfB/Nv56N1F8KiK0KbPn1z7MU5du/0LgjAMvhkg0mVDyiMCnqw==}
+ /@smithy/url-parser@2.1.1:
+ resolution: {integrity: sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==}
dependencies:
- '@smithy/querystring-parser': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/querystring-parser': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@smithy/util-base64@2.0.0:
resolution: {integrity: sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@smithy/util-buffer-from': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-base64@2.1.1:
+ resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/util-buffer-from': 2.1.1
+ tslib: 2.6.2
dev: false
/@smithy/util-body-length-browser@2.0.0:
resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-body-length-browser@2.1.1:
+ resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==}
+ dependencies:
+ tslib: 2.6.2
dev: false
- /@smithy/util-body-length-node@2.0.0:
- resolution: {integrity: sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==}
+ /@smithy/util-body-length-node@2.1.0:
+ resolution: {integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-body-length-node@2.2.1:
+ resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==}
engines: {node: '>=14.0.0'}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@smithy/util-buffer-from@2.0.0:
resolution: {integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@smithy/is-array-buffer': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-buffer-from@2.1.1:
+ resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/is-array-buffer': 2.1.1
+ tslib: 2.6.2
dev: false
/@smithy/util-config-provider@2.0.0:
resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-config-provider@2.2.1:
+ resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ tslib: 2.6.2
dev: false
- /@smithy/util-defaults-mode-browser@2.0.3:
- resolution: {integrity: sha512-t9cirP55wYeSfDjjvPHSjNiuZj3wc9W3W3fjLXaVzuKKlKX98B9Vj7QM9WHJnFjJdsrYEwolLA8GVdqZeHOkHg==}
+ /@smithy/util-defaults-mode-browser@2.0.14:
+ resolution: {integrity: sha512-NupG7SWUucm3vJrvlpt9jG1XeoPJphjcivgcUUXhDJbUPy4F04LhlTiAhWSzwlCNcF8OJsMvZ/DWbpYD3pselw==}
+ engines: {node: '>= 10.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/property-provider': 2.0.12
+ '@smithy/smithy-client': 2.1.10
+ '@smithy/types': 2.3.5
+ bowser: 2.11.0
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-defaults-mode-browser@2.1.1:
+ resolution: {integrity: sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==}
engines: {node: '>= 10.0.0'}
dependencies:
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
+ '@smithy/property-provider': 2.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
bowser: 2.11.0
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
- /@smithy/util-defaults-mode-node@2.0.3:
- resolution: {integrity: sha512-Gca+fL0h+tl8cbvoLDMWCVzs1CL4jWLWvz/I6MCYZzaEAKkmd1qO4kPzBeGaI6hGA/IbrlWCFg7L+MTPzLwzfg==}
+ /@smithy/util-defaults-mode-node@2.0.18:
+ resolution: {integrity: sha512-+3jMom/b/Cdp21tDnY4vKu249Al+G/P0HbRbct7/aSZDlROzv1tksaYukon6UUv7uoHn+/McqnsvqZHLlqvQ0g==}
engines: {node: '>= 10.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/config-resolver': 2.0.3
- '@smithy/credential-provider-imds': 2.0.3
- '@smithy/node-config-provider': 2.0.3
- '@smithy/property-provider': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/config-resolver': 2.0.14
+ '@smithy/credential-provider-imds': 2.0.16
+ '@smithy/node-config-provider': 2.1.1
+ '@smithy/property-provider': 2.0.12
+ '@smithy/smithy-client': 2.1.10
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-defaults-mode-node@2.1.1:
+ resolution: {integrity: sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==}
+ engines: {node: '>= 10.0.0'}
+ dependencies:
+ '@smithy/config-resolver': 2.1.1
+ '@smithy/credential-provider-imds': 2.2.1
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/property-provider': 2.1.1
+ '@smithy/smithy-client': 2.3.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
+ dev: false
+
+ /@smithy/util-endpoints@1.1.1:
+ resolution: {integrity: sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==}
+ engines: {node: '>= 14.0.0'}
+ dependencies:
+ '@smithy/node-config-provider': 2.2.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@smithy/util-hex-encoding@2.0.0:
resolution: {integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-hex-encoding@2.1.1:
+ resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ tslib: 2.6.2
dev: false
- /@smithy/util-middleware@2.0.0:
- resolution: {integrity: sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==}
+ /@smithy/util-middleware@2.0.4:
+ resolution: {integrity: sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==}
+ engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-middleware@2.1.1:
+ resolution: {integrity: sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==}
engines: {node: '>=14.0.0'}
dependencies:
- tslib: 2.6.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/util-retry@2.0.0:
- resolution: {integrity: sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==}
+ /@smithy/util-retry@2.0.4:
+ resolution: {integrity: sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==}
+ engines: {node: '>= 14.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@smithy/service-error-classification': 2.0.4
+ '@smithy/types': 2.3.5
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-retry@2.1.1:
+ resolution: {integrity: sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==}
engines: {node: '>= 14.0.0'}
dependencies:
- '@smithy/service-error-classification': 2.0.0
- tslib: 2.6.1
+ '@smithy/service-error-classification': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
- /@smithy/util-stream@2.0.3:
- resolution: {integrity: sha512-+8n2vIyp6o9KHGey0PoGatcDthwVb7C/EzWfqojXrHhZOXy6l+hnWlfoF8zVerKYH2CUtravdJKRTy7vdkOXfQ==}
+ /@smithy/util-stream@2.0.15:
+ resolution: {integrity: sha512-A/hkYJPH2N5MCWYvky4tTpQihpYAEzqnUfxDyG3L/yMndy/2sLvxnyQal9Opuj1e9FiKSTeMyjnU9xxZGs0mRw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
- '@smithy/fetch-http-handler': 2.0.3
- '@smithy/node-http-handler': 2.0.3
- '@smithy/types': 2.2.0
+ '@smithy/fetch-http-handler': 2.2.2
+ '@smithy/node-http-handler': 2.1.7
+ '@smithy/types': 2.3.5
'@smithy/util-base64': 2.0.0
'@smithy/util-buffer-from': 2.0.0
'@smithy/util-hex-encoding': 2.0.0
'@smithy/util-utf8': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-stream@2.1.1:
+ resolution: {integrity: sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/fetch-http-handler': 2.4.1
+ '@smithy/node-http-handler': 2.3.1
+ '@smithy/types': 2.9.1
+ '@smithy/util-base64': 2.1.1
+ '@smithy/util-buffer-from': 2.1.1
+ '@smithy/util-hex-encoding': 2.1.1
+ '@smithy/util-utf8': 2.1.1
+ tslib: 2.6.2
dev: false
/@smithy/util-uri-escape@2.0.0:
resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
+ dependencies:
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-uri-escape@2.1.1:
+ resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==}
+ engines: {node: '>=14.0.0'}
dependencies:
- tslib: 2.6.1
+ tslib: 2.6.2
dev: false
/@smithy/util-utf8@2.0.0:
resolution: {integrity: sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==}
engines: {node: '>=14.0.0'}
+ requiresBuild: true
dependencies:
'@smithy/util-buffer-from': 2.0.0
- tslib: 2.6.1
+ tslib: 2.6.2
+ optional: true
+
+ /@smithy/util-utf8@2.1.1:
+ resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ '@smithy/util-buffer-from': 2.1.1
+ tslib: 2.6.2
dev: false
- /@smithy/util-waiter@2.0.3:
- resolution: {integrity: sha512-3/Fzqoyecvh4cNvcHQDl1GznskXjGc9uZ8N6aoaPCKfsctgZad/J13xg8WC1UXc3PwKocHtuUvz0dRFDLaBppQ==}
+ /@smithy/util-waiter@2.1.1:
+ resolution: {integrity: sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==}
engines: {node: '>=14.0.0'}
dependencies:
- '@smithy/abort-controller': 2.0.3
- '@smithy/types': 2.2.0
- tslib: 2.6.1
+ '@smithy/abort-controller': 2.1.1
+ '@smithy/types': 2.9.1
+ tslib: 2.6.2
dev: false
/@socket.io/component-emitter@3.1.0:
@@ -4175,6 +4680,7 @@ packages:
/@tootallnate/once@2.0.0:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
+ requiresBuild: true
dev: false
optional: true
@@ -4264,6 +4770,7 @@ packages:
/@types/glob@8.1.0:
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
+ requiresBuild: true
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 20.4.7
@@ -4289,16 +4796,19 @@ packages:
/@types/linkify-it@3.0.2:
resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==}
+ requiresBuild: true
dev: false
optional: true
/@types/long@4.0.2:
resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
+ requiresBuild: true
dev: false
optional: true
/@types/markdown-it@12.2.3:
resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==}
+ requiresBuild: true
dependencies:
'@types/linkify-it': 3.0.2
'@types/mdurl': 1.0.2
@@ -4307,6 +4817,7 @@ packages:
/@types/mdurl@1.0.2:
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
+ requiresBuild: true
dev: false
optional: true
@@ -4316,12 +4827,12 @@ packages:
/@types/minimatch@5.1.2:
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ requiresBuild: true
dev: false
optional: true
/@types/node@20.4.7:
resolution: {integrity: sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==}
- dev: false
/@types/object.omit@3.0.0:
resolution: {integrity: sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==}
@@ -4369,6 +4880,7 @@ packages:
/@types/rimraf@3.0.2:
resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==}
+ requiresBuild: true
dependencies:
'@types/glob': 8.1.0
'@types/node': 20.4.7
@@ -4408,14 +4920,12 @@ packages:
/@types/webidl-conversions@7.0.0:
resolution: {integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==}
- dev: false
/@types/whatwg-url@8.2.2:
resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==}
dependencies:
'@types/node': 20.4.7
'@types/webidl-conversions': 7.0.0
- dev: false
/abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
@@ -4424,6 +4934,7 @@ packages:
/abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
+ requiresBuild: true
dependencies:
event-target-shim: 5.0.1
dev: false
@@ -4504,6 +5015,7 @@ packages:
/agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
+ requiresBuild: true
dependencies:
debug: 4.3.4
transitivePeerDependencies:
@@ -4591,6 +5103,7 @@ packages:
/arrify@2.0.1:
resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
engines: {node: '>=8'}
+ requiresBuild: true
dev: false
optional: true
@@ -4613,6 +5126,7 @@ packages:
/async-retry@1.3.3:
resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+ requiresBuild: true
dependencies:
retry: 0.13.1
dev: false
@@ -4700,7 +5214,6 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: false
/base64id@2.0.0:
resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
@@ -4709,6 +5222,7 @@ packages:
/bignumber.js@9.1.1:
resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==}
+ requiresBuild: true
dev: false
optional: true
@@ -4727,6 +5241,7 @@ packages:
/bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+ requiresBuild: true
dev: false
optional: true
@@ -4756,7 +5271,7 @@ packages:
/bowser@2.11.0:
resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
- dev: false
+ requiresBuild: true
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
@@ -4795,7 +5310,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
buffer: 5.7.1
- dev: false
/buffer-equal-constant-time@1.0.1:
resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
@@ -4810,7 +5324,6 @@ packages:
dependencies:
base64-js: 1.5.1
ieee754: 1.1.13
- dev: false
/builtin-modules@3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
@@ -4853,6 +5366,7 @@ packages:
/catharsis@0.9.0:
resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==}
engines: {node: '>= 10'}
+ requiresBuild: true
dependencies:
lodash: 4.17.21
dev: false
@@ -4905,7 +5419,7 @@ packages:
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
/ci@2.2.0:
@@ -4940,6 +5454,7 @@ packages:
/cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
@@ -5032,6 +5547,7 @@ packages:
/compressible@2.0.18:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'}
+ requiresBuild: true
dependencies:
mime-db: 1.52.0
dev: false
@@ -5344,6 +5860,7 @@ packages:
/duplexify@4.1.2:
resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==}
+ requiresBuild: true
dependencies:
end-of-stream: 1.4.4
inherits: 2.0.4
@@ -5380,6 +5897,7 @@ packages:
/end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ requiresBuild: true
dependencies:
once: 1.4.0
dev: false
@@ -5412,11 +5930,13 @@ packages:
/ent@2.2.0:
resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==}
+ requiresBuild: true
dev: false
optional: true
/entities@2.1.0:
resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
+ requiresBuild: true
dev: false
optional: true
@@ -5451,6 +5971,7 @@ packages:
/escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'}
+ requiresBuild: true
dev: false
optional: true
@@ -5462,6 +5983,7 @@ packages:
resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==}
engines: {node: '>=4.0'}
hasBin: true
+ requiresBuild: true
dependencies:
esprima: 4.0.1
estraverse: 4.3.0
@@ -5575,6 +6097,7 @@ packages:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
+ requiresBuild: true
dev: false
optional: true
@@ -5593,6 +6116,7 @@ packages:
/estraverse@4.3.0:
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
engines: {node: '>=4.0'}
+ requiresBuild: true
dev: false
optional: true
@@ -5620,6 +6144,7 @@ packages:
/event-target-shim@5.0.1:
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines: {node: '>=6'}
+ requiresBuild: true
dev: false
optional: true
@@ -5704,6 +6229,7 @@ packages:
/extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ requiresBuild: true
dev: false
optional: true
@@ -5732,19 +6258,21 @@ packages:
/fast-text-encoding@1.0.6:
resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==}
+ requiresBuild: true
dev: false
optional: true
/fast-xml-parser@4.2.5:
resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==}
hasBin: true
+ requiresBuild: true
dependencies:
strnum: 1.0.5
- dev: false
/fast-xml-parser@4.2.7:
resolution: {integrity: sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==}
hasBin: true
+ requiresBuild: true
dependencies:
strnum: 1.0.5
dev: false
@@ -5839,7 +6367,7 @@ packages:
node-forge: 1.3.1
uuid: 9.0.0
optionalDependencies:
- '@google-cloud/firestore': 6.7.0
+ '@google-cloud/firestore': 6.8.0
'@google-cloud/storage': 6.12.0
transitivePeerDependencies:
- encoding
@@ -5909,8 +6437,8 @@ packages:
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
@@ -5925,6 +6453,7 @@ packages:
/gaxios@5.1.3:
resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
extend: 3.0.2
https-proxy-agent: 5.0.1
@@ -5939,6 +6468,7 @@ packages:
/gcp-metadata@5.3.0:
resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
gaxios: 5.1.3
json-bigint: 1.0.0
@@ -6010,6 +6540,7 @@ packages:
/glob@8.1.0:
resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -6044,6 +6575,7 @@ packages:
/google-auth-library@8.9.0:
resolution: {integrity: sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
arrify: 2.0.1
base64-js: 1.5.1
@@ -6064,6 +6596,7 @@ packages:
resolution: {integrity: sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==}
engines: {node: '>=12'}
hasBin: true
+ requiresBuild: true
dependencies:
'@grpc/grpc-js': 1.8.21
'@grpc/proto-loader': 0.7.8
@@ -6090,6 +6623,7 @@ packages:
resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==}
engines: {node: '>=12.0.0'}
hasBin: true
+ requiresBuild: true
dependencies:
node-forge: 1.3.1
dev: false
@@ -6097,6 +6631,7 @@ packages:
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ requiresBuild: true
dev: false
optional: true
@@ -6106,6 +6641,7 @@ packages:
/gtoken@6.1.2:
resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==}
engines: {node: '>=12.0.0'}
+ requiresBuild: true
dependencies:
gaxios: 5.1.3
google-p12-pem: 4.0.1
@@ -6182,6 +6718,7 @@ packages:
/http-proxy-agent@5.0.0:
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
engines: {node: '>= 6'}
+ requiresBuild: true
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
@@ -6194,6 +6731,7 @@ packages:
/https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
+ requiresBuild: true
dependencies:
agent-base: 6.0.2
debug: 4.3.4
@@ -6217,7 +6755,6 @@ packages:
/ieee754@1.1.13:
resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==}
- dev: false
/ignore-by-default@1.0.1:
resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
@@ -6249,7 +6786,6 @@ packages:
/ip@2.0.0:
resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
- dev: false
/ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
@@ -6338,6 +6874,7 @@ packages:
/is-stream-ended@0.1.4:
resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==}
+ requiresBuild: true
dev: false
optional: true
@@ -6383,6 +6920,7 @@ packages:
/js2xmlparser@4.0.2:
resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==}
+ requiresBuild: true
dependencies:
xmlcreate: 2.0.4
dev: false
@@ -6392,6 +6930,7 @@ packages:
resolution: {integrity: sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==}
engines: {node: '>=12.0.0'}
hasBin: true
+ requiresBuild: true
dependencies:
'@babel/parser': 7.22.7
'@jsdoc/salty': 0.2.5
@@ -6424,6 +6963,7 @@ packages:
/json-bigint@1.0.0:
resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}
+ requiresBuild: true
dependencies:
bignumber.js: 9.1.1
dev: false
@@ -6479,6 +7019,7 @@ packages:
/jwa@2.0.0:
resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==}
+ requiresBuild: true
dependencies:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
@@ -6509,6 +7050,7 @@ packages:
/jws@4.0.0:
resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
+ requiresBuild: true
dependencies:
jwa: 2.0.0
safe-buffer: 5.2.1
@@ -6527,6 +7069,7 @@ packages:
/klaw@3.0.0:
resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==}
+ requiresBuild: true
dependencies:
graceful-fs: 4.2.11
dev: false
@@ -6546,6 +7089,7 @@ packages:
/levn@0.3.0:
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
engines: {node: '>= 0.8.0'}
+ requiresBuild: true
dependencies:
prelude-ls: 1.1.2
type-check: 0.3.2
@@ -6569,6 +7113,7 @@ packages:
/linkify-it@3.0.3:
resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
+ requiresBuild: true
dependencies:
uc.micro: 1.0.6
dev: false
@@ -6600,6 +7145,7 @@ packages:
/lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+ requiresBuild: true
dev: false
optional: true
@@ -6678,11 +7224,13 @@ packages:
/long@4.0.0:
resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
+ requiresBuild: true
dev: false
optional: true
/long@5.2.3:
resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
+ requiresBuild: true
dev: false
optional: true
@@ -6745,6 +7293,7 @@ packages:
/markdown-it-anchor@8.6.7(@types/markdown-it@12.2.3)(markdown-it@12.3.2):
resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==}
+ requiresBuild: true
peerDependencies:
'@types/markdown-it': '*'
markdown-it: '*'
@@ -6757,6 +7306,7 @@ packages:
/markdown-it@12.3.2:
resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==}
hasBin: true
+ requiresBuild: true
dependencies:
argparse: 2.0.1
entities: 2.1.0
@@ -6781,6 +7331,7 @@ packages:
resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==}
engines: {node: '>= 12'}
hasBin: true
+ requiresBuild: true
dev: false
optional: true
@@ -6799,7 +7350,7 @@ packages:
/memory-pager@1.5.0:
resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==}
- dev: false
+ requiresBuild: true
optional: true
/merge-descriptors@1.0.1:
@@ -6851,6 +7402,7 @@ packages:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
engines: {node: '>=10.0.0'}
hasBin: true
+ requiresBuild: true
dev: false
optional: true
@@ -6878,6 +7430,7 @@ packages:
/minimatch@5.1.6:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
+ requiresBuild: true
dependencies:
brace-expansion: 2.0.1
dev: false
@@ -6885,6 +7438,7 @@ packages:
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ requiresBuild: true
dev: false
optional: true
@@ -6892,6 +7446,7 @@ packages:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
+ requiresBuild: true
dev: false
optional: true
@@ -6932,7 +7487,6 @@ packages:
dependencies:
'@types/whatwg-url': 8.2.2
whatwg-url: 11.0.0
- dev: false
/mongodb@4.17.1:
resolution: {integrity: sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==}
@@ -6942,11 +7496,10 @@ packages:
mongodb-connection-string-url: 2.6.0
socks: 2.7.1
optionalDependencies:
- '@aws-sdk/credential-providers': 3.385.0
- '@mongodb-js/saslprep': 1.1.1
+ '@aws-sdk/credential-providers': 3.427.0
+ '@mongodb-js/saslprep': 1.1.0
transitivePeerDependencies:
- aws-crt
- dev: false
/mongoose@6.12.0:
resolution: {integrity: sha512-sd/q83C6TBRPBrrD2A/POSbA/exbCFM2WOuY7Lf2JuIJFlHFG39zYSDTTAEiYlzIfahNOLmXPxBGFxdAch41Mw==}
@@ -7012,6 +7565,7 @@ packages:
/node-fetch@2.6.12:
resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
engines: {node: 4.x || >=6.0.0}
+ requiresBuild: true
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
@@ -7089,6 +7643,7 @@ packages:
/object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
+ requiresBuild: true
dev: false
optional: true
@@ -7142,6 +7697,7 @@ packages:
/optionator@0.8.3:
resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
engines: {node: '>= 0.8.0'}
+ requiresBuild: true
dependencies:
deep-is: 0.1.4
fast-levenshtein: 2.0.6
@@ -7310,6 +7866,7 @@ packages:
/prelude-ls@1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
engines: {node: '>= 0.8.0'}
+ requiresBuild: true
dev: false
optional: true
@@ -7471,8 +8028,9 @@ packages:
/proto3-json-serializer@1.1.1:
resolution: {integrity: sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==}
engines: {node: '>=12.0.0'}
+ requiresBuild: true
dependencies:
- protobufjs: 7.2.4
+ protobufjs: 7.2.5
dev: false
optional: true
@@ -7480,6 +8038,7 @@ packages:
resolution: {integrity: sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==}
engines: {node: '>=12.0.0'}
hasBin: true
+ requiresBuild: true
peerDependencies:
protobufjs: ^7.0.0
dependencies:
@@ -7517,6 +8076,26 @@ packages:
dev: false
optional: true
+ /protobufjs@7.2.5:
+ resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==}
+ engines: {node: '>=12.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/node': 20.4.7
+ long: 5.2.3
+ dev: false
+ optional: true
+
/proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -7886,6 +8465,7 @@ packages:
/requizzle@0.2.4:
resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==}
+ requiresBuild: true
dependencies:
lodash: 4.17.21
dev: false
@@ -7923,6 +8503,7 @@ packages:
/retry-request@5.0.2:
resolution: {integrity: sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
debug: 4.3.4
extend: 3.0.2
@@ -7934,6 +8515,7 @@ packages:
/retry@0.13.1:
resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
engines: {node: '>= 4'}
+ requiresBuild: true
dev: false
optional: true
@@ -7965,7 +8547,7 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: false
/rope-sequence@1.3.4:
@@ -8117,7 +8699,6 @@ packages:
/smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
- dev: false
/socket.io-adapter@2.5.2:
resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==}
@@ -8161,7 +8742,6 @@ packages:
dependencies:
ip: 2.0.0
smart-buffer: 4.2.0
- dev: false
/source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
@@ -8187,9 +8767,9 @@ packages:
/sparse-bitfield@3.0.3:
resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==}
+ requiresBuild: true
dependencies:
memory-pager: 1.5.0
- dev: false
optional: true
/stack-trace@0.0.10:
@@ -8203,6 +8783,7 @@ packages:
/stream-events@1.0.5:
resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==}
+ requiresBuild: true
dependencies:
stubs: 3.0.0
dev: false
@@ -8210,6 +8791,7 @@ packages:
/stream-shift@1.0.1:
resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
+ requiresBuild: true
dev: false
optional: true
@@ -8239,10 +8821,11 @@ packages:
/strnum@1.0.5:
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
- dev: false
+ requiresBuild: true
/stubs@3.0.0:
resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==}
+ requiresBuild: true
dev: false
optional: true
@@ -8360,6 +8943,7 @@ packages:
/teeny-request@8.0.3:
resolution: {integrity: sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
http-proxy-agent: 5.0.0
https-proxy-agent: 5.0.1
@@ -8416,6 +9000,7 @@ packages:
/tmp@0.2.1:
resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
engines: {node: '>=8.17.0'}
+ requiresBuild: true
dependencies:
rimraf: 3.0.2
dev: false
@@ -8446,6 +9031,7 @@ packages:
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ requiresBuild: true
dev: false
optional: true
@@ -8454,7 +9040,6 @@ packages:
engines: {node: '>=12'}
dependencies:
punycode: 2.3.0
- dev: false
/triple-beam@1.4.1:
resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
@@ -8463,15 +9048,15 @@ packages:
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- dev: false
+ requiresBuild: true
- /tslib@2.6.1:
- resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==}
- dev: false
+ /tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
/type-check@0.3.2:
resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
engines: {node: '>= 0.8.0'}
+ requiresBuild: true
dependencies:
prelude-ls: 1.1.2
dev: false
@@ -8513,6 +9098,7 @@ packages:
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
engines: {node: '>=0.8.0'}
hasBin: true
+ requiresBuild: true
dev: false
optional: true
@@ -8529,6 +9115,7 @@ packages:
/underscore@1.13.6:
resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==}
+ requiresBuild: true
dev: false
optional: true
@@ -8617,7 +9204,6 @@ packages:
/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
- dev: false
/uuid@9.0.0:
resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
@@ -8660,13 +9246,13 @@ packages:
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ requiresBuild: true
dev: false
optional: true
/webidl-conversions@7.0.0:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
- dev: false
/websocket-driver@0.7.4:
resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
@@ -8688,10 +9274,10 @@ packages:
dependencies:
tr46: 3.0.0
webidl-conversions: 7.0.0
- dev: false
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ requiresBuild: true
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
@@ -8747,6 +9333,7 @@ packages:
/word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ requiresBuild: true
dev: false
optional: true
@@ -8780,6 +9367,7 @@ packages:
/xmlcreate@2.0.4:
resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==}
+ requiresBuild: true
dev: false
optional: true
@@ -8820,6 +9408,7 @@ packages:
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+ requiresBuild: true
dev: false
optional: true
@@ -8849,6 +9438,7 @@ packages:
/yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ requiresBuild: true
dependencies:
cliui: 8.0.1
escalade: 3.1.1
@@ -8863,3 +9453,4 @@ packages:
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ requiresBuild: true
diff --git a/sampleGenerator b/sampleGenerator
deleted file mode 160000
index bd4329c1..00000000
--- a/sampleGenerator
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit bd4329c15405a09c94e7b78e19ff296b4c2d0fb3
diff --git a/scripts/profileImageUrlUpdater.js b/scripts/profileImageUrlUpdater.js
new file mode 100644
index 00000000..78ebe778
--- /dev/null
+++ b/scripts/profileImageUrlUpdater.js
@@ -0,0 +1,36 @@
+// Issue #173을 해결하기 위한 DB 마이그레이션 스크립트입니다.
+// https://github.com/sparcs-kaist/taxi-back/issues/173
+
+const { MongoClient } = require("mongodb");
+const { mongo: mongoUrl, aws: awsEnv } = require("../loadenv");
+
+const time = Date.now();
+
+const client = new MongoClient(mongoUrl);
+const db = client.db("taxi");
+const users = db.collection("users");
+
+async function run() {
+ try {
+ for await (const doc of users.find()) {
+ // 이미 변환이 완료된 경우에는 Pass합니다.
+ if (doc.profileImageUrl.startsWith(awsEnv.s3Url)) continue;
+
+ await users.findOneAndUpdate(
+ { _id: doc._id },
+ {
+ $set: {
+ profileImageUrl: `${awsEnv.s3Url}/profile-img/${doc.profileImageUrl}?token=${time}`,
+ },
+ }
+ );
+ }
+ } catch (err) {
+ console.log(err);
+ } finally {
+ await client.close();
+ }
+}
+run().then(() => {
+ console.log("Done!");
+});
diff --git a/src/middlewares/session.js b/src/middlewares/session.js
index c4bdec63..5412ba1c 100644
--- a/src/middlewares/session.js
+++ b/src/middlewares/session.js
@@ -1,30 +1,14 @@
const expressSession = require("express-session");
-const redis = require("redis");
-const MongoStore = require("connect-mongo");
-const RedisStore = require("connect-redis")(expressSession);
-const {
- redis: redisUrl,
- mongo: mongoUrl,
- session: sessionSecret,
-} = require("../../loadenv");
-const logger = require("../modules/logger");
-
-// 환경변수 REDIS_PATH 유무에 따라 session 저장 방식이 변경됩니다.
-let sessionStore = null;
-if (redisUrl) {
- const client = redis.createClient({
- url: redisUrl,
- legacyMode: true,
- });
- client.connect().catch(logger.error);
- sessionStore = new RedisStore({ client });
-} else {
- sessionStore = MongoStore.create({ mongoUrl });
-}
+const { nodeEnv, session: sessionConfig } = require("../../loadenv");
+const sessionStore = require("../modules/stores/sessionStore");
module.exports = expressSession({
- secret: sessionSecret,
+ secret: sessionConfig.secret,
resave: false,
saveUninitialized: false,
store: sessionStore,
+ cookie: {
+ maxAge: sessionConfig.expiry,
+ secure: nodeEnv === "production",
+ },
});
diff --git a/src/modules/auths/login.js b/src/modules/auths/login.js
index 8181c991..9c72434f 100644
--- a/src/modules/auths/login.js
+++ b/src/modules/auths/login.js
@@ -1,14 +1,15 @@
+const { session: sessionConfig } = require("../../../loadenv");
const logger = require("../logger");
const getLoginInfo = (req) => {
if (req.session.loginInfo) {
const { id, sid, oid, name, time } = req.session.loginInfo;
const timeFlow = Date.now() - time;
- if (timeFlow > 14 * 24 * 3600 * 1000 /* 14일 */) {
- // if (timeFlow > 1 * 3600 * 1000 /* 1시간 */) {
+ // 14일이 지난 세션에 대해서는 로그인 정보를 반환하지 않습니다.
+ // 세션은 새로운 요청 시 갱신되지 않습니다.
+ if (timeFlow > sessionConfig.expiry) {
return { id: undefined, sid: undefined, oid: undefined, name: undefined };
}
- req.session.loginInfo.time = Date.now();
return { id, sid, oid, name };
}
return { id: undefined, sid: undefined, oid: undefined, name: undefined };
diff --git a/src/modules/modifyProfile.js b/src/modules/modifyProfile.js
index 0d15bd58..e8702f98 100755
--- a/src/modules/modifyProfile.js
+++ b/src/modules/modifyProfile.js
@@ -1,4 +1,5 @@
const crypto = require("crypto");
+const aws = require("./stores/aws");
const nouns = [
"재료역학",
@@ -81,7 +82,7 @@ const generateNickname = (id) => {
// 기존 프로필 사진의 URI 중 하나를 무작위로 선택해 반환합니다.
const generateProfileImageUrl = () => {
const ridx = crypto.randomInt(defaultProfile.length);
- return `default/${defaultProfile[ridx]}`;
+ return aws.getS3Url(`/profile-img/default/${defaultProfile[ridx]}`);
};
// 사용자의 이름과 성을 받아, 한글인지 영어인지에 따라 전체 이름을 반환합니다.
diff --git a/src/modules/socket.js b/src/modules/socket.js
index bca99161..38da23d5 100644
--- a/src/modules/socket.js
+++ b/src/modules/socket.js
@@ -219,9 +219,11 @@ const emitUpdateEvent = async (io, roomId) => {
throw new IllegalArgumentsException();
}
- part.forEach(({ user }) => io.in(`user-${user}`).emit("chat_update"), {
- roomId,
- });
+ part.forEach(({ user }) =>
+ io.in(`user-${user}`).emit("chat_update", {
+ roomId,
+ })
+ );
return true;
} catch (err) {
@@ -233,37 +235,13 @@ const emitUpdateEvent = async (io, roomId) => {
// https://socket.io/how-to/use-with-express-session 참고
const startSocketServer = (server) => {
const io = new Server(server, {
- allowRequest: (req, callback) => {
- const fakeRes = {
- getHeader() {
- return [];
- },
- setHeader(key, values) {
- req.cookieHolder = values[0];
- },
- writeHead() {},
- };
- sessionMiddleware(req, fakeRes, () => {
- if (req.session) {
- fakeRes.writeHead();
- req.session.save();
- }
- callback(null, true);
- });
- },
cors: {
origin: corsWhiteList,
methods: ["GET", "POST"],
credentials: true,
},
});
-
- io.engine.on("initial_headers", (headers, req) => {
- if (req.cookieHolder) {
- headers["set-cookie"] = req.cookieHolder;
- delete req.cookieHolder;
- }
- });
+ io.engine.use(sessionMiddleware);
io.on("connection", (socket) => {
try {
diff --git a/src/modules/stores/mongo.js b/src/modules/stores/mongo.js
index f05f266a..695845fc 100755
--- a/src/modules/stores/mongo.js
+++ b/src/modules/stores/mongo.js
@@ -1,7 +1,6 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
-const { mongo: mongoUrl } = require("../../../loadenv");
const logger = require("../logger");
const userSchema = Schema({
@@ -184,23 +183,27 @@ database.on("error", function (err) {
logger.error("데이터베이스 연결 에러 발생: " + err);
mongoose.disconnect();
});
-database.on("disconnected", function () {
- // 데이터베이스 연결이 끊어지면 5초 후 재연결을 시도합니다.
- logger.error("데이터베이스와 연결이 끊어졌습니다!");
- setTimeout(() => {
- mongoose.connect(mongoUrl, {
- useNewUrlParser: true,
- useUnifiedTopology: true,
- });
- }, 5000);
-});
-const connectDatabase = () =>
+const connectDatabase = (mongoUrl) => {
+ database.on("disconnected", function () {
+ // 데이터베이스 연결이 끊어지면 5초 후 재연결을 시도합니다.
+ logger.error("데이터베이스와 연결이 끊어졌습니다!");
+ setTimeout(() => {
+ mongoose.connect(mongoUrl, {
+ useNewUrlParser: true,
+ useUnifiedTopology: true,
+ });
+ }, 5000);
+ });
+
mongoose.connect(mongoUrl, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
+ return database;
+};
+
module.exports = {
connectDatabase,
userModel: mongoose.model("User", userSchema),
diff --git a/src/modules/stores/sessionStore.js b/src/modules/stores/sessionStore.js
new file mode 100644
index 00000000..fca4da55
--- /dev/null
+++ b/src/modules/stores/sessionStore.js
@@ -0,0 +1,37 @@
+const expressSession = require("express-session");
+const redis = require("redis");
+const MongoStore = require("connect-mongo");
+const RedisStore = require("connect-redis")(expressSession);
+const {
+ redis: redisUrl,
+ mongo: mongoUrl,
+ session: sessionConfig,
+} = require("../../../loadenv");
+const logger = require("../logger");
+
+const getSessionStore = (redisUrl) => {
+ // 환경변수 REDIS_PATH 유무에 따라 session 저장 방식이 변경됩니다.
+ if (redisUrl) {
+ const client = redis.createClient({
+ url: redisUrl,
+ legacyMode: true,
+ });
+
+ // redis client 연결 성공 시 로그를 출력합니다.
+ client.on("ready", () => {
+ logger.info("Redis session store is connected!");
+ });
+
+ // redis client 에러 발생 시 1초에 두 번 재연결을 시도합니다.
+ client.on("error", (err) => {
+ logger.error(err);
+ });
+
+ client.connect().catch(logger.error);
+ return new RedisStore({ client, ttl: sessionConfig.expiry });
+ } else {
+ return MongoStore.create({ mongoUrl });
+ }
+};
+
+module.exports = getSessionStore(redisUrl);
diff --git a/src/routes/docs/auth.js b/src/routes/docs/auth.js
new file mode 100644
index 00000000..a5d6eae6
--- /dev/null
+++ b/src/routes/docs/auth.js
@@ -0,0 +1,427 @@
+const tag = "auth";
+const apiPrefix = "/auth";
+
+const authDocs = {};
+authDocs[`${apiPrefix}/sparcssso`] = {
+ get: {
+ tags: [tag],
+ summary: "SPARCS SSO 로그인 페이지로 리다이렉트",
+ description:
+ "Prod의 경우 SSO 로그인 페이지로, Dev의 경우 replace 페이지로 리다이렉트함.",
+ parameters: [
+ {
+ in: "query",
+ name: "redirect",
+ schema: {
+ type: "string",
+ },
+ description: "리다이렉트 URI",
+ },
+ {
+ in: "query",
+ name: "isApp",
+ schema: {
+ type: "boolean",
+ },
+ description: "앱인지 여부",
+ },
+ ],
+ responses: {
+ 302: {
+ description: "SPARCS SSO 로그인 페이지로 리다이렉트",
+ headers: {
+ Location: {
+ type: "string",
+ description: "SPARCS SSO 로그인 페이지",
+ format: "uri",
+ },
+ },
+ },
+ },
+ },
+};
+
+authDocs[`${apiPrefix}/sparcssso/callback`] = {
+ get: {
+ tags: [tag],
+ summary: "SPARCS SSO 로그인 페이지에서 다시 리다이렉트를 처리",
+ description:
+ "SPARCS SSO 로그인 페이지로부터 프론트로 다시 리다이렉트되었을 때 로그인을 시도함.",
+ parameters: [
+ {
+ in: "query",
+ name: "code",
+ schema: {
+ type: "string",
+ },
+ description: "SSO server에서 부여한 유저 정보를 위한 code",
+ },
+ {
+ in: "query",
+ name: "state",
+ schema: {
+ type: "string",
+ },
+ description: "login 성공 여부 확인을 위한 state",
+ },
+ ],
+ responses: {
+ 302: {
+ description:
+ "로그인 성공 후 페이지 URI로, 혹은 로그인 실패 URI로 리다이렉트",
+ headers: {
+ Location: {
+ type: "string",
+ description: "로그인 성공 후 페이지 URI, 혹은 로그인 실패 URI",
+ format: "uri",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "SparcsssoCallbackHandler : invalid request",
+ },
+ },
+ },
+ },
+ },
+};
+
+authDocs[`${apiPrefix}/logout`] = {
+ get: {
+ tags: [tag],
+ summary: "세션 삭제 및 사용자 로그아웃",
+ description: "세션 삭제 및 사용자 로그아웃",
+ parameters: [
+ {
+ in: "query",
+ name: "redirect",
+ schema: {
+ type: "string",
+ },
+ description: "로그아웃 후 리다이렉트 URI",
+ },
+ ],
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ ssoLogoutUrl: {
+ type: "string",
+ description: "SSO 로그아웃 URL",
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Auth/logout : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+authDocs[`${apiPrefix}/app/token/login`] = {
+ get: {
+ tags: [tag],
+ summary: "Access token을 사용하여 로그인",
+ description: "앱에서 Access Token을 사용하여 로그인 시도",
+ parameters: [
+ {
+ in: "query",
+ name: "accessToken",
+ schema: {
+ type: "string",
+ },
+ description: "만료 되지 않은 유효한 JWT Access Token",
+ },
+ {
+ in: "query",
+ name: "deviceToken",
+ schema: {
+ type: "string",
+ },
+ description: "Device Token",
+ },
+ ],
+ responses: {
+ 200: {
+ description: "성공 메세지",
+ content: {
+ "text/html": {
+ example: "success",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "invalid request",
+ },
+ },
+ },
+ 401: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ message: {
+ type: "string",
+ },
+ },
+ },
+ examples: {
+ "Invalid token": {
+ value: {
+ message: "Invalid token",
+ },
+ },
+ "Expired token": {
+ value: {
+ message: "Expired token",
+ },
+ },
+ "Not Access token": {
+ value: {
+ message: "Not Access token",
+ },
+ },
+ "No corresponding user": {
+ value: {
+ message: "No corresponding user",
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+authDocs[`${apiPrefix}/app/token/refresh`] = {
+ get: {
+ tags: [tag],
+ summary: "만료된 Access Token 갱신",
+ description: "앱에서 Access Token을 Refresh Token을 활용하여 갱신",
+ parameters: [
+ {
+ in: "query",
+ name: "accessToken",
+ schema: {
+ type: "string",
+ },
+ description: "만료된 유효한 JWT Access Token",
+ },
+ {
+ in: "query",
+ name: "refreshToken",
+ schema: {
+ type: "string",
+ },
+ description: "만료되지 않은 유효한 JWT Refresh Token",
+ },
+ ],
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ accessToken: {
+ type: "string",
+ description: "새로운 JWT Access Token",
+ },
+ refreshToken: {
+ type: "string",
+ description: "새로운 Refresh Token",
+ },
+ },
+ },
+ },
+ },
+ },
+ 400: {
+ "text/html": {
+ example: "invalid request",
+ },
+ },
+ 401: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ message: {
+ type: "string",
+ },
+ },
+ },
+ examples: {
+ "Invalid access token": {
+ value: {
+ message: "Invalid access token",
+ },
+ },
+ "Invalid token": {
+ value: {
+ message: "Invalid token",
+ },
+ },
+ "Expired token": {
+ value: {
+ message: "Expired token",
+ },
+ },
+ "Not Refresh token": {
+ value: {
+ message: "Not Refresh token",
+ },
+ },
+ },
+ },
+ },
+ },
+ 501: {
+ content: {
+ "text/html": {
+ example: "server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+authDocs[`${apiPrefix}/app/device`] = {
+ post: {
+ tags: [tag],
+ summary: "기기의 Device Token을 데이터베이스에 등록",
+ description: "App 기기의 Device Token을 데이터베이스에 등록",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ accessToken: {
+ type: "string",
+ description: "만료 되지 않은 유효한 JWT Access Token",
+ },
+ deviceToken: {
+ type: "string",
+ description: "Firebase 라이브러리에서 제공해주는 Device Token",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "성공 메세지",
+ content: {
+ "text/html": {
+ example: "success",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "invalid request",
+ },
+ },
+ },
+ 401: {
+ content: {
+ "text/html": {
+ example: "unauthorized",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "server error",
+ },
+ },
+ },
+ },
+ },
+ delete: {
+ tags: [tag],
+ summary: "기기의 Device Token을 데이터베이스에서 삭제",
+ description: "App 기기의 Device Token을 데이터베이스에 삭제",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ accessToken: {
+ type: "string",
+ description: "만료 되지 않은 유효한 JWT accessToken",
+ },
+ deviceToken: {
+ type: "string",
+ description: "Firebase 라이브러리에서 제공해주는 DeviceToken",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "성공 메세지",
+ content: {
+ "text/html": {
+ example: "success",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "invalid request",
+ },
+ },
+ },
+ 401: {
+ content: {
+ "text/html": {
+ example: "unauthorized",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+module.exports = authDocs;
diff --git a/src/routes/docs/auth.md b/src/routes/docs/auth.md
deleted file mode 100644
index 799ddd01..00000000
--- a/src/routes/docs/auth.md
+++ /dev/null
@@ -1,180 +0,0 @@
-## `/auth` **(for production)**
-
-- 사용자 생성, 로그인, 로그아웃 등 사용자 상태 관리를 지원하는 API.
-- SPARCS SSO를 사용하는 프로덕션 용 API.
-
-### `/sparcssso` **(GET)**
-
-- SPARCS SSO 로그인 페이지로 리다이렉트.
-
-#### URL Parameters
-
-- 없음
-
-#### Response
-
-- SPARCS SSO 로그인 페이지로 리다이렉트.
-
-#### Errors
-
-- 없음
-
-### `/sparcssso/callback` **(GET)**
-
-- SPARCS SSO 로그인 페이지로부터 다시 리다이렉트되었을 때 로그인을 시도함
-
-#### URL Parameters
-
-- state
-- code
-
-#### Response
-
-- DB에 존재하는 id면 로그인 진행 후 프론트엔드의 첫 페이지로 리다이렉트
-- DB에 존재하지 않는 id면 새로운 사용자를 만들고 로그인을 진행한 후 프론트엔드의 첫 페이지로 리다이렉트
-
-#### Errors
-
-- 없음
-
-### `/logout` **(GET)**
-
-- 세션을 삭제하여 사용자를 로그아웃시킴
-
-#### URL Parameters
-
-- 없음
-
-#### Response
-
-```javascript
-{
- ssoLogoutUrl: String, // sso 로그아웃 url
-}
-```
-
-#### Errors
-
-- 500 / "internal server error"
-
-### `/getToken` **(GET)**
-
-- 세션의 로그인 정보를 토큰으로 만들어 반환
-
-#### URL Parameters
-
-- 없음
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: String, //JSON Web Token
-}
-```
-
-#### Errors
-
-- 403 "not logged in"
-
-### `/app/token/generate` **(GET)**
-
-- SPARCSSSO로 로그인을 진행하고 로그인 정보를 담아 ACCESSTOKEN, REFRESHTOKEN을 반환
-
-#### URL Parameters
-
-- None
-
-#### Response
-
-app's deep link
-형식 APP_URI_SCHEME + ://login?accessToken=[ACCESSTOKEN]&refreshToken=[REFRESHTOKEN]
-
-#### Errors
-
-- 없음
-
-### `/app/token/refresh` **(GET)**
-
-- 만료된 access token을 refresh token을 활용하여 갱신
-
-#### URL Parameters
-
-- accessToken / 만료된 유효한 JWT Access Token이어야 함
-- refreshToken / 만료되지 않은 유효한 JWT Refresh Token 이어야 함.
-
-#### Response
-
-```javascript
-{
- accessToken: [newAccessToken], // JSON Web Token
- refreshToken: [newRefreshToken], //JSON Web Token
-}
-```
-
-#### Errors
-
-- 401 / Invalid Access Token
-- 401 / Invalid Token
-- 401 / Expired Token
-- 401 / Not Refresh Token
-- 501 / Server Error
-
-### `/app/token/login` **(GET)**
-
-- access token을 사용하여 로그인
-
-#### URL Parameters
-
-- accessToken / 만료 되지 않은 유효한 JWT accessToken 이어야 함
-
-#### Response
-
-None / 세션 기록
-
-#### Errors
-
-- 401 / Invalid Access Token
-- 401 / Invalid Token
-- 401 / Expired Token
-- 401 / Not Refresh Token
-- 501 / Server Error
-
-### `/app/device` **(POST)**
-
-- 기기의 deviceToken을 데이터베이스에 등록
-
-#### URL Parameters
-
-- accessToken / 만료 되지 않은 유효한 JWT accessToken 이어야 함
-- deviceToken / Firebase 라이브러리에서 제공해주는 DeviceToken 이어야 함
-
-#### Response
-
-None
-
-#### Errors
-
-- 400 / invalid request ( URL Parameters가 누락되어 있음 )
-- 401 / unauthorized ( 토큰이 유효하지 않음 )
-- 500 / server error
-
-### `/app/device` **(DELETE)**
-
-- 기기의 deviceToken을 데이터베이스에서 삭제
-
-#### URL Parameters
-
-- accessToken / 만료 되지 않은 유효한 JWT accessToken 이어야 함
-- deviceToken / Firebase 라이브러리에서 제공해주는 DeviceToken 이어야 함
-
-#### Response
-
-None
-
-#### Errors
-
-- 400 / invalid request ( URL Parameters가 누락되어 있음 )
-- 401 / unauthorized ( 토큰이 유효하지 않음 )
-- 500 / server error
diff --git a/src/routes/docs/chats.js b/src/routes/docs/chats.js
new file mode 100644
index 00000000..97fc1352
--- /dev/null
+++ b/src/routes/docs/chats.js
@@ -0,0 +1,513 @@
+const { objectIdPattern } = require("./utils");
+
+const tag = "chats";
+const apiPrefix = "/chats";
+
+const chatsDocs = {};
+chatsDocs[`${apiPrefix}`] = {
+ post: {
+ tags: [tag],
+ summary: "가장 최근 채팅 가져오기",
+ description: "가장 최근에 도착한 60개의 채팅을 가져옵니다.",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅을 보내는 방의 id",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ value: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ content: {
+ "text/html": {
+ examples: {
+ "소켓 연결 오류": { value: "Chat/ : socket did not connected" },
+ "유저가 방에 참여하지 않음": {
+ value: "Chat/ : user did not participated in the room",
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Chat/ : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+chatsDocs[`${apiPrefix}/load/before`] = {
+ post: {
+ tags: [tag],
+ summary: "특정 시점 이전의 채팅 가져오기",
+ description: "lastMsgDate 이전에 도착한 60개의 채팅을 가져옵니다.",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅을 보내는 방의 id",
+ },
+ lastMsgDate: {
+ type: "string",
+ format: "date-time",
+ description: "이전 채팅을 가져올 특정 시점",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ value: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ content: {
+ "text/html": {
+ examples: {
+ "소켓 연결 오류": {
+ value: "Chat/load/before : socket did not connected",
+ },
+ "유저가 방에 참여하지 않음": {
+ value:
+ "Chat/load/before : user did not participated in the room",
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Chat/load/before : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+chatsDocs[`${apiPrefix}/load/after`] = {
+ post: {
+ tags: [tag],
+ summary: "특정 시점 이후 채팅 가져오기",
+ description: "lastMsgDate 이후에 도착한 60개의 채팅을 가져옵니다.",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅을 보내는 방의 id",
+ },
+ lastMsgDate: {
+ type: "string",
+ format: "date-time",
+ description: "이전 채팅을 가져올 특정 시점",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ value: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ content: {
+ "text/html": {
+ examples: {
+ "소켓 연결 오류": {
+ value: "Chat/load/after : socket did not connected",
+ },
+ "유저가 방에 참여하지 않음": {
+ value:
+ "Chat/load/after : user did not participated in the room",
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Chat/load/after : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+chatsDocs[`${apiPrefix}/send`] = {
+ post: {
+ tags: [tag],
+ summary: "채팅 요청 처리",
+ description: `채팅 요청을 처리합니다.
+ socker 통신을 통하여 같은 방에 있는 user들에게 이 채팅을 전송합니다.
+
+ 채팅 기록은 아래와 같이 구성됩니다.
+
+ Chat {
+ roomId: ObjectId, //방의 objectId
+ type: String, // 메시지 종류 ("text": 일반 메시지, "s3img": S3에 업로드된 이미지, "in": 입장 메시지, "out": 퇴장 메시지, "payment": 결제 메시지, "settlement": 정산 완료 메시지, "account": 계좌 전송 메시지)
+ authorId: ObejctId, //작성자의 objectId
+ content: String, // 메시지 내용 (메시지 종류에 따라 포맷이 상이함)
+ time: String(ISO 8601), // ex) 2024-01-08T01:52:00.000Z
+ isValid: Boolean, // 클라이언트가 보낸 메시지가 유효한 지 여부. 클라이언트가 이미지를 업로드했을 때, 해당 이미지가 제대로 업로드됐는지 확인하기 전까지 이미지를 보여주지 않기 위해 사용됨.
+ }
+ `,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅을 보내는 방의 id",
+ },
+ type: {
+ type: "string",
+ enum: [
+ "text",
+ "s3img",
+ "in",
+ "out",
+ "payment",
+ "settlement",
+ "account",
+ "departure",
+ "arrival",
+ ],
+ description: `채팅 메시지의 유형
+ 일반 text의 경우 *text*, 사진의 경우 *s3img*
+ 기타 종류의 채팅의 경우(입장, 퇴장 메시지 등) 정해진 type의 채팅을 사용`,
+ },
+ content: {
+ type: "string",
+ example: "안녕하세요~!",
+ description: "채팅 메세지의 본문",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ value: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ content: {
+ "text/html": {
+ examples: {
+ "소켓 연결 오류": {
+ value: "Chat/send : socket did not connected",
+ },
+ "유저가 방에 참여하지 않음": {
+ value: "Chat/send : user did not participated in the room",
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Chat/send : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+chatsDocs[`${apiPrefix}/read`] = {
+ post: {
+ tags: [tag],
+ summary: "채팅 읽은 시각 업데이트 요청",
+ description: `채팅 읽은 시각의 업데이트 요청을 처리합니다.
+ socket 통신을 통하여 같은 방에 있는 user들에게 업데이트를 요청합니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅을 보내는 방의 id",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ value: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ content: {
+ "text/html": {
+ example: "Chat/read : socket did not connected",
+ },
+ },
+ },
+ 404: {
+ content: {
+ "text/html": {
+ example: "Chat/read : cannot find room info",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ examples: {
+ "소켓 이벤트 전송 오류": {
+ value: "Chat/read : failed to emit socket events",
+ },
+ "기타 서버 오류": {
+ value: "Chat/read : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+chatsDocs[`${apiPrefix}/uploadChatImg/getPUrl`] = {
+ post: {
+ tags: [tag],
+ summary: "채팅 이미지를 업로드할 수 있는 Presigned-url을 발급",
+ description: `채팅 이미지를 업로드 하기 위한 Presigned-url을 발급합니다.
+ 이미지 전송을 위해 \`s3img\` 형식의 chat document를 생성 후 저장하며,
+ presigned-url은 aws S3 api를 통해 생성됩니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅 이미지를 보내는 방의 id",
+ },
+ type: {
+ type: "string",
+ enum: ["image/png", "image/jpg", "image/jpeg"],
+ description: "채팅 이미지의 파일 형식",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ id: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "생성된 chat Document의 object id",
+ },
+ url: {
+ type: "string",
+ example: "https://s3.{region}.amazonaws.com/{bucket-name}",
+ description: "taxi s3 url 주소",
+ },
+ fields: {
+ type: "object",
+ properties: {
+ bucket: {
+ type: "string",
+ example: "bucket-name",
+ },
+ "Content-Type": {
+ type: "string",
+ enum: ["image/png", "image/jpg", "image/jpeg"],
+ },
+ key: {
+ type: "string",
+ pattern: `^chat-img/[a-fA-F\d]{24}$`,
+ },
+ },
+ description: "image의 key, type, bucket와 같은 정보",
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ content: {
+ "text/html": {
+ example: "Chat/uploadChatImg/getPUrl : did not joined the chatting",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Chat/uploadChatImg/getPUrl : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+chatsDocs[`${apiPrefix}/uploadChatImg/done`] = {
+ post: {
+ tags: [tag],
+ summary: "채팅 이미지 업로드 완료 여부 확인",
+ description: `채팅 이미지가 제대로 업로드 되었는지 확인합니다.
+ 이미지가 제대로 업로드 되었다면, socket 통신을 통해 채팅 이미지를 전송합니다.
+ 이때 채팅의 \`content\`에는 s3에 저장된 url을 나타내는 채팅의 object id를 넣어줍니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ description: "채팅 이미지를 보내는 방의 id",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ value: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 404: {
+ content: {
+ "text/html": {
+ example: "Chat/uploadChatImg/done : no corresponding chat",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Chat/uploadChatImg/getPUrl : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+module.exports = chatsDocs;
diff --git a/src/routes/docs/chats.md b/src/routes/docs/chats.md
deleted file mode 100644
index 307d2def..00000000
--- a/src/routes/docs/chats.md
+++ /dev/null
@@ -1,99 +0,0 @@
-## `chats`: 채팅 시 발생하는 이벤트 정리
-
-Taxi의 채팅 기능은 Socket.IO 라이브러리를 이용해 구현되어 있습니다.
-클라이언트에서의 일반적인 Socket.IO 사용법은 [공식 문서](https://socket.io/docs/v4/client-socket-instance/)를 참조해주세요.
-아래와 같은 채팅 이벤트들이 구현되어 있습니다.
-
-- `chats-join`
-- `chats-receive`
-- `chats-send`
-- `chats-load`
-- `chats-disconnected` (삭제해야 함)
-
-서버로부터 받은 모든 채팅 기록은 아래와 같은 자료형으로 구성되어 있습니다.
-
-```javascript
-Chat {
- roomId: ObjectId, //방의 objectId
- type: String, // 메시지 종류("text": 일반 메시지, "in": 입장 메시지, "out": 퇴장 메시지, "s3img": S3에 업로드된 이미지, "payment": 결제 메시지, "settlement": 정산 완료 메시지)
- authorId: ObejctId, //작성자의 objectId
- content: String, // 메시지 내용(메시지 종류에 따라 포맷이 상이하며, 하단 참조)
- time: String(ISO 8601), // ex) '2022-01-12T13:58:20.180Z'
- isValid: Boolean, // 클라이언트가 보낸 메시지가 유효한 지 여부. 클라이언트가 이미지를 업로드했을 때, 해당 이미지가 제대로 업로드됐는지 확인하기 전까지 이미지를 보여주지 않기 위해 사용됨.
-}
-```
-
-### 1. `chats-join`
-
-방에 새 사용자가 참여할 때 이 이벤트를 발생시키세요.
-필요한 인자는 `roomId`입니다.
-
-- `roomId`: 방의 ObjectID (`String`), Socket.IO 서버와 연결을 시도할 때 사용자는 로그인이 되어 있어야 하며, 들어가려는 채팅방에 참여자로 참여하고 있어야 합니다.
-
-```javascript
-const socket = io(server_address, { withCredentials: true });
-socket.emit("chats-join", roomId);
-```
-
-채팅방 접속이 정상적으로 완료되면, Socket.io 서버는 최근 30개의 메시지들(`Chat` 배열)을 전송합니다.
-
-```javascript
-socket.on("chats-join", (chats) => {
- // 최근 30개의 채팅 메시지 출력
- console.log(chats);
-});
-```
-
-### 2. `chats-send`
-
-채팅 메시지를 보낼 때 이 이벤트를 발생시키세요.
-필요한 인자는 `roomId`와 `content`입니다.
-
-- `roomId`: 참여중인 방의 ObjectID(`String`)
-- `content`: 보낼 텍스트(`String`)
-
-```javascript
-socket.emit("chats-send", { roomId, content });
-```
-
-메시지 전송이 성공/실패하면, Socket.IO 서버도 `chats-send` 이벤트를 발생시킵니다.
-
-```javascript
-socket.on("chats-send", (response) => {
- // 최근 30개의 채팅 메시지 출력
- console.log(response);
-});
-```
-
-`response`는 전송이 성공했을 경우 `{done: true}`, 실패했을 경우 `{err: true}`입니다.
-
-### 3. `chats-receive`
-
-이 이벤트는 서버나 다른 사용자가 채팅 메시지를 전송했을 때 발생합니다. 아래와 같이 `chat`에 접근하여 해당 메시지의 내용을 확인할 수 있습니다.
-
-```javascript
-socket.on("chats-receive", (chat) => {
- // 새로운 메시지 출력
- console.log(chat);
-});
-```
-
-### 4. `chats-load`
-
-과거 대화 목록을 더 불러오려면 이 이벤트를 발생시키세요. 필요한 인자는 `lastDate`와 `amount`(선택 사항) 입니다.
-
-- `lastDate`: 현재 클라이언트에서 불러온 채팅들 중 가장 오래된 것의 생성 시각. 서버는 이보다 먼저 생성된 메시지들을 반환합니다. ISO8601을 만족하는 `String`이어야 합니다. e.g.) `"2022-03-15T13:57:04.732Z"`
-- `amount` (선택 사항): 불러올 과거 메시지의 수. 1~50의 자연수여야 하며, 입력하지 않은 경우 30개의 메시지를 가져옵니다.
-
-```javascript
-socket.emit("chats-load", { lastDate: "2022-03-15T13:57:04.732Z", amount: 30 });
-```
-
-`chats-load` 이벤트가 발생하면 서버는 클라이언트에 다시 `chats-load` 이벤트를 발생시켜 과거 채팅들(`Chat` 배열)을 보냅니다.
-
-```javascript
-socket.on("chats-load", (chats) => {
- // 과거 메시지들 출력
- console.log(chats);
-});
-```
diff --git a/src/routes/docs/locations.js b/src/routes/docs/locations.js
index 530788eb..34773482 100644
--- a/src/routes/docs/locations.js
+++ b/src/routes/docs/locations.js
@@ -1,52 +1,53 @@
-const locationsDocs = {
- "/locations": {
- get: {
- tags: ["locations"],
- summary: "출발지/도착지 정보 반환",
- description:
- "출발지/도착지로 사용 가능한 장소 목록 조회 및 요청 처리 당시 서버 시각 반환
\n (로그인된 상태에서만 접근 가능)",
- responses: {
- 200: {
- description:
- "서버에 저장된 location이 없을 경우, locations은 빈 배열",
- content: {
- "application/json": {
- schema: {
- type: "object",
- properties: {
- locations: {
- type: "array",
- description: "출발지/도착지로 사용 가능한 장소 목록",
- items: {
- type: "object",
- properties: {
- priority: {
- type: "number",
- },
- isValid: {
- type: "boolean",
- },
- _id: {
- type: "string",
- },
- koName: {
- type: "string",
- description: "장소의 한국어 명칭",
- example: "택시승강장",
- },
- enName: {
- type: "string",
- description: "장소의 영어 명칭",
- example: "Taxi Stand",
- },
+const tag = "locations";
+const apiPrefix = "/locations";
+
+const locationsDocs = {};
+locationsDocs[`${apiPrefix}`] = {
+ get: {
+ tags: [tag],
+ summary: "출발지/도착지 정보 반환",
+ description: `출발지/도착지로 사용 가능한 장소 목록 조회 및 요청 처리 당시 서버 시각 반환
+ (로그인된 상태에서만 접근 가능)`,
+ responses: {
+ 200: {
+ description: "서버에 저장된 location이 없을 경우, locations은 빈 배열",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ locations: {
+ type: "array",
+ description: "출발지/도착지로 사용 가능한 장소 목록",
+ items: {
+ type: "object",
+ properties: {
+ priority: {
+ type: "number",
+ },
+ isValid: {
+ type: "boolean",
+ },
+ _id: {
+ type: "string",
+ },
+ koName: {
+ type: "string",
+ description: "장소의 한국어 명칭",
+ example: "택시승강장",
+ },
+ enName: {
+ type: "string",
+ description: "장소의 영어 명칭",
+ example: "Taxi Stand",
},
},
},
- serverTime: {
- type: "string",
- format: "date-time",
- description: "요청 처리 당시 서버 시각",
- },
+ },
+ serverTime: {
+ type: "string",
+ format: "date-time",
+ description: "요청 처리 당시 서버 시각",
},
},
},
diff --git a/src/routes/docs/logininfo.js b/src/routes/docs/logininfo.js
index f572f942..59b5e0a8 100644
--- a/src/routes/docs/logininfo.js
+++ b/src/routes/docs/logininfo.js
@@ -1,89 +1,94 @@
-const logininfoDocs = {
- "/logininfo": {
- get: {
- tags: ["logininfo"],
- summary: "사용자 정보 반환",
- description: "로그인되어 있는 사용자의 정보를 반환",
- responses: {
- 200: {
- description:
- "사용자의 로그인 세션이 유효한 경우, 현재 로그인된 사용자의 정보를 반환,
\n 세션이 유효하지 않은 경우, 빈 오브젝트를 반환",
- content: {
- "application/json": {
- schema: {
- type: "object",
- properties: {
- oid: {
- type: "string",
- },
- id: {
- type: "string",
- description: "사용자 id",
- },
- name: {
- type: "string",
- description: "사용자 이름",
- },
- nickname: {
- type: "string",
- },
- withdraw: {
- type: "boolean",
- },
- phoneNumber: {
- type: "string",
- description: "사용자 전화번호",
- },
- ban: {
- type: "boolean",
- },
- joinat: {
- type: "string",
- format: "date-time",
- },
- agreeOnTermsOfService: {
- type: "boolean",
- },
- subinfo: {
- type: "object",
- properties: {
- kaist: {
- type: "string",
- description: "KAIST 학번(8자리)",
- minLength: 8,
- maxLength: 8,
- example: "20190052",
- },
- sparcs: {
- type: "string",
- },
- facebook: {
- type: "string",
- },
- twitter: {
- type: "string",
- },
+const { objectIdPattern } = require("./utils");
+
+const tag = "logininfo";
+const apiPrefix = "/logininfo";
+
+const logininfoDocs = {};
+logininfoDocs[`${apiPrefix}`] = {
+ get: {
+ tags: [tag],
+ summary: "사용자 정보 반환",
+ description: "로그인되어 있는 사용자의 정보를 반환",
+ responses: {
+ 200: {
+ description:
+ "사용자의 로그인 세션이 유효한 경우, 현재 로그인된 사용자의 정보를 반환,
\n 세션이 유효하지 않은 경우, 빈 오브젝트를 반환",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ oid: {
+ type: "string",
+ type: objectIdPattern,
+ },
+ id: {
+ type: "string",
+ description: "사용자 id",
+ },
+ name: {
+ type: "string",
+ description: "사용자 이름",
+ },
+ nickname: {
+ type: "string",
+ },
+ withdraw: {
+ type: "boolean",
+ },
+ phoneNumber: {
+ type: "string",
+ description: "사용자 전화번호",
+ },
+ ban: {
+ type: "boolean",
+ },
+ joinat: {
+ type: "string",
+ format: "date-time",
+ },
+ agreeOnTermsOfService: {
+ type: "boolean",
+ },
+ subinfo: {
+ type: "object",
+ properties: {
+ kaist: {
+ type: "string",
+ description: "KAIST 학번(8자리)",
+ minLength: 8,
+ maxLength: 8,
+ example: "20190052",
+ },
+ sparcs: {
+ type: "string",
+ },
+ facebook: {
+ type: "string",
+ },
+ twitter: {
+ type: "string",
},
},
- email: {
- type: "string",
- example: "geon6757@kaist.ac.kr",
- },
- profileImgUrl: {
- type: "string",
- },
- account: {
- type: "string",
- },
- deviceToken: {
- type: "string",
- description:
- "클라이언트의 디바이스 토큰, 세션에 저장되어 있지 않은 경우 undefined",
- },
- deviceType: {
- type: "string",
- enum: ["web", "app"],
- },
+ },
+ email: {
+ type: "string",
+ example: "geon6757@kaist.ac.kr",
+ },
+ profileImgUrl: {
+ type: "string",
+ },
+ account: {
+ type: "string",
+ },
+ deviceToken: {
+ type: "string",
+ description:
+ "클라이언트의 디바이스 토큰, 세션에 저장되어 있지 않은 경우 undefined",
+ },
+ deviceType: {
+ type: "string",
+ enum: ["web", "app"],
},
},
},
diff --git a/src/routes/docs/reports.js b/src/routes/docs/reports.js
index 0210197e..b3976e7b 100644
--- a/src/routes/docs/reports.js
+++ b/src/routes/docs/reports.js
@@ -1,79 +1,86 @@
-const reportsDocs = {
- "/reports/create": {
- post: {
- tags: ["reports"],
- summary: "신고 작성",
- description: "주어진 유저를 전달된 사유로 신고함",
- requestBody: {
- description: "Update an existent user in the store",
- content: {
- "application/json": {
- schema: {
- $ref: "#/components/schemas/createHandler",
- },
+const { objectIdPattern } = require("./utils");
+
+const tag = "reports";
+const apiPrefix = "/reports";
+
+const reportsDocs = {};
+reportsDocs[`${apiPrefix}/create`] = {
+ post: {
+ tags: [tag],
+ summary: "신고 작성",
+ description: "주어진 유저를 전달된 사유로 신고함",
+ requestBody: {
+ description: "Update an existent user in the store",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/createHandler",
},
},
},
- responses: {
- 200: {
- description: "report successful",
- content: {
- "text/plain": {
- schema: {
- type: "string",
- example: "report successful",
- },
+ },
+ responses: {
+ 200: {
+ description: "report successful",
+ content: {
+ "text/plain": {
+ schema: {
+ type: "string",
+ example: "report successful",
},
},
},
- 500: {
- description: "internal server error",
- content: {
- "text/plain": {
- schema: {
- type: "string",
- example: "internal server error",
- },
- },
+ },
+ 500: {
+ description: "internal server error",
+ content: {
+ "text/html": {
+ example: "User/report : internal server error",
},
},
},
},
},
- "/reports/searchByUser": {
- get: {
- tags: ["reports"],
- summary: "신고 내역 반환",
- description:
- "로그인된 사용자의 신고한 내역과, 신고받은 내역을 반환한다
1000개의 limit이 있다.",
- responses: {
- 200: {
- description: "신고된 내역과 신고 받은 내역",
- content: {
- "application/json": {
- schema: {
- type: "object",
- properties: {
- reporting: {
- type: "array",
+};
+
+reportsDocs[`${apiPrefix}/searchByUser`] = {
+ get: {
+ tags: [tag],
+ summary: "신고 내역 반환",
+ description:
+ "로그인된 사용자의 신고한 내역과, 신고받은 내역을 반환한다
1000개의 limit이 있다.",
+ responses: {
+ 200: {
+ description: "신고된 내역과 신고 받은 내역",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ reporting: {
+ type: "array",
+ items: {
+ type: "string",
+ pattern: objectIdPattern,
},
- reported: {
- type: "array",
+ },
+ reported: {
+ type: "array",
+ items: {
+ type: "string",
+ pattern: objectIdPattern,
},
},
},
},
},
},
- 500: {
- description: "internal server error",
- content: {
- "text/plain": {
- schema: {
- type: "string",
- example: "internal server error",
- },
- },
+ },
+ 500: {
+ description: "internal server error",
+ content: {
+ "text/html": {
+ example: "report/searchByUser : internal server error",
},
},
},
diff --git a/src/routes/docs/reportsSchema.js b/src/routes/docs/reportsSchema.js
index 841918cf..654e1178 100644
--- a/src/routes/docs/reportsSchema.js
+++ b/src/routes/docs/reportsSchema.js
@@ -1,3 +1,5 @@
+const { objectIdPattern } = require("./utils");
+
const reportsSchema = {
createHandler: {
type: "object",
@@ -5,7 +7,7 @@ const reportsSchema = {
properties: {
reportedId: {
type: "string",
- pattern: "^[a-fA-F\\d]{24}$",
+ pattern: objectIdPattern,
},
type: {
type: "string",
diff --git a/src/routes/docs/rooms.js b/src/routes/docs/rooms.js
new file mode 100644
index 00000000..3292b127
--- /dev/null
+++ b/src/routes/docs/rooms.js
@@ -0,0 +1,830 @@
+const { roomsSchema } = require("./roomsSchema");
+const { objectIdPattern, roomsPattern } = require("./utils");
+
+const tag = "rooms";
+const apiPrefix = "/rooms";
+
+const roomsDocs = {};
+
+roomsDocs[`${apiPrefix}/create`] = {
+ post: {
+ tags: [tag],
+ summary: "방 생성",
+ description: `방을 생성합니다. 한 유저당 최대 5개의 진행중인 방에 참여할 수 있습니다.
`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ name: {
+ type: "string",
+ pattern: roomsPattern.rooms.name,
+ description: `방 이름
+ 1~50 글자로 구성되며 영어 대소문자, 숫자, 한글, 특정 특수기호("-", ",", ".", "?", "!", "_")만 가능`,
+ },
+ from: {
+ type: "string",
+ pattern: roomsPattern.rooms.from,
+ description: "출발지 location Document의 ObjectId",
+ },
+ to: {
+ type: "string",
+ pattern: roomsPattern.rooms.to,
+ description: "도착지 location Document의 ObjectId",
+ },
+ time: {
+ type: "string",
+ format: "date-time",
+ description: "방 출발 시각. 현재 이후여야 함.",
+ },
+ maxPartLength: {
+ type: "integer",
+ minimum: 2,
+ maximum: 4,
+ description: "방의 최대 인원 수",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "생성 완성된 방 목록",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 400: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ examples: {
+ "출발지와 도착지가 같음": {
+ value: {
+ error: "Room/create : locations are same",
+ },
+ },
+ "현재로부터 2주일보다 이후의 방을 생성": {
+ value: {
+ error:
+ "Room/create : cannot over 2 weeks on the basis of current Date",
+ },
+ },
+ "존재하지 않는 location Document를 입력": {
+ value: {
+ error: "Rooms/create : no corresponding locations",
+ },
+ },
+ "사용자가 참여하는 진행 중 방이 5개 이상": {
+ value: {
+ error: "Rooms/create : participating in too many rooms",
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/create : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/publicInfo`] = {
+ get: {
+ tags: [tag],
+ summary: "정산 정보를 제외한 방 세부 사항 반환",
+ description:
+ "특정 id 방의 정산 정보를 제외한 세부사항을 반환합니다. 로그인을 하지 않아도 접근 가능합니다.",
+ parameters: [
+ {
+ in: "query",
+ name: "id",
+ schema: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ description: "찾고 싶은 방의 Object id",
+ },
+ ],
+ responses: {
+ 200: {
+ description: "방의 세부 정보가 담긴 room Object",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 404: {
+ description: "해당 id가 존재하지 않음",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/publicInfo : id does not exist",
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/publicInfo : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/info`] = {
+ get: {
+ tags: [tag],
+ summary: "방 세부 사항 반환",
+ description: "유저가 참여한 방의 세부사항을 반환합니다.",
+ parameters: [
+ {
+ in: "query",
+ name: "id",
+ schema: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ description: "찾고 싶은 방의 Object id",
+ },
+ ],
+ responses: {
+ 200: {
+ description: "방의 세부 정보가 담긴 room Object",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 404: {
+ description: "해당 id가 존재하지 않음",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/info : id does not exist",
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/info : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/join`] = {
+ post: {
+ tags: [tag],
+ summary: "진행 중인 방에 참여",
+ description: `room의 ID를 받아 해당 room의 참가자 목록에 요청을 보낸 사용자를 추가합니다.
+ 하나의 User는 최대 5개의 진행중인 방에 참여할 수 있습니다.
+ 아직 정원이 차지 않은 방과 아직 출발하지 않은 방에만 참여할 수 있습니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "방의 세부 정보가 담긴 room Object",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 400: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ examples: {
+ "사용자가 참여하는 진행 중 방이 5개 이상": {
+ value: {
+ error: "Rooms/join : participating in too many rooms",
+ },
+ },
+ "입력한 시간의 방이 이미 출발함": {
+ value: {
+ error: "Room/join : The room has already departed",
+ },
+ },
+ "방의 인원이 모두 찼음": {
+ value: {
+ error: "Room/join : The room is already full",
+ },
+ },
+ },
+ },
+ },
+ },
+ 404: {
+ description: "해당 id를 가진 방이 존재하지 않음",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/join : no corresponding room",
+ },
+ },
+ },
+ },
+ 409: {
+ description: "사용자가 이미 참여중임",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/join : {userID} Already in room",
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "text/html": {
+ example: "Rooms/join : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/abort`] = {
+ post: {
+ tags: [tag],
+ summary: "참여 중인 방에서 퇴장",
+ description: `room의 ID를 받아 해당 room의 참가자 목록에서 요청을 보낸 사용자를 삭제합니다.
+ 출발했지만 정산이 완료되지 않은 방에서는 나갈 수 없습니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 400: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ examples: {
+ "잘못된 userId를 포함한 요청임": {
+ value: {
+ error: "Rooms/abort : Bad request",
+ },
+ },
+ "정산이 되지 않은 출발한 방은 나갈 수 없음": {
+ value: {
+ error:
+ "Rooms/abort : cannot exit room. Settlement is not done",
+ },
+ },
+ },
+ },
+ },
+ },
+ 403: {
+ description: "사용자가 해당 방의 구성원이 아님",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/abort : did not joined the room",
+ },
+ },
+ },
+ },
+ 404: {
+ description: "해당 id를 가진 방이 존재하지 않음",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/abort : no corresponding room",
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/abort : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/search`] = {
+ get: {
+ tags: [tag],
+ summary: "방 검색",
+ description: `출발지/도착지/날짜를 받아 조건에 맞는 방을 검색합니다.
+ 조건에 맞는 방이 있을 경우, 방들의 정보를 반환하고 없다면 빈 배열을 반환합니다.
+ 로그인을 하지 않아도 접근 가능합니다.`,
+ parameters: [
+ {
+ in: "query",
+ name: "name",
+ schema: {
+ type: "string",
+ },
+ description: `검색할 방의 이름
+ 주어진 경우 해당 텍스트가 방의 이름에 포함된 방들만 반환.
+ 주어지지 않은 경우 임의의 이름을 가지는 방들을 검색.`,
+ },
+ {
+ in: "query",
+ name: "from",
+ schema: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ description: `출발지 Document의 ObjectId
+ 주어진 경우 출발지가 일치하는 방들만 반환.
+ 주어지지 않은 경우 임의의 출발지를 가지는 방들을 검색.`,
+ },
+ {
+ in: "query",
+ name: "to",
+ schema: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ description: `도착지 Document의 ObjectId
+ 주어진 경우 도착지가 일치하는 방들만 반환.
+ 주어지지 않은 경우 임의의 도착지를 가지는 방들을 검색.`,
+ },
+ {
+ in: "query",
+ name: "time",
+ schema: {
+ type: "string",
+ format: "date-time",
+ },
+ description: `출발 시각
+ 주어진 경우 주어진 시간부터 주어진 시간부터 그 다음에 찾아오는 오전 5시 전에 출발하는 방들만 반환.
+ 주어지지 않은 경우 현재 시각부터 그 다음으로 찾아오는 오전 5시 전까지의 방들을 반환.`,
+ },
+ {
+ in: "query",
+ name: "withTime",
+ schema: {
+ type: "boolean",
+ },
+ description: `검색 옵션에 시간 옵션이 포함되어 있는지 여부.
+ false이고 검색하는 날짜가 오늘 이후인 경우 검색하는 시간을 0시 0분 0초로 설정함.`,
+ },
+ {
+ in: "query",
+ name: "maxPartLength",
+ schema: {
+ type: "integer",
+ },
+ description: ` 방의 최대 인원 수.
+ 주어진 경우 최대 인원 수가 일치하는 방들만 반환.
+ 주어지지 않은 경우 임의의 최대 인원 수를 가지는 방들을 검색.`,
+ },
+ {
+ in: "query",
+ name: "isHome",
+ schema: {
+ type: "boolean",
+ },
+ description: `홈 페이지 검색인지 여부
+ true인 경우 검색 날짜 범위를 7일로 설정.
+ false인 경우 검색 날짜 범위를 14일로 설정.
`,
+ },
+ ],
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "array",
+ items: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ },
+ 400: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ examples: {
+ "출발지와 도착지가 같음": {
+ value: {
+ error: "Room/search : Bad request",
+ },
+ },
+ "출발/도착지가 존재하지 않는 장소": {
+ value: {
+ error: "Room/search : no corresponding locations",
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/search : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/searchByUser`] = {
+ get: {
+ tags: [tag],
+ summary: "사용자가 참여 중인 방 검색",
+ description: `로그인 된 사용자가 참여 중인 방을 검색합니다.
+ 정산 완료 여부 기준으로 진행 중인 방과 완료된 방을 \`ongoing\`과 \`done\`으로 각각 분리하여 응답을 전송합니다.
+ (\`ongoing\`은 \`isOver\`이 flase인 방, \`done\`은 \`isOver\`이 true인 방을 의미합니다.)`,
+ parameters: {},
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ ongoing: {
+ type: "array",
+ items: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ done: {
+ type: "array",
+ items: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/searchByUser : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/commitPayment`] = {
+ post: {
+ tags: [tag],
+ summary: "방 결제 처리",
+ description: `해당 방에 요청을 보낸 유저를 결제자로 처리합니다.
+ 이미 출발한 방에 대해서만 요청을 처리합니다.
+ 방의 \`part\` 배열에서 요청을 보낸 유저의 \`isSettlement\` 속성은 \`paid\`로 설정됩니다.
+ 나머지 유저들의 \`isSettlement\` 속성을 \`send-required\`로 설정합니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "결제 정보가 수정된 방의 세부 정보가 담긴 room Object",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 404: {
+ description: `잘못된 방 요청
+ (사용자가 참여 중인 방이 아니거나, 이미 다른 사람이 결제자이거나, 아직 방이 출발하지 않은 경우)`,
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/:id/commitPayment : cannot find settlement info",
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/:id/commitPayment : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+roomsDocs[`${apiPrefix}/commitSettlement`] = {
+ post: {
+ tags: [tag],
+ summary: "방 정산 완료 처리",
+ description: `해당 방에 요청을 보낸 유저를 정산 완료로 처리합니다.
+ 방의 \`part\` 배열에서 요청을 보낸 유저의 \`isSettlement\` 속성은 \`send-required\`에서 \`sent\`로 변경합니다.
+ 방의 참여한 유저들이 모두 정산완료를 하면 방의 \`isOver\` 속성이 \`true\`로 변경되며, 과거 방으로 취급됩니다.`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ roomId: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "결제 정보가 수정된 방의 세부 정보가 담긴 room Object",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/room",
+ },
+ },
+ },
+ },
+ 404: {
+ description: `잘못된 방 요청
+ (사용자가 참여 중인 방이 아니거나, 사용자가 결제를 했거나 이미 정산한 경우)`,
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/:id/settlement : cannot find settlement info",
+ },
+ },
+ },
+ },
+ 500: {
+ description: "내부 서버 오류",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ error: {
+ type: "string",
+ },
+ },
+ },
+ example: {
+ error: "Rooms/:id/settlement : internal server error",
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+module.exports = roomsDocs;
diff --git a/src/routes/docs/rooms.md b/src/routes/docs/rooms.md
deleted file mode 100755
index 3346d753..00000000
--- a/src/routes/docs/rooms.md
+++ /dev/null
@@ -1,367 +0,0 @@
-# `/rooms` API
-
-## Table of contents
-
-- [`/rooms` API](#rooms-api)
- - [Table of contents](#table-of-contents)
- - [Description](#description)
- - [Available endpoints](#available-endpoints)
- - [`/publicInfo` **(GET)**](#publicinfo-get)
- - [URL parameters](#url-parameters)
- - [Response](#response)
- - [Errors](#errors)
- - [`/info` **(GET)**](#info-get)
- - [URL parameters](#url-parameters-1)
- - [Response](#response-1)
- - [Errors](#errors-1)
- - [`/create` **(POST)**](#create-post)
- - [POST request form](#post-request-form)
- - [Errors](#errors-2)
- - [Response](#response-2)
- - [`/join` (POST)](#join-post)
- - [request JSON form](#request-json-form)
- - [Errors](#errors-3)
- - [`/abort` (POST)](#abort-post)
- - [request JSON form](#request-json-form-1)
- - [Errors](#errors-4)
- - [`/search` **(GET)**](#search-get)
- - [URL parameters](#url-parameters-2)
- - [Response](#response-3)
- - [Errors](#errors-5)
- - [`/searchByUser` **(GET)**](#searchbyuser-get)
- - [URL parameters](#url-parameters-3)
- - [Response](#response-4)
- - [Errors](#errors-6)
- - [`/commitPayment` **(POST)**](#commitpayment-post)
- - [Request Body](#request-body)
- - [Response](#response-5)
- - [Errors](#errors-7)
- - [`/commitSettlement/` **(POST)**](#commitsettlement-post)
- - [Request Body](#request-body-1)
- - [Response](#response-6)
- - [Errors](#errors-8)
- - [`/edit/` **(POST)** **(for dev)**](#edit-post-for-dev)
- - [POST request form](#post-request-form-1)
- - [Response](#response-7)
- - [Errors](#errors-9)
- - [`/getAllRoom` **(GET)** (for dev)](#getallroom-get-for-dev)
- - [`/removeAllRoom` **(GET)** (for dev)](#removeallroom-get-for-dev)
- - [`/:id/delete/` **(GET)** **(for dev)**](#iddelete-get-for-dev)
- - [URL Parameters](#url-parameters-4)
- - [Response](#response-8)
- - [Errors](#errors-10)
-
-## Description
-
-- 방 생성/수정/삭제/조회 기능을 지원하는 API.
-- `/publicInfo`, `/search`를 제외한 endpoint는 로그인된 상태에서만 접근 가능
-- Request form에서 요구하는 property 이름에 ? 이 붙은 경우 필수가 아니라는 뜻
-- 방을 반환할 경우 그 type은 다음과 같다.
-
-```javascript
-Room {
- _id: ObjectId, //ObjectID
- name: String, // 1~50글자로 구성되며 영어 대소문자, 숫자, 한글, "-", ",", ".", "?", "!", "_"로만 이루어져야 함.
- from: {
- _id: ObjectId, // 출발지 document의 ObjectId
- koName: String, // 출발지의 한국어 명칭
- enName: String, // 출발지의 영어 명칭
- },
- to: {
- _id: ObjectId, // 도착지 document의 ObjectId
- koName: String, // 도착지의 한국어 명칭
- enName: String, // 도착지의 영어 명칭
- },
- time: String(ISO 8601), // ex) 방 출발 시각. '2022-01-12T13:58:20.180Z'
- isDeparted: Boolean, // 이미 출발한 택시인지 여부 (출발했으면 true)
- part: [
- {
- _id: ObjectId, // part의 ObjectId
- user: {
- _id: ObjectId, // 참여 중인 사용자 Document의 ObjectId
- name: String, // 참여 중인 사용자 이름
- nickname: String, // 참여 중인 사용자 닉네임
- profileImageUrl: String, // 프로필 사진 url
- isSettlement: String || undefined, //해당 사용자의 정산 상태 (주의: "/publicInfo"와 "/search"에서는 isSettlement 속성이 undefined로 설정됨).
- },
- }
- ],
- maxPartLength: Number(2~4), //방의 최대 인원 수
- madeat: String(ISO 8601), // ex) 방 생성 시각. '2022-01-12T13:58:20.180Z'
- settlementTotal: Number(2~4), // 정산이 완료된 사용자 수 (주의: "/publicInfo"와 "/search"에서는 settlementTotal 속성이 undefined로 설정됨).
- isOver: Boolean, // 요청을 보낸 사용자가 해당 방의 정산을 완료됐는지 여부(완료 시 true) (주의: rooms/search에서는 isOver 속성을 반환하지 않고 undefined를 반환함).
- __v: Number, // 문서 버전. mongoDB 내부적으로 사용됨.
-}
-```
-
-`settlementStatus` 속성은 아래 네 가지 값들 중 하나를 가진다.
-
-1. `"not-departed"` : 아무도 결제/정산하지 않은 상태
-2. `"paid"` : 택시비를 결제한 참가가 "결제하기" 버튼을 누르면 해당 참가자에게 설정되는 정산 상태.
-3. `"send-required"` : 특정 참가자가 "결제하기" 버튼을 눌렀을 때 그 방의 나머지 참가자에게 설정되는 정산 상태.
-4. `"sent"` : 정산 상태가`"send-required"`인 사용자가 "정산하기" 버튼을 눌렀을 때 그 사용자에게 설정되는 정산 상태.
-
-## Available endpoints
-
-### `/publicInfo` **(GET)**
-
-ID를 parameter로 받아 해당 ID의 room의 정보 출력
-
-#### URL parameters
-
-- id : 조회할 room의 ID
-
-#### Response
-
-- 해당 방의 정보
-- 각 참여자의 isSettlement 속성과 방의 settlementTotal 속성은 undefined로 설정됨.
-
-#### Errors
-
-- 404 "id does not exist"
-- 500 "internal server error"
-
-### `/info` **(GET)**
-
-ID를 parameter로 받아 해당 ID의 room의 정보 출력
-
-#### URL parameters
-
-- id : 조회할 room의 ID
-
-#### Response
-
-- 해당 방의 정보
-
-#### Errors
-
-- 403 "not logged in"
-- 403 "did not joined the room"
-- 404 "id does not exist"
-- 500 "internal server error"
-
-### `/create` **(POST)**
-
-요청을 받아 room을 생성
-하나의 User는 최대 5개의 진행중인 방에 참여할 수 있다.
-
-#### POST request form
-
-`Request body`
-
-```javascript
-{
- name : String, // 방 이름. 문서 상단에 명시된 규칙을 만족시켜야 함
- from : ObjectId, // 출발지 Document의 ObjectId
- to : ObjectId, // 도착지 Document의 ObjectId
- time : Date, // 방 출발 시각. 현재 이후여야 함.
- part? : String[], // 방 사람들의 ObjectId. 따라서 빈 배열로 요청하시면 됩니다.
- maxPartLength: Number(2~4), //방의 최대 인원 수
-}
-```
-
-#### Errors
-
-- 400 "bad request"
-- 400 "participating in too many rooms"
-- 400 "locations are same"
-- 400 "no corresponding locations"
-- 500 "internal server error"
-
-#### Response
-
-- 새로이 만들어진 방
-
-### `/join` (POST)
-
-room의 ID를 받아 해당 room의 참가자 목록에 요청을 보낸 사용자를 추가한다.
-하나의 User는 최대 5개의 진행중인 방에 참여할 수 있다.
-아직 정원이 차지 않은 방과 아직 출발하지 않은 방에만 참여할 수 있다.
-
-#### request JSON form
-
-```javascript
-{
- roomId : ObjectId, // 초대 혹은 참여하려는 방 Document의 ObjectId
-}
-```
-
-#### Errors
-
-- 400 "Bad request"
-- 400 "participating in too many rooms"
-- 400 "The room is full"
-- 400 "The room has already departed"
-- 404 "no corresponding room"
-- 409 "{userID} Already in room"
-- 500 "internal server error"
-
-### `/abort` (POST)
-
-room의 ID를 받아 해당 room의 참가자 목록에서 요청을 보낸 사용자를 삭제한다.
-출발했지만 정산이 완료되지 않은 방에서는 나갈 수 없다.
-
-#### request JSON form
-
-```javascript
-{
- roomId : ObjectId, // 초대 혹은 참여하려는 방 Document의 ObjectId
-}
-```
-
-#### Errors
-
-- 400 "Bad request"
-- 400 "cannot exit room. Settlement is not done"
-- 404 "no corresponding room"
-- 500 "internal server error"
-
-
-### `/search` **(GET)**
-
-출발지/도착지/날짜를 받아 해당하는 room들을 반환한다.
-
-#### URL parameters
-
-- name?: String, // 검색할 방의 이름. 주어진 경우 해당 텍스트가 방의 이름에 포함된 방들만 반환. 주어지지 않은 경우 임의의 이름을 가지는 방들을 검색.
-- from? : ObjectId, // 출발지 Document의 ObjectId. 주어진 경우 출발지가 일치하는 방들만 반환. 주어지지 않은 경우 임의의 출발지를 가지는 방들을 검색.
-- to? : ObjectId, // 도착지 Document의 ObjectId. 주어진 경우 도착지가 일치하는 방들만 반환. 주어지지 않은 경우 임의의 도착지를 가지는 방들을 검색.
-- time? : Date, // 출발 시각. 주어진 경우 주어진 시간부터 주어진 시간부터 그 다음에 찾아오는 오전 5시 전에 출발하는 방들만 반환. 주어지지 않은 경우 현재 시각부터 그 다음으로 찾아오는 오전 5시 전까지의 방들을 반환.
-- withTime? : Boolean, // 검색 옵션에 시간 옵션이 포함되어 있는지 여부. false이고 검색하는 날짜가 오늘 이후인 경우 검색하는 시간을 0시 0분 0초로 설정함.
-- maxPartLength?: Number(2~4), // 방의 최대 인원 수. 주어진 경우 최대 인원 수가 일치하는 방들만 반환. 주어지지 않은 경우 임의의 최대 인원 수를 가지는 방들을 검색.
-
-
-#### Response
-
-조건에 맞는 방**들**의 정보: `Room[]`
-조건에 일치하는 방이 없더라도 빈 배열을 반환함.
-
-#### Errors
-
-- 400 "Bad request"
-- 400 "no corresponding locations"
-- 500 "Internal server error"
-
-### `/searchByUser` **(GET)**
-
-로그인된 사용자가 참여 중인 room들을 반환한다.
-
-#### URL parameters
-
-없음.
-
-#### Response
-
-```javascript
-{
- ongoing: [Room], // 정산이 완료되지 않은 방 (방의 isOver 속성이 false인 방)
- done: [Room], // 정산이 완료된 방 (방의 isOver 속성이 true인 방)
-}
-```
-
-#### Errors
-
-- 403 "not logged in"
-- 500 "internal server error"
-
-
-### `/commitPayment` **(POST)**
-
-- ID를 받아 해당 방에 요청을 보낸 유저를 결제자로 처리
-- 이미 출발한 방(현재 시각이 출발 시각 이후인 경우)에 대해서만 요청을 처리함
-- 방의 part 배열에서 요청을 보낸 유저의 isSettlement 속성을 `paid`로 설정하고, 나머지 유저들의 isSettlement 속성을 `"send-required"`로 설정함.
-
-#### Request Body
-
-- roomId : 정산할 room의 ID
-
-#### Response
-
-- 멤버들의 정산정보가 반영된 방의 정보
-
-#### Errors
-
-- 400 "Bad request": 로그인이 되어있지 않은 경우
-- 404 "cannot find settlement info": 사용자가 참여 중인 방이 아니거나, 이미 다른 사람이 결제자이거나, 아직 방이 출발하지 않은 경우
-- 500 "internal server error"
-
-
-
-### `/commitSettlement/` **(POST)**
-
-- ID를 받아 해당 방에 요청을 보낸 유저의 정산을 완료로 처리
-- 방의 part 배열에서 요청을 보낸 유저의 isSettlement 속성을 `send-required`에서 `"sent"`로 변경함.
-- 방에 참여한 멤버들이 모두 정산완료를 하면 방의 `isOver` 속성이 `true`로 변경되며, 과거 방으로 취급됨
-
-#### Request Body
-
-- roomId : 정산할 room의 ID
-
-#### Response
-
-- 멤버들의 정산정보가 반영된 방의 정보
-
-#### Errors
-
-- 400 "Bad request" : 로그인이 되어있지 않은 경우
-- 404 "cannot find settlement info": 사용자가 참여중인 방이 아니거나, 사용자가 결제를 했거나 이미 정산한 경우
-- 500 "internal server error"
-
-### `/edit/` **(POST)** **(for dev)**
-
-- ID와 수정할 데이터를 JSON으로 받아 해당 ID의 room을 수정
-- 방에 참여중인 사용자만 정보를 수정할 수 있음.
-- 프론트엔드에서 쓰일 일은 없어 보임.
-
-#### POST request form
-
-```javascript
-{
- roomId : String, // 수정할 room의 ID
- name? : String, // 방 이름. 문서 상단에 명시된 규칙을 만족시켜야 함
- from? : ObjectId, // 출발지 Document의 ObjectId
- to? : ObjectId, // 도착지 Document의 ObjectId
- time? : Date, // 방 출발 시각. 현재 이후여야 함.
- maxPartLength?: Number(2~4), // 방의 최대 인원 수. 현재 참여 인원수보다 크거나 같은 값이어야 함.
-}
-```
-
-#### Response
-
-- 변경된 방의 정보
-
-#### Errors
-
-- 400 "Bad request"
-- 404 "id does not exist"
-- 500 "internal server error"
-
-### `/getAllRoom` **(GET)** (for dev)
-
-모든 방 가져옴
-
-### `/removeAllRoom` **(GET)** (for dev)
-
-모든 방 삭제
-
-### `/:id/delete/` **(GET)** **(for dev)**
-
-ID를 받아 해당 ID의 room을 제거
-
-#### URL Parameters
-
-- id : 삭제할 room의 ID
-
-#### Response
-
-```javascript
-{
- id: ObjectId, // 삭제할 방 Document의 ObjectId
- isDeleted: true
-}
-```
-
-#### Errors
-
-- 404 "ID does not exist"
-- 500 "Internal server error"
\ No newline at end of file
diff --git a/src/routes/docs/roomsSchema.js b/src/routes/docs/roomsSchema.js
new file mode 100644
index 00000000..e256c5dd
--- /dev/null
+++ b/src/routes/docs/roomsSchema.js
@@ -0,0 +1,90 @@
+const { objectIdPattern, roomsPattern } = require("./utils");
+
+const participantSchema = {
+ part: {
+ type: "object",
+ required: ["_id", "name", "nickname", "profileImageUrl", "readAt"],
+ properties: {
+ _id: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ name: {
+ type: "string",
+ },
+ nickname: {
+ type: "string",
+ },
+ profileImageUrl: {
+ type: "string",
+ },
+ isSettlement: {
+ type: "string",
+ enum: ["not-departed", "paid", "send-required", "sent"],
+ default: "not-departed",
+ },
+ readAt: {
+ type: "string",
+ format: "date-time",
+ },
+ },
+ },
+};
+
+const roomsSchema = {
+ room: {
+ type: "object",
+ required: [
+ "name",
+ "from",
+ "to",
+ "time",
+ "part",
+ "madeat",
+ "maxPartLength",
+ "isDeparted",
+ ],
+ properties: {
+ name: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ from: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ to: {
+ type: "string",
+ pattern: objectIdPattern,
+ },
+ time: {
+ type: "string",
+ format: "date-time",
+ },
+ part: {
+ type: "array",
+ items: participantSchema["part"],
+ },
+ madeat: {
+ type: "string",
+ format: "date-time",
+ },
+ maxPartLength: {
+ type: "integer",
+ default: 4,
+ },
+ settlementTotal: {
+ type: "integer",
+ default: 0,
+ },
+ isOver: {
+ type: "boolean",
+ },
+ isDeparted: {
+ type: "boolean",
+ },
+ },
+ },
+};
+
+module.exports = { roomsSchema, participantSchema };
diff --git a/src/routes/docs/swaggerDocs.js b/src/routes/docs/swaggerDocs.js
index c6c13060..a6dab17a 100644
--- a/src/routes/docs/swaggerDocs.js
+++ b/src/routes/docs/swaggerDocs.js
@@ -1,8 +1,34 @@
const reportsSchema = require("./reportsSchema");
+const { participantSchema, roomsSchema } = require("./roomsSchema");
const reportsDocs = require("./reports");
const logininfoDocs = require("./logininfo");
const locationsDocs = require("./locations");
+const authDocs = require("./auth");
const usersDocs = require("./users");
+const roomsDocs = require("./rooms");
+const chatsDocs = require("./chats");
+const { port, nodeEnv } = require("../../../loadenv");
+
+const serverList = [
+ {
+ url: `http://localhost:${port}`,
+ description: "local api server",
+ development: true,
+ production: false,
+ },
+ {
+ url: "https://taxi.sparcs.org/api",
+ description: "taxi main api server",
+ development: true,
+ production: true,
+ },
+ {
+ url: "https://taxi.dev.sparcs.org/api",
+ description: "taxi dev api server",
+ development: true,
+ production: false,
+ },
+];
const swaggerDocs = {
openapi: "3.0.3",
@@ -11,6 +37,7 @@ const swaggerDocs = {
version: "1.0.0",
},
basePath: "/",
+ servers: serverList.filter((server) => server[nodeEnv]),
tags: [
{
name: "locations",
@@ -24,10 +51,22 @@ const swaggerDocs = {
name: "reports",
description: "사용자 신고 및 신고 기록 조회",
},
+ {
+ name: "auth",
+ description: "사용자 생성, 로그인, 로그아웃 등 사용자 상태 관리 지원",
+ },
{
name: "users",
description: "유저 계정 정보 수정 및 조회",
},
+ {
+ name: "rooms",
+ description: "방 생성/수정/삭제/조회 및 관리 지원",
+ },
+ {
+ name: "chats",
+ description: "채팅 시 발생하는 이벤트 정리",
+ },
],
consumes: ["application/json"],
produces: ["application/json"],
@@ -36,10 +75,15 @@ const swaggerDocs = {
...logininfoDocs,
...locationsDocs,
...usersDocs,
+ ...authDocs,
+ ...chatsDocs,
+ ...roomsDocs,
},
components: {
schemas: {
...reportsSchema,
+ ...participantSchema,
+ ...roomsSchema,
},
},
};
diff --git a/src/routes/docs/users.js b/src/routes/docs/users.js
index e76cd2b4..3cd8aa96 100644
--- a/src/routes/docs/users.js
+++ b/src/routes/docs/users.js
@@ -2,6 +2,120 @@ const tag = "users";
const apiPrefix = "/users";
const usersDocs = {};
+usersDocs[`${apiPrefix}/agreeOnTermsOfService`] = {
+ post: {
+ tags: [tag],
+ summary: "이용 약관에 동의",
+ description:
+ "요청을 보낸 유저의 약관 동의 여부를 동의함으로 변경합니다. 철회는 불가능합니다.",
+ responses: {
+ 200: {
+ content: {
+ "text/html": {
+ example:
+ "Users/agreeOnTermsOfService : agree on Terms of Service successful",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "Users/agreeOnTermsOfService : already agreed",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Users/agreeOnTermsOfService : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+usersDocs[`${apiPrefix}/getAgreeOnTermsOfService`] = {
+ get: {
+ tags: [tag],
+ summary: "이용 약관 동의 여부 전송",
+ description:
+ "요청을 보낸 유저의 이용 약관 동의 여부를 json 형태로 전송합니다.",
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ agreeOnTermsOfService: {
+ type: "boolean",
+ description: "유저의 이용 약관 동의 여부",
+ example: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Users/getAgreeOnTermsOfService : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+usersDocs[`${apiPrefix}/editNickname`] = {
+ post: {
+ tags: [tag],
+ summary: "유저의 닉네임 변경",
+ description: "유저의 닉네임을 요청한 닉네임으로 변경합니다.",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ nickname: {
+ type: "string",
+ example: "끈질긴 열과 분자의 이동",
+ description: "유저의 새 닉네임",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "text/html": {
+ example: "Users/editNickname : edit user nickname successful",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "Users/editNickname : such user id does not exist",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Users/editNickname : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
usersDocs[`${apiPrefix}/resetNickname`] = {
get: {
tags: [tag],
@@ -11,21 +125,171 @@ usersDocs[`${apiPrefix}/resetNickname`] = {
200: {
content: {
"text/html": {
- example: "User/resetNickname : reset user nickname successful",
+ example: "Users/resetNickname : reset user nickname successful",
+ },
+ },
+ },
+ 400: {
+ content: {
+ "text/html": {
+ example: "Users/resetNickname : such user does not exist",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Users/resetNickname : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+usersDocs[`${apiPrefix}/editAccount`] = {
+ post: {
+ tags: [tag],
+ summary: "유저의 계좌 번호 변경",
+ description: "유저의 계좌 번호를 요청한 계좌 번호로 변경합니다.",
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ account: {
+ type: "string",
+ description: "유저의 새 계좌 번호",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "text/html": {
+ example: "Users/editAccount : edit user account successful",
},
},
},
400: {
content: {
"text/html": {
- example: "User/resetNickname : such user does not exist",
+ example: "Users/editAccount : such user id does not exist",
+ },
+ },
+ },
+ 500: {
+ content: {
+ "text/html": {
+ example: "Users/editAccount : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+usersDocs[`${apiPrefix}/editProfileImg/getPUrl`] = {
+ post: {
+ tags: [tag],
+ summary: "프로필 이미지 업로드를 위한 presigned-url 발급",
+ description: `유저의 프로필 이미지는 AWS S3에서 관리됩니다. 변경할 프로필을 업로드 하기 위한 주소인 presigned-url을 발급합니다.
+
+ **프로필 사진은 아래 규칙을 만족해야 합니다:**
+ 1. 파일 형식은 image/png, image/jpg, image/jpeg 중 하나
+ 2. 파일 크기는 최대 50 MB`,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ type: {
+ type: "string",
+ description: "업로드할 이미지 type",
+ example: "image/png",
+ },
+ },
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ url: {
+ type: "string",
+ description: "이미지 업로드를 위한 presigned-url",
+ },
+ fields: {
+ type: "object",
+ properties: {
+ "Content-Type": {
+ type: "string",
+ description: "이미지의 type",
+ },
+ key: {
+ type: "string",
+ description: "이미지의 S3 파일 경로",
+ },
+ },
+ description: "업로드 파일의 type 및 key 정보",
+ },
+ },
+ },
},
},
},
500: {
+ contnet: {
+ "text/html": {
+ example: "Users/editProfileImg/getPUrl : internal server error",
+ },
+ },
+ },
+ },
+ },
+};
+
+usersDocs[`${apiPrefix}/editProfileImg/done`] = {
+ get: {
+ tags: [tag],
+ summary: "프로필 이미지 정상 업로드 여부 확인",
+ description: `프로필 이미지가 S3에 정상적으로 업로드 되었는지 확인합니다.
+ 정상적으로 확인 되었다면, 유저의 \`profileImageUrl\` 정보를 새 프로필 이미지 파일명으로 업데이트 합니다.`,
+ responses: {
+ 200: {
content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ result: {
+ type: "boolean",
+ description: "정상적인 업로드 성공 여부",
+ },
+ profileImageUrl: {
+ type: "string",
+ description:
+ "새 프로필 이미지 파일명 (업로드 실패 시 `undefined`)",
+ },
+ },
+ },
+ },
+ },
+ },
+ 500: {
+ contnet: {
"text/html": {
- example: "User/resetNickname : internal server error",
+ example: "Users/editProfileImg/done : internal server error",
},
},
},
@@ -43,21 +307,21 @@ usersDocs[`${apiPrefix}/resetProfileImg`] = {
content: {
"text/html": {
example:
- "User/resetProfileImg : reset user profile image successful",
+ "Users/resetProfileImg : reset user profile image successful",
},
},
},
400: {
content: {
"text/html": {
- example: "User/resetProfileImg : such user does not exist",
+ example: "Users/resetProfileImg : such user does not exist",
},
},
},
500: {
content: {
"text/html": {
- example: "User/resetProfileImg : internal server error",
+ example: "Users/resetProfileImg : internal server error",
},
},
},
diff --git a/src/routes/docs/users.md b/src/routes/docs/users.md
deleted file mode 100755
index 6b46963b..00000000
--- a/src/routes/docs/users.md
+++ /dev/null
@@ -1,305 +0,0 @@
-## `/users`
-
-- 사용자 정보 조회 및 수정 기능을 지원하는 API.
-- 로그인된 상태에서만 접근 가능
-- 사용자를 반환할 경우 그 type은 다음과 같다.
-
-```javascript
-User {
- name: String,
- nickname: String, // 3글자 이상 25글자 이하로 구성되며 영어 대소문자, 한글, " ", 0~9, "-", "_" 으로만 이루어져야 함.
- id: String,
- withdraw: Boolean,
- ban: Boolean,
- joinat: Date,
- agreeOnTermsOfService: { type: Boolean, default: false }, //이용약관 동의 여부
- room: [Room],
- subinfo: {
- kaist: String,
- sparcs: String,
- facebook: String,
- twitter: String,
- },
- email: String,
- __v: Number,
-}
-```
-
-### `/agreeOnTermsOfService` **(POST)**
-
-- 이용 약관에 동의함 (철회 불가)
-
-#### URL Parameters, Request JSON form
-
-- 없음
-
-#### Response
-
-- 200 "agree on Terms of Service successful"
-- 400 "already agreed"
-- 500 "internal server error"
-
-### `/getAgreeOnTermsOfService` **(GET)**
-
-- 이용 약관 동의 여부를 가져옴
-
-#### URL Parameters, Request JSON form
-
-- 없음
-
-#### Response
-
-```javascript
-{
- agreeOnTermsOfService: Boolean
-},
-```
-
-### `/editNickname` **(POST)**
-
-- 해당 사용자의 닉네임을 새로 설정함.
-- 새로운 닉네임은 상술한 규칙을 만족해야 함.
-
-#### URL Parameters
-
-- user_id : 사용자의 SPARCS SSO ID
-
-#### request JSON form
-
-```javascript
-{
- nickname: String, // 새 닉네임
-}
-```
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: "edit user nickname successful",
-}
-```
-
-#### Errors
-
-- 400 "wrong nickname"
-- 400 "such user id does not exist"
-- 403 "not logged in"
-- 500 "internal server error"
-
-### `/editProfileImg/getPUrl` **(POST)**
-
-- 프로필 이미지를 업로드할 수 있는 Presigned-url을 발급합니다.
-- 프로필 사진은 아래 규칙을 만족해야 함.
- 1. 파일 형식은 image/png, image/jpg, image/jpeg 중 하나
- 2. 파일 크기는 최대 50 MB
-
-#### URL Parameters
-
-- type : 업로드할 이미지 type
-
-#### request JSON form
-
-```javascript
-{
- url: String, // pre-signed url
- fields: Object, // post fields
-}
-```
-
-#### Errors
-
-- 500 "internal server error"
-
-### `/editProfileImg/done` **(GET)**
-
-- 프로필 이미지가 S3에 정상적으로 업로드가 되었는지 확인합니다.
-
-#### URL Parameters
-
-- 없음
-
-#### request JSON form
-
-```javascript
-{
- result: Boolean, // 정상적으로 업로드 되었으면 true
- profileImageUrl?: user._id, // 정상적으로 업로드 되었으면 새 프로필 이미지 파일명, 그렇지 않은 경우 undefined
-}
-```
-
-#### Errors
-
-- 500 "internal server error"
-
-### `/` **(GET)** (for dev)
-
-- 사용자 전체 리스트를 반환함.
-
-#### URL Parameters
-
-- 없음
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: User[], // 전체 사용자 리스트
-}
-```
-
-#### Errors
-
-- 없음
-
-### `/rooms` **(GET)** (for dev)
-
-- 사용자의 방 리스트를 반환함.
-
-#### URL Parameters
-
-- id : User document의 id
-
-#### Response
-
-```javascript
-{
- id: String, // 요청된 id
- rooms: Room[], // 방 리스트
-}
-```
-
-#### Errors
-
-- 404 "user/rooms : such id does not exist"
-- 500 "user/rooms : internal server error"
-
-### `/:id` **(GET)** (for dev)
-
-- 사용자 정보를 반환함.
-
-#### URL Parameters
-
-- id : User document의 id
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: User, //id에 대응되는 사용자 정보
-}
-```
-
-#### Errors
-
-- 404 "user/:id : such id does not exist"
-- 500 "user/:id : internal server error"
-
-### `/:id/edit` **(POST)** (for dev)
-
-- 새 사용자 정보를 받아 업데이트함.
-
-#### URL Parameters
-
-- id : User document의 id
-
-#### request JSON form
-
-```javascript
-User; //수정할 사용자 정보
-```
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: "edit user successful",
-}
-```
-
-#### Errors
-
-- 400 "such id does not exist"
-
-### `/:id/ban` **(GET)** (for dev)
-
-- 해당 사용자를 밴함.
-
-#### URL Parameters
-
-- id : User document의 id
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: "The user banned successfully",
-}
-```
-
-#### Errors
-
-- 400 "The user does not exist"
-- 409 "The user is already banned"
-- 500 "User/ban : Error 500"
-
-### `/:id/unban` **(GET)** (for dev)
-
-- 해당 사용자를 밴 해제함.
-
-#### URL Parameters
-
-- id : User document의 id
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: "The user unbanned successfully",
-}
-```
-
-#### Errors
-
-- 400 "The user does not exist"
-- 409 "The user is already banned"
-- 500 "User/unban : Error 500"
-
-### `/:id/participate` **(POST)** (for dev)
-
-- 해당 사용자를 특정 방에 참여시킴.
-
-#### URL Parameters
-
-- id : User document의 id
-
-#### request JSON form
-
-```javascript
-{
- room: String, // Room document의 id
-}
-```
-
-#### Response
-
-```javascript
-{
- status: 200,
- data: "User/participate : Successful",
-}
-```
-
-#### Errors
-
-- 400 "User/participate : Bad request"
-- 400 "User/participate : No corresponding room"
-- 400 "The user does not exist"
-- 409 "The user already entered the room"
-- 500 "User/participate : Error 500"
diff --git a/src/routes/docs/utils.js b/src/routes/docs/utils.js
new file mode 100644
index 00000000..8181ceac
--- /dev/null
+++ b/src/routes/docs/utils.js
@@ -0,0 +1,12 @@
+const objectIdPattern = `^[a-fA-F\d]{24}$`;
+const roomsPattern = {
+ rooms: {
+ name: RegExp(
+ "^[A-Za-z0-9가-힣ㄱ-ㅎㅏ-ㅣ,.?! _~/#'\\\\@=\"\\-\\^()+*<>{}[\\]]{1,50}$"
+ ),
+ from: RegExp("^[A-Za-z0-9가-힣 -]{1,20}$"),
+ to: RegExp("^[A-Za-z0-9가-힣 -]{1,20}$"),
+ },
+};
+
+module.exports = { objectIdPattern, roomsPattern };
diff --git a/src/sampleGenerator/.gitignore b/src/sampleGenerator/.gitignore
new file mode 100644
index 00000000..2909449b
--- /dev/null
+++ b/src/sampleGenerator/.gitignore
@@ -0,0 +1,107 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# Next.js build output
+.next
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and *not* Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# MongoDB Dump
+dump/
diff --git a/src/sampleGenerator/README.md b/src/sampleGenerator/README.md
new file mode 100644
index 00000000..5afd5960
--- /dev/null
+++ b/src/sampleGenerator/README.md
@@ -0,0 +1,28 @@
+# taxiSampleGenerator
+
+이 node 프로그램은 SPARCS-Taxi 프로젝트를 위한 샘플 사용자, 방, 채팅 목록을 생성합니다.
+현재 이 프로그램으로 생성된 샘플 채팅 데이터는 입, 퇴장 메시지들과 일반 채팅 메시지들로만 구성되어 있습니다.
+
+**WARNING**
+스크립트 실행 시 기존에 MongoDB에 저장된 사용자, 방, 채팅 정보는 **삭제**됩니다!
+
+**SETUP**
+
+1. *(optional)* Root directory의 `.env.test` 파일에 다음 내용을 추가합니다.
+ ```
+ #방과 각각의 방의 채팅 개수
+ SAMPLE_NUM_OF_ROOMS=2
+ SAMPLE_NUM_OF_CHATS=200
+ #채팅 간 최대 시간 간격(단위: 초, 소수도 가능)
+ SAMPLE_MAXIMUM_INTERVAL_BETWEEN_CHATS=20
+ #새로운 채팅이 각각 입/퇴장 메시지일 확률(각각 10%)
+ SAMPLE_OCCURENCE_OF_JOIN=0.1
+ SAMPLE_OCCURENCE_OF_ABORT=0.1
+ ```
+1. sampleData.json에 장소, 유저, 방 데이터를 입력합니다.
+ javascript `User { "id": "sampleId", 사용자 id }`
+
+1. `pnpm start`로 샘플 채팅 데이터를 만들 수 있습니다.
+
+1. `pnpm run dumpDB`으로 현재 DB를 덤프할 수 있습니다.
+1. `pnpm run restoreDB`로 과거 DB를 덤프 파일로부터 복원할 수 있습니다.
diff --git a/src/sampleGenerator/index.js b/src/sampleGenerator/index.js
new file mode 100644
index 00000000..e83a9335
--- /dev/null
+++ b/src/sampleGenerator/index.js
@@ -0,0 +1,47 @@
+const {
+ generateUser,
+ generateRoom,
+ generateSampleLocations,
+ generateChats,
+} = require("./src/testData");
+const { connectDatabase } = require("../modules/stores/mongo");
+const { mongo: mongoUrl, numberOfChats, numberOfRooms } = require("./loadenv");
+
+const database = connectDatabase(mongoUrl);
+
+const fs = require("fs");
+const sampleData = JSON.parse(fs.readFileSync("./sampleData.json"));
+
+const main = async () => {
+ await database.db.dropDatabase();
+
+ const { users, locations } = sampleData;
+
+ const userOids = [];
+ const roomOids = [];
+
+ for (const [index, user] of users.entries()) {
+ const userOid = await generateUser(user.id, index + 1, user.isAdmin);
+ userOids.push(userOid);
+ }
+
+ const sampleLocationOids = await generateSampleLocations(locations);
+
+ for (const index of Array(numberOfRooms).keys()) {
+ const roomOid = await generateRoom(
+ sampleLocationOids,
+ index + 1,
+ 7,
+ userOids[0]
+ ); //하드코딩: 일주일 뒤에 출발하는 방(들)을 만듭니다.
+ roomOids.push(roomOid);
+ }
+
+ for (const roomOid of roomOids) {
+ await generateChats(roomOid, userOids, numberOfChats);
+ }
+ console.log("끝! 스크립트 실행을 중단하셔도 됩니다.");
+ process.exit(0);
+};
+
+database.on("open", main);
diff --git a/src/sampleGenerator/loadenv.js b/src/sampleGenerator/loadenv.js
new file mode 100644
index 00000000..0843789b
--- /dev/null
+++ b/src/sampleGenerator/loadenv.js
@@ -0,0 +1,13 @@
+// Root directory에 있는 .env.test 파일을 읽어옴
+require("dotenv").config({ path: "../../.env.test" });
+
+module.exports = {
+ mongo: process.env.DB_PATH, // required
+ numberOfRooms: parseInt(process.env.SAMPLE_NUM_OF_ROOMS ?? 2), // optional
+ numberOfChats: parseInt(process.env.SAMPLE_NUM_OF_CHATS ?? 200), // optional
+ maximumIntervalBtwChats: parseFloat(
+ process.env.SAMPLE_MAXIMUM_INTERVAL_BETWEEN_CHATS ?? 20
+ ), // optional
+ occurenceOfJoin: parseFloat(process.env.SAMPLE_OCCURENCE_OF_JOIN ?? 0.1), // optional
+ occurenceOfAbort: parseFloat(process.env.SAMPLE_OCCURENCE_OF_ABORT ?? 0.1), // optional
+};
diff --git a/src/sampleGenerator/package.json b/src/sampleGenerator/package.json
new file mode 100644
index 00000000..3c7473bc
--- /dev/null
+++ b/src/sampleGenerator/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "taxisamplegenerator",
+ "version": "1.0.0",
+ "description": "sample generator",
+ "main": "index.js",
+ "scripts": {
+ "preinstall": "npx only-allow pnpm",
+ "start": "node index.js",
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "dumpDB": "node tools/dump.js",
+ "restoreDB": "node tools/restore.js"
+ },
+ "keywords": [
+ "test"
+ ],
+ "license": "ISC"
+}
diff --git a/src/sampleGenerator/sampleData.json b/src/sampleGenerator/sampleData.json
new file mode 100644
index 00000000..546812cd
--- /dev/null
+++ b/src/sampleGenerator/sampleData.json
@@ -0,0 +1,112 @@
+{
+ "users": [
+ {
+ "id": "sunday",
+ "isAdmin": true
+ },
+ {
+ "id": "monday",
+ "isAdmin": true
+ },
+ {
+ "id": "tuesday",
+ "isAdmin": true
+ },
+ {
+ "id": "wednesday",
+ "isAdmin": true
+ }
+ ],
+ "locations": [
+ {
+ "koName": "택시승강장",
+ "enName": "Taxi Stand",
+ "longitude": 127.359507,
+ "latitude": 36.373199
+ },
+ {
+ "koName": "대전역",
+ "enName": "Daejeon Station",
+ "longitude": 127.434522,
+ "latitude": 36.331894
+ },
+ {
+ "koName": "갤러리아 타임월드",
+ "enName": "Galleria Timeworld",
+ "longitude": 127.378188,
+ "latitude": 36.351938
+ },
+ {
+ "koName": "궁동 로데오거리",
+ "enName": "Gung-dong Rodeo Street",
+ "longitude": 127.350161,
+ "latitude": 36.362785
+ },
+ {
+ "koName": "대전복합터미널",
+ "enName": "Daejeon Terminal Complex",
+ "longitude": 127.350161,
+ "latitude": 36.362785
+ },
+ {
+ "koName": "만년중학교",
+ "enName": "Mannyon Middle School",
+ "longitude": 127.375993,
+ "latitude": 36.366990
+ },
+ {
+ "koName": "서대전역",
+ "enName": "Seodaejeon Station",
+ "longitude": 127.403933,
+ "latitude": 36.322517
+ },
+ {
+ "koName": "신세계백화점",
+ "enName": "Shinsegae Department Store",
+ "longitude": 127.381905,
+ "latitude": 36.375168
+ },
+ {
+ "koName": "오리연못",
+ "enName": "Duck Pond",
+ "longitude": 127.362371,
+ "latitude": 36.367715
+ },
+ {
+ "koName": "월평역",
+ "enName": "Wolpyeong Station",
+ "longitude": 127.364352,
+ "latitude": 36.358271
+ },
+ {
+ "koName": "유성구청",
+ "enName": "Yuseong-gu Office",
+ "longitude": 127.356384,
+ "latitude": 36.362084
+ },
+ {
+ "koName": "유성 고속버스터미널",
+ "enName": "Yuseong Express Bus Terminal",
+ "longitude": 127.336467,
+ "latitude": 36.358279
+ },
+ {
+ "koName": "유성 시외버스터미널",
+ "enName": "Yuseong Intercity Bus Terminal",
+ "longitude": 127.335971,
+ "latitude": 36.355604
+ },
+ {
+ "koName": "대전청사 고속버스터미널",
+ "enName": "Government Complex Express Bus Terminal",
+ "longitude": 127.390504,
+ "latitude": 36.361462
+ },
+ {
+ "koName": "대전청사 시외버스터미널",
+ "enName": "Government Complex Intercity Bus Terminal",
+ "longitude": 127.379759,
+ "latitude": 36.361512
+ }
+ ]
+}
diff --git a/src/sampleGenerator/src/testData.js b/src/sampleGenerator/src/testData.js
new file mode 100644
index 00000000..1209c52a
--- /dev/null
+++ b/src/sampleGenerator/src/testData.js
@@ -0,0 +1,199 @@
+const {
+ userModel,
+ roomModel,
+ locationModel,
+ chatModel,
+} = require("../../modules/stores/mongo");
+const { generateProfileImageUrl } = require("../../modules/modifyProfile");
+
+const {
+ maximumIntervalBtwChats,
+ occurenceOfJoin,
+ occurenceOfAbort,
+} = require("../loadenv");
+
+const generateUser = async (id, num, isAdmin) => {
+ const newUser = new userModel({
+ id: id,
+ name: `${id}-name`,
+ nickname: `${id}-nickname`,
+ profileImageUrl: generateProfileImageUrl(),
+ joinat: Date.now(),
+ subinfo: {
+ kaist: new String(20230000 + num), // ^-^
+ sparcs: "",
+ facebook: "",
+ twitter: "",
+ },
+ email: `${id}@kaist.ac.kr`,
+ isAdmin: isAdmin,
+ });
+ await newUser.save();
+ return newUser._id;
+};
+
+const generateSampleLocations = async (locations) => {
+ if (locations.length === 0) {
+ console.log("Please provide location(s)!");
+ }
+
+ for (const location of locations) {
+ const locationDocument = new locationModel({
+ koName: location.koName,
+ enName: location.enName,
+ longitude: location.longitude,
+ latitude: location.latitude,
+ });
+ await locationDocument.save();
+ }
+
+ const locationDocuments = await locationModel.find().lean();
+ return locationDocuments.map((locationDocument) => locationDocument._id);
+};
+
+const generateRoom = async (sampleLocationOids, num, daysAfter, creatorId) => {
+ const date = new Date();
+ date.setDate(date.getDate() + daysAfter);
+
+ let fromIdx = 0;
+ let toIdx = 0;
+
+ while (fromIdx === toIdx) {
+ fromIdx = Math.floor(Math.random() * sampleLocationOids.length);
+ toIdx = Math.floor(Math.random() * sampleLocationOids.length);
+ }
+
+ const newRoom = new roomModel({
+ name: `test-${num}`,
+ from: sampleLocationOids[fromIdx],
+ to: sampleLocationOids[toIdx],
+ time: date,
+ part: [{ user: creatorId }],
+ madeat: Date.now(),
+ maxPartLength: 4,
+ });
+ await newRoom.save();
+ return newRoom._id;
+};
+
+const joinUserToRoom = async (userIdsInRoom, userIdsOutRoom, roomId) => {
+ // 들어올 사용자를 무작위로 선택
+ const authorIdx = Math.floor(Math.random() * userIdsOutRoom.length);
+ const userOid = userIdsOutRoom[authorIdx];
+
+ // 방, 유저 상태 갱신
+ userIdsInRoom.push(userOid);
+ userIdsOutRoom.splice(authorIdx, 1);
+ const user = await userModel.findById(userOid, "ongoingRoom");
+ user.ongoingRoom.push(roomId);
+ await user.save();
+
+ return { userIdsInRoom, userIdsOutRoom, userOid };
+};
+
+const abortUserfromRoom = async (userIdsInRoom, userIdsOutRoom, roomId) => {
+ // 나갈 사용자를 무작위로 선택
+ const authorIdx = Math.floor(Math.random() * userIdsInRoom.length);
+ const userOid = userIdsInRoom[authorIdx];
+
+ // 방, 유저 상태 갱신
+ userIdsOutRoom.push(userOid);
+ userIdsInRoom.splice(authorIdx, 1);
+ const user = await userModel.findById(userOid, "ongoingRoom");
+ user.ongoingRoom.splice(user.ongoingRoom.indexOf(roomId), 1);
+ await user.save();
+
+ return { userIdsInRoom, userIdsOutRoom, userOid };
+};
+
+const generateNormalChat = async (i, roomId, userOid, time) => {
+ const user = await userModel.findById(userOid);
+ const newChat = new chatModel({
+ roomId: roomId,
+ type: "text",
+ authorId: user._id,
+ content: `안녕하세요! (${i}번째 메시지)`,
+ time: time,
+ inValid: false,
+ });
+ await newChat.save();
+};
+
+const generateJoinAbortChat = async (roomId, userOid, isJoining, time) => {
+ const user = await userModel.findById(userOid);
+ const newChat = new chatModel({
+ roomId: roomId,
+ type: isJoining ? "in" : "out",
+ authorId: user._id,
+ content: user.id,
+ time: time,
+ isValid: false,
+ });
+ await newChat.save();
+};
+
+const generateChats = async (roomId, userOids, numOfChats) => {
+ const roomPopulateQuery = [{ path: "part", select: "id name nickname -_id" }];
+ const room = await roomModel.findById(roomId).populate(roomPopulateQuery);
+
+ let userIdsInRoom = [];
+ let userIdsOutRoom = userOids.map((userOid) => userOid);
+ let lastTime = Date.now();
+ const maximumIntervalBtwChatsMilliseconds = 1000 * maximumIntervalBtwChats;
+
+ for (const i of Array(numOfChats).keys()) {
+ lastTime += Math.floor(Math.random() * maximumIntervalBtwChatsMilliseconds);
+ const event = Math.random();
+
+ if (
+ userIdsInRoom.length === 0 ||
+ (event < occurenceOfJoin && userIdsOutRoom.length !== 0)
+ ) {
+ // 더 들어올 사용자가 있을 경우, 더 들어옴
+ // 방, 유저 상태 갱신
+ let userOid;
+ ({ userIdsInRoom, userIdsOutRoom, userOid } = await joinUserToRoom(
+ userIdsInRoom,
+ userIdsOutRoom,
+ roomId
+ ));
+ // 입장 메시지 생성
+ await generateJoinAbortChat(roomId, userOid, true, lastTime);
+ } else if (
+ occurenceOfJoin <= event &&
+ event < occurenceOfJoin + occurenceOfAbort &&
+ userIdsInRoom.length > 1
+ ) {
+ // 나갈 사용자가 있을 경우, 나감
+ // 방, 유저 상태 갱신
+ let userOid;
+ ({ userIdsInRoom, userIdsOutRoom, userOid } = await abortUserfromRoom(
+ userIdsInRoom,
+ userIdsOutRoom,
+ roomId
+ ));
+ // 퇴장 메시지 생성
+ await generateJoinAbortChat(roomId, userOid, false, lastTime);
+ } else {
+ // 방이 비어있지 않을 경우, 일반 채팅 메시지를 만듦
+ if (userIdsInRoom.length !== 0) {
+ const authorIdx = Math.floor(Math.random() * userIdsInRoom.length);
+ const user = userIdsInRoom[authorIdx];
+ await generateNormalChat(i, roomId, user, lastTime);
+ }
+ }
+ }
+ // 현재 참여중인 사용자 기준으로 방의 part 리스트를 업데이트함
+ room.part = userIdsInRoom.map((userOid) => {
+ return { user: userOid };
+ });
+ await room.save();
+ return;
+};
+
+module.exports = {
+ generateUser,
+ generateRoom,
+ generateSampleLocations,
+ generateChats,
+};
diff --git a/src/sampleGenerator/tools/dump.js b/src/sampleGenerator/tools/dump.js
new file mode 100644
index 00000000..7d26d802
--- /dev/null
+++ b/src/sampleGenerator/tools/dump.js
@@ -0,0 +1,20 @@
+const util = require("util");
+const path = require("path");
+const exec = util.promisify(require("child_process").exec);
+const { mongo: mongoUrl } = require("../loadenv");
+
+const main = async () => {
+ const { stdout, stderr } = await exec(
+ `mongodump ${mongoUrl} --out ${path.resolve("dump")}`
+ );
+ console.log("dump 디렉토리에 데이터베이스 데이터를 덤프했습니다.");
+ process.exit(0);
+};
+
+try {
+ main();
+} catch {
+ console.log(
+ "DB 연결 주소가 올바르지 않습니다. DB 연결 주소를 다시 한 번 확인해주세요."
+ );
+}
diff --git a/src/sampleGenerator/tools/restore.js b/src/sampleGenerator/tools/restore.js
new file mode 100644
index 00000000..5c14c98b
--- /dev/null
+++ b/src/sampleGenerator/tools/restore.js
@@ -0,0 +1,23 @@
+const util = require("util");
+const path = require("path");
+const exec = util.promisify(require("child_process").exec);
+const { mongo: mongoUrl } = require("../loadenv");
+
+const main = async () => {
+ const dbName = mongoUrl.split("/").pop();
+ const { stdout, stderr } = await exec(
+ `mongorestore ${mongoUrl} ${path.resolve("dump", dbName)}`
+ );
+ console.log(
+ "dump 디렉토리로부터 데이터베이스 정보를 성공적으로 복원했습니다."
+ );
+ process.exit(0);
+};
+
+try {
+ main();
+} catch {
+ console.log(
+ "DB를 덤프해올 디렉토리가 존재하지 않습니다. 경로를 다시 한 번 확인해주세요."
+ );
+}
diff --git a/src/services/chats.js b/src/services/chats.js
index abcbd073..ca74d774 100644
--- a/src/services/chats.js
+++ b/src/services/chats.js
@@ -273,7 +273,7 @@ const uploadChatImgDoneHandler = async (req, res) => {
if (!user) {
return res
.status(500)
- .send("Chat/uploadChatImg/getPUrl : internal server error");
+ .send("Chat/uploadChatImg/done : internal server error");
}
if (!chat) {
return res.status(404).json({
@@ -294,7 +294,7 @@ const uploadChatImgDoneHandler = async (req, res) => {
if (err) {
return res
.status(500)
- .send("Chat/uploadChatImg/getPUrl : internal server error");
+ .send("Chat/uploadChatImg/done : internal server error");
}
chat.content = chat._id;
diff --git a/src/services/rooms.js b/src/services/rooms.js
index d4b7557e..a2562c67 100644
--- a/src/services/rooms.js
+++ b/src/services/rooms.js
@@ -110,13 +110,13 @@ const publicInfoHandler = async (req, res) => {
res.send(formatSettlement(roomObject, { includeSettlement: false }));
} else {
res.status(404).json({
- error: "Rooms/info : id does not exist",
+ error: "Rooms/publicInfo : id does not exist",
});
}
} catch (err) {
logger.error(err);
res.status(500).json({
- error: "Rooms/info : internal server error",
+ error: "Rooms/publicInfo : internal server error",
});
}
};
@@ -153,7 +153,7 @@ const joinHandler = async (req, res) => {
// 사용자의 참여중인 진행중인 방이 5개 이상이면 오류를 반환합니다.
if (user.ongoingRoom.length >= 5) {
return res.status(400).json({
- error: "Rooms/create : participating in too many rooms",
+ error: "Rooms/join : participating in too many rooms",
});
}
@@ -244,7 +244,7 @@ const abortHandler = async (req, res) => {
.indexOf(user._id.toString());
if (roomPartIndex === -1) {
return res.status(403).json({
- error: "Rooms/info : did not joined the room",
+ error: "Rooms/abort : did not joined the room",
});
}
@@ -254,7 +254,7 @@ const abortHandler = async (req, res) => {
// 방의 출발시간이 지나고 정산이 되지 않으면 나갈 수 없음
if (isOvertime(room, req.timestamp) && userOngoingRoomIndex !== -1) {
return res.status(400).json({
- error: "Rooms/info : cannot exit room. Settlement is not done",
+ error: "Rooms/abort : cannot exit room. Settlement is not done",
});
}
@@ -377,7 +377,6 @@ const searchHandler = async (req, res) => {
.limit(1000)
.populate(roomPopulateOption)
.lean();
-
res.json(
rooms.map((room) => formatSettlement(room, { includeSettlement: false }))
);
diff --git a/src/services/users.js b/src/services/users.js
index 895f4051..4d8486dc 100644
--- a/src/services/users.js
+++ b/src/services/users.js
@@ -18,13 +18,13 @@ const agreeOnTermsOfServiceHandler = async (req, res) => {
res
.status(200)
.send(
- "User/agreeOnTermsOfService : agree on Terms of Service successful"
+ "Users/agreeOnTermsOfService : agree on Terms of Service successful"
);
} else {
- res.status(400).send("User/agreeOnTermsOfService : already agreed");
+ res.status(400).send("Users/agreeOnTermsOfService : already agreed");
}
} catch {
- res.status(500).send("User/agreeOnTermsOfService : internal server error");
+ res.status(500).send("Users/agreeOnTermsOfService : internal server error");
}
};
@@ -36,7 +36,9 @@ const getAgreeOnTermsOfServiceHandler = async (req, res) => {
const agreeOnTermsOfService = user.agreeOnTermsOfService === true;
res.json({ agreeOnTermsOfService });
} catch {
- res.status(500).send("/getAgreeOnTermsOfService : internal server error");
+ res
+ .status(500)
+ .send("Users/getAgreeOnTermsOfService : internal server error");
}
};
@@ -55,13 +57,15 @@ const editNicknameHandler = async (req, res) => {
req.timestamp
);
- res.status(200).send("User/editNickname : edit user nickname successful");
+ res
+ .status(200)
+ .send("Users/editNickname : edit user nickname successful");
} else {
- res.status(400).send("User/editNickname : such user id does not exist");
+ res.status(400).send("Users/editNickname : such user id does not exist");
}
} catch (err) {
logger.error(err);
- res.status(500).send("User/editNickname : internal server error");
+ res.status(500).send("Users/editNickname : internal server error");
}
};
@@ -81,13 +85,13 @@ const editAccountHandler = async (req, res) => {
newAccount
);
- res.status(200).send("User/editAccount : edit user account successful");
+ res.status(200).send("Users/editAccount : edit user account successful");
} else {
- res.status(400).send("User/editAccount : such user id does not exist");
+ res.status(400).send("Users/editAccount : such user id does not exist");
}
} catch (err) {
logger.error(err);
- res.status(500).send("User/editAccount : internal server error");
+ res.status(500).send("Users/editAccount : internal server error");
}
};
@@ -98,13 +102,15 @@ const editProfileImgGetPUrlHandler = async (req, res) => {
if (!user) {
return res
.status(500)
- .send("User/editProfileImg/getPUrl : internal server error");
+ .send("Users/editProfileImg/getPUrl : internal server error");
}
const key = `profile-img/${user._id}`;
const data = await aws.getUploadPUrlPost(key, type);
res.json({ url: data });
} catch (e) {
- res.status(500).send("User/editProfileImg/getPUrl : internal server error");
+ res
+ .status(500)
+ .send("Users/editProfileImg/getPUrl : internal server error");
}
};
@@ -114,7 +120,7 @@ const editProfileImgDoneHandler = async (req, res) => {
if (!user) {
return res
.status(500)
- .send("User/editProfileImg/done : internal server error");
+ .send("Users/editProfileImg/done : internal server error");
}
const key = `profile-img/${user._id}`;
aws.foundObject(key, async (err) => {
@@ -122,25 +128,25 @@ const editProfileImgDoneHandler = async (req, res) => {
logger.error(err);
return res
.status(500)
- .send("User/editProfileImg/done : internal server error");
+ .send("Users/editProfileImg/done : internal server error");
}
const userAfter = await userModel.findOneAndUpdate(
{ id: req.userId },
- { profileImageUrl: user._id },
+ { profileImageUrl: aws.getS3Url(`/${key}?token=${req.timestamp}`) },
{ new: true }
);
if (!userAfter) {
return res
.status(500)
- .send("User/editProfileImg/done : internal server error");
+ .send("Users/editProfileImg/done : internal server error");
}
res.json({
result: true,
- profileImageUrl: userAfter._id,
+ profileImageUrl: userAfter.profileImageUrl,
});
});
} catch (e) {
- res.status(500).send("User/editProfileImg/done : internal server error");
+ res.status(500).send("Users/editProfileImg/done : internal server error");
}
};
@@ -154,11 +160,13 @@ const resetNicknameHandler = async (req, res) => {
if (!result)
return res
.status(400)
- .send("User/resetNickname : such user does not exist");
- res.status(200).send("User/resetNickname : reset user nickname successful");
+ .send("Users/resetNickname : such user does not exist");
+ res
+ .status(200)
+ .send("Users/resetNickname : reset user nickname successful");
} catch (err) {
logger.error(err);
- res.status(500).send("User/resetNickname : internal server error");
+ res.status(500).send("Users/resetNickname : internal server error");
}
};
@@ -172,12 +180,12 @@ const resetProfileImgHandler = async (req, res) => {
if (!result)
return res
.status(400)
- .send("User/resetProfileImg : such user does not exist");
+ .send("Users/resetProfileImg : such user does not exist");
res
.status(200)
- .send("User/resetProfileImg : reset user profile image successful");
+ .send("Users/resetProfileImg : reset user profile image successful");
} catch (err) {
- res.status(500).send("User/resetProfileImg : internal server error");
+ res.status(500).send("Users/resetProfileImg : internal server error");
}
};
diff --git a/test/services/users.js b/test/services/users.js
index 7667eb49..393a79e5 100644
--- a/test/services/users.js
+++ b/test/services/users.js
@@ -15,7 +15,7 @@ describe("[users] 1.agreeOnTermsOfServiceHandler", () => {
it("should return correct response from handler", async () => {
const testUser1 = await userGenerator("test1", testData);
const msg =
- "User/agreeOnTermsOfService : agree on Terms of Service successful";
+ "Users/agreeOnTermsOfService : agree on Terms of Service successful";
let req = httpMocks.createRequest({
userId: testUser1.id,
});
@@ -50,7 +50,7 @@ describe("[users] 3.editNicknameHandler", () => {
it("should return correct response from handler", async () => {
const testUser1 = await userModel.findOne({ id: "test1" });
- const msg = "User/editNickname : edit user nickname successful";
+ const msg = "Users/editNickname : edit user nickname successful";
let req = httpMocks.createRequest({
userId: testUser1.id,
body: {
@@ -77,7 +77,7 @@ describe("[users] 4.editAccountHandler", () => {
it("should return correct response from handler", async () => {
const testUser1 = await userModel.findOne({ id: "test1" });
- const msg = "User/editAccount : edit user account successful";
+ const msg = "Users/editAccount : edit user account successful";
let req = httpMocks.createRequest({
userId: testUser1.id,
body: {
diff --git a/test/utils.js b/test/utils.js
index b3920e83..e537913b 100644
--- a/test/utils.js
+++ b/test/utils.js
@@ -7,8 +7,9 @@ const {
connectDatabase,
} = require("../src/modules/stores/mongo");
const { generateProfileImageUrl } = require("../src/modules/modifyProfile");
+const { mongo: mongoUrl } = require("../loadenv");
-connectDatabase();
+connectDatabase(mongoUrl);
// 테스트를 위한 유저 생성 함수
const userGenerator = async (username, testData) => {