From 2898b68c32061b0293e41cce83384296d3aa0009 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 7 Jul 2023 21:28:42 +0900 Subject: [PATCH 01/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 1 - 1 file changed, 1 deletion(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index a9ff03a..24ca83f 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -96,7 +96,6 @@ exports.searchFarm = async(connection, keyword) => { const searchFarmQuery = ` SELECT FarmID, Name, - Picture_url, Price, SquaredMeters, LocationBig, From ba344e4190e9c1daf2fd89fb5a53c9129ece3c40 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 7 Jul 2023 21:42:22 +0900 Subject: [PATCH 02/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=20=EC=8B=9C=20=EC=82=AC=EC=A7=84=20=EB=B0=98=ED=99=98=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 24ca83f..5117b71 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -94,16 +94,23 @@ exports.selectFarmbyFarmInfo = async(connection, sameFarmInfo) =>{ exports.searchFarm = async(connection, keyword) => { const searchFarmQuery = ` - SELECT FarmID, - Name, - Price, - SquaredMeters, - LocationBig, - LocationMid, - LocationSmall, - Likes - FROM Farm - WHERE Name LIKE ? OR LocationBig LIKE ? OR LocationMid LIKE ? OR LocationSmall LIKE ?;` + SELECT f.FarmID, + f.Name, + f.Price, + f.SquaredMeters, + f.LocationBig, + f.LocationMid, + f.LocationSmall, + f.Likes, + fp.Picture_url + FROM Farm f + LEFT JOIN ( + SELECT FarmID, Picture_url + FROM FarmPictures + GROUP BY FarmID + ) fp ON f.FarmID = fp.FarmID + WHERE f.Name LIKE ? OR f.LocationBig LIKE ? OR f.LocationMid LIKE ? OR f.LocationSmall LIKE ?;`; + console.log(keyword); const [farmRow] = await connection.query(searchFarmQuery,[keyword,keyword,keyword,keyword]) console.log(farmRow); From f129116dd651577026c1946f1f40f0b99ba9aa3a Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 02:18:16 +0900 Subject: [PATCH 03/52] Add curUseList & pastUseList APIs in Reserve --- components/reserve/reserveController.js | 50 +++++++++++++++++++++++-- components/reserve/reserveDao.js | 34 ++++++++++++++++- components/reserve/reserveProvider.js | 21 ++++++++++- components/reserve/reserveRoute.js | 8 ++++ components/reserve/reserveService.js | 38 ++++++++++++++++++- config/resStatus_5000.js | 4 ++ 6 files changed, 149 insertions(+), 6 deletions(-) diff --git a/components/reserve/reserveController.js b/components/reserve/reserveController.js index f29ee80..934aa1a 100644 --- a/components/reserve/reserveController.js +++ b/components/reserve/reserveController.js @@ -68,8 +68,9 @@ exports.farmsList = async function (req, res) { return(res.send(errResponse(resStatus.SERVER_ERROR))); } } + /** - * [PUT] /reserve/cancel:reserveid + * [PUT] /reserve/cancel/:reserveid */ exports.cancel = async function (req, res) { try { @@ -89,9 +90,8 @@ exports.cancel = async function (req, res) { } } - /** - * [PUT] /reserve/status/:id/:status + * [PUT] /reserve/:status/:reserveid */ exports.editStatus = async function (req, res) { try { @@ -127,4 +127,48 @@ exports.editStatus = async function (req, res) { return(res.send(errResponse(resStatus.SERVER_ERROR))); } +} + +/** + * [GET] /reserve/current/list/:email + */ +exports.currentUse = async function (req, res) { + // try { + let userEmail = req.params.email; + // const invalidation = await validator.oneParams(email); + // if (invalidation) return (res.send(errResponse(invalidation))); + + if(validator.isValidEmail(userEmail) == false) + return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); + + const currentUseResult = await reserveService.currentUse(userEmail); + + return(res.send(currentUseResult)); + // } + // catch (e) { + // return(res.send(errResponse(resStatus.SERVER_ERROR))); + // } + +} + +/** + * [GET] /reserve/past/list/:email + */ +exports.pastUse = async function (req, res) { + try { + let userEmail = req.params.email; + // const invalidation = await validator.oneParams(email); + // if (invalidation) return (res.send(errResponse(invalidation))); + + if(validator.isValidEmail(userEmail) == false) + return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); + + const pastUseResult = await reserveService.pastUse(userEmail); + + return(res.send(pastUseResult)); + } + catch (e) { + return(res.send(errResponse(resStatus.SERVER_ERROR))); + } + } \ No newline at end of file diff --git a/components/reserve/reserveDao.js b/components/reserve/reserveDao.js index 2c5cd0c..3a8acce 100644 --- a/components/reserve/reserveDao.js +++ b/components/reserve/reserveDao.js @@ -70,11 +70,43 @@ async function editReservationStatus(connection, updatedStatusInfo) { return updatedStatusResult; } +async function currentUseList(connection, email) { + const currentUseListQuery = ` + SELECT Reserveid, Farmid, UserEmail, OwnerEmail, startAt, endAt + FROM Reservation + WHERE NOW() > startAt + AND NOW() < endAt + AND Status = 'A' + AND UserEmail = ?; + `; + + const currentUseListResult = await connection.query(currentUseListQuery, email); + + return currentUseListResult; +} + +async function pastUseList(connection, email) { + const pastUseListQuery = ` + SELECT Reserveid, Farmid, UserEmail, OwnerEmail, startAt, endAt + FROM Reservation + WHERE NOW() > startAt + AND NOW() > endAt + AND Status = 'A' + AND UserEmail = ?; + `; + + const pastUseListResult = await connection.query(pastUseListQuery, email); + + return pastUseListResult; + } + module.exports = { insertReservation, selectReservedClients, selectReservedFarms, selectReservedItem, cancelReservation, - editReservationStatus + editReservationStatus, + currentUseList, + pastUseList, } \ No newline at end of file diff --git a/components/reserve/reserveProvider.js b/components/reserve/reserveProvider.js index bc79ce8..26b4f2e 100644 --- a/components/reserve/reserveProvider.js +++ b/components/reserve/reserveProvider.js @@ -28,9 +28,28 @@ async function itembyReserveId (reserveID) { return reservedItem; } +async function currentUseListByEmail (email) { + const connection = await pool.getConnection(async conn => conn); + const [currentUseFarms] = await reserveDao.currentUseList(connection, email); + + connection.release(); + + return currentUseFarms; +} + +async function pastUseListByEmail (email) { + const connection = await pool.getConnection(async conn => conn); + const [pastUseList] = await reserveDao.pastUseList(connection, email); + + connection.release(); + + return pastUseList; +} module.exports = { farmsbyEmail, clientsbyFarmID, - itembyReserveId + itembyReserveId, + currentUseListByEmail, + pastUseListByEmail, }; diff --git a/components/reserve/reserveRoute.js b/components/reserve/reserveRoute.js index aa66fb9..f3acefe 100644 --- a/components/reserve/reserveRoute.js +++ b/components/reserve/reserveRoute.js @@ -16,4 +16,12 @@ module.exports = function(app){ // 5. 예약 상태 변경 - 예약 승낙, 예약 보류, 예약 거부 app.put('/reserve/:status/:reserveid', reserve.editStatus); + // 6. 유저 별 현재 이용중인 농장 목록 + app.get('/reserve/current/list/:email', reserve.currentUse); + + // 7. 유저 별 과거 이용중인 농장 목록 + app.get('/reserve/past/list/:email', reserve.pastUse); + + // 8. 농장별 예약 불가 기간 조회 + // app.get('/reserve/unavailable/farmid', reserve.unavaliablePeriod); }; \ No newline at end of file diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index e60b6f7..8d9b777 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -125,10 +125,46 @@ async function editStatus(reserveId, status) { } +async function currentUse(email) { + // try { + const currentUseFarms = await reserveProvider.currentUseListByEmail(email); + + console.log(currentUseFarms, "currentUseFarms"); + + if (!currentUseFarms || currentUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_CURRENT_LIST_EMPTY, null); + + return response(resStatus_5000.RESERVE_USE_CURRENT_LIST, currentUseFarms); + + // } + // catch (e) { + // return errResponse(resStatus.DB_ERROR); + // } + +} + +async function pastUse(email) { + try { + const pastUseFarms = await reserveProvider.pastUseListByEmail(email); + + console.log(pastUseFarms, "pastUseFarms"); + + if (!pastUseFarms || pastUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_PAST_LIST_EMPTY, null); + + return response(resStatus_5000.RESERVE_USE_PAST_LIST, pastUseFarms); + + } + catch (e) { + return errResponse(resStatus.DB_ERROR); + } + +} + module.exports = { request, clientsList, farmsList, cancel, - editStatus + editStatus, + currentUse, + pastUse }; \ No newline at end of file diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index 2818d79..b053d84 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -54,6 +54,10 @@ module.exports = { RESERVE_STATUS_HOLD_SUCCESS : { "isSuccess": true, "code": 5356, "message": "농장 예약을 보류하였습니다." }, RESERVE_STATUS_DENIED_SUCCESS : { "isSuccess": true, "code": 5357, "message": "농장 예약 거부했습니다." }, RESERVE_DATE_FULL : { "isSuccess": true, "code": 5358, "message": "요청하신 기간에는 이미 다른 예약이 잡혀있습니다." }, + RESERVE_USE_CURRENT_LIST : { "isSuccess": true, "code": 5359, "message": "현재 이용 중인 농장 목록을 불러왔어요." }, + RESERVE_USE_PAST_LIST : { "isSuccess": true, "code": 5360, "message": "과거 이용했던 농장 목록을 불러왔어요." }, + RESERVE_USE_CURRENT_LIST_EMPTY : { "isSuccess": true, "code": 5361, "message": "현재 이용 중인 농장이 없어요." }, + RESERVE_USE_PAST_LIST_EMPTY : { "isSuccess": true, "code": 5362, "message": "과거 이용했던 농장이 없어요." }, //district DISTRICT_AUTH_FAIL : { "isSuccess": false, "code": 5400, "message": "주소 유효성 검사에 실패하였습니다."}, From e29ab02d554bf674ce106b9b0041e7de6b2c62b0 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 04:32:02 +0900 Subject: [PATCH 04/52] Add unavailablePeriod API in Reserve --- components/reserve/reserveController.js | 33 +++++++++++++++++++------ components/reserve/reserveDao.js | 23 ++++++++++++++--- components/reserve/reserveProvider.js | 10 ++++++++ components/reserve/reserveRoute.js | 2 +- components/reserve/reserveService.js | 31 +++++++++++++++-------- config/resStatus_5000.js | 1 + 6 files changed, 78 insertions(+), 22 deletions(-) diff --git a/components/reserve/reserveController.js b/components/reserve/reserveController.js index 934aa1a..7b2e895 100644 --- a/components/reserve/reserveController.js +++ b/components/reserve/reserveController.js @@ -133,9 +133,9 @@ exports.editStatus = async function (req, res) { * [GET] /reserve/current/list/:email */ exports.currentUse = async function (req, res) { - // try { + try { let userEmail = req.params.email; - // const invalidation = await validator.oneParams(email); + // const invalidation = await validator.oneParams(userEmail); // if (invalidation) return (res.send(errResponse(invalidation))); if(validator.isValidEmail(userEmail) == false) @@ -144,10 +144,10 @@ exports.currentUse = async function (req, res) { const currentUseResult = await reserveService.currentUse(userEmail); return(res.send(currentUseResult)); - // } - // catch (e) { - // return(res.send(errResponse(resStatus.SERVER_ERROR))); - // } + } + catch (e) { + return(res.send(errResponse(resStatus.SERVER_ERROR))); + } } @@ -157,7 +157,7 @@ exports.currentUse = async function (req, res) { exports.pastUse = async function (req, res) { try { let userEmail = req.params.email; - // const invalidation = await validator.oneParams(email); + // const invalidation = await validator.oneParams(userEmail); // if (invalidation) return (res.send(errResponse(invalidation))); if(validator.isValidEmail(userEmail) == false) @@ -171,4 +171,23 @@ exports.pastUse = async function (req, res) { return(res.send(errResponse(resStatus.SERVER_ERROR))); } +} + +/** + * [GET] /reserve/unavailable/:farmid + */ +exports.unavaliablePeriod = async function (req, res) { + try { + let farmID = req.params.farmid; + // const invalidation = await validator.oneParams(farmID); + // if (invalidation) return (res.send(errResponse(invalidation))); + + const unavaliablePeriodResult = await reserveService.unavaliablePeriods(farmID); + + return(res.send(unavaliablePeriodResult)); + } + catch (e) { + return(res.send(errResponse(resStatus.SERVER_ERROR))); + } + } \ No newline at end of file diff --git a/components/reserve/reserveDao.js b/components/reserve/reserveDao.js index 3a8acce..9968438 100644 --- a/components/reserve/reserveDao.js +++ b/components/reserve/reserveDao.js @@ -74,8 +74,8 @@ async function currentUseList(connection, email) { const currentUseListQuery = ` SELECT Reserveid, Farmid, UserEmail, OwnerEmail, startAt, endAt FROM Reservation - WHERE NOW() > startAt - AND NOW() < endAt + WHERE DATE(NOW()) >= DATE(startAt) + AND DATE(NOW()) <= DATE(endAt) AND Status = 'A' AND UserEmail = ?; `; @@ -89,8 +89,8 @@ async function pastUseList(connection, email) { const pastUseListQuery = ` SELECT Reserveid, Farmid, UserEmail, OwnerEmail, startAt, endAt FROM Reservation - WHERE NOW() > startAt - AND NOW() > endAt + WHERE DATE(NOW()) > DATE(startAt) + AND DATE(NOW()) > DATE(endAt) AND Status = 'A' AND UserEmail = ?; `; @@ -100,6 +100,20 @@ async function pastUseList(connection, email) { return pastUseListResult; } + async function reservedPeriods(connection, farmID) { + const reservedPeriodsQuery = ` + SELECT startAt, endAt + FROM Reservation + WHERE DATE(NOW()) <= DATE(endAt) + AND Status = 'A' + AND FarmID = ?; + `; + + const reservedPeriodsResult = await connection.query(reservedPeriodsQuery, farmID); + + return reservedPeriodsResult; + } + module.exports = { insertReservation, selectReservedClients, @@ -109,4 +123,5 @@ module.exports = { editReservationStatus, currentUseList, pastUseList, + reservedPeriods, } \ No newline at end of file diff --git a/components/reserve/reserveProvider.js b/components/reserve/reserveProvider.js index 26b4f2e..0d3fee5 100644 --- a/components/reserve/reserveProvider.js +++ b/components/reserve/reserveProvider.js @@ -46,10 +46,20 @@ async function pastUseListByEmail (email) { return pastUseList; } +async function reservedPeriodByFarmID (farmID) { + const connection = await pool.getConnection(async conn => conn); + const [reservedPeriods] = await reserveDao.reservedPeriods(connection, farmID); + + connection.release(); + + return reservedPeriods; +} + module.exports = { farmsbyEmail, clientsbyFarmID, itembyReserveId, currentUseListByEmail, pastUseListByEmail, + reservedPeriodByFarmID, }; diff --git a/components/reserve/reserveRoute.js b/components/reserve/reserveRoute.js index f3acefe..5f93e1c 100644 --- a/components/reserve/reserveRoute.js +++ b/components/reserve/reserveRoute.js @@ -23,5 +23,5 @@ module.exports = function(app){ app.get('/reserve/past/list/:email', reserve.pastUse); // 8. 농장별 예약 불가 기간 조회 - // app.get('/reserve/unavailable/farmid', reserve.unavaliablePeriod); + app.get('/reserve/unavailable/:farmid', reserve.unavaliablePeriod); }; \ No newline at end of file diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index 8d9b777..56254f3 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -126,19 +126,17 @@ async function editStatus(reserveId, status) { } async function currentUse(email) { - // try { + try { const currentUseFarms = await reserveProvider.currentUseListByEmail(email); - console.log(currentUseFarms, "currentUseFarms"); - if (!currentUseFarms || currentUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_CURRENT_LIST_EMPTY, null); return response(resStatus_5000.RESERVE_USE_CURRENT_LIST, currentUseFarms); - // } - // catch (e) { - // return errResponse(resStatus.DB_ERROR); - // } + } + catch (e) { + return errResponse(resStatus.DB_ERROR); + } } @@ -146,8 +144,6 @@ async function pastUse(email) { try { const pastUseFarms = await reserveProvider.pastUseListByEmail(email); - console.log(pastUseFarms, "pastUseFarms"); - if (!pastUseFarms || pastUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_PAST_LIST_EMPTY, null); return response(resStatus_5000.RESERVE_USE_PAST_LIST, pastUseFarms); @@ -159,6 +155,20 @@ async function pastUse(email) { } +async function unavaliablePeriods(farmID) { + try { + let reservedPeriods = await reserveProvider.reservedPeriodByFarmID(farmID); + + if (!reservedPeriods || reservedPeriods.length < 1) reservedPeriods = null; + + return(response(resStatus_5000.RESERVE_UNAVALIABLE_PERIOD, reservedPeriods)); + } + catch (e) { + return(res.send(errResponse(resStatus.SERVER_ERROR))); + } + +} + module.exports = { request, clientsList, @@ -166,5 +176,6 @@ module.exports = { cancel, editStatus, currentUse, - pastUse + pastUse, + unavaliablePeriods, }; \ No newline at end of file diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index b053d84..30018b8 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -58,6 +58,7 @@ module.exports = { RESERVE_USE_PAST_LIST : { "isSuccess": true, "code": 5360, "message": "과거 이용했던 농장 목록을 불러왔어요." }, RESERVE_USE_CURRENT_LIST_EMPTY : { "isSuccess": true, "code": 5361, "message": "현재 이용 중인 농장이 없어요." }, RESERVE_USE_PAST_LIST_EMPTY : { "isSuccess": true, "code": 5362, "message": "과거 이용했던 농장이 없어요." }, + RESERVE_UNAVALIABLE_PERIOD : { "isSuccess": true, "code": 5363, "message": "해당 농장을 예약할 수 없는 기간들을 불러왔어요." }, //district DISTRICT_AUTH_FAIL : { "isSuccess": false, "code": 5400, "message": "주소 유효성 검사에 실패하였습니다."}, From 26522402a5f561becdeb601b6b31093e1ed21300 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 04:41:42 +0900 Subject: [PATCH 05/52] Edit reserve API 8's path --- components/reserve/reserveController.js | 8 ++++---- components/reserve/reserveRoute.js | 2 +- components/reserve/reserveService.js | 6 +++--- config/resStatus_5000.js | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/components/reserve/reserveController.js b/components/reserve/reserveController.js index 7b2e895..9691987 100644 --- a/components/reserve/reserveController.js +++ b/components/reserve/reserveController.js @@ -174,17 +174,17 @@ exports.pastUse = async function (req, res) { } /** - * [GET] /reserve/unavailable/:farmid + * [GET] /reserve/unbookable/:farmid */ -exports.unavaliablePeriod = async function (req, res) { +exports.unbookablePeriods = async function (req, res) { try { let farmID = req.params.farmid; // const invalidation = await validator.oneParams(farmID); // if (invalidation) return (res.send(errResponse(invalidation))); - const unavaliablePeriodResult = await reserveService.unavaliablePeriods(farmID); + const unbookablePeriodsResult = await reserveService.unbookablePeriods(farmID); - return(res.send(unavaliablePeriodResult)); + return(res.send(unbookablePeriodsResult)); } catch (e) { return(res.send(errResponse(resStatus.SERVER_ERROR))); diff --git a/components/reserve/reserveRoute.js b/components/reserve/reserveRoute.js index 5f93e1c..7ec1d37 100644 --- a/components/reserve/reserveRoute.js +++ b/components/reserve/reserveRoute.js @@ -23,5 +23,5 @@ module.exports = function(app){ app.get('/reserve/past/list/:email', reserve.pastUse); // 8. 농장별 예약 불가 기간 조회 - app.get('/reserve/unavailable/:farmid', reserve.unavaliablePeriod); + app.get('/reserve/unbookable/:farmid', reserve.unbookablePeriods); }; \ No newline at end of file diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index 56254f3..3af3d68 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -155,13 +155,13 @@ async function pastUse(email) { } -async function unavaliablePeriods(farmID) { +async function unbookablePeriods(farmID) { try { let reservedPeriods = await reserveProvider.reservedPeriodByFarmID(farmID); if (!reservedPeriods || reservedPeriods.length < 1) reservedPeriods = null; - return(response(resStatus_5000.RESERVE_UNAVALIABLE_PERIOD, reservedPeriods)); + return(response(resStatus_5000.RESERVE_UNBOOKABLE_PERIOD, reservedPeriods)); } catch (e) { return(res.send(errResponse(resStatus.SERVER_ERROR))); @@ -177,5 +177,5 @@ module.exports = { editStatus, currentUse, pastUse, - unavaliablePeriods, + unbookablePeriods, }; \ No newline at end of file diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index 30018b8..187ed0d 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -58,7 +58,7 @@ module.exports = { RESERVE_USE_PAST_LIST : { "isSuccess": true, "code": 5360, "message": "과거 이용했던 농장 목록을 불러왔어요." }, RESERVE_USE_CURRENT_LIST_EMPTY : { "isSuccess": true, "code": 5361, "message": "현재 이용 중인 농장이 없어요." }, RESERVE_USE_PAST_LIST_EMPTY : { "isSuccess": true, "code": 5362, "message": "과거 이용했던 농장이 없어요." }, - RESERVE_UNAVALIABLE_PERIOD : { "isSuccess": true, "code": 5363, "message": "해당 농장을 예약할 수 없는 기간들을 불러왔어요." }, + RESERVE_UNBOOKABLE_PERIOD : { "isSuccess": true, "code": 5363, "message": "해당 농장을 예약할 수 없는 기간들을 불러왔어요." }, //district DISTRICT_AUTH_FAIL : { "isSuccess": false, "code": 5400, "message": "주소 유효성 검사에 실패하였습니다."}, From a3beee2663dc0d765ab9dd6be4691283d2873e20 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 05:24:51 +0900 Subject: [PATCH 06/52] Edit newFarm API for db change --- components/farm/farmController.js | 27 ++++++++++++----------- components/farm/farmDao.js | 14 ++++++------ components/farm/farmService.js | 36 +++++++++++++++++++++++++++---- helpers/validator.js | 4 ++-- 4 files changed, 55 insertions(+), 26 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index cba8c2c..f424d8d 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -15,7 +15,7 @@ const dateAvailability = require('../../helpers/DateAvailability'); const userProvider = require('../user/userProvider'); exports.getFarmlist = async (req, res) => { - // try{ + try{ const email = req.params.email; const invalidation = await validator.oneParams(email); @@ -25,10 +25,10 @@ exports.getFarmlist = async (req, res) => { // console.log(FarmDetailResponse) return res.send(FarmListResponse); - // } - // catch (e) { - // res.send(errResponse(resStatus.SERVER_ERROR)); - // } + } + catch (e) { + res.send(errResponse(resStatus.SERVER_ERROR)); + } } exports.getFarmDetail = async (req, res) => { @@ -126,16 +126,17 @@ exports.editFarm = async(req, res) =>{ */ exports.newFarm = async function (req, res) { try { - const { name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid, locationSmall,description, category, tag } = req.body; + const { name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, file} = req.body; - const invalidation = await validator.newFarm(name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid); + const invalidation = await validator.newFarm(name, owner, price, squaredMeters, locationBig, locationMid); if (invalidation) return res.send(errResponse(invalidation)) - if (dateAvailability.isValidDatetype(startDate) == false || dateAvailability.isValidDatetype(endDate) == false) - return res.send(errResponse(resStatus_5000.DATE_TYPE_WEIRD)); - const farmDateErrorMessage = dateAvailability.validFarmDate(new Date(), new Date(startDate), new Date(endDate)) - if(farmDateErrorMessage != true) - return res.send(errResponse(farmDateErrorMessage)); + // Date Availability 유효성 검사 + // if (dateAvailability.isValidDatetype(startDate) == false || dateAvailability.isValidDatetype(endDate) == false) + // return res.send(errResponse(resStatus_5000.DATE_TYPE_WEIRD)); + // const farmDateErrorMessage = dateAvailability.validFarmDate(new Date(), new Date(startDate), new Date(endDate)) + // if(farmDateErrorMessage != true) + // return res.send(errResponse(farmDateErrorMessage)); const userInfo = await userProvider.usersbyEmail(owner); if (!userInfo || userInfo.length < 1) return res.send(errResponse(resStatus.USER_USEREMAIL_NOT_EXIST)); @@ -149,7 +150,7 @@ exports.newFarm = async function (req, res) { const districtCode = districtClarityResponse.result; - let newFarmResponse = await farmService.newFarm(name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid, locationSmall, description, category, tag); + let newFarmResponse = await farmService.newFarm(name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, file); if (newFarmResponse.result) newFarmResponse.result = {"newFarmID" : newFarmResponse.result.newFarmID, "districtCode" : districtCode}; return res.send(newFarmResponse) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 5117b71..ca4faee 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -69,10 +69,10 @@ exports.selectFarmbyFarmID = async(connection, farmID) =>{ } exports.insertFarm = async(connection, newFarmInfo) => { - //newFarmInfo [newFarmID, name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid, locationSmall, description, category, tag, newFarmStatus, createAt, updateAt] : 16 fields + //newFarmInfo [newFarmID, name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, newFarmStatus, createAt, updateAt] : 12 fields const insertFarmQuery = ` - INSERT INTO Farm(FarmID, Name, Owner, startAt, endAt, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Description, Category, Tag, Status, createAt, updateAt) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); + INSERT INTO Farm(FarmID, Name, Owner, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Description, Status, createAt, updateAt) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); `; const farmInfo = await connection.query(insertFarmQuery, newFarmInfo); @@ -80,14 +80,14 @@ exports.insertFarm = async(connection, newFarmInfo) => { } exports.selectFarmbyFarmInfo = async(connection, sameFarmInfo) =>{ - //newFarmInfo [newFarmID, name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid, locationSmall, description, category, tag, newFarmStatus, createAt, updateAt] - const duplicatedInfo = sameFarmInfo.slice(1,10); + // sameFarmInfo [name, owner, price, squaredMeters, locationBig, locationMid, locationSmall]; + const selectFarmbyFarmInfoQuery =` SELECT * FROM Farm - WHERE NAME = ? AND Owner = ? AND startAT = ? AND endAt = ? AND Price = ? AND SquaredMeters = ? AND LocationBig = ? AND LocationMid = ? AND LocationSmall = ? + WHERE NAME = ? AND Owner = ? AND Price = ? AND SquaredMeters = ? AND LocationBig = ? AND LocationMid = ? AND LocationSmall = ? `; - const sameFarm = await connection.query(selectFarmbyFarmInfoQuery, duplicatedInfo); + const sameFarm = await connection.query(selectFarmbyFarmInfoQuery, sameFarmInfo); return sameFarm; } diff --git a/components/farm/farmService.js b/components/farm/farmService.js index 30dff8b..cba9600 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -20,7 +20,12 @@ exports.postFarmer = async (email) => { return res; } -exports.newFarm = async (name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid, locationSmall, description, category, tag) => { +exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, file) => { + + const sameFarmInfo = [name, owner, price, squaredMeters, locationBig, locationMid, locationSmall]; + const isSameFarm = await FarmProvider.isSameFarm(sameFarmInfo); //중복체크 + if (isSameFarm) return errResponse(resStatus_5000.FARM_DUPLICATED_EXISTS); + const newFarmStatus = 'A'; let newFarmID; let existedFarm; @@ -30,15 +35,38 @@ exports.newFarm = async (name, owner, startDate, endDate, price, squaredMeters, } while (existedFarm); //unique farmID const now = await setDate.now(); - const newFarmInfo = [newFarmID, name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid, locationSmall, description, category, tag, newFarmStatus, now, now]; - const isSameFarm = await FarmProvider.isSameFarm(newFarmInfo); //중복체크 - if (isSameFarm) return errResponse(resStatus_5000.FARM_DUPLICATED_EXISTS); + const newFarmInfo = [newFarmID, name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, newFarmStatus, now, now]; const connection = await pool.getConnection(async conn => conn); const newFarm = await farmDao.insertFarm(connection, newFarmInfo); + + /** + * ------------------------file handling------------------------- + */ + + const farmID = newFarmID; + file = null; //file : req.body로 받음 + const picture_url = null; + const picture_key = null; + + + + + + + + + + + + + /** + * --------------------------------------------------------------- + */ + connection.release(); return response(resStatus_5000.FARM_NEW_SAVE_SUCCESS, { "newFarmID": newFarmID }); diff --git a/helpers/validator.js b/helpers/validator.js index e43e236..b0b2398 100644 --- a/helpers/validator.js +++ b/helpers/validator.js @@ -45,8 +45,8 @@ const validator = { return false; }, - newFarm: async (name, owner, startDate, endDate, price, squaredMeters, locationBig, locationMid) => { - if (!name || !owner || !startDate || !endDate || !price || !squaredMeters || !locationBig || !locationMid) + newFarm: async (name, owner, price, squaredMeters, locationBig, locationMid) => { + if (!name || !owner || !price || !squaredMeters || !locationBig || !locationMid) return resStatus_5000.FARM_NEW_DATA_SHORTAGE; return false; From d7ce389da5a5069941883af9c1cf9020d87e66d3 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 06:10:10 +0900 Subject: [PATCH 07/52] Edit oauth API --- components/oauth/oauthController.js | 17 ++++++++------- components/oauth/oauthDao.js | 7 +++--- components/oauth/oauthService.js | 34 +++++++++++++++++++---------- config/resStatus_5000.js | 9 ++++---- helpers/validator.js | 6 ++--- 5 files changed, 44 insertions(+), 29 deletions(-) diff --git a/components/oauth/oauthController.js b/components/oauth/oauthController.js index 43ba305..348deb0 100644 --- a/components/oauth/oauthController.js +++ b/components/oauth/oauthController.js @@ -8,18 +8,19 @@ const oauthService = require('./oauthService'); * [POST] /oauth/kakao/signup */ exports.signup = async function (req, res) { - try { - const { email, phoneNumber, name, role } = req.body; - const invalidation = await validator.signUp(email, phoneNumber, name, role); + // try { + const { account_email, phone_number, profile_nickname, profile_image, role } = req.body; + + const invalidation = await validator.oauthSignup(account_email, phone_number, profile_nickname, role); if (invalidation) return res.send(errResponse(invalidation)); - const signUpResponse = await oauthService.signUp(email, phoneNumber, name, role); + const signUpResponse = await oauthService.signUp(account_email, phone_number, profile_nickname, profile_image, role); return res.send(signUpResponse); - } - catch (e) { - res.send(errResponse(resStatus.SERVER_ERROR)); - } + // } + // catch (e) { + // res.send(errResponse(resStatus.SERVER_ERROR)); + // } } \ No newline at end of file diff --git a/components/oauth/oauthDao.js b/components/oauth/oauthDao.js index fdb6715..f09fcb0 100644 --- a/components/oauth/oauthDao.js +++ b/components/oauth/oauthDao.js @@ -1,8 +1,9 @@ async function insertOauthUser(connection, newOauthUserInfo) { - //newOauthUserInfo [email, phoneNumber, name, role, createAt, updateAt] + //newOauthUserInfo [email, phoneNumber, name, picture_url, role, socialLoginStatus, createAt, updateAt] + const insertOauthUserQuery = ` - INSERT INTO User(email, phoneNumber, name, role, createAt, updateAt) - VALUES(?, ?, ?, ?, ?, ?); + INSERT INTO User(Email, PhoneNumber, Name, Picture_url, Role, Status, createAt, updateAt) + VALUES(?, ?, ?, ?, ?, ?, ?, ?); `; const insertOauthUserResult = await connection.query(insertOauthUserQuery, newOauthUserInfo); diff --git a/components/oauth/oauthService.js b/components/oauth/oauthService.js index feeb686..cd49134 100644 --- a/components/oauth/oauthService.js +++ b/components/oauth/oauthService.js @@ -7,22 +7,34 @@ const resStatus_5000 = require('../../config/resStatus_5000'); const { pool } = require('../../config/database'); const setDate = require('./../../helpers/setDate'); -async function signUp(email, phoneNumber, name, role) { - const userInfobyEmail = await userProvider.usersbyEmail(email); - if (userInfobyEmail.length >= 1) return errResponse(resStatus_5000.USER_OAUTH_SIGNUP_REDUNDANT_EMAIL); +async function signUp(email, phoneNumber, name, picture_url, role) { + //account_email, phone_number, profile_nickname, profile_image, role + // try{ + const userInfobyEmail = await userProvider.usersbyEmail(email); + if (userInfobyEmail.length >= 1) return response(resStatus_5000.USER_OAUTH_SIGNUP_REDUNDANT_EMAIL, null); - // const userInfobyPhoneNumber = await userProvider.userbyPhoneNumber(phoneNumber); - // if(userInfobyPhoneNumber.length >=1) return errResponse(resStatus_5000.USER_OAUTH_SIGNUP_REDUNDANT_PHONE); + // const userInfobyPhoneNumber = await userProvider.userbyPhoneNumber(phoneNumber); + // if(userInfobyPhoneNumber.length >=1) return errResponse(resStatus_5000.USER_OAUTH_SIGNUP_REDUNDANT_PHONE); - const now = await setDate.now(); - const newOauthUserInfo = [email, phoneNumber, name, role, now, now]; + socialLoginStatus = 'S'; + const now = await setDate.now(); + const newOauthUserInfo = [email, phoneNumber, name, picture_url, role, socialLoginStatus, now, now]; - const connection = await pool.getConnection(async conn => conn); - const newOauthUser = await oauthDao.insertOauthUser(connection, newOauthUserInfo); + const connection = await pool.getConnection(async conn => conn); + const newOauthUser = await oauthDao.insertOauthUser(connection, newOauthUserInfo); - connection.release(); + connection.release(); - return response(resStatus_5000.USER_OAUTH_SIGNUP_SUCCESS, {"email" : email, "role" : role}); + return response(resStatus_5000.USER_OAUTH_SIGNUP_SUCCESS, { + "email": email, + "phoneNumber": phoneNumber, + "name": name, + "picture_url": picture_url, + "role": role + }); +// } catch(e) { +// return Response(resStatus.DB_ERROR); +// } }; module.exports = { diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index 187ed0d..4a7579d 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -19,16 +19,17 @@ module.exports = { DATE_START_FASTER_THAN_NOW : { "isSuccess": false, "code": 5004, "message": "시작 날짜는 오늘 날짜 이후로 설정할 수 있습니다."}, //user - USER_OAUTH_SIGNUP_REDUNDANT_EMAIL : {"isSuccess" : false, "code" : 5100, "message" : "해당 이메일을 가진 회원은 이미 등록되어 있습니다. 로그인을 진행해주세요."}, - USER_REDUNDANT_STAR : {"isSuccess" : false, "code" : 5101, "message" : "이미 찜한 농장입니다."}, - USER_NOT_FARMER : {"isSuccess" : false, "code" : 5102, "message" : "농장주만 농장을 등록할 수 있어요."}, + USER_REDUNDANT_STAR : {"isSuccess" : false, "code" : 5100, "message" : "이미 찜한 농장입니다."}, + USER_NOT_FARMER : {"isSuccess" : false, "code" : 5101, "message" : "농장주만 농장을 등록할 수 있어요."}, + USER_NAME_EMPTY : {"isSuccess" : false, "code" : 5102, "message" : "이름을 입력해주세요."}, USER_SIGNUP_SUCCESS : {"isSuccess" : true, "code" : 5150, "message" : "회원가입이 완료되었습니다."}, USER_LOGIN_SUCCESS : {"isSuccess" : true, "code" : 5151, "message" : "로그인이 완료되었습니다."}, USER_STAR_ADD_SUCCESS : { "isSuccess": true, "code": 5152, "message": "해당 농장을 찜 목록에 추가하였습니다." }, USER_OAUTH_SIGNUP_SUCCESS : {"isSuccess" : true, "code" : 5153, "message" : "신규 소셜로그인 회원이 등록되었습니다."}, USER_BIRTH_EDIT_SUCCESS : {"isSuccess" : true, "code" : 5154, "message" : "생일이 정상적으로 수정되었습니다."}, USER_PASSWORD_EDIT_SUCCESS : {"isSuccess" : true, "code" : 5155, "message" : "비밀번호가 정상적으로 변경되었습니다."}, - USER_EMAIL_AVAILABLE : {"isSuccess" : true, "code" : 5155, "message" : "사용가능한 이메일입니다."}, + USER_EMAIL_AVAILABLE : {"isSuccess" : true, "code" : 5156, "message" : "사용가능한 이메일입니다."}, + USER_OAUTH_SIGNUP_REDUNDANT_EMAIL : {"isSuccess" : true, "code" : 5157, "message" : "해당 이메일을 가진 회원은 이미 등록되어 있습니다."}, //farm FARM_FARMID_NOT_EXIST : { "isSuccess" : false, "code" : 5200, "message" : "해당 아이디를 가진 농장이 존재하지 않습니다."}, diff --git a/helpers/validator.js b/helpers/validator.js index b0b2398..7ea5000 100644 --- a/helpers/validator.js +++ b/helpers/validator.js @@ -25,7 +25,7 @@ const validator = { if (!phoneNumber) return resStatus.SIGNUP_PHONENUMBER_EMPTY // if (!nickName) return resStatus.SIGNUP_NICKNAME_EMPTY - if (!name) return resStatus.SIGNUP_NICKNAME_EMPTY + if (!name) return resStatus_5000.USER_NAME_EMPTY if (!role) return resStatus.USER_STATUS_EMPTY // if (nickName.length > 20) return resStatus.SIGNUP_NICKNAME_LENGTH if (name.length > 20) return resStatus.SIGNUP_NICKNAME_LENGTH @@ -36,11 +36,11 @@ const validator = { oauthSignup : async (email, phoneNumber, name, role) => { - if (!email) return resStatus.SIGNIN_EMAIL_EMPTY + if (!email) return resStatus.SIGNUP_EMAIL_EMPTY if (!phoneNumber) return resStatus.SIGNUP_PHONENUMBER_EMPTY - if (!name) return resStatus.SIGNUP_NICKNAME_EMPTY + if (!name) return resStatus_5000.USER_NAME_EMPTY return false; }, From b3e40350b4e5d6d34a8fe476f2ff0774cb985bf6 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 06:27:43 +0900 Subject: [PATCH 08/52] Edit districtClarity (Loosen locationSmall checks) --- helpers/districtClarity.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helpers/districtClarity.js b/helpers/districtClarity.js index e4c71ab..ece5217 100644 --- a/helpers/districtClarity.js +++ b/helpers/districtClarity.js @@ -62,8 +62,8 @@ const districtClarity = { let locationCode = null; locationCode = await this.getLocationCode(locationCode, locationBig); locationCode = await this.getLocationCode(locationCode, locationMid); - if (locationSmall) // tmp - locationCode = await this.getLocationCode(locationCode, locationSmall); + // if (locationSmall) // tmp (읍면동 검사) + // locationCode = await this.getLocationCode(locationCode, locationSmall); if (!locationCode || locationCode.length < 5) //tmp return errResponse(resStatus_5000.DISTRICT_NOT_EXIST); return response(resStatus_5000.DISTRICT_CLEAR, locationCode); From 58c8d8d44bd0663137cc202e6ba39aded54d7097 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 07:38:32 +0900 Subject: [PATCH 09/52] Fix error in oauth --- components/oauth/oauthController.js | 10 +++++----- components/oauth/oauthService.js | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/components/oauth/oauthController.js b/components/oauth/oauthController.js index 348deb0..9b65571 100644 --- a/components/oauth/oauthController.js +++ b/components/oauth/oauthController.js @@ -8,7 +8,7 @@ const oauthService = require('./oauthService'); * [POST] /oauth/kakao/signup */ exports.signup = async function (req, res) { - // try { + try { const { account_email, phone_number, profile_nickname, profile_image, role } = req.body; const invalidation = await validator.oauthSignup(account_email, phone_number, profile_nickname, role); @@ -19,8 +19,8 @@ exports.signup = async function (req, res) { return res.send(signUpResponse); - // } - // catch (e) { - // res.send(errResponse(resStatus.SERVER_ERROR)); - // } + } + catch (e) { + res.send(errResponse(resStatus.SERVER_ERROR)); + } } \ No newline at end of file diff --git a/components/oauth/oauthService.js b/components/oauth/oauthService.js index cd49134..031deed 100644 --- a/components/oauth/oauthService.js +++ b/components/oauth/oauthService.js @@ -9,7 +9,7 @@ const setDate = require('./../../helpers/setDate'); async function signUp(email, phoneNumber, name, picture_url, role) { //account_email, phone_number, profile_nickname, profile_image, role - // try{ + try{ const userInfobyEmail = await userProvider.usersbyEmail(email); if (userInfobyEmail.length >= 1) return response(resStatus_5000.USER_OAUTH_SIGNUP_REDUNDANT_EMAIL, null); @@ -32,9 +32,9 @@ async function signUp(email, phoneNumber, name, picture_url, role) { "picture_url": picture_url, "role": role }); -// } catch(e) { -// return Response(resStatus.DB_ERROR); -// } +} catch(e) { + return Response(resStatus.DB_ERROR); +} }; module.exports = { From d95d6b39a6712172fd9262db244d38c179e23e39 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 07:46:21 +0900 Subject: [PATCH 10/52] Edit login provider to check Status --- components/user/userDao.js | 15 ++++++++++++++- components/user/userProvider.js | 8 ++++++++ components/user/userService.js | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/components/user/userDao.js b/components/user/userDao.js index 8913b77..a801d40 100644 --- a/components/user/userDao.js +++ b/components/user/userDao.js @@ -152,6 +152,18 @@ async function eidtProfileImg(connection, email, img, key){ return updateUserRow[0] } +async function selectnonSocialUserbyEmail(connection, email) { + const selectnonSocialUserbyEmailQuery = ` + SELECT * + FROM User + WHERE Email = ? + AND Status = 'A'; + `; + const userInfo = await connection.query(selectnonSocialUserbyEmailQuery, email); + + return userInfo; +} + module.exports = { selectUserbyEmail, selectUserbyPhoneNumber, @@ -167,5 +179,6 @@ module.exports = { withdrawalUser, eidtProfileImg, SelectionUsedFarmArray, - SelectionUseFarmArray + SelectionUseFarmArray, + selectnonSocialUserbyEmail } \ No newline at end of file diff --git a/components/user/userProvider.js b/components/user/userProvider.js index f090434..07aaedc 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -62,3 +62,11 @@ exports.starListbyEmail = async(email)=>{ return starByEmail; } +exports.nonSocialUsersbyEmail= async(email)=>{ + const connection = await pool.getConnection(async conn => conn); + const [userInfo] = await userDao.selectnonSocialUserbyEmail(connection, email); + + connection.release(); + + return userInfo; +} \ No newline at end of file diff --git a/components/user/userService.js b/components/user/userService.js index 3f913b3..7929ed4 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -14,7 +14,7 @@ const setDate = require('./../../helpers/setDate'); exports.login = async(email, password) =>{ - const userInfo = await userProvider.usersbyEmail(email); + const userInfo = await userProvider.selectnonSocialUserbyEmail(email); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); const userPassword = userInfo[0].Password; From 21dbfe981965b8ead81421f4d61eb5ad5b52b93c Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 08:18:54 +0900 Subject: [PATCH 11/52] Fix error in reservation --- components/reserve/reserveService.js | 2 +- config/resStatus_5000.js | 2 +- helpers/DateAvailability.js | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index 3af3d68..1569363 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -21,7 +21,7 @@ async function request(userEmail, farmid,startAt, endAt) { const newEndAt = new Date(endAt) //date availability check - const unAvailability = await dateAvailability.dateAvailabilityCheck(farmInfo.startAt, farmInfo.endAt, newStartAt, newEndAt); + const unAvailability = await dateAvailability.dateAvailabilityCheck(newStartAt, newEndAt); if(unAvailability != 0) return errResponse(unAvailability); diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index 4a7579d..c9fe8e6 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -43,7 +43,7 @@ module.exports = { //reserve RESERVE_REQUEST_DATA_SHORTAGE : { "isSuccess": false, "code": 5300, "message": "농장을 예약하는 데 필요한 정보가 부족합니다." }, RESERVE_RESERVEID_NOT_EXIST : {"isSuccess" : false, "code" : 5301, "message" : "요청하신 예약 내역이 존재하지 않습니다."}, - RESERVE_DATE_OFF_PERIOD_OF_FARM : { "isSuccess": false, "code": 5303, "message": "요청하신 기간에는 농장을 이용할 수 없습니다." }, + RESERVE_DATE_OFF_PERIOD_OF_FARM : { "isSuccess": false, "code": 5303, "message": "요청하신 기간에는 농장을 예약할 수 없습니다." }, RESERVE_STATUS_ERROR : { "isSuccess": false, "code": 5304, "message": "잘못된 농장 예약 상태를 요청하였습니다. 농장 예약의 상태 변경에 실패했습니다." }, RESERVE_CANCEL_NOT_ALLOWED : { "isSuccess": false, "code": 5305, "message": "예약 확정 상태에서는 예약을 취소할 수 없습니다." }, RESERVE_REQUEST_SUCCESS: { "isSuccess": true, "code": 5350, "message": "농장 예약이 완료되었습니다." }, diff --git a/helpers/DateAvailability.js b/helpers/DateAvailability.js index 5066820..af8cae3 100644 --- a/helpers/DateAvailability.js +++ b/helpers/DateAvailability.js @@ -12,10 +12,12 @@ const dateAvailability = { * @param {Date} newEnd 새로운 기간 마지막점 * @returns resStatus_5000 (available : false) */ - dateAvailabilityCheck: async function (targetStart, targetEnd, newStart, newEnd) { - //targetStart - newStart - newEnd - targetwEnd : date 순서 + dateAvailabilityCheck: async function (newStart, newEnd) { + //now - newStart - newEnd : date 순서 - if (targetStart.getTime() > newStart.getTime() || targetEnd.getTime() < newEnd.getTime()) + //현재보다 과거는 예약 불가 + const now = new Date(); + if (now.getTime() > newStart.getTime() || now.getTime() > newEnd.getTime()) return resStatus_5000.RESERVE_DATE_OFF_PERIOD_OF_FARM; if (newStart.getTime() > newEnd.getTime()) From 8e6ab01b658cf9d608b14c53635b4e125c04e6cd Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sun, 9 Jul 2023 08:25:05 +0900 Subject: [PATCH 12/52] Edit reservation status to A (alpha version) --- components/reserve/reserveService.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index 1569363..a233e87 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -47,7 +47,8 @@ async function request(userEmail, farmid,startAt, endAt) { //ReserveID, FarmID, UserEmail, OwnerEmail, startAt, endAt, createAt, updateAt const now = await setDate.now(); - const newStatus = "H"; + const newStatus = "A"; //ALPHA version + // const newStatus = "H"; //BETA version const newReservationInfo = [newReserveID, farmInfo.FarmID, userEmail, farmInfo.Owner, newStatus, newStartAt, newEndAt, now, now]; const connection = await pool.getConnection(async conn => conn); From 7e05e3ff313d65b668c2458bb85634468b2331d3 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sun, 9 Jul 2023 14:19:37 +0900 Subject: [PATCH 13/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 5117b71..e904f66 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -102,10 +102,10 @@ exports.searchFarm = async(connection, keyword) => { f.LocationMid, f.LocationSmall, f.Likes, - fp.Picture_url + MAX(fp.Picture_url) AS Picture_url FROM Farm f LEFT JOIN ( - SELECT FarmID, Picture_url + SELECT FarmID, MAX(Picture_url) AS Picture_url FROM FarmPictures GROUP BY FarmID ) fp ON f.FarmID = fp.FarmID @@ -114,6 +114,7 @@ exports.searchFarm = async(connection, keyword) => { console.log(keyword); const [farmRow] = await connection.query(searchFarmQuery,[keyword,keyword,keyword,keyword]) console.log(farmRow); + return farmRow.length > 0 ? farmRow : []; return farmRow } From 160c806b59e496bb27a4b4546e592f1f76e13706 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Tue, 11 Jul 2023 09:41:07 +0900 Subject: [PATCH 14/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=EC=8B=9C=20=EC=82=AC=EC=A7=84=201=EA=B0=9C=20=EA=B0=99?= =?UTF-8?q?=EC=9D=B4=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 72ffb04..4559d77 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -94,16 +94,19 @@ exports.selectFarmbyFarmInfo = async(connection, sameFarmInfo) =>{ exports.searchFarm = async(connection, keyword) => { const searchFarmQuery = ` - SELECT FarmID, + SELECT f.FarmID, Name, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, - Likes - FROM Farm - WHERE Name LIKE ? OR LocationBig LIKE ? OR LocationMid LIKE ? OR LocationSmall LIKE ?;` + Likes, + MIN(Picture_url) as Picture_url + FROM Farm f left join FarmPictures fp on f.FarmID = fp.FarmID + WHERE f.Name LIKE ? OR f.LocationBig LIKE ? OR f.LocationMid LIKE ? OR f.LocationSmall LIKE ? + GROUP BY f.FarmID + ;` console.log(keyword); const [farmRow] = await connection.query(searchFarmQuery,[keyword,keyword,keyword,keyword]) console.log(farmRow); From bc28d3b08a09b24ab997e8193394e82b1e8736c9 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Tue, 11 Jul 2023 09:49:02 +0900 Subject: [PATCH 15/52] =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=ED=99=98=EA=B2=BD=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EB=86=8D?= =?UTF-8?q?=EC=9E=A5=20=EA=B2=80=EC=83=89=20sql=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 4559d77..f75e785 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -93,6 +93,7 @@ exports.selectFarmbyFarmInfo = async(connection, sameFarmInfo) =>{ } exports.searchFarm = async(connection, keyword) => { + const searchFarmQuery = ` SELECT f.FarmID, Name, @@ -103,10 +104,12 @@ exports.searchFarm = async(connection, keyword) => { LocationSmall, Likes, MIN(Picture_url) as Picture_url - FROM Farm f left join FarmPictures fp on f.FarmID = fp.FarmID + FROM Farm f + LEFT JOIN FarmPictures fp ON f.FarmID = fp.FarmID WHERE f.Name LIKE ? OR f.LocationBig LIKE ? OR f.LocationMid LIKE ? OR f.LocationSmall LIKE ? - GROUP BY f.FarmID - ;` + GROUP BY f.FarmID, Name, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Likes; +`; + console.log(keyword); const [farmRow] = await connection.query(searchFarmQuery,[keyword,keyword,keyword,keyword]) console.log(farmRow); From 8a13514c1f0ff04dedf7b61b06bad5a501cca99a Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Tue, 11 Jul 2023 16:20:14 +0900 Subject: [PATCH 16/52] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/user/userController.js | 1 + components/user/userService.js | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/components/user/userController.js b/components/user/userController.js index 357793b..fd50234 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -53,6 +53,7 @@ exports.login = async function (req, res) { } catch (e) { + console.log(e) res.send(errResponse(resStatus.SERVER_ERROR)); } } diff --git a/components/user/userService.js b/components/user/userService.js index 7929ed4..616ba77 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -14,17 +14,18 @@ const setDate = require('./../../helpers/setDate'); exports.login = async(email, password) =>{ - const userInfo = await userProvider.selectnonSocialUserbyEmail(email); + const userInfo = await userProvider.retrieveUserEmail(email); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); + console.log(userInfo); - const userPassword = userInfo[0].Password; - const userSalt = userInfo[0].Salt; + const userPassword = userInfo.Password; + const userSalt = userInfo.Salt; const verify = await encryptedPassword.verifyPassword(password, userSalt, userPassword); if (!verify) return errResponse(resStatus.SIGNIN_PASSWORD_WRONG); - const jwtResponse = await jwtLogin(userInfo[0]); + const jwtResponse = await jwtLogin(userInfo); return response(resStatus_5000.USER_LOGIN_SUCCESS, jwtResponse); }; From 947c836bd0cf1126eab7aa878638af20a6e75f8a Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Wed, 12 Jul 2023 22:51:44 +0900 Subject: [PATCH 17/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=20=EC=84=B1=EA=B3=B5=20=EC=8B=9C=20result=20=EA=B0=92=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index f424d8d..961b6d3 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -168,7 +168,9 @@ exports.findFarms = async (req,res) => { if (!keyword) return res.send(errResponse2(baseResponse.FARM_NOT_KEYWORD)) const farms = await farmProvider.retrieveFarms(keyword) - return res.send(farms) + const searchRes = {"result" : true} + searchRes.farms = farms + return res.send(searchRes) }catch(err){ console.log(err); } From 5881b72986a2dd5edfcdef3fd9ccb3e0d4a02b79 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 14 Jul 2023 08:15:57 +0900 Subject: [PATCH 18/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B8=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=A9=EC=8B=9D=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 35 ++++++++++++++++--------------- components/farm/farmService.js | 24 ++++++++------------- config/resStatus.js | 2 ++ config/response2.js | 4 +--- 4 files changed, 30 insertions(+), 35 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 961b6d3..2c8bc92 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -95,26 +95,17 @@ exports.editFarm = async(req, res) =>{ if (!farmId) return res.send(errResponse2(baseResponse.FARMID_EMPTY)) const eidtFarmInfoRes = await farmService.editFarmInfo(farmId, req.body) + console.log(eidtFarmInfoRes); + if (!eidtFarmInfoRes.affectedRows) return res.send(errResponse2(baseResponse.WRONG_FARMID)) - // req.files의 originalname - /* - const locations = req.files.map(file => file.location); - const keys = req.files.map(file => file.key); - - console.log("Locations:", locations); - console.log("Keys:", keys); - */ - if (!eidtFarmInfoRes.result) return res.send(eidtFarmInfoRes) - - let editFarmPicturesRes; for (let i = 0; i < req.files.length; i++) { const file = req.files[i]; const location = file.location; const key = file.key; - editFarmPicturesRes = await farmService.editFarmPictures(farmId,location, key); - if (!editFarmPicturesRes.result) break + const editFarmPicturesRes = await farmService.editFarmPictures(farmId,location, key); } - return res.send(editFarmPicturesRes); + return res.send(response2(baseResponse.SUCCESS)); + }catch(err){ return res.send(err) } @@ -126,9 +117,11 @@ exports.editFarm = async(req, res) =>{ */ exports.newFarm = async function (req, res) { try { - const { name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, file} = req.body; - + const { name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description} = req.body; + console.log(req); + console.log(req.body); const invalidation = await validator.newFarm(name, owner, price, squaredMeters, locationBig, locationMid); + if (invalidation) return res.send(errResponse(invalidation)) // Date Availability 유효성 검사 @@ -150,13 +143,21 @@ exports.newFarm = async function (req, res) { const districtCode = districtClarityResponse.result; - let newFarmResponse = await farmService.newFarm(name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, file); + let newFarmResponse = await farmService.newFarm(name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description); + for (let i = 0; i < req.files.length; i++) { + const file = req.files[i]; + const location = file.location; + const key = file.key; + const editFarmPicturesRes = await farmService.editFarmPictures(farmId,location, key); + } + if (newFarmResponse.result) newFarmResponse.result = {"newFarmID" : newFarmResponse.result.newFarmID, "districtCode" : districtCode}; return res.send(newFarmResponse) } catch (e) { + console.log(e); res.send(errResponse(resStatus.SERVER_ERROR)); } } diff --git a/components/farm/farmService.js b/components/farm/farmService.js index cba9600..232cf91 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -20,7 +20,7 @@ exports.postFarmer = async (email) => { return res; } -exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, file) => { +exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description) => { const sameFarmInfo = [name, owner, price, squaredMeters, locationBig, locationMid, locationSmall]; const isSameFarm = await FarmProvider.isSameFarm(sameFarmInfo); //중복체크 @@ -47,12 +47,6 @@ exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locatio * ------------------------file handling------------------------- */ - const farmID = newFarmID; - file = null; //file : req.body로 받음 - const picture_url = null; - const picture_key = null; - - @@ -92,7 +86,7 @@ exports.editFarmInfo = async(farmID, farmInfo) =>{ const res = await farmDao.eidtMyFarm(connection, farmID, farmInfo) connection.release() - return response2(baseResponse.SUCCESS) + return res }catch(err){ console.log(err); return errResponse2(baseResponse.DB_ERROR) @@ -105,7 +99,7 @@ exports.editFarmPictures = async(farmID, farmName, img, key) =>{ const res = await farmDao.editFarmPicture(connection, farmID, farmName, img, key) connection.release() - return response2(baseResponse.SUCCESS) + return res }catch(err){ console.log(err); return errResponse2(baseResponse.DB_ERROR) @@ -121,7 +115,7 @@ exports.getFarmDetail = async (farmID) => { //최종 농장 세부사항 let farmDetail = farmInformation[0]; - //농장 항목 삭제 : Owner, crateAt, updateAt + //농장 항목 삭제 : Owner, crateAt, updateAt delete farmDetail.Owner; delete farmDetail.createAt; delete farmDetail.updateAt; @@ -138,10 +132,10 @@ exports.getFarmDetail = async (farmID) => { farmDetail.PictureObject = pictureObject; //농장주 정보 추가 : Email, PhoneNumber, Name, NickName - let userInfo = { - Email : userInformation[0].Email, - PhoneNumber : userInformation[0].PhoneNumber, - Name : userInformation[0].Name, + let userInfo = { + Email : userInformation[0].Email, + PhoneNumber : userInformation[0].PhoneNumber, + Name : userInformation[0].Name, NickName : userInformation[0].NickName, Picture_url : userInformation[0].Picture_url || null, Picture_key : userInformation[0].Picture_key || null @@ -172,7 +166,7 @@ exports.getFarmList = async (email) => { })); farm.Pictures = pictureObjects; }); - + //like if (userInformation.length > 0 && userInformation[0].LikeFarmIDs) { likeFarmIDs = userInformation[0].LikeFarmIDs.split(',').map(id => id.trim()); diff --git a/config/resStatus.js b/config/resStatus.js index 90acd85..18d79c8 100644 --- a/config/resStatus.js +++ b/config/resStatus.js @@ -68,6 +68,8 @@ module.exports = { NOT_LOGIN : {'result': false, 'code': 6009, "message": "로그인을 먼저 진행해 주세요."}, ALREADY_USER : {'result': false, 'code': 6010, "message": "이미 가입한 회원입니다."}, + WRONG_FARMID : {'result': false, 'code': 6011, "message": "잘못된 농장 ID"}, + REDIS_ERROR : {'result': false, 'code':6900, 'message': "REDIS 에러"} } \ No newline at end of file diff --git a/config/response2.js b/config/response2.js index cd63cca..c5d141f 100644 --- a/config/response2.js +++ b/config/response2.js @@ -1,8 +1,6 @@ const response2 = ({result, code, message}) => { return { - result: result, - code: code, - message: message, + result: result } }; From d11e2be8f4934f957e6cc67b4671135315a2a71f Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 14 Jul 2023 08:29:11 +0900 Subject: [PATCH 19/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EC=8B=9C=20=EB=86=8D=EC=9E=A5=20=EC=82=AC=EC=A7=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 5 ++--- components/farm/farmRoute.js | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 2c8bc92..df1e2eb 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -61,7 +61,6 @@ exports.getFarmUsedList = async (req, res) => { exports.getFarmUseList = async (req, res) => { const { userid } = req.params; - if(!userid) return res.render(errResponse(USER_USERID_EMPTY)); const FarmUseArray = User.retrieveCurFarmArray(userid); @@ -118,7 +117,7 @@ exports.editFarm = async(req, res) =>{ exports.newFarm = async function (req, res) { try { const { name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description} = req.body; - console.log(req); + //console.log(req); console.log(req.body); const invalidation = await validator.newFarm(name, owner, price, squaredMeters, locationBig, locationMid); @@ -148,7 +147,7 @@ exports.newFarm = async function (req, res) { const file = req.files[i]; const location = file.location; const key = file.key; - const editFarmPicturesRes = await farmService.editFarmPictures(farmId,location, key); + const editFarmPicturesRes = await farmService.editFarmPictures(newFarmResponse.result.newFarmID,location, key); } if (newFarmResponse.result) diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index f3b2de5..54369e5 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -4,7 +4,7 @@ module.exports = function (app) { const farm = require('./farmController'); //농장 등록 - app.post('/farm/postings', farm.newFarm); + app.post('/farm/postings',uploadImg, farm.newFarm); //농장목록 조회 app.get("/farm/list/:email", farm.getFarmlist); From 01ca394a4634fae880724809f188550311bd2807 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 14 Jul 2023 09:12:16 +0900 Subject: [PATCH 20/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EC=82=AC=EC=A7=84?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 17 +++++++++ components/farm/farmDao.js | 10 ++++++ components/farm/farmMiddleware/imgDelete.js | 39 +++++++++++++++++++++ components/farm/farmProvider.js | 8 +++++ components/farm/farmRoute.js | 4 +++ config/resStatus.js | 3 ++ 6 files changed, 81 insertions(+) create mode 100644 components/farm/farmMiddleware/imgDelete.js diff --git a/components/farm/farmController.js b/components/farm/farmController.js index df1e2eb..177f745 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -176,3 +176,20 @@ exports.findFarms = async (req,res) => { } } + +exports.deletePhoto = async(req,res) => { + try{ + const {Picture_key} = req.body + if (!Picture_key) return res.send(errResponse2(baseResponse.EMPTY_PICTURE_KEY)) + + const [deleteRes] = await farmProvider.deletePhoto(Picture_key) + if (deleteRes.affectedRows) + return res.send(response2(baseResponse.SUCCESS)) + + return res.send(errResponse2(baseResponse.ALREADY_DELETE_PICTURE)) + + }catch (e) { + console.log(e); + res.send(errResponse(resStatus.SERVER_ERROR)); + } +} diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index f75e785..921c8a1 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -1,5 +1,6 @@ //const { connection } = require("mongoose"); +const { connection } = require("mongoose"); const { login } = require("../../helpers/validator"); exports.selectFarm = async (connection) => { @@ -142,6 +143,15 @@ exports.eidtMyFarm = async(connection, farmID, farmInfo) =>{ } +exports.deletePhoto = async(connection, key) => { + const deleteFarmPicture = ` + DELETE FROM FarmPictures + WHERE Picture_key = ?; + ` + const res = await connection.query(deleteFarmPicture,key) + return res +} + exports.editFarmPicture = async(connection, farmID, img, key) => { const saveFarmPicturesQuery= ` INSERT INTO FarmPictures(FarmID, Picture_url, Picture_key) diff --git a/components/farm/farmMiddleware/imgDelete.js b/components/farm/farmMiddleware/imgDelete.js new file mode 100644 index 0000000..fdef831 --- /dev/null +++ b/components/farm/farmMiddleware/imgDelete.js @@ -0,0 +1,39 @@ +const { pool } = require('../../../config/database'); +const farmDao = require('../farmDao') +const {errResponse2} = require('../../../config/response2') +const baseResponse = require('../../../config/resStatus') +const {S3_ACCESS} = require('../../../config/secret') + +const { S3Client, DeleteObjectCommand } = require('@aws-sdk/client-s3'); + +const s3 = new S3Client({ + region: 'ap-northeast-2', + credentials:{ + accessKeyId: S3_ACCESS.KEY, + secretAccessKey: S3_ACCESS.SECRET_KEY , + } + +}) + +module.exports = deleteImg = async(req,res,next) => { + try{ + const {Picture_key} = req.body + + const params = { + Bucket:'farmus', + Key: Picture_key + } + + const deleteObjectCommand = new DeleteObjectCommand(params); + + s3.send(deleteObjectCommand) + .then(() => console.log('Object deleted successfully')) + .catch((err) => console.log('Error deleting object:', err)); + next() + + }catch(err){ + console.log(err); + return + } + +} \ No newline at end of file diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 648c151..77f6fe7 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -83,4 +83,12 @@ exports.farmPictureUrl = async () =>{ connection.release(); return farmPicturesInfo[0]; +} + +exports.deletePhoto = async (key) => { + const connection = await pool.getConnection(async conn => conn); + const deleteFarmPicture = await farmDao.deletePhoto(connection,key); + connection.release(); + + return deleteFarmPicture } \ No newline at end of file diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index 54369e5..94c65db 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -1,4 +1,5 @@ const uploadImg = require('./farmMiddleware/imgUpload') +const deleteImg = require('./farmMiddleware/imgDelete') module.exports = function (app) { const farm = require('./farmController'); @@ -26,4 +27,7 @@ module.exports = function (app) { //농장 글 수정 app.patch('/farm/editInfo',uploadImg ,farm.editFarm); + + //농장 사진 삭제 + app.delete('/farm/deletePhoto',deleteImg, farm.deletePhoto); }; \ No newline at end of file diff --git a/config/resStatus.js b/config/resStatus.js index 18d79c8..4da51f8 100644 --- a/config/resStatus.js +++ b/config/resStatus.js @@ -69,6 +69,9 @@ module.exports = { ALREADY_USER : {'result': false, 'code': 6010, "message": "이미 가입한 회원입니다."}, WRONG_FARMID : {'result': false, 'code': 6011, "message": "잘못된 농장 ID"}, + EMPTY_PICTURE_KEY : {'result': false, 'code': 6012, "message": "사진 키값이 비어있습니다."}, + ALREADY_DELETE_PICTURE : {'result': false, 'code': 6013, "message": "이미 삭제된 사진입니다."}, + REDIS_ERROR : {'result': false, 'code':6900, 'message': "REDIS 에러"} From 6c2bed5e6810798c90b5698aa04702aba5ee9cf6 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 14 Jul 2023 09:18:57 +0900 Subject: [PATCH 21/52] =?UTF-8?q?mongoose=20=EC=97=90=EB=9F=AC=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 1 - 1 file changed, 1 deletion(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 921c8a1..e745b45 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -1,6 +1,5 @@ //const { connection } = require("mongoose"); -const { connection } = require("mongoose"); const { login } = require("../../helpers/validator"); exports.selectFarm = async (connection) => { From 89ad5b72baad1894e82f04868e4dae569b606e79 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 14 Jul 2023 15:24:46 +0900 Subject: [PATCH 22/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=ED=95=84=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 19 +++++++++++++- components/farm/farmDao.js | 41 ++++++++++++++++++++++++++++++- components/farm/farmProvider.js | 12 +++++++++ components/farm/farmRoute.js | 3 +++ config/resStatus.js | 2 ++ 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 177f745..237c212 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -164,7 +164,6 @@ exports.newFarm = async function (req, res) { exports.findFarms = async (req,res) => { try{ const {keyword} = req.query - if (!keyword) return res.send(errResponse2(baseResponse.FARM_NOT_KEYWORD)) const farms = await farmProvider.retrieveFarms(keyword) @@ -177,6 +176,24 @@ exports.findFarms = async (req,res) => { } +exports.filter = async(req,res) => { + try{ + const {locationBig, locationMid} = req.query + if (!locationBig) + return res.send(errResponse2(baseResponse.SET_REGION)) + + const searchRes = {"result" : true} + const farms = await farmProvider.farmFilter(locationBig, locationMid) + searchRes.farms = farms + + return res.send(searchRes) + + }catch (e) { + console.log(e); + res.send(errResponse(resStatus.SERVER_ERROR)); + } +} + exports.deletePhoto = async(req,res) => { try{ const {Picture_key} = req.body diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index e745b45..94338d6 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -114,7 +114,46 @@ exports.searchFarm = async(connection, keyword) => { const [farmRow] = await connection.query(searchFarmQuery,[keyword,keyword,keyword,keyword]) console.log(farmRow); return farmRow.length > 0 ? farmRow : []; - return farmRow +} + +exports.filtering = async(connection, locationBig, locationMid) => { + const filteringQuery = ` + SELECT f.FarmID, + Name, + Price, + SquaredMeters, + LocationBig, + LocationMid, + LocationSmall, + Likes, + MIN(Picture_url) as Picture_url + FROM Farm f + LEFT JOIN FarmPictures fp ON f.FarmID = fp.FarmID + WHERE f.LocationBig LIKE ? AND f.LocationMid LIKE ? + GROUP BY f.FarmID, Name, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Likes; + ` + const [farmRow] = await connection.query(filteringQuery,[locationBig,locationMid]) + return farmRow.length > 0 ? farmRow : []; +} + +exports.filteringBig = async(connection, locationBig) => { + const filteringQuery = ` + SELECT f.FarmID, + Name, + Price, + SquaredMeters, + LocationBig, + LocationMid, + LocationSmall, + Likes, + MIN(Picture_url) as Picture_url + FROM Farm f + LEFT JOIN FarmPictures fp ON f.FarmID = fp.FarmID + WHERE f.LocationBig LIKE ? + GROUP BY f.FarmID, Name, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Likes; + ` + const [farmRow] = await connection.query(filteringQuery,locationBig) + return farmRow.length > 0 ? farmRow : []; } exports.withdrawalUserFarm = async(connection, email) => { diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 77f6fe7..921d00b 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -57,6 +57,18 @@ exports.isSameFarm = async(farmInfo)=>{ } // 농장 검색관련 +exports.farmFilter = async(locationBig, locationMid) => { + const connection = await pool.getConnection(async (conn) => conn) + let res = [] + if (locationMid){ + res = await farmDao.filtering(connection, locationBig, locationMid) + }else{ + res = await farmDao.filteringBig(connection, locationBig) + } + connection.release() + return res +} + exports.retrieveFarms = async(keyword) => { const connection = await pool.getConnection(async (conn) => conn); const newKeyword = '%'+keyword+'%' diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index 94c65db..8053848 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -25,6 +25,9 @@ module.exports = function (app) { //농장 검색 app.get('/farm/search',farm.findFarms); + //농장 필터링 + app.get('/farm',farm.filter) + //농장 글 수정 app.patch('/farm/editInfo',uploadImg ,farm.editFarm); diff --git a/config/resStatus.js b/config/resStatus.js index 4da51f8..b64d613 100644 --- a/config/resStatus.js +++ b/config/resStatus.js @@ -71,6 +71,8 @@ module.exports = { WRONG_FARMID : {'result': false, 'code': 6011, "message": "잘못된 농장 ID"}, EMPTY_PICTURE_KEY : {'result': false, 'code': 6012, "message": "사진 키값이 비어있습니다."}, ALREADY_DELETE_PICTURE : {'result': false, 'code': 6013, "message": "이미 삭제된 사진입니다."}, + SET_REGION : {'result': false, 'code': 6014, "message": "지역을 설정해 주세요"}, + REDIS_ERROR : {'result': false, 'code':6900, 'message': "REDIS 에러"} From d21e8284bcb203e93b2c67f651695ddf9ffa5400 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 22 Jul 2023 19:28:53 +0900 Subject: [PATCH 23/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=EC=A3=BC=20=ED=95=B8?= =?UTF-8?q?=EB=93=9C=ED=8F=B0=20=EB=B2=88=ED=98=B8=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 14 ++++++++++++++ components/farm/farmDao.js | 17 +++++++++++++++-- components/farm/farmProvider.js | 7 +++++++ components/farm/farmRoute.js | 3 +++ components/farm/farmService.js | 1 - config/resStatus.js | 2 +- 6 files changed, 40 insertions(+), 4 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 237c212..c293a2d 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -210,3 +210,17 @@ exports.deletePhoto = async(req,res) => { res.send(errResponse(resStatus.SERVER_ERROR)); } } + +exports.getPhoneNumber = async(req,res) => { + try{ + const {farmID} = req.query + if (!farmID) return res.send(errResponse2(baseResponse.FARMID_EMPTY)) + + const Owner = await farmProvider.getOwner(farmID) + Owner.result = true + return res.send(Owner) + }catch(e){ + console.log(e); + res.send(errResponse(resStatus.INACCURATE_OWNER)); + } +} diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 94338d6..8e09aa1 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -1,7 +1,5 @@ //const { connection } = require("mongoose"); -const { login } = require("../../helpers/validator"); - exports.selectFarm = async (connection) => { const selectFarmListQuery = ` SELECT * @@ -230,4 +228,19 @@ exports.selectFarmPicturesUrlKey = async(connection) =>{ const pictureUrls = await connection.query(selectFarmPicturesUrlQuery); return pictureUrls; +} + +exports.getOwnerbyFarmID = async(connection,farmID) =>{ + const getOwnerbyFarmIDQuery = ` + SELECT PhoneNumber + FROM User + WHERE Email = ( + SELECT Owner + FROM Farm + WHERE FarmID = ? + ); + ` + + const [phoneNumber] = await connection.query(getOwnerbyFarmIDQuery, farmID) + return phoneNumber[0]; } \ No newline at end of file diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 921d00b..43aeb43 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -103,4 +103,11 @@ exports.deletePhoto = async (key) => { connection.release(); return deleteFarmPicture +} + +exports.getOwner = async(farmID) => { + const connection = await pool.getConnection(async conn => conn); + const Owner = await farmDao.getOwnerbyFarmID(connection,farmID); + connection.release(); + return Owner; } \ No newline at end of file diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index 8053848..a30d8b4 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -33,4 +33,7 @@ module.exports = function (app) { //농장 사진 삭제 app.delete('/farm/deletePhoto',deleteImg, farm.deletePhoto); + + //농장주 핸드폰 번호 조회 + app.get('/farm/farmerPhoneNumber', farm.getPhoneNumber); }; \ No newline at end of file diff --git a/components/farm/farmService.js b/components/farm/farmService.js index 232cf91..1c73685 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -134,7 +134,6 @@ exports.getFarmDetail = async (farmID) => { //농장주 정보 추가 : Email, PhoneNumber, Name, NickName let userInfo = { Email : userInformation[0].Email, - PhoneNumber : userInformation[0].PhoneNumber, Name : userInformation[0].Name, NickName : userInformation[0].NickName, Picture_url : userInformation[0].Picture_url || null, diff --git a/config/resStatus.js b/config/resStatus.js index b64d613..7ebc4ad 100644 --- a/config/resStatus.js +++ b/config/resStatus.js @@ -73,7 +73,7 @@ module.exports = { ALREADY_DELETE_PICTURE : {'result': false, 'code': 6013, "message": "이미 삭제된 사진입니다."}, SET_REGION : {'result': false, 'code': 6014, "message": "지역을 설정해 주세요"}, - + INACCURATE_OWNER: {'result': false, 'code': 6015, "message": "FarmID가 잘못되었거나 농장주가 존재하지 않습니다."}, REDIS_ERROR : {'result': false, 'code':6900, 'message': "REDIS 에러"} From 95dfb15c00ecb010e54383144b8f18d57afe23c3 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 22 Jul 2023 19:41:06 +0900 Subject: [PATCH 24/52] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C?= =?UTF-8?q?=20=ED=95=B8=EB=93=9C=ED=8F=B0=20=EB=B2=88=ED=98=B8=20=ED=95=A8?= =?UTF-8?q?=EA=BB=98=20=EC=A0=84=EC=86=A1(=EC=9E=84=EC=8B=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/jwtLogin.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/jwtLogin.js b/config/jwtLogin.js index 7ed07f6..06b0d9b 100644 --- a/config/jwtLogin.js +++ b/config/jwtLogin.js @@ -10,6 +10,7 @@ async function jwtLogin(user) { nickName: user.NickName, email: user.Email, role: user.Role, + phoneNumber : user.PhoneNumber }; return ({ accesstoken: jwt.sign(payload, secretKey, options), @@ -17,8 +18,9 @@ async function jwtLogin(user) { nickName: user.NickName, email: user.Email, role: user.Role, + phoneNumber: user.PhoneNumber, status: true, }) } -module.exports = jwtLogin; \ No newline at end of file +module.exports = jwtLogin; \ No newline at end of file From 676e59e24c1606335b2deddfd0b854a8da6f5a93 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 22 Jul 2023 20:10:58 +0900 Subject: [PATCH 25/52] =?UTF-8?q?=ED=98=84=EC=9E=AC,=EA=B3=BC=EA=B1=B0=20?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=EB=86=8D=EC=9E=A5=20picture=5Furl=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/reserve/reserveController.js | 4 ++-- components/reserve/reserveDao.js | 30 +++++++++++++++---------- components/reserve/reserveService.js | 5 +++-- components/user/userProvider.js | 4 ++-- helpers/validator.js | 1 + 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/components/reserve/reserveController.js b/components/reserve/reserveController.js index 9691987..f313e3d 100644 --- a/components/reserve/reserveController.js +++ b/components/reserve/reserveController.js @@ -138,7 +138,7 @@ exports.currentUse = async function (req, res) { // const invalidation = await validator.oneParams(userEmail); // if (invalidation) return (res.send(errResponse(invalidation))); - if(validator.isValidEmail(userEmail) == false) + if(validator.isValidEmail(userEmail) == false) return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); const currentUseResult = await reserveService.currentUse(userEmail); @@ -160,7 +160,7 @@ exports.pastUse = async function (req, res) { // const invalidation = await validator.oneParams(userEmail); // if (invalidation) return (res.send(errResponse(invalidation))); - if(validator.isValidEmail(userEmail) == false) + if(validator.isValidEmail(userEmail) == false) return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); const pastUseResult = await reserveService.pastUse(userEmail); diff --git a/components/reserve/reserveDao.js b/components/reserve/reserveDao.js index 9968438..70e52a4 100644 --- a/components/reserve/reserveDao.js +++ b/components/reserve/reserveDao.js @@ -72,12 +72,15 @@ async function editReservationStatus(connection, updatedStatusInfo) { async function currentUseList(connection, email) { const currentUseListQuery = ` - SELECT Reserveid, Farmid, UserEmail, OwnerEmail, startAt, endAt - FROM Reservation - WHERE DATE(NOW()) >= DATE(startAt) - AND DATE(NOW()) <= DATE(endAt) - AND Status = 'A' - AND UserEmail = ?; + SELECT R.Reserveid, R.Farmid, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, FP.Picture_url + FROM Reservation R + LEFT JOIN FarmPictures FP ON R.FarmID = FP.FarmID + WHERE DATE(NOW()) >= DATE(R.startAt) + AND DATE(NOW()) <= DATE(R.endAt) + AND R.Status = 'A' + AND R.UserEmail = ? + ORDER BY FP.createAt DESC + LIMIT 1; `; const currentUseListResult = await connection.query(currentUseListQuery, email); @@ -87,12 +90,15 @@ async function currentUseList(connection, email) { async function pastUseList(connection, email) { const pastUseListQuery = ` - SELECT Reserveid, Farmid, UserEmail, OwnerEmail, startAt, endAt - FROM Reservation - WHERE DATE(NOW()) > DATE(startAt) - AND DATE(NOW()) > DATE(endAt) - AND Status = 'A' - AND UserEmail = ?; + SELECT R.Reserveid, R.Farmid, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, FP.Picture_url + FROM Reservation R + LEFT JOIN FarmPictures FP ON R.FarmID = FP.FarmID + WHERE DATE(NOW()) > DATE(R.startAt) + AND DATE(NOW()) > DATE(R.endAt) + AND R.Status = 'A' + AND R.UserEmail = ? + ORDER BY FP.createAt DESC + LIMIT 1; `; const pastUseListResult = await connection.query(pastUseListQuery, email); diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index a233e87..293c04b 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -25,11 +25,11 @@ async function request(userEmail, farmid,startAt, endAt) { if(unAvailability != 0) return errResponse(unAvailability); - + //date reservation check for (const e of reserveInfo) { const reservation_full = dateAvailability.reserveAvailabilityCheck(e.startAt, e.endAt, newStartAt, newEndAt); - + console.log(reservation_full); if (reservation_full !== false) { return response(reservation_full, {"reservedStartAt" : e.startAt, "reservedEndAt" : e.endAt}); @@ -136,6 +136,7 @@ async function currentUse(email) { } catch (e) { + console.log(e); return errResponse(resStatus.DB_ERROR); } diff --git a/components/user/userProvider.js b/components/user/userProvider.js index 07aaedc..a72511b 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -2,7 +2,7 @@ const { pool } = require('../../config/database'); const userDao = require('./userDao'); exports.retrieveUsedFarmArray = async (userid) =>{ - const connection = await pool.getConnections(async (conn) => conn); + const connection = await pool.getConnection(async (conn) => conn); const UsedFarmArray = await userDao.SelectionUsedFarmArray(connection, userid); connection.release(); @@ -10,7 +10,7 @@ exports.retrieveUsedFarmArray = async (userid) =>{ } exports.retrieveCurFarmArray = async (userid) =>{ - const connection = await pool.getConnections(async (conn) => conn); + const connection = await pool.getConnection(async (conn) => conn); const UseFarmArray = await userDao.SelectionUseFarmArray(connection, userid); connection.release(); diff --git a/helpers/validator.js b/helpers/validator.js index 7ea5000..f967f5c 100644 --- a/helpers/validator.js +++ b/helpers/validator.js @@ -75,6 +75,7 @@ const validator = { isValidEmail: (email) => { const emailPattern = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/; + return emailPattern.test(email); } } From 0aaed985cea8fdb72c9a7ac5616a4dd74c27310b Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 22 Jul 2023 20:14:27 +0900 Subject: [PATCH 26/52] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=95=84=EC=82=AC=EC=A7=84=20=EB=B0=98?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/jwtLogin.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/jwtLogin.js b/config/jwtLogin.js index 06b0d9b..1160516 100644 --- a/config/jwtLogin.js +++ b/config/jwtLogin.js @@ -10,7 +10,8 @@ async function jwtLogin(user) { nickName: user.NickName, email: user.Email, role: user.Role, - phoneNumber : user.PhoneNumber + phoneNumber : user.PhoneNumber, + profile : user.Picture_url }; return ({ accesstoken: jwt.sign(payload, secretKey, options), @@ -19,6 +20,7 @@ async function jwtLogin(user) { email: user.Email, role: user.Role, phoneNumber: user.PhoneNumber, + profile : user.Picture_url, status: true, }) } From 86034b021ee099748c67e29d521f63b6b246c8d0 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sun, 23 Jul 2023 14:52:54 +0900 Subject: [PATCH 27/52] =?UTF-8?q?=ED=98=84=EC=9E=AC,=EA=B3=BC=EA=B1=B0=20?= =?UTF-8?q?=EC=98=88=EC=95=BD=20=EB=82=B4=EC=97=AD=20=EB=86=8D=EC=9E=A5=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/reserve/reserveDao.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/components/reserve/reserveDao.js b/components/reserve/reserveDao.js index 70e52a4..1747c7e 100644 --- a/components/reserve/reserveDao.js +++ b/components/reserve/reserveDao.js @@ -72,16 +72,17 @@ async function editReservationStatus(connection, updatedStatusInfo) { async function currentUseList(connection, email) { const currentUseListQuery = ` - SELECT R.Reserveid, R.Farmid, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, FP.Picture_url + SELECT R.ReserveID, R.FarmID, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, F.Name, FP.Picture_url FROM Reservation R + LEFT JOIN Farm F ON R.FarmID = F.FarmID LEFT JOIN FarmPictures FP ON R.FarmID = FP.FarmID WHERE DATE(NOW()) >= DATE(R.startAt) - AND DATE(NOW()) <= DATE(R.endAt) + AND (DATE(NOW()) <= DATE(R.endAt) OR R.endAt IS NULL) AND R.Status = 'A' AND R.UserEmail = ? ORDER BY FP.createAt DESC LIMIT 1; - `; +`; const currentUseListResult = await connection.query(currentUseListQuery, email); @@ -90,8 +91,9 @@ async function currentUseList(connection, email) { async function pastUseList(connection, email) { const pastUseListQuery = ` - SELECT R.Reserveid, R.Farmid, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, FP.Picture_url + SELECT R.Reserveid, R.Farmid, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, F.Name, FP.Picture_url FROM Reservation R + LEFT JOIN Farm F ON R.FarmID = F.FARMID LEFT JOIN FarmPictures FP ON R.FarmID = FP.FarmID WHERE DATE(NOW()) > DATE(R.startAt) AND DATE(NOW()) > DATE(R.endAt) From dd33e24c1bb99a5ab90750d43a0f48f2b342475a Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 27 Jul 2023 01:11:27 +0900 Subject: [PATCH 28/52] =?UTF-8?q?=ED=9A=8C=EC=9B=90=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=8B=9C=20=EC=83=88=EB=A1=9C=EC=9A=B4=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=EA=B0=92=20=EC=A0=84=EB=8B=AC,=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=EC=99=B8=20=EA=B0=9C=EC=9D=B8=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C,=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=88=98=EC=A0=95=20=EC=8B=9C=20url=20?= =?UTF-8?q?=ED=95=A8=EA=BB=98=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 17 +++++++++++++++-- components/farm/farmService.js | 4 ++-- components/user/userController.js | 29 +++++++++++++++++++++++++---- config/jwtLogin.js | 5 ----- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index c293a2d..1907d52 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -13,6 +13,7 @@ const resStatus_5000 = require('../../config/resStatus_5000'); const districtClarity = require('./../../helpers/districtClarity'); const dateAvailability = require('../../helpers/DateAvailability'); const userProvider = require('../user/userProvider'); +const jwtLogin = require('./../../config/jwtLogin'); exports.getFarmlist = async (req, res) => { try{ @@ -72,11 +73,23 @@ exports.getFarmUseList = async (req, res) => { exports.postFarmer = async (req, res) =>{ try{ const decoded = jwt.verify(req.headers.token, secretKey); - console.log(decoded); + //console.log("decoded") + //console.log(decoded); + //console.log("======"); if (decoded.role == 'F') return res.send(errResponse2(baseResponse.ALREADY_FARMER)); const farmer = await farmService.postFarmer(decoded.email); - if (!farmer) return res.send(response2(baseResponse.SIGNIN_INACTIVE_ACCOUNT)) + if (!farmer) return res.send(errResponse2(baseResponse.SIGNIN_INACTIVE_ACCOUNT)) + + const userInfo = await userProvider.retrieveUserEmail(decoded.email); + const newJwtResponse = await jwtLogin(userInfo) +/* + const decoded2 = jwt.verify(newJwtResponse.accesstoken, secretKey) + console.log("decoded2") + console.log(decoded2); + console.log("======"); + */ + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken return res.send(baseResponse.SUCCESS); diff --git a/components/farm/farmService.js b/components/farm/farmService.js index 1c73685..e93e380 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -117,8 +117,8 @@ exports.getFarmDetail = async (farmID) => { //농장 항목 삭제 : Owner, crateAt, updateAt delete farmDetail.Owner; - delete farmDetail.createAt; - delete farmDetail.updateAt; + //delete farmDetail.createAt; + //delete farmDetail.updateAt; // 농장 사진 추가 : Picture_url, Picture_key let pictureObject; diff --git a/components/user/userController.js b/components/user/userController.js index fd50234..3923969 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -16,6 +16,9 @@ const dateAvailability = require('../../helpers/DateAvailability'); const sharp = require('sharp'); const fs = require('fs'); const resStatus_5000 = require('../../config/resStatus_5000'); +const jwtLogin = require('./../../config/jwtLogin'); + + exports.getBefoFarmUsed_Array = async (req, res, error) => { const { userid } = req.params; @@ -313,7 +316,11 @@ exports.editUserNickName = async(req,res) =>{ const eidtUser = await userService.editNickName(email, nickname) - return res.send(eidtUser) + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) + + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) } exports.editUserName = async(req,res) =>{ @@ -325,7 +332,11 @@ exports.editUserName = async(req,res) =>{ const eidtUser = await userService.editName(email, name) - return res.send(eidtUser) + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) + + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) } exports.editUserPhoneNumber = async(req,res) =>{ @@ -339,7 +350,11 @@ exports.editUserPhoneNumber = async(req,res) =>{ const eidtUser = await userService.editPhoneNumber(email, phoneNumber) - return res.send(eidtUser) + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) + + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) } exports.editUserPassword = async(req,res) =>{ @@ -389,10 +404,16 @@ exports.editUserProfileImg = async(req,res)=> { //console.log(id); const eidtImage = await userService.eidtProfileImg(email, req.file.location, req.file.key) + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) + + baseResponse.SUCCESS.photoUrl = req.file.location + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) - return res.send(eidtImage) } catch(err){ console.log(err); + res.send(errResponse(resStatus.SERVER_ERROR)); } } diff --git a/config/jwtLogin.js b/config/jwtLogin.js index 1160516..dcdf9f7 100644 --- a/config/jwtLogin.js +++ b/config/jwtLogin.js @@ -15,11 +15,6 @@ async function jwtLogin(user) { }; return ({ accesstoken: jwt.sign(payload, secretKey, options), - name: user.Name, - nickName: user.NickName, - email: user.Email, - role: user.Role, - phoneNumber: user.PhoneNumber, profile : user.Picture_url, status: true, }) From 115b8b401ad8cec28ba14ed7b8117e8a19741265 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 27 Jul 2023 13:36:57 +0900 Subject: [PATCH 29/52] =?UTF-8?q?=EC=B0=9C=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 18 ++++++++++++++++++ components/farm/farmDao.js | 22 ++++++++++++++++++++++ components/farm/farmProvider.js | 7 +++++++ components/farm/farmRoute.js | 3 +++ components/user/userService.js | 3 +++ 5 files changed, 53 insertions(+) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 1907d52..b61c4e9 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -237,3 +237,21 @@ exports.getPhoneNumber = async(req,res) => { res.send(errResponse(resStatus.INACCURATE_OWNER)); } } + +exports.getLikes = async(req,res) =>{ + try{ + const {email} = req.query + if (!email) return res.send(errResponse2(baseResponse.SIGNUP_EMAIL_EMPTY)) + + const user = await userProvider.retrieveUserEmail(email) + if (!user.LikeFarmIDs) return res.send([]) + + const likesArray = user.LikeFarmIDs.split(',').map(item => item.trim()); + const likeFarms = await farmProvider.getFarmArray(likesArray) + + return res.send(likeFarms) + }catch(e){ + console.log(e); + res.send(errResponse(resStatus.SERVER_ERROR)); + } +} \ No newline at end of file diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 8e09aa1..dc948d6 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -243,4 +243,26 @@ exports.getOwnerbyFarmID = async(connection,farmID) =>{ const [phoneNumber] = await connection.query(getOwnerbyFarmIDQuery, farmID) return phoneNumber[0]; +} + +exports.getFarmsbyFarmIDs = async(connection, farmIds) =>{ + const getFarmsbyFarmIDsQuery = ` + SELECT f.FarmID, + Name, + Price, + SquaredMeters, + LocationBig, + LocationMid, + LocationSmall, + Likes, + MIN(Picture_url) as Picture_url + FROM Farm f + LEFT JOIN FarmPictures fp ON f.FarmID = fp.FarmID + WHERE f.FarmID IN (?) + GROUP BY f.FarmID, Name, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Likes; + ` + + const [farms] = await connection.query(getFarmsbyFarmIDsQuery, [farmIds]) + console.log(farms); + return farms; } \ No newline at end of file diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 43aeb43..9a9384d 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -53,7 +53,14 @@ exports.isSameFarm = async(farmInfo)=>{ if (sameFarm.length > 0) return true; else false; +} + +exports.getFarmArray = async(farmIDs) => { + const connection = await pool.getConnection(async conn => conn) + const FarmArray = await farmDao.getFarmsbyFarmIDs(connection, farmIDs) + connection.release() + return FarmArray } // 농장 검색관련 diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index a30d8b4..90e9aa3 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -36,4 +36,7 @@ module.exports = function (app) { //농장주 핸드폰 번호 조회 app.get('/farm/farmerPhoneNumber', farm.getPhoneNumber); + + //좋아요 농장 목록 반환 + app.get('/farm/likes',farm.getLikes); }; \ No newline at end of file diff --git a/components/user/userService.js b/components/user/userService.js index 616ba77..7847122 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -35,6 +35,9 @@ exports.signUp = async(email, password, phoneNumber, nickName, name, role) =>{ const userInfo = await userProvider.usersbyEmail(email); if (userInfo.length >= 1) return errResponse(resStatus.SIGNUP_REDUNDANT_EMAIL); + const user = await userProvider.retrieveUser(phoneNumber); + if (user) return errResponse(baseResponse.ALREADY_USER) + const encryptedData = await encryptedPassword.createHashedPassword(password); const hashedPassword = encryptedData.hashedPassword; const salt = encryptedData.salt; From 39eeef3ea36218bc995eff5b63981ddf2504fd87 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 29 Jul 2023 12:02:22 +0900 Subject: [PATCH 30/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EC=B0=9C=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20api=20=EC=88=98=EC=A0=95=20-=20=EB=B3=84=EC=A0=90->?= =?UTF-8?q?=EC=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 1 + components/farm/farmDao.js | 5 ++--- components/user/userController.js | 4 ++-- components/user/userDao.js | 6 +++--- components/user/userRoute.js | 2 +- components/user/userService.js | 26 ++++++++++++++------------ 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index b61c4e9..4d3eadc 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -244,6 +244,7 @@ exports.getLikes = async(req,res) =>{ if (!email) return res.send(errResponse2(baseResponse.SIGNUP_EMAIL_EMPTY)) const user = await userProvider.retrieveUserEmail(email) + console.log(user); if (!user.LikeFarmIDs) return res.send([]) const likesArray = user.LikeFarmIDs.split(',').map(item => item.trim()); diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index dc948d6..b9f6037 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -197,14 +197,13 @@ exports.editFarmPicture = async(connection, farmID, img, key) => { return postFarmPicture[0] } -exports.updateFarmStar = async(connection, updatedStarNumberInfo) => { +exports.updateFarmLikes = async(connection, updatedStarNumberInfo) => { // updatedStarNumberInfo = [StarNumber, updateAt, farmID] const updateFarmStarQuery = ` UPDATE Farm - SET Star = ?, updateAt = ? + SET Likes = ? WHERE FarmID = ? ` - const updatedStarNumber = await connection.query(updateFarmStarQuery, updatedStarNumberInfo); return updatedStarNumber; } diff --git a/components/user/userController.js b/components/user/userController.js index 3923969..eac880d 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -85,14 +85,14 @@ exports.signup = async function (req, res) { /** * [POST] /user/star */ -exports.star = async function (req, res) { +exports.likes = async function (req, res) { // try { const { email, farmid } = req.body; const invalidation = await validator.twoParams(email, farmid); if (invalidation) return(res.send(errResponse(invalidation))); - const starResponse = await userService.addStar(email, farmid); + const starResponse = await userService.addLike(email, farmid); return(res.send(starResponse)); // } diff --git a/components/user/userDao.js b/components/user/userDao.js index a801d40..6a4fcf9 100644 --- a/components/user/userDao.js +++ b/components/user/userDao.js @@ -61,11 +61,11 @@ async function selectStarbyEmail(connection, email) { return starList; } -async function updateUserStar(connection, starRequest) { +async function updateUserLikes(connection, starRequest) { //starRequest [newStarList, updateAt, email] const updateUserStarQuery = ` UPDATE User - SET LikeFarmIDs = ?, updateAt = ? + SET LikeFarmIDs = ? WHERE Email = ?; `; const updateUserStarResult = await connection.query(updateUserStarQuery, starRequest); @@ -169,7 +169,7 @@ module.exports = { selectUserbyPhoneNumber, insertUser, selectStarbyEmail, - updateUserStar, + updateUserLikes, updateUserBirth, selectUser, updatePassword, diff --git a/components/user/userRoute.js b/components/user/userRoute.js index c80dc67..dcc9032 100644 --- a/components/user/userRoute.js +++ b/components/user/userRoute.js @@ -34,7 +34,7 @@ module.exports = function(app){ app.get("farm/get_curArray:userid", user.getCurFarmUse_Array); // 8. 농장 찜하기 API - app.post('/user/star', user.star) + app.post('/user/likes', user.likes) //9. 생일 등록 API app.post('/user/birth', user.birth) diff --git a/components/user/userService.js b/components/user/userService.js index 7847122..3748f8b 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -52,7 +52,7 @@ exports.signUp = async(email, password, phoneNumber, nickName, name, role) =>{ return response(resStatus_5000.USER_SIGNUP_SUCCESS, {"email" : email, "role" : role}); }; -exports.addStar= async(email, farmId) =>{ +exports.addLike= async(email, farmId) =>{ const userInfo = await userProvider.usersbyEmail(email); const farmInfo = await farmProvider.farmbyfarmID(farmId); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); @@ -73,26 +73,28 @@ exports.addStar= async(email, farmId) =>{ else newstarList = farmId; console.log("newstarList", newstarList); - const now = await setDate.now(); - const starRequest = [newstarList, now, email]; + const starRequest = [newstarList, email]; const connection = await pool.getConnection(async conn => conn); - const starList = await userDao.updateUserStar(connection, starRequest); + const starList = await userDao.updateUserLikes(connection, starRequest); /** - * PLUS # OF FARM STAR + * PLUS # OF FARM Like */ - let updatedStarNumber = 0; + let updatedStarNumber = farmInfo.Likes + 1; try { - if (farmInfo.Star && farmInfo.Star > 0) { - updatedStarNumber += farmInfo.Star; +/* + if (farmInfo.Likes && farmInfo.Likes > 0) { + //updatedStarNumber += farmInfo.Likes; + } else updatedStarNumber = 1; + */ // console.log("updatedStarNumber", updatedStarNumber); - const now = await setDate.now(); - const updatedStarNumberInfo = [updatedStarNumber, now, farmId] - const updatedStar = await farmDao.updateFarmStar(connection, updatedStarNumberInfo); + + const updatedStarNumberInfo = [updatedStarNumber, farmId] + const updatedStar = await farmDao.updateFarmLikes(connection, updatedStarNumberInfo); connection.release(); @@ -101,7 +103,7 @@ exports.addStar= async(email, farmId) =>{ return errResponse(resStatus_5000.FARM_UPDATE_STAR_ERROR); } - return response(resStatus_5000.USER_STAR_ADD_SUCCESS, {"currentStarList" : newstarList, "updatedStarNumber" : updatedStarNumber}); + return response(baseResponse.SUCCESS); } exports.editBirth = async(email, birth) =>{ From 9d7ab891e5e3c9870082d74410f83b5f4bf3130e Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 29 Jul 2023 12:44:53 +0900 Subject: [PATCH 31/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EA=B2=80=EC=83=89,?= =?UTF-8?q?=ED=95=84=ED=84=B0=EB=A7=81=20liked=20=EC=B6=94=EA=B0=80(?= =?UTF-8?q?=EC=B0=9C=20=EC=97=AC=EB=B6=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 14 ++++++++-- components/farm/farmProvider.js | 21 +++++++++++++-- components/farm/farmService.js | 1 + components/user/userController.js | 8 ++++++ components/user/userRoute.js | 1 + components/user/userService.js | 45 +++++++++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 4 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 4d3eadc..42cbedf 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -179,7 +179,12 @@ exports.findFarms = async (req,res) => { const {keyword} = req.query if (!keyword) return res.send(errResponse2(baseResponse.FARM_NOT_KEYWORD)) - const farms = await farmProvider.retrieveFarms(keyword) + const decoded = jwt.verify(req.headers.token, secretKey); + const user = await userProvider.retrieveUserEmail(decoded.email); + + const likeFarms = user.LikeFarmIDs + const farms = await farmProvider.retrieveFarms(keyword,likeFarms) + const searchRes = {"result" : true} searchRes.farms = farms return res.send(searchRes) @@ -195,8 +200,13 @@ exports.filter = async(req,res) => { if (!locationBig) return res.send(errResponse2(baseResponse.SET_REGION)) + const decoded = jwt.verify(req.headers.token, secretKey); + const user = await userProvider.retrieveUserEmail(decoded.email); + + const likeFarms = user.LikeFarmIDs + const farms = await farmProvider.farmFilter(locationBig, locationMid, likeFarms) + const searchRes = {"result" : true} - const farms = await farmProvider.farmFilter(locationBig, locationMid) searchRes.farms = farms return res.send(searchRes) diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 9a9384d..186269e 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -64,7 +64,7 @@ exports.getFarmArray = async(farmIDs) => { } // 농장 검색관련 -exports.farmFilter = async(locationBig, locationMid) => { +exports.farmFilter = async(locationBig, locationMid, likeFarms) => { const connection = await pool.getConnection(async (conn) => conn) let res = [] if (locationMid){ @@ -72,14 +72,31 @@ exports.farmFilter = async(locationBig, locationMid) => { }else{ res = await farmDao.filteringBig(connection, locationBig) } + + const likeFarmsArray = likeFarms.split(', '); + res.forEach(farm => { + if (likeFarmsArray.includes(String(farm.FarmID))){ + farm.Liked = true + }else{ + farm.Liked = false + } + }); connection.release() return res } -exports.retrieveFarms = async(keyword) => { +exports.retrieveFarms = async(keyword,likeFarms) => { const connection = await pool.getConnection(async (conn) => conn); const newKeyword = '%'+keyword+'%' const res = await farmDao.searchFarm(connection, newKeyword) + const likeFarmsArray = likeFarms.split(', '); + res.forEach(farm => { + if (likeFarmsArray.includes(String(farm.FarmID))){ + farm.Liked = true + }else{ + farm.Liked = false + } + }); connection.release() diff --git a/components/farm/farmService.js b/components/farm/farmService.js index e93e380..7f0641a 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -169,6 +169,7 @@ exports.getFarmList = async (email) => { //like if (userInformation.length > 0 && userInformation[0].LikeFarmIDs) { likeFarmIDs = userInformation[0].LikeFarmIDs.split(',').map(id => id.trim()); + console.log(likeFarmIDs); farmList.forEach(farm => { if (likeFarmIDs.includes(farm.FarmID.toString())) { farm.Liked = true; diff --git a/components/user/userController.js b/components/user/userController.js index eac880d..902770f 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -101,6 +101,14 @@ exports.likes = async function (req, res) { // } } +exports.unliked = async(req,res)=>{ + const { email, farmid } = req.body; + const invalidation = await validator.twoParams(email, farmid); + if (invalidation) return(res.send(errResponse(invalidation))); + + const result = await userService.unLike(email, farmid) +} + /** * [POST] /user/birth */ diff --git a/components/user/userRoute.js b/components/user/userRoute.js index dcc9032..589dd15 100644 --- a/components/user/userRoute.js +++ b/components/user/userRoute.js @@ -39,5 +39,6 @@ module.exports = function(app){ //9. 생일 등록 API app.post('/user/birth', user.birth) + app.delete('user/likes', user.unliked) }; \ No newline at end of file diff --git a/components/user/userService.js b/components/user/userService.js index 3748f8b..469b975 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -106,6 +106,51 @@ exports.addLike= async(email, farmId) =>{ return response(baseResponse.SUCCESS); } +exports.unLike = async(email, farmID) =>{ + const userInfo = await userProvider.usersbyEmail(email); + const farmInfo = await farmProvider.farmbyfarmID(farmId); + if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); + if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); + + let newstarList; + const userStarList = await userProvider.starListbyEmail(email); + if (userStarList[0].LikeFarmIDs && userStarList[0].LikeFarmIDs.length > 0) { + let startListString = userStarList[0].LikeFarmIDs; + const existedArr = startListString.split(","); + existedArr + for (let e of existedArr) { + e = e.trim(); + if(e.localeCompare(farmId) === 0 ) return errResponse(resStatus_5000.USER_REDUNDANT_STAR); + } + newstarList = userStarList[0].LikeFarmIDs + ", " + farmId; + } + else newstarList = farmId; + console.log("newstarList", newstarList); + + const starRequest = [newstarList, email]; + + const connection = await pool.getConnection(async conn => conn); + const starList = await userDao.updateUserLikes(connection, starRequest); + + /** + * PLUS # OF FARM Like + */ + let updatedStarNumber = farmInfo.Likes + 1; + try { + + const updatedStarNumberInfo = [updatedStarNumber, farmId] + const updatedStar = await farmDao.updateFarmLikes(connection, updatedStarNumberInfo); + + connection.release(); + + } + catch (e) { + return errResponse(resStatus_5000.FARM_UPDATE_STAR_ERROR); + } + + return response(baseResponse.SUCCESS); +} + exports.editBirth = async(email, birth) =>{ const userInfo = await userProvider.usersbyEmail(email); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); From 27e51b91cc0ca3aa298ce50fdd991a89f8c42236 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 29 Jul 2023 13:28:39 +0900 Subject: [PATCH 32/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EC=B0=9C=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmDao.js | 1 + components/farm/farmProvider.js | 7 ++++ components/user/userController.js | 1 + components/user/userProvider.js | 8 +++++ components/user/userRoute.js | 3 +- components/user/userService.js | 55 ++++++++++--------------------- 6 files changed, 36 insertions(+), 39 deletions(-) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index b9f6037..66c5749 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -199,6 +199,7 @@ exports.editFarmPicture = async(connection, farmID, img, key) => { exports.updateFarmLikes = async(connection, updatedStarNumberInfo) => { // updatedStarNumberInfo = [StarNumber, updateAt, farmID] + console.log(updatedStarNumberInfo); const updateFarmStarQuery = ` UPDATE Farm SET Likes = ? diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 186269e..6c10440 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -134,4 +134,11 @@ exports.getOwner = async(farmID) => { const Owner = await farmDao.getOwnerbyFarmID(connection,farmID); connection.release(); return Owner; +} + +exports.deleteLike = async(likeFarms, farmID) => { + const connection = await pool.getConnection(async conn => conn); + const updateLike = await farmDao.updateFarmLikes(connection,[likeFarms,farmID]) + connection.release() + return updateLike } \ No newline at end of file diff --git a/components/user/userController.js b/components/user/userController.js index 902770f..e050296 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -107,6 +107,7 @@ exports.unliked = async(req,res)=>{ if (invalidation) return(res.send(errResponse(invalidation))); const result = await userService.unLike(email, farmid) + return res.send(result) } /** diff --git a/components/user/userProvider.js b/components/user/userProvider.js index a72511b..d9b856c 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -69,4 +69,12 @@ exports.nonSocialUsersbyEmail= async(email)=>{ connection.release(); return userInfo; +} + +exports.updateUserLikes = async(likeFarms, email) => { + const connection = await pool.getConnection(async conn => conn); + const [updateUser] = await userDao.updateUserLikes(connection, [likeFarms, email]); + connection.release(); + + return updateUser } \ No newline at end of file diff --git a/components/user/userRoute.js b/components/user/userRoute.js index 589dd15..ab7a50a 100644 --- a/components/user/userRoute.js +++ b/components/user/userRoute.js @@ -39,6 +39,7 @@ module.exports = function(app){ //9. 생일 등록 API app.post('/user/birth', user.birth) - app.delete('user/likes', user.unliked) + // 농장 찜 취소 + app.delete('/user/likes', user.unliked) }; \ No newline at end of file diff --git a/components/user/userService.js b/components/user/userService.js index 469b975..b32c1b7 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -107,48 +107,27 @@ exports.addLike= async(email, farmId) =>{ } exports.unLike = async(email, farmID) =>{ - const userInfo = await userProvider.usersbyEmail(email); - const farmInfo = await farmProvider.farmbyfarmID(farmId); - if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); - if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); - - let newstarList; - const userStarList = await userProvider.starListbyEmail(email); - if (userStarList[0].LikeFarmIDs && userStarList[0].LikeFarmIDs.length > 0) { - let startListString = userStarList[0].LikeFarmIDs; - const existedArr = startListString.split(","); - existedArr - for (let e of existedArr) { - e = e.trim(); - if(e.localeCompare(farmId) === 0 ) return errResponse(resStatus_5000.USER_REDUNDANT_STAR); + try{ + const userInfo = await userProvider.usersbyEmail(email); + const farmInfo = await farmProvider.farmbyfarmID(farmID); + if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); + if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); + + const likeFarmsArray = userInfo[0].LikeFarmIDs.split(', '); + const indexToDelete = likeFarmsArray.indexOf(String(farmID)); + if (indexToDelete !== -1) { + likeFarmsArray.splice(indexToDelete, 1); } - newstarList = userStarList[0].LikeFarmIDs + ", " + farmId; - } - else newstarList = farmId; - console.log("newstarList", newstarList); + const likeFarms = likeFarmsArray.join(', '); - const starRequest = [newstarList, email]; - - const connection = await pool.getConnection(async conn => conn); - const starList = await userDao.updateUserLikes(connection, starRequest); - - /** - * PLUS # OF FARM Like - */ - let updatedStarNumber = farmInfo.Likes + 1; - try { - - const updatedStarNumberInfo = [updatedStarNumber, farmId] - const updatedStar = await farmDao.updateFarmLikes(connection, updatedStarNumberInfo); - - connection.release(); + const updateFarm = await farmProvider.deleteLike(farmInfo.Likes-1,farmID) + const updateUser = await userProvider.updateUserLikes(likeFarms, email) + return response2(baseResponse.SUCCESS) + }catch(e){ + console.log(e); + return errResponse2(baseResponse.SERVER_ERROR) } - catch (e) { - return errResponse(resStatus_5000.FARM_UPDATE_STAR_ERROR); - } - - return response(baseResponse.SUCCESS); } exports.editBirth = async(email, birth) =>{ From 66764cf98fdc705cd56a3f55acf323fbcdbcad4f Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 29 Jul 2023 13:43:11 +0900 Subject: [PATCH 33/52] =?UTF-8?q?token=20validation=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 42cbedf..3cb0810 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -72,6 +72,7 @@ exports.getFarmUseList = async (req, res) => { exports.postFarmer = async (req, res) =>{ try{ + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) const decoded = jwt.verify(req.headers.token, secretKey); //console.log("decoded") //console.log(decoded); @@ -179,6 +180,7 @@ exports.findFarms = async (req,res) => { const {keyword} = req.query if (!keyword) return res.send(errResponse2(baseResponse.FARM_NOT_KEYWORD)) + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) const decoded = jwt.verify(req.headers.token, secretKey); const user = await userProvider.retrieveUserEmail(decoded.email); @@ -200,6 +202,7 @@ exports.filter = async(req,res) => { if (!locationBig) return res.send(errResponse2(baseResponse.SET_REGION)) + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) const decoded = jwt.verify(req.headers.token, secretKey); const user = await userProvider.retrieveUserEmail(decoded.email); From 51002446c34ef31de567f818597315cdbc835cc9 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Mon, 31 Jul 2023 12:35:05 +0900 Subject: [PATCH 34/52] =?UTF-8?q?=ED=98=84=EC=9E=AC,=EA=B3=BC=EA=B1=B0=20?= =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EB=82=B4=EC=97=AD=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 21 --------------------- components/farm/farmRoute.js | 6 ------ components/reserve/reserveDao.js | 2 +- components/user/userProvider.js | 16 ---------------- 4 files changed, 1 insertion(+), 44 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 3cb0810..dd178f2 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -49,27 +49,6 @@ exports.getFarmDetail = async (req, res) => { } } -exports.getFarmUsedList = async (req, res) => { - const { userid } = req.params; - - if(!userid) return res.render(errResponse(USER_USERID_EMPTY)); - - const FarmUsedArray = User.retrieveUsedFarmArray(userid); - const getUsedFarm_Detail = await farmProvider.retrieveFarmDetail(FarmUsedArray); - return res.render(getUsedFarm_Detail); - -} - -exports.getFarmUseList = async (req, res) => { - const { userid } = req.params; - if(!userid) return res.render(errResponse(USER_USERID_EMPTY)); - - const FarmUseArray = User.retrieveCurFarmArray(userid); - const getUseFarm_Detail = await farmProvider.retrieveUseFarmDetail(FarmUseArray); - return res.render(getUseFarm_Detail); - -} - exports.postFarmer = async (req, res) =>{ try{ if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index 90e9aa3..b1c2236 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -13,12 +13,6 @@ module.exports = function (app) { //농장 세부사항 조회 app.get("/farm/detail/:farmid", farm.getFarmDetail); - //과거 이용 내역 조회 - app.get("/farm/befolist:userid", farm.getFarmUsedList); - - //현재 이용 내역 조회 - app.get("/farm/curlist:userid", farm.getFarmUseList); - //농장주 등록 app.patch("/farm/register", farm.postFarmer); diff --git a/components/reserve/reserveDao.js b/components/reserve/reserveDao.js index 1747c7e..85d3474 100644 --- a/components/reserve/reserveDao.js +++ b/components/reserve/reserveDao.js @@ -91,7 +91,7 @@ async function currentUseList(connection, email) { async function pastUseList(connection, email) { const pastUseListQuery = ` - SELECT R.Reserveid, R.Farmid, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, F.Name, FP.Picture_url + SELECT R.ReserveID, R.FarmID, R.UserEmail, R.OwnerEmail, R.startAt, R.endAt, F.Name, FP.Picture_url FROM Reservation R LEFT JOIN Farm F ON R.FarmID = F.FARMID LEFT JOIN FarmPictures FP ON R.FarmID = FP.FarmID diff --git a/components/user/userProvider.js b/components/user/userProvider.js index d9b856c..c30c3a6 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -1,22 +1,6 @@ const { pool } = require('../../config/database'); const userDao = require('./userDao'); -exports.retrieveUsedFarmArray = async (userid) =>{ - const connection = await pool.getConnection(async (conn) => conn); - const UsedFarmArray = await userDao.SelectionUsedFarmArray(connection, userid); - connection.release(); - - return UsedFarmArray; -} - -exports.retrieveCurFarmArray = async (userid) =>{ - const connection = await pool.getConnection(async (conn) => conn); - const UseFarmArray = await userDao.SelectionUseFarmArray(connection, userid); - connection.release(); - - return UseFarmArray; -} - exports.retrieveUserEmail = async function (userEmail) { const connection = await pool.getConnection(async (conn) => conn); const [res] = await userDao.selectUserbyEmail(connection, userEmail); From 023bc813fd112bce5bcb521843c909e56794ad9b Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 3 Aug 2023 21:04:11 +0900 Subject: [PATCH 35/52] =?UTF-8?q?=EB=82=B4=20=EB=B3=B4=EC=9C=A0=20?= =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 14 ++++++++++++++ components/farm/farmDao.js | 20 ++++++++++++++++++++ components/farm/farmProvider.js | 6 +++--- components/farm/farmRoute.js | 3 +++ components/farm/farmService.js | 7 +++++++ components/user/userService.js | 3 ++- 6 files changed, 49 insertions(+), 4 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index dd178f2..64f921a 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -14,6 +14,7 @@ const districtClarity = require('./../../helpers/districtClarity'); const dateAvailability = require('../../helpers/DateAvailability'); const userProvider = require('../user/userProvider'); const jwtLogin = require('./../../config/jwtLogin'); +const { TimeSeriesAggregationType } = require('redis'); exports.getFarmlist = async (req, res) => { try{ @@ -247,4 +248,17 @@ exports.getLikes = async(req,res) =>{ console.log(e); res.send(errResponse(resStatus.SERVER_ERROR)); } +} + +exports.getMyFarm = async(req,res)=>{ + try{ + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + + const farms = await farmProvider.getOwnerFarms(decoded.email) + return res.send(farms) + }catch(e){ + console.log(e); + res.send(errResponse(resStatus.SERVER_ERROR)); + } } \ No newline at end of file diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 66c5749..b9f76be 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -265,4 +265,24 @@ exports.getFarmsbyFarmIDs = async(connection, farmIds) =>{ const [farms] = await connection.query(getFarmsbyFarmIDsQuery, [farmIds]) console.log(farms); return farms; +} + +exports.getFarmsbyOwner = async(connection, owner) =>{ + const getFarmsbyOwnerQuery = ` + SELECT f.FarmID, + Name, + Price, + SquaredMeters, + LocationBig, + LocationMid, + LocationSmall, + Likes, + MIN(Picture_url) as Picture_url + FROM Farm f + LEFT JOIN FarmPictures fp ON f.FarmID = fp.FarmID + WHERE f.Owner = ? + GROUP BY f.FarmID, Name, Price, SquaredMeters, LocationBig, LocationMid, LocationSmall, Likes;` + + const [farms] = await connection.query(getFarmsbyOwnerQuery, owner) + return farms; } \ No newline at end of file diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 6c10440..41513f4 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -136,9 +136,9 @@ exports.getOwner = async(farmID) => { return Owner; } -exports.deleteLike = async(likeFarms, farmID) => { +exports.getOwnerFarms = async(email) =>{ const connection = await pool.getConnection(async conn => conn); - const updateLike = await farmDao.updateFarmLikes(connection,[likeFarms,farmID]) + const farms = await farmDao.getFarmsbyOwner(connection,email) connection.release() - return updateLike + return farms } \ No newline at end of file diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index b1c2236..17ed78b 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -33,4 +33,7 @@ module.exports = function (app) { //좋아요 농장 목록 반환 app.get('/farm/likes',farm.getLikes); + + //보유 농장 조회 + app.get('/farm/myfarm', farm.getMyFarm); }; \ No newline at end of file diff --git a/components/farm/farmService.js b/components/farm/farmService.js index 7f0641a..4f98cd8 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -199,4 +199,11 @@ exports.getFarmList = async (email) => { // } catch (err) { // return errResponse(resStatus.DB_ERROR); // } +} + +exports.deleteLike = async(likeFarms, farmID) => { + const connection = await pool.getConnection(async conn => conn); + const updateLike = await farmDao.updateFarmLikes(connection,[likeFarms,farmID]) + connection.release() + return updateLike } \ No newline at end of file diff --git a/components/user/userService.js b/components/user/userService.js index b32c1b7..b540dd3 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -1,6 +1,7 @@ const userProvider = require('./../user/userProvider'); const userDao = require('./../user/userDao'); const farmProvider = require('./../farm/farmProvider'); +const farmService = require('./../farm/farmService'); const farmDao = require('./../farm/farmDao'); const { response, errResponse } = require('../../config/response'); const { response2, errResponse2 } = require('../../config/response2'); @@ -120,7 +121,7 @@ exports.unLike = async(email, farmID) =>{ } const likeFarms = likeFarmsArray.join(', '); - const updateFarm = await farmProvider.deleteLike(farmInfo.Likes-1,farmID) + const updateFarm = await farmService.deleteLike(farmInfo.Likes-1,farmID) const updateUser = await userProvider.updateUserLikes(likeFarms, email) return response2(baseResponse.SUCCESS) From f179a0f1cb1e199fa3440da7c6215c558e53cfc9 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 3 Aug 2023 21:13:35 +0900 Subject: [PATCH 36/52] =?UTF-8?q?user,=20farm=20provider=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 2 +- components/farm/farmProvider.js | 8 -------- components/farm/farmService.js | 8 ++++++++ components/user/userProvider.js | 8 -------- components/user/userService.js | 10 +++++++++- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 64f921a..745c010 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -205,7 +205,7 @@ exports.deletePhoto = async(req,res) => { const {Picture_key} = req.body if (!Picture_key) return res.send(errResponse2(baseResponse.EMPTY_PICTURE_KEY)) - const [deleteRes] = await farmProvider.deletePhoto(Picture_key) + const [deleteRes] = await farmService.deletePhoto(Picture_key) if (deleteRes.affectedRows) return res.send(response2(baseResponse.SUCCESS)) diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 41513f4..77dd385 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -121,14 +121,6 @@ exports.farmPictureUrl = async () =>{ return farmPicturesInfo[0]; } -exports.deletePhoto = async (key) => { - const connection = await pool.getConnection(async conn => conn); - const deleteFarmPicture = await farmDao.deletePhoto(connection,key); - connection.release(); - - return deleteFarmPicture -} - exports.getOwner = async(farmID) => { const connection = await pool.getConnection(async conn => conn); const Owner = await farmDao.getOwnerbyFarmID(connection,farmID); diff --git a/components/farm/farmService.js b/components/farm/farmService.js index 4f98cd8..cd0b9b6 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -206,4 +206,12 @@ exports.deleteLike = async(likeFarms, farmID) => { const updateLike = await farmDao.updateFarmLikes(connection,[likeFarms,farmID]) connection.release() return updateLike +} + +exports.deletePhoto = async (key) => { + const connection = await pool.getConnection(async conn => conn); + const deleteFarmPicture = await farmDao.deletePhoto(connection,key); + connection.release(); + + return deleteFarmPicture } \ No newline at end of file diff --git a/components/user/userProvider.js b/components/user/userProvider.js index c30c3a6..0d2cb07 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -54,11 +54,3 @@ exports.nonSocialUsersbyEmail= async(email)=>{ return userInfo; } - -exports.updateUserLikes = async(likeFarms, email) => { - const connection = await pool.getConnection(async conn => conn); - const [updateUser] = await userDao.updateUserLikes(connection, [likeFarms, email]); - connection.release(); - - return updateUser -} \ No newline at end of file diff --git a/components/user/userService.js b/components/user/userService.js index b540dd3..980766b 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -106,6 +106,13 @@ exports.addLike= async(email, farmId) =>{ return response(baseResponse.SUCCESS); } +exports.updateUserLikes = async(likeFarms, email) => { + const connection = await pool.getConnection(async conn => conn); + const [updateUser] = await userDao.updateUserLikes(connection, [likeFarms, email]); + connection.release(); + + return updateUser +} exports.unLike = async(email, farmID) =>{ try{ @@ -122,7 +129,7 @@ exports.unLike = async(email, farmID) =>{ const likeFarms = likeFarmsArray.join(', '); const updateFarm = await farmService.deleteLike(farmInfo.Likes-1,farmID) - const updateUser = await userProvider.updateUserLikes(likeFarms, email) + const updateUser = await exports.updateUserLikes(likeFarms, email) return response2(baseResponse.SUCCESS) }catch(e){ @@ -238,3 +245,4 @@ exports.eidtProfileImg = async(email, img, key) => { return errResponse2(baseResponse.DB_ERROR) } } + From 86c518ad987724b727d54d19402a6b42583f39d8 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 3 Aug 2023 22:27:29 +0900 Subject: [PATCH 37/52] =?UTF-8?q?=EC=B0=9C=ED=95=9C=20=EB=86=8D=EC=9E=A5?= =?UTF-8?q?=20=EB=B0=98=ED=99=98,=20=EC=B0=9C=20=EC=B7=A8=EC=86=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 7 +++++-- components/user/userController.js | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 745c010..036d2ab 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -238,12 +238,15 @@ exports.getLikes = async(req,res) =>{ const user = await userProvider.retrieveUserEmail(email) console.log(user); - if (!user.LikeFarmIDs) return res.send([]) + if (!user.LikeFarmIDs) return res.send({"result":false}) const likesArray = user.LikeFarmIDs.split(',').map(item => item.trim()); const likeFarms = await farmProvider.getFarmArray(likesArray) - return res.send(likeFarms) + baseResponse.SUCCESS.farmSize = likeFarms.length + baseResponse.SUCCESS.farmList = likeFarms + + return res.send(baseResponse.SUCCESS) }catch(e){ console.log(e); res.send(errResponse(resStatus.SERVER_ERROR)); diff --git a/components/user/userController.js b/components/user/userController.js index e050296..853a937 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -102,7 +102,7 @@ exports.likes = async function (req, res) { } exports.unliked = async(req,res)=>{ - const { email, farmid } = req.body; + const { email, farmid } = req.query; const invalidation = await validator.twoParams(email, farmid); if (invalidation) return(res.send(errResponse(invalidation))); From 24cfc2e7d7d7e2c8792cf5a8937d8f3959ac594f Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 3 Aug 2023 23:20:47 +0900 Subject: [PATCH 38/52] =?UTF-8?q?Provider=20connection=20=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmProvider.js | 165 ++++++++++---------------- components/farm/farmService.js | 20 ---- components/reserve/reserveProvider.js | 59 ++------- components/user/userProvider.js | 50 ++------ config/connection.js | 12 ++ 5 files changed, 99 insertions(+), 207 deletions(-) create mode 100644 config/connection.js diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 77dd385..700b7ba 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -1,136 +1,93 @@ -const { pool } = require('./../../config/database'); const farmDao = require('./farmDao'); +const withConnection = require('../../config/connection') -exports.retrieveFarmlist = async () =>{ - const connection = await pool.getConnection(async (conn) => conn); - const farmListResult = await farmDao.selectFarm(connection); - connection.release(); - +exports.retrieveFarmlist = withConnection(async (connection) => { + const farmListResult = await farmDao.selectFarm(connection); return farmListResult; -} - -exports.retrieveFarmInfo = async (farmID) => { - const connection = await pool.getConnection(async (conn) => conn); +}); +exports.retrieveFarmInfo = withConnection(async (connection, farmID) => { const farmInfo = await farmDao.selectFarmbyFarmID(connection, farmID); - - connection.release(); - return farmInfo[0]; -} - -exports.retrieveUsedFarmDetail = async (UsedArray) => { - const connection = await pool.getConnection(async (conn) => conn); +}); +exports.retrieveUsedFarmDetail = withConnection(async (connection, UsedArray) => { const UsedFarmDetail = await farmDao.selectUsedFarmDetail(connection, UsedArray); - connection.release(); - return UsedFarmDetail; -} - -exports.retrieveUseFarmDetail = async (UsedArray) => { - const connection = await pool.getConnection(async (conn) => conn); +}); +exports.retrieveUseFarmDetail = withConnection(async (connection, UsedArray) => { const UseFarmDetail = await farmDao.selectUseFarmDetail(connection, UsedArray); - connection.release(); - return UseFarmDetail; -} +}); -exports.farmbyfarmID =async(farmID) =>{ - const connection = await pool.getConnection(async conn => conn); +exports.farmbyfarmID = withConnection(async (connection, farmID) => { const [farmInfo] = await farmDao.selectFarmbyFarmID(connection, farmID); - - connection.release(); - return farmInfo[0]; -} +}); -exports.isSameFarm = async(farmInfo)=>{ - const connection = await pool.getConnection(async conn => conn); +exports.isSameFarm = withConnection(async (connection, farmInfo) => { const [sameFarm] = await farmDao.selectFarmbyFarmInfo(connection, farmInfo); - connection.release(); - - if (sameFarm.length > 0) return true; - else false; -} - -exports.getFarmArray = async(farmIDs) => { - const connection = await pool.getConnection(async conn => conn) - const FarmArray = await farmDao.getFarmsbyFarmIDs(connection, farmIDs) - connection.release() - - return FarmArray -} - -// 농장 검색관련 -exports.farmFilter = async(locationBig, locationMid, likeFarms) => { - const connection = await pool.getConnection(async (conn) => conn) - let res = [] - if (locationMid){ - res = await farmDao.filtering(connection, locationBig, locationMid) - }else{ - res = await farmDao.filteringBig(connection, locationBig) + if (sameFarm.length > 0) return true; + else return false; +}); + +exports.getFarmArray = withConnection(async (connection, farmIDs) => { + const FarmArray = await farmDao.getFarmsbyFarmIDs(connection, farmIDs); + return FarmArray; +}); + +exports.farmFilter = withConnection(async (connection, locationBig, locationMid, likeFarms) => { + let res = []; + if (locationMid) { + res = await farmDao.filtering(connection, locationBig, locationMid); + } else { + res = await farmDao.filteringBig(connection, locationBig); } const likeFarmsArray = likeFarms.split(', '); - res.forEach(farm => { - if (likeFarmsArray.includes(String(farm.FarmID))){ - farm.Liked = true - }else{ - farm.Liked = false + res.forEach((farm) => { + if (likeFarmsArray.includes(String(farm.FarmID))) { + farm.Liked = true; + } else { + farm.Liked = false; } - }); - connection.release() - return res -} - -exports.retrieveFarms = async(keyword,likeFarms) => { - const connection = await pool.getConnection(async (conn) => conn); - const newKeyword = '%'+keyword+'%' - const res = await farmDao.searchFarm(connection, newKeyword) - const likeFarmsArray = likeFarms.split(', '); - res.forEach(farm => { - if (likeFarmsArray.includes(String(farm.FarmID))){ - farm.Liked = true - }else{ - farm.Liked = false - } }); - connection.release() - - return res -} + return res; +}); -exports.farmPictureUrlbyFarmID = async (farmID) =>{ - const connection = await pool.getConnection(async conn => conn); - const farmPicturesInfo = await farmDao.selectFarmPicturesUrlbyFarmID(connection, farmID); +exports.retrieveFarms = withConnection(async (connection, keyword, likeFarms) => { + const newKeyword = '%' + keyword + '%'; + const res = await farmDao.searchFarm(connection, newKeyword); + const likeFarmsArray = likeFarms.split(', '); + res.forEach((farm) => { + if (likeFarmsArray.includes(String(farm.FarmID))) { + farm.Liked = true; + } else { + farm.Liked = false; + } + }); - connection.release(); + return res; +}); +exports.farmPictureUrlbyFarmID = withConnection(async (connection, farmID) => { + const farmPicturesInfo = await farmDao.selectFarmPicturesUrlbyFarmID(connection, farmID); return farmPicturesInfo[0]; -} +}); -exports.farmPictureUrl = async () =>{ - const connection = await pool.getConnection(async conn => conn); +exports.farmPictureUrl = withConnection(async (connection) => { const farmPicturesInfo = await farmDao.selectFarmPicturesUrlKey(connection); - - connection.release(); - return farmPicturesInfo[0]; -} +}); -exports.getOwner = async(farmID) => { - const connection = await pool.getConnection(async conn => conn); - const Owner = await farmDao.getOwnerbyFarmID(connection,farmID); - connection.release(); +exports.getOwner = withConnection(async (connection, farmID) => { + const Owner = await farmDao.getOwnerbyFarmID(connection, farmID); return Owner; -} - -exports.getOwnerFarms = async(email) =>{ - const connection = await pool.getConnection(async conn => conn); - const farms = await farmDao.getFarmsbyOwner(connection,email) - connection.release() - return farms -} \ No newline at end of file +}); + +exports.getOwnerFarms = withConnection(async (connection, email) => { + const farms = await farmDao.getFarmsbyOwner(connection, email); + return farms; +}); diff --git a/components/farm/farmService.js b/components/farm/farmService.js index cd0b9b6..a7afefb 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -41,26 +41,6 @@ exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locatio const connection = await pool.getConnection(async conn => conn); const newFarm = await farmDao.insertFarm(connection, newFarmInfo); - - - /** - * ------------------------file handling------------------------- - */ - - - - - - - - - - - - /** - * --------------------------------------------------------------- - */ - connection.release(); return response(resStatus_5000.FARM_NEW_SAVE_SUCCESS, { "newFarmID": newFarmID }); diff --git a/components/reserve/reserveProvider.js b/components/reserve/reserveProvider.js index 0d3fee5..6691cf9 100644 --- a/components/reserve/reserveProvider.js +++ b/components/reserve/reserveProvider.js @@ -1,65 +1,32 @@ -const { pool } = require('./../../config/database'); const reserveDao = require('./reserveDao'); +const withConnection = require('../../config/connection') -async function farmsbyEmail (userEmail){ - const connection = await pool.getConnection(async conn => conn); +exports.farmsbyEmail = withConnection(async (connection, userEmail)=>{ const [reservedFarms] = await reserveDao.selectReservedFarms(connection, userEmail); - - connection.release(); - return reservedFarms; -} +}); -async function clientsbyFarmID (farmID) { - const connection = await pool.getConnection(async conn => conn); +exports.clientsbyFarmID = withConnection(async (connection, farmID)=>{ const [reservedClients] = await reserveDao.selectReservedClients(connection, farmID); - - connection.release(); - return reservedClients; -} +}); -async function itembyReserveId (reserveID) { - const connection = await pool.getConnection(async conn => conn); +exports.itembyReserveId = withConnection(async (connection, reserveID)=>{ const [reservedItem] = await reserveDao.selectReservedItem(connection, reserveID); - - connection.release(); - return reservedItem; -} +}); -async function currentUseListByEmail (email) { - const connection = await pool.getConnection(async conn => conn); +exports.currentUseListByEmail = withConnection(async (connection, email)=>{ const [currentUseFarms] = await reserveDao.currentUseList(connection, email); - - connection.release(); - return currentUseFarms; -} +}) -async function pastUseListByEmail (email) { - const connection = await pool.getConnection(async conn => conn); +exports.farmsbyEmail = withConnection(async (connection, email)=>{ const [pastUseList] = await reserveDao.pastUseList(connection, email); - - connection.release(); - return pastUseList; -} +}); -async function reservedPeriodByFarmID (farmID) { - const connection = await pool.getConnection(async conn => conn); +exports.farmsbyEmail = withConnection(async (connection, farmID)=>{ const [reservedPeriods] = await reserveDao.reservedPeriods(connection, farmID); - - connection.release(); - return reservedPeriods; -} - -module.exports = { - farmsbyEmail, - clientsbyFarmID, - itembyReserveId, - currentUseListByEmail, - pastUseListByEmail, - reservedPeriodByFarmID, -}; +}); \ No newline at end of file diff --git a/components/user/userProvider.js b/components/user/userProvider.js index 0d2cb07..0ea1c4f 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -1,56 +1,32 @@ -const { pool } = require('../../config/database'); const userDao = require('./userDao'); +const withConnection = require('../../config/connection') -exports.retrieveUserEmail = async function (userEmail) { - const connection = await pool.getConnection(async (conn) => conn); +exports.retrieveUserEmail = withConnection(async (connection, userEmail) =>{ const [res] = await userDao.selectUserbyEmail(connection, userEmail); - - connection.release(); - return res[0]; -}; +}); -exports.retrieveUser = async (phoneNumber) =>{ - const connection = await pool.getConnection(async (conn) => conn); +exports.retrieveUser = withConnection(async (connection, phoneNumber) =>{ const res = await userDao.selectUser(connection, phoneNumber); - - connection.release(); - return res[0]; -} +}); -exports.usersbyEmail= async(email)=>{ - const connection = await pool.getConnection(async conn => conn); +exports.usersbyEmail= withConnection(async (connection, email)=>{ const [userInfo] = await userDao.selectUserbyEmail(connection, email); - - connection.release(); - return userInfo; -} +}); -exports.userbyPhoneNumber = async(phoneNumber)=>{ - const connection = await pool.getConnection(async conn => conn); +exports.userbyPhoneNumber = withConnection(async (connection, phoneNumber)=>{ const [userInfo] = await userDao.selectUserbyPhoneNumber(connection, phoneNumber); - - connection.release(); - return userInfo; -} +}); -exports.starListbyEmail = async(email)=>{ - const connection = await pool.getConnection(async conn => conn); +exports.starListbyEmail = withConnection(async (connection, email)=>{ const [starByEmail] = await userDao.selectStarbyEmail(connection, email); - - connection.release(); - return starByEmail; -} +}); -exports.nonSocialUsersbyEmail= async(email)=>{ - const connection = await pool.getConnection(async conn => conn); +exports.nonSocialUsersbyEmail= withConnection(async (connection, email)=>{ const [userInfo] = await userDao.selectnonSocialUserbyEmail(connection, email); - - connection.release(); - return userInfo; -} +}); diff --git a/config/connection.js b/config/connection.js new file mode 100644 index 0000000..2cfe0e6 --- /dev/null +++ b/config/connection.js @@ -0,0 +1,12 @@ +const { pool } = require('./database'); + +const withConnection = (handler) => async (...args) => { + const connection = await pool.getConnection(async (conn)=>conn); + try{ + return await handler(connection, ...args) + }finally{ + connection.release(); + } +} + +module.exports = withConnection; \ No newline at end of file From 5405f2f42c67964e4f34ccd3c9a33782d292f731 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Fri, 4 Aug 2023 09:19:05 +0900 Subject: [PATCH 39/52] =?UTF-8?q?service=20connection=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 32 ++--- components/farm/farmService.js | 90 ++++-------- components/reserve/reserveController.js | 12 +- components/reserve/reserveProvider.js | 51 ++++++- components/reserve/reserveService.js | 125 +++------------- components/user/userController.js | 167 ++++++++++----------- components/user/userDao.js | 3 +- components/user/userProvider.js | 1 + components/user/userRoute.js | 5 - components/user/userService.js | 183 ++++++++---------------- config/connection.js | 5 + 11 files changed, 251 insertions(+), 423 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 036d2ab..f50430c 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -25,11 +25,10 @@ exports.getFarmlist = async (req, res) => { const FarmListResponse = await farmService.getFarmList(email); - // console.log(FarmDetailResponse) return res.send(FarmListResponse); } catch (e) { - res.send(errResponse(resStatus.SERVER_ERROR)); + return res.send(errResponse(resStatus.SERVER_ERROR)); } } @@ -43,10 +42,9 @@ exports.getFarmDetail = async (req, res) => { const FarmDetailResponse = await farmService.getFarmDetail(farmID); return res.send(FarmDetailResponse); - } catch (e) { - res.send(errResponse(resStatus.SERVER_ERROR)); + return res.send(errResponse(resStatus.SERVER_ERROR)); } } @@ -54,9 +52,7 @@ exports.postFarmer = async (req, res) =>{ try{ if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) const decoded = jwt.verify(req.headers.token, secretKey); - //console.log("decoded") - //console.log(decoded); - //console.log("======"); + if (decoded.role == 'F') return res.send(errResponse2(baseResponse.ALREADY_FARMER)); const farmer = await farmService.postFarmer(decoded.email); @@ -64,16 +60,10 @@ exports.postFarmer = async (req, res) =>{ const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) -/* - const decoded2 = jwt.verify(newJwtResponse.accesstoken, secretKey) - console.log("decoded2") - console.log(decoded2); - console.log("======"); - */ + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken return res.send(baseResponse.SUCCESS); - }catch(err){ console.log(err); return res.send(errResponse2(baseResponse.NOT_LOGIN)); @@ -100,9 +90,8 @@ exports.editFarm = async(req, res) =>{ return res.send(response2(baseResponse.SUCCESS)); }catch(err){ - return res.send(err) + return res.send(errResponse2(baseResponse.SERVER_ERROR)) } - } /** @@ -172,6 +161,7 @@ exports.findFarms = async (req,res) => { return res.send(searchRes) }catch(err){ console.log(err); + return res.send(errResponse2(baseResponse.SERVER_ERROR)) } } @@ -196,7 +186,7 @@ exports.filter = async(req,res) => { }catch (e) { console.log(e); - res.send(errResponse(resStatus.SERVER_ERROR)); + return res.send(errResponse(resStatus.SERVER_ERROR)); } } @@ -213,7 +203,7 @@ exports.deletePhoto = async(req,res) => { }catch (e) { console.log(e); - res.send(errResponse(resStatus.SERVER_ERROR)); + return res.send(errResponse(resStatus.SERVER_ERROR)); } } @@ -227,7 +217,7 @@ exports.getPhoneNumber = async(req,res) => { return res.send(Owner) }catch(e){ console.log(e); - res.send(errResponse(resStatus.INACCURATE_OWNER)); + return res.send(errResponse(resStatus.INACCURATE_OWNER)); } } @@ -249,7 +239,7 @@ exports.getLikes = async(req,res) =>{ return res.send(baseResponse.SUCCESS) }catch(e){ console.log(e); - res.send(errResponse(resStatus.SERVER_ERROR)); + return res.send(errResponse(resStatus.SERVER_ERROR)); } } @@ -262,6 +252,6 @@ exports.getMyFarm = async(req,res)=>{ return res.send(farms) }catch(e){ console.log(e); - res.send(errResponse(resStatus.SERVER_ERROR)); + return res.send(errResponse(resStatus.SERVER_ERROR)); } } \ No newline at end of file diff --git a/components/farm/farmService.js b/components/farm/farmService.js index a7afefb..3d7e245 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -10,18 +10,14 @@ const baseResponse = require('../../config/resStatus'); const { eidtFarm } = require('./farmController'); const resStatus = require('../../config/resStatus'); const userProvider = require('./../user/userProvider'); +const withConnection = require('../../config/connection') - -exports.postFarmer = async (email) => { - const connection = await pool.getConnection(async (conn)=>conn) - const res = await farmDao.userToFarmer(connection, email) - connection.release() - +exports.postFarmer = withConnection(async (connection, email) => { + const res = await farmDao.userToFarmer(connection, email); return res; -} - -exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description) => { +}); +exports.newFarm = withConnection(async (connection, name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description) => { const sameFarmInfo = [name, owner, price, squaredMeters, locationBig, locationMid, locationSmall]; const isSameFarm = await FarmProvider.isSameFarm(sameFarmInfo); //중복체크 if (isSameFarm) return errResponse(resStatus_5000.FARM_DUPLICATED_EXISTS); @@ -38,53 +34,24 @@ exports.newFarm = async (name, owner, price, squaredMeters, locationBig, locatio const newFarmInfo = [newFarmID, name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description, newFarmStatus, now, now]; - const connection = await pool.getConnection(async conn => conn); - const newFarm = await farmDao.insertFarm(connection, newFarmInfo); - connection.release(); - return response(resStatus_5000.FARM_NEW_SAVE_SUCCESS, { "newFarmID": newFarmID }); -} - -exports.deleteUserFarm = async(email) =>{ - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await farmDao.withdrawalUserFarm(connection, email) - - connection.release() - - if (res) return response2(baseResponse.SUCCESS) +}); - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} -exports.editFarmInfo = async(farmID, farmInfo) =>{ - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await farmDao.eidtMyFarm(connection, farmID, farmInfo) - connection.release() - - return res - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} +exports.deleteUserFarm = withConnection(async (connection, email) => { + const res = await farmDao.withdrawalUserFarm(connection, email); + if (res) return response2(baseResponse.SUCCESS); +}); -exports.editFarmPictures = async(farmID, farmName, img, key) =>{ - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await farmDao.editFarmPicture(connection, farmID, farmName, img, key) - connection.release() +exports.editFarmInfo = withConnection(async (connection, farmID, farmInfo) => { + const res = await farmDao.eidtMyFarm(connection, farmID, farmInfo); + return res; +}); - return res - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} +exports.editFarmPictures = withConnection(async (connection, farmID, farmName, img, key) => { + const res = await farmDao.editFarmPicture(connection, farmID, farmName, img, key) + return res; +}); exports.getFarmDetail = async (farmID) => { try { @@ -181,17 +148,12 @@ exports.getFarmList = async (email) => { // } } -exports.deleteLike = async(likeFarms, farmID) => { - const connection = await pool.getConnection(async conn => conn); - const updateLike = await farmDao.updateFarmLikes(connection,[likeFarms,farmID]) - connection.release() - return updateLike -} - -exports.deletePhoto = async (key) => { - const connection = await pool.getConnection(async conn => conn); - const deleteFarmPicture = await farmDao.deletePhoto(connection,key); - connection.release(); +exports.deleteLike = withConnection(async (connection, likeFarms, farmID) => { + const updateLike = await farmDao.updateFarmLikes(connection, [likeFarms, farmID]); + return updateLike; +}); - return deleteFarmPicture -} \ No newline at end of file +exports.deletePhoto = withConnection(async (connection, key) => { + const deleteFarmPicture = await farmDao.deletePhoto(connection, key); + return deleteFarmPicture; +}); \ No newline at end of file diff --git a/components/reserve/reserveController.js b/components/reserve/reserveController.js index f313e3d..bbe2e6c 100644 --- a/components/reserve/reserveController.js +++ b/components/reserve/reserveController.js @@ -2,6 +2,7 @@ const { response, errResponse } = require('./../../config/response'); const validator = require('../../helpers/validator'); const resStatus = require("../../config/resStatus"); const reserveService = require("./reserveService"); +const reserveProvider = require('./reserveProvider') const resStatus_5000 = require('../../config/resStatus_5000'); const dateAvailability = require('../../helpers/DateAvailability'); @@ -38,7 +39,7 @@ exports.clientsList = async function (req, res) { if (invalidation) return(res.send(response(invalidation))); - const clientsListResponse = await reserveService.clientsList(farmid); + const clientsListResponse = await reserveProvider.clientsList(farmid); return(res.send(clientsListResponse)); @@ -59,7 +60,7 @@ exports.farmsList = async function (req, res) { if (invalidation) return(res.send(response(invalidation))); - const farmsListResponse = await reserveService.farmsList(userEmail); + const farmsListResponse = await reserveProvider.farmsList(userEmail); return(res.send(farmsListResponse)); @@ -141,11 +142,12 @@ exports.currentUse = async function (req, res) { if(validator.isValidEmail(userEmail) == false) return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); - const currentUseResult = await reserveService.currentUse(userEmail); + const currentUseResult = await reserveProvider.currentUse(userEmail); return(res.send(currentUseResult)); } catch (e) { + console.log(e); return(res.send(errResponse(resStatus.SERVER_ERROR))); } @@ -163,7 +165,7 @@ exports.pastUse = async function (req, res) { if(validator.isValidEmail(userEmail) == false) return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); - const pastUseResult = await reserveService.pastUse(userEmail); + const pastUseResult = await reserveProvider.pastUse(userEmail); return(res.send(pastUseResult)); } @@ -182,7 +184,7 @@ exports.unbookablePeriods = async function (req, res) { // const invalidation = await validator.oneParams(farmID); // if (invalidation) return (res.send(errResponse(invalidation))); - const unbookablePeriodsResult = await reserveService.unbookablePeriods(farmID); + const unbookablePeriodsResult = await reserveProvider.unbookablePeriods(farmID); return(res.send(unbookablePeriodsResult)); } diff --git a/components/reserve/reserveProvider.js b/components/reserve/reserveProvider.js index 6691cf9..c3c2b94 100644 --- a/components/reserve/reserveProvider.js +++ b/components/reserve/reserveProvider.js @@ -1,5 +1,9 @@ const reserveDao = require('./reserveDao'); const withConnection = require('../../config/connection') +const userProvider = require('./../user/userProvider'); +const farmProvider = require('./../farm/farmProvider'); +const { response, errResponse } = require('./../../config/response'); +const resStatus_5000 = require('../../config/resStatus_5000'); exports.farmsbyEmail = withConnection(async (connection, userEmail)=>{ const [reservedFarms] = await reserveDao.selectReservedFarms(connection, userEmail); @@ -21,12 +25,53 @@ exports.currentUseListByEmail = withConnection(async (connection, email)=>{ return currentUseFarms; }) -exports.farmsbyEmail = withConnection(async (connection, email)=>{ +exports.pastUseListByEmail = withConnection(async (connection, email)=>{ const [pastUseList] = await reserveDao.pastUseList(connection, email); return pastUseList; }); -exports.farmsbyEmail = withConnection(async (connection, farmID)=>{ +exports.reservedPeriodByFarmID = withConnection(async (connection, farmID)=>{ const [reservedPeriods] = await reserveDao.reservedPeriods(connection, farmID); return reservedPeriods; -}); \ No newline at end of file +}); + +exports.clientsList = async(farmid) => { + const farmInfo = await farmProvider.farmbyfarmID(farmid); + if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); + + const reservedClients = await exports.clientsbyFarmID(farmid); + if (reservedClients.length < 1) return response(resStatus_5000.RESERVE_LIST_EMPTY); + + return response(resStatus_5000.RESERVE_LIST_CLIENTS, reservedClients); +} + +exports.farmsList = async(userEmail) => { + const userInfo = await userProvider.usersbyEmail(userEmail); + if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); + + const reservedFarms = await exports.farmsbyEmail(userEmail); + if (reservedFarms.length < 1) return response(resStatus_5000.RESERVE_LIST_EMPTY); + + return response(resStatus_5000.RESERVE_LIST_FARMS, reservedFarms); +} + +exports.currentUse = async (email) => { + const currentUseFarms = await exports.currentUseListByEmail(email); + if (!currentUseFarms || currentUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_CURRENT_LIST_EMPTY, null); + + return response(resStatus_5000.RESERVE_USE_CURRENT_LIST, currentUseFarms); +}; + +exports.pastUse = async (email) => { + const pastUseFarms = await exports.pastUseListByEmail(email); + if (!pastUseFarms || pastUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_PAST_LIST_EMPTY, null); + + return response(resStatus_5000.RESERVE_USE_PAST_LIST, pastUseFarms); +}; + +exports.unbookablePeriods = async (farmID) => { + let reservedPeriods = await exports.reservedPeriodByFarmID(farmID); + if (!reservedPeriods || reservedPeriods.length < 1) reservedPeriods = null; + + return response(resStatus_5000.RESERVE_UNBOOKABLE_PERIOD, reservedPeriods); +}; \ No newline at end of file diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index 293c04b..5396926 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -9,8 +9,9 @@ const { pool } = require('../../config/database'); const setDate = require('./../../helpers/setDate'); const randomNumber = require('../../helpers/randomNumber'); const dateAvailability = require('../../helpers/DateAvailability'); +const withConnection = require('../../config/connection') -async function request(userEmail, farmid,startAt, endAt) { +exports.request = withConnection(async (connection, userEmail, farmid, startAt, endAt) => { const userInfo = await userProvider.usersbyEmail(userEmail); const farmInfo = await farmProvider.farmbyfarmID(farmid); const reserveInfo = await reserveProvider.clientsbyFarmID(farmid); @@ -18,12 +19,12 @@ async function request(userEmail, farmid,startAt, endAt) { if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); const newStartAt = new Date(startAt); - const newEndAt = new Date(endAt) + const newEndAt = new Date(endAt); //date availability check const unAvailability = await dateAvailability.dateAvailabilityCheck(newStartAt, newEndAt); - if(unAvailability != 0) + if (unAvailability != 0) return errResponse(unAvailability); //date reservation check @@ -32,9 +33,9 @@ async function request(userEmail, farmid,startAt, endAt) { console.log(reservation_full); if (reservation_full !== false) { - return response(reservation_full, {"reservedStartAt" : e.startAt, "reservedEndAt" : e.endAt}); + return response(reservation_full, { "reservedStartAt": e.startAt, "reservedEndAt": e.endAt }); } - } + } //new reserve id let newReserveID; @@ -51,133 +52,39 @@ async function request(userEmail, farmid,startAt, endAt) { // const newStatus = "H"; //BETA version const newReservationInfo = [newReserveID, farmInfo.FarmID, userEmail, farmInfo.Owner, newStatus, newStartAt, newEndAt, now, now]; - const connection = await pool.getConnection(async conn => conn); - const newReservation = await reserveDao.insertReservation(connection, newReservationInfo); - connection.release(); - - return response(resStatus_5000.RESERVE_REQUEST_SUCCESS, {"reserveID" : newReserveID.toString()}); - -}; - -async function clientsList(farmid) { - - const farmInfo = await farmProvider.farmbyfarmID(farmid); - if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); - - const reservedClients = await reserveProvider.clientsbyFarmID(farmid); - if (reservedClients.length < 1) return response(resStatus_5000.RESERVE_LIST_EMPTY); - - return response(resStatus_5000.RESERVE_LIST_CLIENTS, reservedClients); -}; - -async function farmsList(userEmail) { - const userInfo = await userProvider.usersbyEmail(userEmail); - if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); - - const reservedFarms = await reserveProvider.farmsbyEmail(userEmail); - if (reservedFarms.length < 1) return response(resStatus_5000.RESERVE_LIST_EMPTY); - - return response(resStatus_5000.RESERVE_LIST_FARMS, reservedFarms); -}; - -async function cancel(reserveId) { + return response(resStatus_5000.RESERVE_REQUEST_SUCCESS, { "reserveID": newReserveID.toString() }); +}); +exports.cancel = withConnection(async (connection, reserveId) => { const reservedItem = await reserveProvider.itembyReserveId(reserveId); if (reservedItem.length < 1) return errResponse(resStatus_5000.RESERVE_RESERVEID_NOT_EXIST); if (reservedItem[0].Status == "A") return errResponse(resStatus_5000.RESERVE_CANCEL_NOT_ALLOWED); - const connection = await pool.getConnection(async conn => conn); - const canceledReservation = await reserveDao.cancelReservation(connection, reserveId); - connection.release(); - - return response(resStatus_5000.RESERVE_CANCEL_SUCCESS, {"reserveID" : reserveId}); - -} - -async function editStatus(reserveId, status) { + return response(resStatus_5000.RESERVE_CANCEL_SUCCESS, { "reserveID": reserveId }); +}); +exports.editStatus = withConnection(async (connection, reserveId, status) => { const reservedItem = await reserveProvider.itembyReserveId(reserveId); if (reservedItem.length < 1) return errResponse(resStatus_5000.RESERVE_RESERVEID_NOT_EXIST); - const connection = await pool.getConnection(async conn => conn); - const now = await setDate.now(); const updatedStatusInfo = [status, now, reserveId]; const updatedReservation = await reserveDao.editReservationStatus(connection, updatedStatusInfo); - connection.release(); - switch (status) { case 'A': - return response(resStatus_5000.RESERVE_STATUS_ACCPET_SUCCESS, {"reserveID" : reserveId}); + return response(resStatus_5000.RESERVE_STATUS_ACCPET_SUCCESS, { "reserveID": reserveId }); case 'H': - return response(resStatus_5000.RESERVE_STATUS_HOLD_SUCCESS, {"reserveID" : reserveId}); + return response(resStatus_5000.RESERVE_STATUS_HOLD_SUCCESS, { "reserveID": reserveId }); case 'D': - return response(resStatus_5000.RESERVE_STATUS_DENIED_SUCCESS, {"reserveID" :reserveId}); + return response(resStatus_5000.RESERVE_STATUS_DENIED_SUCCESS, { "reserveID": reserveId }); } return errResponse(resStatus.DB_ERROR); - -} - -async function currentUse(email) { - try { - const currentUseFarms = await reserveProvider.currentUseListByEmail(email); - - if (!currentUseFarms || currentUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_CURRENT_LIST_EMPTY, null); - - return response(resStatus_5000.RESERVE_USE_CURRENT_LIST, currentUseFarms); - - } - catch (e) { - console.log(e); - return errResponse(resStatus.DB_ERROR); - } - -} - -async function pastUse(email) { - try { - const pastUseFarms = await reserveProvider.pastUseListByEmail(email); - - if (!pastUseFarms || pastUseFarms.length < 1) return response(resStatus_5000.RESERVE_USE_PAST_LIST_EMPTY, null); - - return response(resStatus_5000.RESERVE_USE_PAST_LIST, pastUseFarms); - - } - catch (e) { - return errResponse(resStatus.DB_ERROR); - } - -} - -async function unbookablePeriods(farmID) { - try { - let reservedPeriods = await reserveProvider.reservedPeriodByFarmID(farmID); - - if (!reservedPeriods || reservedPeriods.length < 1) reservedPeriods = null; - - return(response(resStatus_5000.RESERVE_UNBOOKABLE_PERIOD, reservedPeriods)); - } - catch (e) { - return(res.send(errResponse(resStatus.SERVER_ERROR))); - } - -} - -module.exports = { - request, - clientsList, - farmsList, - cancel, - editStatus, - currentUse, - pastUse, - unbookablePeriods, -}; \ No newline at end of file +}); diff --git a/components/user/userController.js b/components/user/userController.js index 853a937..49c1d65 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -18,27 +18,6 @@ const fs = require('fs'); const resStatus_5000 = require('../../config/resStatus_5000'); const jwtLogin = require('./../../config/jwtLogin'); - - -exports.getBefoFarmUsed_Array = async (req, res, error) => { - const { userid } = req.params; - - if (!userid) return res.render(errResponse(FARMID_EMPTY)); - - const getUsedFarmArray = userProvider.retrieveUsedFarmArray(userid); - res.render(getUsedFarmArray); -} - -exports.getCurFarmUse_Array = async (req, res, error) => { - const { userid } = req.params; - - if (!userid) return res.render(errResponse(FARMID_EMPTY)); - - const getCurFarmArray = userProvider.retrieveCurFarmArray(userid); - res.render(getCurFarmArray); - -} - /** * [POST] /user/login */ @@ -82,11 +61,8 @@ exports.signup = async function (req, res) { } } -/** - * [POST] /user/star - */ exports.likes = async function (req, res) { - // try { + try { const { email, farmid } = req.body; const invalidation = await validator.twoParams(email, farmid); @@ -95,24 +71,26 @@ exports.likes = async function (req, res) { const starResponse = await userService.addLike(email, farmid); return(res.send(starResponse)); - // } - // catch (e) { - // res.send(errResponse(resStatus.SERVER_ERROR)); - // } + } + catch (e) { + res.send(errResponse(resStatus.SERVER_ERROR)); + } } exports.unliked = async(req,res)=>{ - const { email, farmid } = req.query; - const invalidation = await validator.twoParams(email, farmid); - if (invalidation) return(res.send(errResponse(invalidation))); + try{ + const { email, farmid } = req.query; + const invalidation = await validator.twoParams(email, farmid); + if (invalidation) return(res.send(errResponse(invalidation))); + + const result = await userService.unLike(email, farmid) + return res.send(result) + }catch(e){ + res.send(errResponse(resStatus.SERVER_ERROR)) + } - const result = await userService.unLike(email, farmid) - return res.send(result) } -/** - * [POST] /user/birth - */ exports.birth = async function (req, res) { try { const { email, birth } = req.body; @@ -132,9 +110,6 @@ exports.birth = async function (req, res) { } } -/** - * [GET] /app/test - */ let client = {} const connectRedis = async() => { try{ @@ -224,25 +199,26 @@ exports.vertifyCode = async(req,res) => { if (!phoneNumber) return res.send(errResponse2(baseResponse.SIGNUP_PHONENUMBER_EMPTY)) + try{ + const user = await userProvider.retrieveUser(phoneNumber) + if (user) { + if (user.Status == 'D') return res.send(errResponse2(baseResponse.SIGNIN_WITHDRAWAL_ACCOUNT)) + else if (user.Status == 'B') return res.send(errResponse2(baseResponse.SIGNIN_INACTIVE_ACCOUNT)) - const user = await userProvider.retrieveUser(phoneNumber) - if (user) { - if (user.Status == 'D') return res.send(errResponse2(baseResponse.SIGNIN_WITHDRAWAL_ACCOUNT)) - else if (user.Status == 'B') return res.send(errResponse2(baseResponse.SIGNIN_INACTIVE_ACCOUNT)) - - return res.send(errResponse2(baseResponse.ALREADY_USER)) - } - - const code = await client.get(phoneNumber) - if (code == usercode){ - //console.log(client); - await client.del(phoneNumber) - - return res.send(baseResponse.SUCCESS) + return res.send(errResponse2(baseResponse.ALREADY_USER)) + } - }else{ - console.log(code); - return res.send(response2(baseResponse.SIGNUP_SMS_CODE_WRONG)) + const code = await client.get(phoneNumber) + if (code == usercode){ + await client.del(phoneNumber) + return res.send(baseResponse.SUCCESS) + }else{ + console.log(code); + return res.send(response2(baseResponse.SIGNUP_SMS_CODE_WRONG)) + } + }catch(e){ + console.log(e); + return res.send(response2(baseResponse.SERVER_ERROR)) } } @@ -266,7 +242,6 @@ exports.findAccount = async(req,res) => { console.log(err); return res.send(errResponse2(baseResponse.SIGNUP_SMS_WRONG)) } - } exports.findPassword = async(req,res) => { @@ -311,9 +286,8 @@ exports.findPassword = async(req,res) => { return res.send(response2(baseResponse.SUCCESS)) } catch (err) { console.log(err); - return res.send(errResponse2(baseResponse.DB_ERROR)) + return res.send(errResponse2(baseResponse.SERVER_ERROR)) } - } exports.editUserNickName = async(req,res) =>{ @@ -323,13 +297,19 @@ exports.editUserNickName = async(req,res) =>{ if (!email) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) if (!nickname) return res.send(errResponse2(baseResponse.USER_NICKNAME_EMPTY)) - const eidtUser = await userService.editNickName(email, nickname) + try{ + const editUser = await userService.editNickName(email, nickname) + if (!editUser) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) + + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) - const userInfo = await userProvider.retrieveUserEmail(email); - const newJwtResponse = await jwtLogin(userInfo) + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) + }catch(e){ + return res.send(errResponse2(baseResponse.SERVER_ERROR)) + } - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) } exports.editUserName = async(req,res) =>{ @@ -339,13 +319,18 @@ exports.editUserName = async(req,res) =>{ if (!email) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) if (!name) return res.send(response2(baseResponse.USER_NAME_EMPTY)) - const eidtUser = await userService.editName(email, name) + try{ + const editUser = await userService.editName(email, name) + if (!editUser) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userInfo = await userProvider.retrieveUserEmail(email); - const newJwtResponse = await jwtLogin(userInfo) + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) + }catch(e){ + return res.send(errResponse2(baseResponse.SERVER_ERROR)) + } } exports.editUserPhoneNumber = async(req,res) =>{ @@ -357,13 +342,18 @@ exports.editUserPhoneNumber = async(req,res) =>{ if (phoneNumber.length != 11) return res.send(response2(baseResponse.SIGNUP_PHONENUMBER_LENGTH)) - const eidtUser = await userService.editPhoneNumber(email, phoneNumber) + try{ + const editUser = await userService.editPhoneNumber(email, phoneNumber) + if (!editUser) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userInfo = await userProvider.retrieveUserEmail(email); - const newJwtResponse = await jwtLogin(userInfo) + const userInfo = await userProvider.retrieveUserEmail(email); + const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) + baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken + return res.send(baseResponse.SUCCESS) + }catch(e){ + return res.send(errResponse2(baseResponse.SERVER_ERROR)) + } } exports.editUserPassword = async(req,res) =>{ @@ -372,12 +362,12 @@ exports.editUserPassword = async(req,res) =>{ const {password} = req.body const invalidation = await validator.login(email, password); - if (invalidation) return res.send(errResponse(invalidation)); const editPasswordResponse = await userService.editPassword(email, password); + if(!editPasswordResponse) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - return res.send(editPasswordResponse);} + return res.send(baseResponse.SUCCESS);} catch (e) { res.send(errResponse(resStatus.SERVER_ERROR)); } @@ -413,6 +403,8 @@ exports.editUserProfileImg = async(req,res)=> { //console.log(id); const eidtImage = await userService.eidtProfileImg(email, req.file.location, req.file.key) + if (!eidtImage) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) + const userInfo = await userProvider.retrieveUserEmail(email); const newJwtResponse = await jwtLogin(userInfo) @@ -427,33 +419,32 @@ exports.editUserProfileImg = async(req,res)=> { } exports.withdrawal = async(req,res) => { - //console.log(req); - //const {userEmail} = req.header('userEmail'); const {userEmail} = req.query; - if (!userEmail) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) - console.log(userEmail); + try{ + console.log("TEST"); + const userWithdrawFarm = await farmService.deleteUserFarm(userEmail) + const userWithdraw = await userService.deleteUser(userEmail) + if (!userWithdraw) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userWithdraw = await userService.deleteUser(userEmail) - const userWithdrawFarm = await farmService.deleteUserFarm(userEmail) - return res.send(userWithdraw) + return res.send(baseResponse.SUCCESS) + }catch(e){ + console.log(e); + return res.send(errResponse2(baseResponse.SERVER_ERROR)) + } } exports.verfiyEmail = async (req, res) => { - try { const userEmail = req.params.email; - // if (!userEmail || userEmail.length < 1) return res.send(errResponse(resStatus.SIGNUP_EMAIL_EMPTY)) if(validator.isValidEmail(userEmail) == false) return res.send(errResponse(resStatus.SIGNIN_EMAIL_ERROR_TYPE)); const userInfo = await userProvider.usersbyEmail(userEmail); - if (userInfo && userInfo.length > 0) return res.send(errResponse(resStatus.SIGNUP_REDUNDANT_EMAIL)); else return res.send(response(resStatus_5000.USER_EMAIL_AVAILABLE)); - } catch (e) { res.send(errResponse(resStatus.SERVER_ERROR)); } diff --git a/components/user/userDao.js b/components/user/userDao.js index 6a4fcf9..4bdb61b 100644 --- a/components/user/userDao.js +++ b/components/user/userDao.js @@ -19,13 +19,14 @@ const SelectionUseFarmArray = async (connection, userid) => { } async function selectUserbyEmail(connection, email) { + console.log(email); const selectUserbyEmailQuery = ` SELECT * FROM User WHERE Email = ?; `; const userInfo = await connection.query(selectUserbyEmailQuery, email); - + console.log(userInfo); return userInfo; } diff --git a/components/user/userProvider.js b/components/user/userProvider.js index 0ea1c4f..493877f 100644 --- a/components/user/userProvider.js +++ b/components/user/userProvider.js @@ -12,6 +12,7 @@ exports.retrieveUser = withConnection(async (connection, phoneNumber) =>{ }); exports.usersbyEmail= withConnection(async (connection, email)=>{ + console.log(email); const [userInfo] = await userDao.selectUserbyEmail(connection, email); return userInfo; }); diff --git a/components/user/userRoute.js b/components/user/userRoute.js index ab7a50a..1a05c9a 100644 --- a/components/user/userRoute.js +++ b/components/user/userRoute.js @@ -28,11 +28,6 @@ module.exports = function(app){ //회원 탈퇴 app.delete('/user/withdrawal',user.withdrawal) - //user CurUse_farm 가져오기 - app.get("farm/get_befoArray:userid", user.getBefoFarmUsed_Array); - - app.get("farm/get_curArray:userid", user.getCurFarmUse_Array); - // 8. 농장 찜하기 API app.post('/user/likes', user.likes) diff --git a/components/user/userService.js b/components/user/userService.js index 980766b..d87f3b7 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -12,6 +12,7 @@ const encryptedPassword = require('../../helpers/encrypt'); const jwtLogin = require('./../../config/jwtLogin'); const { pool } = require('../../config/database'); const setDate = require('./../../helpers/setDate'); +const withConnection = require('../../config/connection') exports.login = async(email, password) =>{ @@ -32,12 +33,12 @@ exports.login = async(email, password) =>{ }; -exports.signUp = async(email, password, phoneNumber, nickName, name, role) =>{ +exports.signUp = withConnection(async (connection, email, password, phoneNumber, nickName, name, role) => { const userInfo = await userProvider.usersbyEmail(email); if (userInfo.length >= 1) return errResponse(resStatus.SIGNUP_REDUNDANT_EMAIL); const user = await userProvider.retrieveUser(phoneNumber); - if (user) return errResponse(baseResponse.ALREADY_USER) + if (user) return errResponse(baseResponse.ALREADY_USER); const encryptedData = await encryptedPassword.createHashedPassword(password); const hashedPassword = encryptedData.hashedPassword; @@ -45,74 +46,54 @@ exports.signUp = async(email, password, phoneNumber, nickName, name, role) =>{ const now = await setDate.now(); const newUserInfo = [email, hashedPassword, salt, phoneNumber, nickName, name, role, now, now]; - const connection = await pool.getConnection(async conn => conn); const newUser = await userDao.insertUser(connection, newUserInfo); - connection.release(); + return response(resStatus_5000.USER_SIGNUP_SUCCESS, { "email": email, "role": role }); +}); - return response(resStatus_5000.USER_SIGNUP_SUCCESS, {"email" : email, "role" : role}); -}; - -exports.addLike= async(email, farmId) =>{ +exports.addLike = withConnection(async (connection, email, farmId) => { const userInfo = await userProvider.usersbyEmail(email); const farmInfo = await farmProvider.farmbyfarmID(farmId); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); - if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); + if (!farmInfo) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); let newstarList; const userStarList = await userProvider.starListbyEmail(email); if (userStarList[0].LikeFarmIDs && userStarList[0].LikeFarmIDs.length > 0) { let startListString = userStarList[0].LikeFarmIDs; const existedArr = startListString.split(","); - existedArr for (let e of existedArr) { e = e.trim(); - if(e.localeCompare(farmId) === 0 ) return errResponse(resStatus_5000.USER_REDUNDANT_STAR); + if (e.localeCompare(farmId) === 0) return errResponse(resStatus_5000.USER_REDUNDANT_STAR); } newstarList = userStarList[0].LikeFarmIDs + ", " + farmId; + } else { + newstarList = farmId; } - else newstarList = farmId; console.log("newstarList", newstarList); const starRequest = [newstarList, email]; - const connection = await pool.getConnection(async conn => conn); const starList = await userDao.updateUserLikes(connection, starRequest); /** * PLUS # OF FARM Like - */ + */ let updatedStarNumber = farmInfo.Likes + 1; try { - -/* - if (farmInfo.Likes && farmInfo.Likes > 0) { - //updatedStarNumber += farmInfo.Likes; - - } - else updatedStarNumber = 1; - */ - // console.log("updatedStarNumber", updatedStarNumber); - - const updatedStarNumberInfo = [updatedStarNumber, farmId] + const updatedStarNumberInfo = [updatedStarNumber, farmId]; const updatedStar = await farmDao.updateFarmLikes(connection, updatedStarNumberInfo); - - connection.release(); - - } - catch (e) { + } catch (e) { return errResponse(resStatus_5000.FARM_UPDATE_STAR_ERROR); } return response(baseResponse.SUCCESS); -} -exports.updateUserLikes = async(likeFarms, email) => { - const connection = await pool.getConnection(async conn => conn); - const [updateUser] = await userDao.updateUserLikes(connection, [likeFarms, email]); - connection.release(); +}); - return updateUser -} +exports.updateUserLikes = withConnection(async (connection, likeFarms, email) => { + const [updateUser] = await userDao.updateUserLikes(connection, [likeFarms, email]); + return updateUser; +}); exports.unLike = async(email, farmID) =>{ try{ @@ -138,24 +119,20 @@ exports.unLike = async(email, farmID) =>{ } } -exports.editBirth = async(email, birth) =>{ +exports.editBirth = withConnection(async (connection, email, birth) => { const userInfo = await userProvider.usersbyEmail(email); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); const now = await setDate.now(); const newUserInfo = [birth, now, email]; - const connection = await pool.getConnection(async conn => conn); - const editBirthResult = await userDao.updateUserBirth(connection, newUserInfo); - connection.release(); - - return response(resStatus_5000.USER_BIRTH_EDIT_SUCCESS, {"birth" : birth}) -} - + return response(resStatus_5000.USER_BIRTH_EDIT_SUCCESS, { "birth": birth }); +}); -exports.editPassword = async (email,password) =>{ +exports.editPassword = withConnection(async (connection, email, password) => { + console.log(email); const userInfo = await userProvider.usersbyEmail(email); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); @@ -164,85 +141,37 @@ exports.editPassword = async (email,password) =>{ const salt = encryptedData.salt; const newUserInfo = [hashedPassword, salt, email]; - const connection = await pool.getConnection(async conn => conn); - const editPasswordResult = await userDao.updatePassword(connection, newUserInfo); - - connection.release(); - - return response(resStatus_5000.USER_PASSWORD_EDIT_SUCCESS) -} - -exports.editNickName = async (email,nickname) =>{ - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await userDao.updateNickName(connection, email, nickname) - connection.release() - if (res) - return response2(baseResponse.SUCCESS) - - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} - -exports.editName = async (email,name) =>{ - try{ - console.log(name); - const connection = await pool.getConnection(async (conn)=>conn) - const res = await userDao.updateName(connection, email, name) - console.log(res); - connection.release() - if (res) - return response2(baseResponse.SUCCESS) - - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} - -exports.editPhoneNumber = async (email,phoneNumber) =>{ - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await userDao.updatePhoneNum(connection, email, phoneNumber) - connection.release() - if (res) - return response2(baseResponse.SUCCESS) - - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} - -exports.deleteUser = async (email) => { - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await userDao.withdrawalUser(connection, email) - - connection.release() - - if (res) return response2(baseResponse.SUCCESS) - - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} - -exports.eidtProfileImg = async(email, img, key) => { - try{ - const connection = await pool.getConnection(async (conn)=>conn) - const res = await userDao.eidtProfileImg(connection, email, img, key) - - connection.release() - - if (res) return response2(baseResponse.SUCCESS) - }catch(err){ - console.log(err); - return errResponse2(baseResponse.DB_ERROR) - } -} - + if (editPasswordResult.affectedRows) return true; + else return false; +}); + +exports.editNickName = withConnection(async (connection, email, nickname) => { + const res = await userDao.updateNickName(connection, email, nickname); + if (res.affectedRows) return true; + else return false; +}); + +exports.editName = withConnection(async (connection, email, name) => { + const res = await userDao.updateName(connection, email, name); + if (res.affectedRows) return true; + else return false; +}); + +exports.editPhoneNumber = withConnection(async (connection, email, phoneNumber) => { + const res = await userDao.updatePhoneNum(connection, email, phoneNumber); + if (res.affectedRows) return true; + else return false; +}); + +exports.deleteUser = withConnection(async (connection, email) => { + const res = await userDao.withdrawalUser(connection, email); + if (res.affectedRows) return true; + else return false; +}); + +exports.eidtProfileImg = withConnection(async (connection, email, img, key) => { + const res = await userDao.eidtProfileImg(connection, email, img, key); + if (res.affectedRows) return true; + else return false; +}); diff --git a/config/connection.js b/config/connection.js index 2cfe0e6..7d207bf 100644 --- a/config/connection.js +++ b/config/connection.js @@ -1,9 +1,14 @@ const { pool } = require('./database'); +const baseResponse = require('./resStatus') +const {errResponse2} = require('./response2') const withConnection = (handler) => async (...args) => { const connection = await pool.getConnection(async (conn)=>conn); try{ return await handler(connection, ...args) + }catch(err){ + console.log(err); + throw errResponse2(baseResponse.DB_ERROR); }finally{ connection.release(); } From 2a1f5eab9a2b714568d058f314357f9546d7587a Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Mon, 7 Aug 2023 19:47:17 +0900 Subject: [PATCH 40/52] =?UTF-8?q?=EA=B0=9C=EC=9D=B8=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EB=B0=8F=20=EB=86=8D=EC=9E=A5=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EC=98=88=EC=95=BD=20=EA=B4=80=EB=A0=A8=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=ED=99=9C=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 22 ++++--- components/farm/farmDao.js | 7 +-- components/farm/farmProvider.js | 7 +++ components/reserve/reserveController.js | 37 +++++++++--- components/reserve/reserveRoute.js | 6 +- components/reserve/reserveService.js | 3 +- components/user/userController.js | 80 ++++++++++++++----------- config/resStatus.js | 2 + 8 files changed, 105 insertions(+), 59 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index f50430c..7096df4 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -72,10 +72,16 @@ exports.postFarmer = async (req, res) =>{ } exports.editFarm = async(req, res) =>{ - try{ - const {farmId} = req.query; + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + if(decoded.role != 'F') return res.send(errResponse2(baseResponse.WRONG_FARMER)) + + const {farmId} = req.query; + if (!farmId) return res.send(errResponse2(baseResponse.FARMID_EMPTY)) - if (!farmId) return res.send(errResponse2(baseResponse.FARMID_EMPTY)) + try{ + const farmer = await farmProvider.getOwner(farmId) + if (farmer.Email != decoded.email) return res.send(errResponse2(baseResponse.WRONG_FARMER)) const eidtFarmInfoRes = await farmService.editFarmInfo(farmId, req.body) console.log(eidtFarmInfoRes); @@ -212,7 +218,7 @@ exports.getPhoneNumber = async(req,res) => { const {farmID} = req.query if (!farmID) return res.send(errResponse2(baseResponse.FARMID_EMPTY)) - const Owner = await farmProvider.getOwner(farmID) + const Owner = await farmProvider.getOwnerPhoneNumber(farmID) Owner.result = true return res.send(Owner) }catch(e){ @@ -222,11 +228,11 @@ exports.getPhoneNumber = async(req,res) => { } exports.getLikes = async(req,res) =>{ - try{ - const {email} = req.query - if (!email) return res.send(errResponse2(baseResponse.SIGNUP_EMAIL_EMPTY)) + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); - const user = await userProvider.retrieveUserEmail(email) + try{ + const user = await userProvider.retrieveUserEmail(decoded.email) console.log(user); if (!user.LikeFarmIDs) return res.send({"result":false}) diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index b9f76be..1a759a1 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -232,7 +232,7 @@ exports.selectFarmPicturesUrlKey = async(connection) =>{ exports.getOwnerbyFarmID = async(connection,farmID) =>{ const getOwnerbyFarmIDQuery = ` - SELECT PhoneNumber + SELECT PhoneNumber, Email FROM User WHERE Email = ( SELECT Owner @@ -240,9 +240,8 @@ exports.getOwnerbyFarmID = async(connection,farmID) =>{ WHERE FarmID = ? ); ` - - const [phoneNumber] = await connection.query(getOwnerbyFarmIDQuery, farmID) - return phoneNumber[0]; + const [OwnerInfo] = await connection.query(getOwnerbyFarmIDQuery, farmID) + return OwnerInfo[0]; } exports.getFarmsbyFarmIDs = async(connection, farmIds) =>{ diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 700b7ba..aa8e8b3 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -82,8 +82,15 @@ exports.farmPictureUrl = withConnection(async (connection) => { return farmPicturesInfo[0]; }); +exports.getOwnerPhoneNumber = withConnection(async (connection, farmID) => { + const Owner = await farmDao.getOwnerbyFarmID(connection, farmID); + delete Owner.Email + return Owner; +}); + exports.getOwner = withConnection(async (connection, farmID) => { const Owner = await farmDao.getOwnerbyFarmID(connection, farmID); + delete Owner.PhoneNumber return Owner; }); diff --git a/components/reserve/reserveController.js b/components/reserve/reserveController.js index bbe2e6c..8e565bb 100644 --- a/components/reserve/reserveController.js +++ b/components/reserve/reserveController.js @@ -5,21 +5,28 @@ const reserveService = require("./reserveService"); const reserveProvider = require('./reserveProvider') const resStatus_5000 = require('../../config/resStatus_5000'); const dateAvailability = require('../../helpers/DateAvailability'); +const { errResponse2 } = require('../../config/response2'); +const baseResponse = require('../../config/resStatus'); +const jwt = require('jsonwebtoken'); +const { secretKey } = require('./../../config/secret'); +const farmProvider = require('./../farm/farmProvider') /** * [POST] /reserve/request */ exports.request = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); try { - const { email, farmid, startDate, endDate } = req.body; - const invalidation = await validator.newReservation(email, farmid, startDate, endDate); + const { farmid, startDate, endDate } = req.body; + const invalidation = await validator.newReservation(decoded.email, farmid, startDate, endDate); if (invalidation) return(res.send(errResponse(invalidation))); if(dateAvailability.isValidDatetype(startDate) == false || dateAvailability.isValidDatetype(endDate) == false) return(res.send(errResponse(resStatus_5000.DATE_TYPE_WEIRD))); - const reserveRequest_result = await reserveService.request(email, farmid, startDate, endDate); + const reserveRequest_result = await reserveService.request(decoded.email, farmid, startDate, endDate); return(res.send(reserveRequest_result)); @@ -53,9 +60,11 @@ exports.clientsList = async function (req, res) { * [GET] /reserve/client/list/:email */ exports.farmsList = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); try { - const userEmail = req.params.email; + const userEmail = decoded.email; const invalidation = await validator.oneParams(userEmail); if (invalidation) return(res.send(response(invalidation))); @@ -74,6 +83,8 @@ exports.farmsList = async function (req, res) { * [PUT] /reserve/cancel/:reserveid */ exports.cancel = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); try { const reserveId = req.params.reserveid; @@ -81,7 +92,7 @@ exports.cancel = async function (req, res) { if (invalidation) return(res.send(response(invalidation))); - const cancelReservation = await reserveService.cancel(reserveId); + const cancelReservation = await reserveService.cancel(reserveId, decoded.email); return(res.send(cancelReservation)); @@ -95,11 +106,18 @@ exports.cancel = async function (req, res) { * [PUT] /reserve/:status/:reserveid */ exports.editStatus = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); try { let status = req.params.status; status = status.toUpperCase(); const reserveId = req.params.reserveid; + console.log(reserveId); + const reservedItem = await reserveProvider.itembyReserveId(reserveId); + console.log(reservedItem); + if (reservedItem.length < 1) return errResponse(resStatus_5000.RESERVE_RESERVEID_NOT_EXIST); + if (reservedItem[0].OwnerEmail != decoded.email) return res.send(errResponse(baseResponse.WRONG_RESERVE_USER)); switch (status) { case "ACCEPT": @@ -134,8 +152,11 @@ exports.editStatus = async function (req, res) { * [GET] /reserve/current/list/:email */ exports.currentUse = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + try { - let userEmail = req.params.email; + let userEmail = decoded.email; // const invalidation = await validator.oneParams(userEmail); // if (invalidation) return (res.send(errResponse(invalidation))); @@ -157,8 +178,10 @@ exports.currentUse = async function (req, res) { * [GET] /reserve/past/list/:email */ exports.pastUse = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); try { - let userEmail = req.params.email; + let userEmail = decoded.email; // const invalidation = await validator.oneParams(userEmail); // if (invalidation) return (res.send(errResponse(invalidation))); diff --git a/components/reserve/reserveRoute.js b/components/reserve/reserveRoute.js index 7ec1d37..ce605af 100644 --- a/components/reserve/reserveRoute.js +++ b/components/reserve/reserveRoute.js @@ -8,7 +8,7 @@ module.exports = function(app){ app.get('/reserve/farm/list/:farmid', reserve.clientsList); // 3. 유저 예약현황 API : 한 유저가 예약한 농장 명단 - app.get('/reserve/client/list/:email', reserve.farmsList); + app.get('/reserve/client/list', reserve.farmsList); // 4. 예약 취소 app.put('/reserve/cancel/:reserveid', reserve.cancel); @@ -17,10 +17,10 @@ module.exports = function(app){ app.put('/reserve/:status/:reserveid', reserve.editStatus); // 6. 유저 별 현재 이용중인 농장 목록 - app.get('/reserve/current/list/:email', reserve.currentUse); + app.get('/reserve/current/list', reserve.currentUse); // 7. 유저 별 과거 이용중인 농장 목록 - app.get('/reserve/past/list/:email', reserve.pastUse); + app.get('/reserve/past/list', reserve.pastUse); // 8. 농장별 예약 불가 기간 조회 app.get('/reserve/unbookable/:farmid', reserve.unbookablePeriods); diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index 5396926..fe48ca0 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -57,11 +57,12 @@ exports.request = withConnection(async (connection, userEmail, farmid, startAt, return response(resStatus_5000.RESERVE_REQUEST_SUCCESS, { "reserveID": newReserveID.toString() }); }); -exports.cancel = withConnection(async (connection, reserveId) => { +exports.cancel = withConnection(async (connection, reserveId, email) => { const reservedItem = await reserveProvider.itembyReserveId(reserveId); if (reservedItem.length < 1) return errResponse(resStatus_5000.RESERVE_RESERVEID_NOT_EXIST); if (reservedItem[0].Status == "A") return errResponse(resStatus_5000.RESERVE_CANCEL_NOT_ALLOWED); + if (reservedItem[0].UserEmail != email) return errResponse(resStatus.WRONG_RESERVE_USER); const canceledReservation = await reserveDao.cancelReservation(connection, reserveId); diff --git a/components/user/userController.js b/components/user/userController.js index 49c1d65..a98309e 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -17,6 +17,9 @@ const sharp = require('sharp'); const fs = require('fs'); const resStatus_5000 = require('../../config/resStatus_5000'); const jwtLogin = require('./../../config/jwtLogin'); +const jwt = require('jsonwebtoken'); +const { secretKey } = require('./../../config/secret'); + /** * [POST] /user/login @@ -62,13 +65,16 @@ exports.signup = async function (req, res) { } exports.likes = async function (req, res) { + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + try { - const { email, farmid } = req.body; - const invalidation = await validator.twoParams(email, farmid); + const { farmid } = req.body; + const invalidation = await validator.twoParams(decoded.email, farmid); if (invalidation) return(res.send(errResponse(invalidation))); - const starResponse = await userService.addLike(email, farmid); + const starResponse = await userService.addLike(decoded.email, farmid); return(res.send(starResponse)); } @@ -78,12 +84,15 @@ exports.likes = async function (req, res) { } exports.unliked = async(req,res)=>{ + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + try{ - const { email, farmid } = req.query; - const invalidation = await validator.twoParams(email, farmid); + const { farmid } = req.query; + const invalidation = await validator.twoParams(decoded.email, farmid); if (invalidation) return(res.send(errResponse(invalidation))); - const result = await userService.unLike(email, farmid) + const result = await userService.unLike(decoded.email, farmid) return res.send(result) }catch(e){ res.send(errResponse(resStatus.SERVER_ERROR)) @@ -291,17 +300,17 @@ exports.findPassword = async(req,res) => { } exports.editUserNickName = async(req,res) =>{ - const {email} = req.query; - const {nickname} = req.body + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); - if (!email) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) + const {nickname} = req.body if (!nickname) return res.send(errResponse2(baseResponse.USER_NICKNAME_EMPTY)) try{ - const editUser = await userService.editNickName(email, nickname) + const editUser = await userService.editNickName(decoded.email, nickname) if (!editUser) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userInfo = await userProvider.retrieveUserEmail(email); + const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken @@ -313,17 +322,17 @@ exports.editUserNickName = async(req,res) =>{ } exports.editUserName = async(req,res) =>{ - const {email} = req.query; - const {name} = req.body + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); - if (!email) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) + const {name} = req.body if (!name) return res.send(response2(baseResponse.USER_NAME_EMPTY)) try{ - const editUser = await userService.editName(email, name) + const editUser = await userService.editName(decoded.email, name) if (!editUser) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userInfo = await userProvider.retrieveUserEmail(email); + const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken @@ -334,19 +343,18 @@ exports.editUserName = async(req,res) =>{ } exports.editUserPhoneNumber = async(req,res) =>{ - const {email} = req.query; - const {phoneNumber} = req.body + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); - if (!email) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) + const {phoneNumber} = req.body if (!phoneNumber) return res.send(response2(baseResponse.SIGNUP_PHONENUMBER_EMPTY)) - if (phoneNumber.length != 11) return res.send(response2(baseResponse.SIGNUP_PHONENUMBER_LENGTH)) try{ - const editUser = await userService.editPhoneNumber(email, phoneNumber) + const editUser = await userService.editPhoneNumber(decoded.email, phoneNumber) if (!editUser) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userInfo = await userProvider.retrieveUserEmail(email); + const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken @@ -357,14 +365,16 @@ exports.editUserPhoneNumber = async(req,res) =>{ } exports.editUserPassword = async(req,res) =>{ + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + try { - const {email} = req.query; const {password} = req.body - const invalidation = await validator.login(email, password); + const invalidation = await validator.login(decoded.email, password); if (invalidation) return res.send(errResponse(invalidation)); - const editPasswordResponse = await userService.editPassword(email, password); + const editPasswordResponse = await userService.editPassword(decoded.email, password); if(!editPasswordResponse) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) return res.send(baseResponse.SUCCESS);} @@ -374,9 +384,8 @@ exports.editUserPassword = async(req,res) =>{ } exports.editUserProfileImg = async(req,res)=> { - const {email} = req.query; - - if (!email) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); try{ //sharp(req.file.path) @@ -402,10 +411,10 @@ exports.editUserProfileImg = async(req,res)=> { //const {id} = req.decoded //console.log(id); - const eidtImage = await userService.eidtProfileImg(email, req.file.location, req.file.key) + const eidtImage = await userService.eidtProfileImg(decoded.email, req.file.location, req.file.key) if (!eidtImage) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - const userInfo = await userProvider.retrieveUserEmail(email); + const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) baseResponse.SUCCESS.photoUrl = req.file.location @@ -419,16 +428,15 @@ exports.editUserProfileImg = async(req,res)=> { } exports.withdrawal = async(req,res) => { - const {userEmail} = req.query; - if (!userEmail) return res.send(errResponse2(baseResponse.USER_EDITINFO_EMPTYEMAIL)) - console.log(userEmail); + if (!req.headers.token) return res.send(errResponse2(baseResponse.TOKEN_EMPTY)) + const decoded = jwt.verify(req.headers.token, secretKey); + try{ console.log("TEST"); - const userWithdrawFarm = await farmService.deleteUserFarm(userEmail) - const userWithdraw = await userService.deleteUser(userEmail) + const userWithdrawFarm = await farmService.deleteUserFarm(decoded.email) + const userWithdraw = await userService.deleteUser(decoded.email) if (!userWithdraw) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) - return res.send(baseResponse.SUCCESS) }catch(e){ console.log(e); diff --git a/config/resStatus.js b/config/resStatus.js index 7ebc4ad..b902323 100644 --- a/config/resStatus.js +++ b/config/resStatus.js @@ -74,6 +74,8 @@ module.exports = { SET_REGION : {'result': false, 'code': 6014, "message": "지역을 설정해 주세요"}, INACCURATE_OWNER: {'result': false, 'code': 6015, "message": "FarmID가 잘못되었거나 농장주가 존재하지 않습니다."}, + WRONG_FARMER: {'result': false, 'code': 6016, "message": "해당 농장의 농장주만 권한이 있습니다."}, + WRONG_RESERVE_USER: {'result': false, 'code': 6017, "message": "예약자가 일치하지 않습니다."}, REDIS_ERROR : {'result': false, 'code':6900, 'message': "REDIS 에러"} From bf45a0a803bf7f02c24dcd8c7cf622191f3001cd Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Tue, 8 Aug 2023 21:51:57 +0900 Subject: [PATCH 41/52] =?UTF-8?q?=EB=B3=B4=EC=9C=A0=EB=86=8D=EC=9E=A5=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B2=B0=EA=B3=BC=EA=B0=92=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 7096df4..92dbf03 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -255,7 +255,8 @@ exports.getMyFarm = async(req,res)=>{ const decoded = jwt.verify(req.headers.token, secretKey); const farms = await farmProvider.getOwnerFarms(decoded.email) - return res.send(farms) + baseResponse.SUCCESS.myFarmList = farms + return res.send(baseResponse.SUCCESS) }catch(e){ console.log(e); return res.send(errResponse(resStatus.SERVER_ERROR)); From 60581d04ff31342ace0e58e874ffdaa3214bf4a6 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 10 Aug 2023 12:10:07 +0900 Subject: [PATCH 42/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=EB=93=B1=EB=A1=9D=20?= =?UTF-8?q?=EC=8B=9C=20=EA=B0=80=EA=B2=A9,=EB=A9=B4=EC=A0=80=20=EA=B0=92?= =?UTF-8?q?=20string=20=EC=9C=BC=EB=A1=9C=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B?= =?UTF-8?q?=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 92dbf03..9e78d75 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -108,7 +108,7 @@ exports.newFarm = async function (req, res) { const { name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description} = req.body; //console.log(req); console.log(req.body); - const invalidation = await validator.newFarm(name, owner, price, squaredMeters, locationBig, locationMid); + const invalidation = await validator.newFarm(name, owner, Number(price), Number(squaredMeters), locationBig, locationMid); if (invalidation) return res.send(errResponse(invalidation)) From ab813f493618c1a68313d008959a05fef8020672 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 10 Aug 2023 12:49:25 +0900 Subject: [PATCH 43/52] =?UTF-8?q?=EB=86=8D=EC=9E=A5=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=20input=EA=B0=92=20=EC=A0=84=ED=99=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 9e78d75..da1ea76 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -108,7 +108,7 @@ exports.newFarm = async function (req, res) { const { name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description} = req.body; //console.log(req); console.log(req.body); - const invalidation = await validator.newFarm(name, owner, Number(price), Number(squaredMeters), locationBig, locationMid); + const invalidation = await validator.newFarm(name, owner, price, squaredMeters, locationBig, locationMid); if (invalidation) return res.send(errResponse(invalidation)) @@ -131,7 +131,7 @@ exports.newFarm = async function (req, res) { const districtCode = districtClarityResponse.result; - let newFarmResponse = await farmService.newFarm(name, owner, price, squaredMeters, locationBig, locationMid, locationSmall, description); + let newFarmResponse = await farmService.newFarm(name, owner, Number(price), Number(squaredMeters), locationBig, locationMid, locationSmall, description); for (let i = 0; i < req.files.length; i++) { const file = req.files[i]; const location = file.location; From e26a4e36b817048698c109ed40c9d403b1715a1a Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Wed, 23 Aug 2023 23:01:50 +0900 Subject: [PATCH 44/52] =?UTF-8?q?baseResponse.success=20=EA=B0=92=20?= =?UTF-8?q?=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/farm/farmController.js | 19 +++++++++++-------- components/user/userController.js | 22 +++++++++++++--------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index da1ea76..310979d 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -61,9 +61,9 @@ exports.postFarmer = async (req, res) =>{ const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - - return res.send(baseResponse.SUCCESS); + const response = {"result" : true} + response.accesstoken = newJwtResponse.accesstoken + return res.send(response); }catch(err){ console.log(err); return res.send(errResponse2(baseResponse.NOT_LOGIN)); @@ -239,10 +239,11 @@ exports.getLikes = async(req,res) =>{ const likesArray = user.LikeFarmIDs.split(',').map(item => item.trim()); const likeFarms = await farmProvider.getFarmArray(likesArray) - baseResponse.SUCCESS.farmSize = likeFarms.length - baseResponse.SUCCESS.farmList = likeFarms + const response = {"result" : true} + response.farmSize = likeFarms.length + response.farmList = likeFarms - return res.send(baseResponse.SUCCESS) + return res.send(response) }catch(e){ console.log(e); return res.send(errResponse(resStatus.SERVER_ERROR)); @@ -255,8 +256,10 @@ exports.getMyFarm = async(req,res)=>{ const decoded = jwt.verify(req.headers.token, secretKey); const farms = await farmProvider.getOwnerFarms(decoded.email) - baseResponse.SUCCESS.myFarmList = farms - return res.send(baseResponse.SUCCESS) + + const response = {"result" : true} + response.myFarmList = farms + return res.send(response) }catch(e){ console.log(e); return res.send(errResponse(resStatus.SERVER_ERROR)); diff --git a/components/user/userController.js b/components/user/userController.js index a98309e..9a58c24 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -313,8 +313,9 @@ exports.editUserNickName = async(req,res) =>{ const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) + const response = {"result" : true} + response.accesstoken = newJwtResponse.accesstoken + return res.send(response) }catch(e){ return res.send(errResponse2(baseResponse.SERVER_ERROR)) } @@ -335,8 +336,9 @@ exports.editUserName = async(req,res) =>{ const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) + const response = {"result" : true} + response.accesstoken = newJwtResponse.accesstoken + return res.send(response) }catch(e){ return res.send(errResponse2(baseResponse.SERVER_ERROR)) } @@ -357,8 +359,9 @@ exports.editUserPhoneNumber = async(req,res) =>{ const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) + const response = {"result" : true} + response.accesstoken = newJwtResponse.accesstoken + return res.send(response) }catch(e){ return res.send(errResponse2(baseResponse.SERVER_ERROR)) } @@ -417,9 +420,10 @@ exports.editUserProfileImg = async(req,res)=> { const userInfo = await userProvider.retrieveUserEmail(decoded.email); const newJwtResponse = await jwtLogin(userInfo) - baseResponse.SUCCESS.photoUrl = req.file.location - baseResponse.SUCCESS.accesstoken = newJwtResponse.accesstoken - return res.send(baseResponse.SUCCESS) + const response = {"result" : true} + response.photoUrl = req.file.location + response.accesstoken = newJwtResponse.accesstoken + return res.send(response) } catch(err){ console.log(err); From 30e0622bb8d6c1f2cf133ae7f510c174969e6c9b Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Wed, 23 Aug 2023 23:29:49 +0900 Subject: [PATCH 45/52] =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=ED=83=88=ED=87=B4?= =?UTF-8?q?=20=EC=8B=9C=20=EC=98=88=EC=95=BD=20=EB=82=B4=EC=97=AD=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/reserve/reserveDao.js | 7 +++++++ components/reserve/reserveService.js | 5 +++++ components/user/userController.js | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/components/reserve/reserveDao.js b/components/reserve/reserveDao.js index 85d3474..24d87ef 100644 --- a/components/reserve/reserveDao.js +++ b/components/reserve/reserveDao.js @@ -122,6 +122,12 @@ async function pastUseList(connection, email) { return reservedPeriodsResult; } + async function deleteReservation(connection, email){ + const deleteReservationQuery = `DELETE FROM Reservation WHERE UserEmail = ?;`; + const deleteReservationResult = await connection.query(deleteReservationQuery, email); + return deleteReservationResult; + } + module.exports = { insertReservation, selectReservedClients, @@ -132,4 +138,5 @@ module.exports = { currentUseList, pastUseList, reservedPeriods, + deleteReservation, } \ No newline at end of file diff --git a/components/reserve/reserveService.js b/components/reserve/reserveService.js index fe48ca0..21d1094 100644 --- a/components/reserve/reserveService.js +++ b/components/reserve/reserveService.js @@ -89,3 +89,8 @@ exports.editStatus = withConnection(async (connection, reserveId, status) => { return errResponse(resStatus.DB_ERROR); }); + +exports.removeReservation = withConnection(async (connection, email) => { + const deleteReservation = await reserveDao.deleteReservation(connection, email); + return response(resStatus.SUCCESS) +}); \ No newline at end of file diff --git a/components/user/userController.js b/components/user/userController.js index 9a58c24..6dcbe22 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -4,6 +4,7 @@ const redis = require('redis') const nodemailer = require("nodemailer"); const userService = require("./userService"); const farmService = require("../farm/farmService"); +const reserveService = require("../reserve/reserveService") const userProvider = require("./userProvider"); const { response, errResponse } = require('./../../config/response'); const { response2, errResponse2 } = require('../../config/response2'); @@ -436,7 +437,7 @@ exports.withdrawal = async(req,res) => { const decoded = jwt.verify(req.headers.token, secretKey); try{ - console.log("TEST"); + const userWithdrawReservation = await reserveService.removeReservation(decoded.email) const userWithdrawFarm = await farmService.deleteUserFarm(decoded.email) const userWithdraw = await userService.deleteUser(decoded.email) if (!userWithdraw) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) From 3b00717e0113d63ccd604d2514eb65c676ff1ea5 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Sat, 26 Aug 2023 21:18:08 +0900 Subject: [PATCH 46/52] =?UTF-8?q?https=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/www | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bin/www b/bin/www index 02b0e61..c15e0ee 100644 --- a/bin/www +++ b/bin/www @@ -7,10 +7,12 @@ const app = require('../app'); const debug = require('debug')('farmus:server'); const http = require('http'); - +const https = require('https'); /** * Get port from environment and store in Express. */ +const httpsPort = normalizePort(process.env.HTTPS_PORT || '443'); +app.set('httpsPort', httpsPort); const port = normalizePort(process.env.PORT || '3000'); app.set('port', port); @@ -19,16 +21,20 @@ app.set('port', port); * Create HTTP server. */ -const server = http.createServer(app); +//const server = http.createServer(app); +const server = https.createServer(app); + /** * Listen on provided port, on all network interfaces. */ - +server.listen(httpsPort) server.listen(port); server.on('error', onError); server.on('listening', onListening); + + /** * Normalize a port into a number, string, or false. */ From 7ee8172465d19ab467a16a4f9c8c722a29a4dcb5 Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Thu, 7 Sep 2023 16:51:00 +0900 Subject: [PATCH 47/52] =?UTF-8?q?=EC=8B=A4=EC=8B=9C=EA=B0=84=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85(=EC=86=8C=EC=BC=93)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + app.js | 15 +- bin/www | 15 +- components/chat/chatController.js | 0 components/chat/chatModel.js | 22 + components/chat/chatRoute.js | 54 + package-lock.json | 4472 +++++++++++++++++++---------- package.json | 4 +- 8 files changed, 3111 insertions(+), 1473 deletions(-) create mode 100644 components/chat/chatController.js create mode 100644 components/chat/chatModel.js create mode 100644 components/chat/chatRoute.js diff --git a/.gitignore b/.gitignore index 3c2d18a..ef2a427 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ env # IDEA .idea + +src/ diff --git a/app.js b/app.js index 9f23255..6f8790e 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,7 @@ const cookieParser = require('cookie-parser'); const logger = require('morgan'); const cors = require("cors"); const { corsOptions } = require('./config/cors'); - +const fs = require('fs'); const app = express(); app.use(cors(corsOptions)) @@ -17,7 +17,20 @@ if (process.env.NODE_ENV === "production") { app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); +app.use(express.static('src')); +/* +app.get('/chat', function(req, res){ + fs.readFile('./src/index.html', (err, data) => { + if(err) throw err; + res.writeHead(200, { + 'Content-Type' : 'text/html' + }) + res.write(data) + res.end(); + }); +}); +*/ require('./components/user/userRoute')(app); require('./components/farm/farmRoute')(app); require('./components/reserve/reserveRoute')(app); diff --git a/bin/www b/bin/www index c15e0ee..cc4626c 100644 --- a/bin/www +++ b/bin/www @@ -7,12 +7,10 @@ const app = require('../app'); const debug = require('debug')('farmus:server'); const http = require('http'); -const https = require('https'); + /** * Get port from environment and store in Express. */ -const httpsPort = normalizePort(process.env.HTTPS_PORT || '443'); -app.set('httpsPort', httpsPort); const port = normalizePort(process.env.PORT || '3000'); app.set('port', port); @@ -20,15 +18,18 @@ app.set('port', port); /** * Create HTTP server. */ +const server = http.createServer(app); +const io = require('socket.io')(server); -//const server = http.createServer(app); -const server = https.createServer(app); - +io.on('connection', (socket)=>{ + require('../components/chat/chatRoute')(io,socket); + console.log('user connected'); +}) /** * Listen on provided port, on all network interfaces. */ -server.listen(httpsPort) +//httpsServer.listen(httpsPort) server.listen(port); server.on('error', onError); server.on('listening', onListening); diff --git a/components/chat/chatController.js b/components/chat/chatController.js new file mode 100644 index 0000000..e69de29 diff --git a/components/chat/chatModel.js b/components/chat/chatModel.js new file mode 100644 index 0000000..aeafcf7 --- /dev/null +++ b/components/chat/chatModel.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose'); + +const chatSchema = new mongoose.Schema({ +/* + chatRoomID:{ + type: String + }*/ + name: { + type: String, + required: true, + }, + message: { + type: String, + required: true, + }, + timestamp: { + type: Date, + default: Date.now, + }, +}); + +module.exports = mongoose.model('Chat', chatSchema); diff --git a/components/chat/chatRoute.js b/components/chat/chatRoute.js new file mode 100644 index 0000000..51d63a8 --- /dev/null +++ b/components/chat/chatRoute.js @@ -0,0 +1,54 @@ +const mongoose = require('mongoose'); + +const Chat = require('./chatModel'); +//const mongoURI = 'mongodb://localhost:27017'; // MongoDB URI (로컬로 설정됨) + +module.exports = function (io, socket) { + + /* mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true }) + .then(()=>{*/ + socket.on('send', async(data)=>{ + data.name = socket.name + /* + const chatMessage = new Chat({ + name: data.name, + message: data.message, + }) + */ + try{ + //await chatMessage.save(); + io.sockets.emit('update', data) + }catch(err){ + console.error("채팅 메시지 저장 오류", err); + } + + }) + + socket.on('newUser', function(name){ + + socket.name = name; + const message = name + '님이 접속했습니다'; + + io.sockets.emit('update', { + name : 'SERVER', + message : message + }); + console.log(message); + }); + + socket.on('disconnect', ()=>{ + const message = socket.name + '님이 퇴장했습니다.'; + + socket.broadcast.emit('update', { + name : 'SERVER', + message : message + }); + console.log(message); + }) + + /*}) + .catch((err)=>{ + console.error('MongoDB 연결 오류 : ', err); + })*/ + +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 065d1cd..db47b84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "express": "~4.16.1", "jsonwebtoken": "^9.0.0", "moment": "^2.29.4", + "mongoose": "^7.5.0", "morgan": "~1.9.1", "multer": "^1.4.5-lts.1", "multer-s3": "^3.0.1", @@ -28,7 +29,8 @@ "nodemailer": "^6.9.0", "nodemon": "^2.0.20", "redis": "^4.6.5", - "sharp": "^0.31.3" + "sharp": "^0.31.3", + "socket.io": "^4.7.2" } }, "node_modules/@aws-crypto/crc32": { @@ -168,457 +170,363 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/chunked-blob-reader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", - "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", - "dependencies": { - "tslib": "^2.5.0" - } - }, "node_modules/@aws-sdk/client-s3": { - "version": "3.312.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.312.0.tgz", - "integrity": "sha512-aqlll2g7eKwV0j+IAK4Ly7c0CRVSI712VTdItAWpLSQPw1VVUP9IKaIsBTiigoOBCJq+fb2+ufFrSTUAPdEzPQ==", + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", + "integrity": "sha512-+LK6OCbKplR51zBZAtK/+RxaPsXcEklsA1+mmUA3M1h4KHl6GMiK5r/D9dlKht5DRntmmjCn3SI99QbfckqKXg==", "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.312.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.310.0", - "@aws-sdk/eventstream-serde-browser": "3.310.0", - "@aws-sdk/eventstream-serde-config-resolver": "3.310.0", - "@aws-sdk/eventstream-serde-node": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-blob-browser": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/hash-stream-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/md5-js": "3.310.0", - "@aws-sdk/middleware-bucket-endpoint": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-expect-continue": "3.310.0", - "@aws-sdk/middleware-flexible-checksums": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-location-constraint": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-sdk-s3": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-ssec": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4-multi-region": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-stream-browser": "3.310.0", - "@aws-sdk/util-stream-node": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.310.0", + "@aws-sdk/client-sts": "3.405.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-bucket-endpoint": "3.405.0", + "@aws-sdk/middleware-expect-continue": "3.398.0", + "@aws-sdk/middleware-flexible-checksums": "3.400.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-location-constraint": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-s3": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-ssec": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/signature-v4-multi-region": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", "@aws-sdk/xml-builder": "3.310.0", - "fast-xml-parser": "4.1.2", + "@smithy/config-resolver": "^2.0.5", + "@smithy/eventstream-serde-browser": "^2.0.5", + "@smithy/eventstream-serde-config-resolver": "^2.0.5", + "@smithy/eventstream-serde-node": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-blob-browser": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/hash-stream-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/md5-js": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.310.0.tgz", - "integrity": "sha512-netFap3Mp9I7bzAjsswHPA5WEbQtNMmXvW9/IVb7tmf85/esXCWindtyI43e/Xerut9ZVyEACPBFn30CLLE2xQ==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.310.0.tgz", - "integrity": "sha512-3GKaRSfMD3OiYWGa+qg5KvJw0nLV0Vu7zRiulLuKDvgmWw3SNJKn3frWlmq/bKFUKahLsV8zozbeJItxtKAD6g==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.405.0.tgz", + "integrity": "sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.312.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.312.0.tgz", - "integrity": "sha512-t0U7vRvWaMjrzBUo6tPrHe6HE97Blqx+b4GOjFbcbLtzxLlcRfhnWJik0Lp8hJtVqzNoN5mL4OeYgK7CRpL/Sw==", + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-sdk-sts": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "fast-xml-parser": "4.1.2", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz", - "integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==", + "node_modules/@aws-sdk/client-sts": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.405.0.tgz", + "integrity": "sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==", "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-sts": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz", - "integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz", - "integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==", + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", "dependencies": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.310.0.tgz", - "integrity": "sha512-gtRz7I+4BBpwZ3tc6UIt5lQuiAFnkpOibxHh95x1M6HDxBjm+uqD6RPZYVH+dULZPYXOtOTsHV0IGjrcV0sSRg==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.310.0", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.310.0.tgz", - "integrity": "sha512-FrOztUcOq2Sp32xGtJvxfvdlmuAeoxIu/AElHzV1bkx6Pzo9DkQBhXrSQ+JFSpI++weOD4ZGFhAvgbgUOT4VAg==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-ini": "3.310.0", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.310.0", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz", - "integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.405.0.tgz", + "integrity": "sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==", "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.310.0.tgz", - "integrity": "sha512-nXkpT8mrM/wRqSiz/a4p9U2UrOKyfZXhbPHIHyQj8K+uLjsYS+WPuH287J4A5Q57A6uarTrj5RjHmVeZVLaHmg==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/client-sso": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/token-providers": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz", - "integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.405.0.tgz", + "integrity": "sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==", "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.405.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/eventstream-codec": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.310.0.tgz", - "integrity": "sha512-clIeSgWbZbxwtsxZ/yoedNM0/kJFSIjjHPikuDGhxhqc+vP6TN3oYyVMFrYwFaTFhk2+S5wZcWYMw8Op1pWo+A==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.310.0.tgz", - "integrity": "sha512-3S6ziuQVALgEyz0TANGtYDVeG8ArK4Y05mcgrs8qUTmsvlDIXX37cR/DvmVbNB76M4IrsZeSAIajL9644CywkA==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/eventstream-serde-universal": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/eventstream-serde-config-resolver": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.310.0.tgz", - "integrity": "sha512-8s1Qdn9STj+sV75nUp9yt0W6fHS4BZ2jTm4Z/1Pcbvh2Gqs0WjH5n2StS+pDW5Y9J/HSGBl0ogmUr5lC5bXFHg==", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.405.0.tgz", + "integrity": "sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/eventstream-serde-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.310.0.tgz", - "integrity": "sha512-kSnRomCgW43K9TmQYuwN9+AoYPnhyOKroanUMyZEzJk7rpCPMj4OzaUpXfDYOvznFNYn7NLaH6nHLJAr0VPlJA==", + "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/eventstream-serde-universal": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/eventstream-serde-universal": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.310.0.tgz", - "integrity": "sha512-Qyjt5k/waV5cDukpgT824ISZAz5U0pwzLz5ztR409u85AGNkF/9n7MS+LSyBUBSb0WJ5pUeSD47WBk+nLq9Nhw==", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.405.0.tgz", + "integrity": "sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==", "dependencies": { - "@aws-sdk/eventstream-codec": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/client-sso": "3.405.0", + "@aws-sdk/token-providers": "3.405.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz", - "integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-blob-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.310.0.tgz", - "integrity": "sha512-OoR8p0cbypToysLT0v3o2oyjy6+DKrY7GNCAzHOHJK9xmqXCt+DsjKoPeiY7o1sWX2aN6Plmvubj/zWxMKEn/A==", - "dependencies": { - "@aws-sdk/chunked-blob-reader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz", - "integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/hash-stream-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.310.0.tgz", - "integrity": "sha512-ZoXdybNgvMz1Hl6k/e32xVL3jmG5p2IEk5mTtLfFEuskTJ74Z+VMYKkkF1whyy7KQfH83H+TQGnsGtlRCchQKw==", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz", - "integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -662,38 +570,28 @@ "node": ">=0.8.x" } }, - "node_modules/@aws-sdk/md5-js": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.310.0.tgz", - "integrity": "sha512-x5sRBUrEfLWAS1EhwbbDQ7cXq6uvBxh3qR2XAsnGvFFceTeAadk7cVogWxlk3PC+OCeeym7c3/6Bv2HQ2f1YyQ==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.310.0.tgz", - "integrity": "sha512-uJJfHI7v4AgbJZRLtyI8ap2QRWkBokGc3iyUoQ+dVNT3/CE2ZCu694A6W+H0dRqg79dIE+f9CRNdtLGa/Ehhvg==", + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.405.0.tgz", + "integrity": "sha512-wKmHZi44NkbaGXXbMwassUm06/wDtSYucPbM4paU2cMbBUOnwFpndHWlrRYCNmj5Ty5A2HjdkGlhgla8nifHzQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", "@aws-sdk/util-arn-parser": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz", - "integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==", + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -716,12 +614,25 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.310.0.tgz", - "integrity": "sha512-l3d1z2gt+gINJDnPSyu84IxfzjzPfCQrqC1sunw2cZGo/sXtEiq698Q3SiTcO2PGP4LBQAy2RHb5wVBJP708CQ==", + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -729,196 +640,195 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.310.0.tgz", - "integrity": "sha512-5ndnLgzgGVpWkmHBAiYkagHqiSuow8q62J4J6E2PzaQ77+fm8W3nfdy7hK5trHokEyouCZdxT/XK/IRhgj/4PA==", + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz", - "integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.310.0.tgz", - "integrity": "sha512-LFm0JTQWwTPWL/tZU2wsQTl8J5PpDEkXjEhaXVKamtyH0xhysRqd+0n92n65dc8oztAuQkb9xUbErGn5b6gsew==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz", - "integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz", - "integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz", - "integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==", + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/service-error-classification": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.310.0.tgz", - "integrity": "sha512-QK9x9g2ksg0hOjjYgqddeFcn5ctUEGdxJVu4OumPXceulefMcSO2jyH2qTybYSA93nqNQFdFmg5wQfvIRUWFCQ==", + "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz", - "integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", "dependencies": { - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz", - "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz", - "integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.310.0.tgz", - "integrity": "sha512-CnEwNKVpd5bXnrCKPaePF8mWTA9ET21OMBb54y9b0fd8K02zoOcdBz4DWfh1SjFD4HkgCdja4egd8l2ivyvqmw==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz", - "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==", + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", "dependencies": { + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.310.0.tgz", - "integrity": "sha512-x3IOwSwSbwKidlxRk3CNVHVUb06SRuaELxggCaR++QVI8NU6qD/l4VHXKVRvbTHiC/cYxXE/GaBDgQVpDR7V/g==", + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/node-config-provider": { + "node_modules/@aws-sdk/middleware-serde": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz", - "integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz", + "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==", "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" }, @@ -926,101 +836,104 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.310.0.tgz", - "integrity": "sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg==", + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", "dependencies": { - "@aws-sdk/abort-controller": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz", - "integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==", + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz", - "integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz", - "integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==", + "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/querystring-parser": { + "node_modules/@aws-sdk/middleware-stack": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz", - "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz", + "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==", "dependencies": { - "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz", - "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz", - "integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/signature-v4": { + "node_modules/@aws-sdk/querystring-parser": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz", - "integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz", + "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==", "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" }, "engines": { @@ -1028,13 +941,14 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.310.0.tgz", - "integrity": "sha512-q8W+RIomTS/q85Ntgks/CoDElwqkC9+4OCicee5YznNHjQ4gtNWhUkYIyIRWRmXa/qx/AUreW9DM8FAecCOdng==", + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -1049,6 +963,18 @@ } } }, + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/smithy-client": { "version": "3.310.0", "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.310.0.tgz", @@ -1063,14 +989,56 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.310.0.tgz", - "integrity": "sha512-G1JvB+2v8k900VJFkKVQXgLGF50ShOEIPxfK1gSQLkSU85vPwGIAANs1KvnlW08FsNbWp3+sKca4kfYKsooXMw==", + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.405.0.tgz", + "integrity": "sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==", "dependencies": { - "@aws-sdk/client-sso-oidc": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -1109,107 +1077,24 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", + "@aws-sdk/types": "3.398.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.310.0.tgz", - "integrity": "sha512-Mr2AoQsjAYNM5oAS2YJlYJqhiCvkFV/hu48slOZgbY4G7ueW4cM0DPkR16wqjcRCGqZ4JmAZB8Q5R0DMrLjhOQ==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.310.0.tgz", - "integrity": "sha512-JyBlvhQGR8w8NpFRZZXRVTDesafFKTu/gTWjcoxP7twa+fYHSIgPPFGnlcJ/iHaucjamSaWi5EQ+YQmnSZ8yHA==", - "dependencies": { - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.310.0.tgz", - "integrity": "sha512-zG+/d/O5KPmAaeOMPd6bW1abifdT0H03f42keLjYEoRZzYtHPC5DuPE0UayiWGckI6BCDgy0sRKXCYS49UNFaQ==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", + "node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -1238,73 +1123,37 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz", - "integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==", - "dependencies": { - "@aws-sdk/service-error-classification": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-stream-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.310.0.tgz", - "integrity": "sha512-bysXZHwFwvbqOTCScCdCnoLk1K3GCo0HRIYEZuL7O7MHrQmfaYRXcaft/p22+GUv9VeFXS/eJJZ5r4u32az94w==", - "dependencies": { - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-stream-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.310.0.tgz", - "integrity": "sha512-hueAXFK0GVvnfYFgqbF7587xZfMZff5jlIFZOHqx7XVU7bl7qrRUCnphHk8H6yZ7RoQbDPcfmHJgtEoAJg1T1Q==", + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", "dependencies": { - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz", - "integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz", - "integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==", + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.405.0.tgz", + "integrity": "sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==", "dependencies": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -1319,12 +1168,12 @@ } } }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, "engines": { @@ -1339,19 +1188,6 @@ "tslib": "^2.3.1" } }, - "node_modules/@aws-sdk/util-waiter": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.310.0.tgz", - "integrity": "sha512-AV5j3guH/Y4REu+Qh3eXQU9igljHuU4XjX2sADAgf54C0kkhcCCkkiuzk3IsX089nyJCqIcj5idbjdvpnH88Vw==", - "dependencies": { - "@aws-sdk/abort-controller": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/xml-builder": { "version": "3.310.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", @@ -1363,6 +1199,15 @@ "node": ">=14.0.0" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@redis/bloom": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", @@ -1416,137 +1261,773 @@ "@redis/client": "^1.0.0" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@smithy/abort-controller": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.5.tgz", + "integrity": "sha512-byVZ2KWLMPYAZGKjRpniAzLcygJO4ruClZKdJTuB0eCB76ONFTdptBHlviHpAZXknRz7skYWPfcgO9v30A1SyA==", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 0.6" + "node": ">=14.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "tslib": "^2.5.0" } }, - "node_modules/append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", + "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "dependencies": { + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "node_modules/@smithy/config-resolver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.5.tgz", + "integrity": "sha512-n0c2AXz+kjALY2FQr7Zy9zhYigXzboIh1AuUUVCqFBKFtdEvTwnwPXrTDoEehLiRTUHNL+4yzZ3s+D0kKYSLSg==", + "dependencies": { + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "node_modules/@smithy/credential-provider-imds": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.7.tgz", + "integrity": "sha512-XivkZj/pipzpQPxgleE1odwJQ6oDsVViB4VUO/HRDI4EdEfZjud44USupOUOa/xOjS39/75DYB4zgTbyV+totw==", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "@smithy/node-config-provider": "^2.0.7", + "@smithy/property-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.5.tgz", + "integrity": "sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.5.tgz", + "integrity": "sha512-8NU51y94qFJbxL6SmvgWDfITHO/svvbAigkLYk2pckX17TGCSf4EXuGpGLliJp5Ljh5+vASC7mUH2jYX7MWBxA==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.5.tgz", + "integrity": "sha512-u3gvukRaTH4X6tsryuZ4T1WGIEP34fPaTTzphFDJe8GJz/k11oBW1MPnkcaucBMxLnObK9swCF85j5cp1Kj1oA==", "dependencies": { - "safe-buffer": "5.1.2" + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 0.8" + "node": ">=14.0.0" } }, - "node_modules/bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.5.tgz", + "integrity": "sha512-/C8jb+k/vKUBIe80D30vzjvRXlJf76kG2AJY7/NwiqWuD2usRuuDFCDaswXdVsSh9P1+FeaxZ48chsK10yDryQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, "engines": { - "node": "*" + "node": ">=14.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.5.tgz", + "integrity": "sha512-+vHvbQtlSVYTQ/20tNpVaKi0EpTR7E8GoEUHJypRZIRgiT03b3h2MAWk+SNaqMrCJrYG9vKLkJFzDylRlUvDWg==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@smithy/fetch-http-handler": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.5.tgz", + "integrity": "sha512-EzFoMowdBNy1VqtvkiXgPFEdosIAt4/4bgZ8uiDiUyfhmNXq/3bV+CagPFFBsgFOR/X2XK4zFZHRsoa7PNHVVg==", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@smithy/protocol-http": "^2.0.5", + "@smithy/querystring-builder": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" } }, - "node_modules/bl/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/@smithy/hash-blob-browser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.5.tgz", + "integrity": "sha512-ZVAUBtJXGf9bEko4/RwWcTK6d3b/ZmQMxJMrxOOcQhVDiqny9zI0mzgstO4Oxz3135R7S3V/bbGw3w3woCYpQg==", + "dependencies": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/@smithy/hash-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.5.tgz", + "integrity": "sha512-mk551hIywBITT+kXruRNXk7f8Fy7DTzBjZJSr/V6nolYKmUHIG3w5QU6nO9qPYEQGKc/yEPtkpdS28ndeG93lA==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@smithy/types": "^2.2.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 6" + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.5.tgz", + "integrity": "sha512-XiR4Aoux5kXy8OWPLQisKy3GPmm0l6deHepvPvr4MUzIwa5XWazG3JdbZXy+mk93CvEZrOwKPHU5Kul6QybJiQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.5.tgz", + "integrity": "sha512-0wEi+JT0hM+UUwrJVYbqjuGFhy5agY/zXyiN7BNAJ1XoCDjU5uaNSj8ekPWsXd/d4yM6NSe8UbPd8cOc1+3oBQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.5.tgz", + "integrity": "sha512-k5EOte/Ye2r7XBVaXv2rhiehk6l3T4uRiPF+pnxKEc+G9Fwd1xAXBDZrtOq1syFPBKBmVfNszG4nevngST7NKg==", + "dependencies": { + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.5.tgz", + "integrity": "sha512-E7VwV5H02fgZIUGRli4GevBCAPvkyEI/fgl9SU47nPPi3DAAX3nEtUb8xfGbXjOcJ5BdSUoWWZn42tEd/blOqA==", + "dependencies": { + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.5.tgz", + "integrity": "sha512-tyzDuoNTbsMQCq5Xkc4QOt6e2GACUllQIV8SQ5fc59FtOIV9/vbf58/GxVjZm2o8+MMbdDBANjTDZe/ijZKfyA==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.5.tgz", + "integrity": "sha512-ulIfbFyzQTVnJbLjUl1CTSi0etg6tej/ekwaLp0Gn8ybUkDkKYa+uB6CF/m2J5B6meRwyJlsryR+DjaOVyiicg==", + "dependencies": { + "@smithy/protocol-http": "^2.0.5", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.5.tgz", + "integrity": "sha512-in0AA5sous74dOfTGU9rMJBXJ0bDVNxwdXtEt5lh3FVd2sEyjhI+rqpLLRF1E4ixbw3RSEf80hfRpcPdjg4vvQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.7.tgz", + "integrity": "sha512-GuLxhnf0aVQsfQp4ZWaM1TRCIndpQjAswyFcmDFRNf4yFqpxpLPDeV540+O0Z21Hmu3deoQm/dCPXbVn90PYzg==", + "dependencies": { + "@smithy/property-provider": "^2.0.6", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.5.tgz", + "integrity": "sha512-lZm5DZf4b3V0saUw9WTC4/du887P6cy2fUyQgQQKRRV6OseButyD5yTzeMmXE53CaXJBMBsUvvIQ0hRVxIq56w==", + "dependencies": { + "@smithy/abort-controller": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/querystring-builder": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.6.tgz", + "integrity": "sha512-CVem6ZkkWxbTnhjDLyLESY0oLA6IUZYtdqrCpGQKUXaFBOuc/izjm7fIFGBxEbjZ1EGcH9hHxrjqX36RWULNRg==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.5.tgz", + "integrity": "sha512-4DCX9krxLzATj+HdFPC3i8pb7XTAWzzKqSw8aTZMjXjtQY+vhe4azMAqIvbb6g7JKwIkmkRAjK6EXO3YWSnJVQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.5.tgz", + "integrity": "sha512-C2stCULH0r54KBksv3AWcN8CLS3u9+WsEW8nBrvctrJ5rQTNa1waHkffpVaiKvcW2nP0aIMBPCobD/kYf/q9mA==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.6.tgz", + "integrity": "sha512-NO6dHqho6APbVR0DxPtYoL4KXBqUeSM3Slsd103MOgL50YbzzsQmMLtDMZ87W8MlvvCN0tuiq+OrAO/rM7hTQg==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.5.tgz", + "integrity": "sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.5.tgz", + "integrity": "sha512-kCTFr8wfOAWKDzGvfBElc6shHigWtHNhMQ1IbosjC4jOlayFyZMSs2PysKB+Ox/dhQ41KqOzgVjgiQ+PyWqHMQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-stream": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.2.tgz", + "integrity": "sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.5.tgz", + "integrity": "sha512-OdMBvZhpckQSkugCXNJQCvqJ71wE7Ftxce92UOQLQ9pwF6hoS5PLL7wEfpnuEXtStzBqJYkzu1C1ZfjuFGOXAA==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.6.tgz", + "integrity": "sha512-h8xyKTZIIom62DN4xbPUmL+RL1deZcK1qJGmCr4c2yXjOrs5/iZ1VtQQcl+xP78620ga/565AikZE1sktdg2yA==", + "dependencies": { + "@smithy/property-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.7.tgz", + "integrity": "sha512-2C1YfmYJj9bpM/cRAgQppYNzPd8gDEXZ5XIVDuEQg3TmmIiinZaFf/HsHYo9NK/PMy5oawJVdIuR7SVriIo1AQ==", + "dependencies": { + "@smithy/config-resolver": "^2.0.5", + "@smithy/credential-provider-imds": "^2.0.7", + "@smithy/node-config-provider": "^2.0.7", + "@smithy/property-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.5.tgz", + "integrity": "sha512-ylx27GwI05xLpYQ4hDIfS15vm+wYjNN0Sc2P0FxuzgRe8v0BOLHppGIQ+Bezcynk8C9nUzsUue3TmtRhjut43g==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/types": "^2.2.2", + "@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.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.5.tgz", + "integrity": "sha512-1lkkUmI/bhaDX+LIT3RiUNAn+NzPmsWjE7beMq0oQ3H1/CffaILIN67riDA0aE1YBj6xll7uWMIy4tJqc+peXw==", + "dependencies": { + "@smithy/abort-controller": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.5.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.8.tgz", + "integrity": "sha512-eajsR9aeljqNhK028VG0Wuw+OaY5LLxYmxeoXynIoE6jannr9/Ucd1LL0hSSoafk5LTYG+FfqsyGt81Q6Zkybw==" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/body-parser": { @@ -1594,6 +2075,14 @@ "node": ">=8" } }, + "node_modules/bson": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", + "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", + "engines": { + "node": ">=14.20.1" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1949,6 +2438,55 @@ "once": "^1.4.0" } }, + "node_modules/engine.io": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2019,18 +2557,24 @@ } }, "node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "dependencies": { "strnum": "^1.0.5" }, "bin": { "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } }, "node_modules/file-type": { @@ -2239,6 +2783,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -2344,6 +2893,14 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -2370,6 +2927,12 @@ "node": ">= 0.6" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -2464,6 +3027,81 @@ "node": "*" } }, + "node_modules/mongodb": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz", + "integrity": "sha512-wKyh4kZvm6NrCPH8AxyzXm3JBoEf4Xulo0aUWh3hCgwgYJxyQ1KLST86ZZaSWdj6/kxYUA3+YZuyADCE61CMSg==", + "dependencies": { + "bson": "^5.4.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongoose": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.5.0.tgz", + "integrity": "sha512-FpOWOb0AJuaVcplmEyIJ2eCbVGe4gOoniPD+pmft5BrGrNrsFcnYXlERdXtBApGHMHPwD7WbxTyhCbUNr72F3Q==", + "dependencies": { + "bson": "^5.4.0", + "kareem": "2.5.1", + "mongodb": "5.8.1", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -2479,6 +3117,46 @@ "node": ">= 0.8.0" } }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2618,9 +3296,9 @@ } }, "node_modules/nodemon": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.21.tgz", - "integrity": "sha512-djN/n2549DUtY33S7o1djRCd7dEm0kBnj9c7S9XVXqRUbuggN1MZH/Nqa+5RFQr63Fbefq37nFXAE9VU86yL1A==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -2658,9 +3336,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -2815,6 +3493,14 @@ "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -2949,9 +3635,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3061,6 +3747,11 @@ "node": ">=8" } }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -3131,6 +3822,116 @@ "semver": "bin/semver.js" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", @@ -3275,6 +4076,17 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -3334,6 +4146,14 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -3342,6 +4162,26 @@ "node": ">= 0.8" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3361,6 +4201,26 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -3526,1014 +4386,1439 @@ "tslib": "^2.5.0" } }, - "@aws-sdk/chunked-blob-reader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", - "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", - "requires": { - "tslib": "^2.5.0" - } - }, "@aws-sdk/client-s3": { - "version": "3.312.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.312.0.tgz", - "integrity": "sha512-aqlll2g7eKwV0j+IAK4Ly7c0CRVSI712VTdItAWpLSQPw1VVUP9IKaIsBTiigoOBCJq+fb2+ufFrSTUAPdEzPQ==", + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", + "integrity": "sha512-+LK6OCbKplR51zBZAtK/+RxaPsXcEklsA1+mmUA3M1h4KHl6GMiK5r/D9dlKht5DRntmmjCn3SI99QbfckqKXg==", "requires": { "@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.312.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.310.0", - "@aws-sdk/eventstream-serde-browser": "3.310.0", - "@aws-sdk/eventstream-serde-config-resolver": "3.310.0", - "@aws-sdk/eventstream-serde-node": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-blob-browser": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/hash-stream-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/md5-js": "3.310.0", - "@aws-sdk/middleware-bucket-endpoint": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-expect-continue": "3.310.0", - "@aws-sdk/middleware-flexible-checksums": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-location-constraint": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-sdk-s3": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-ssec": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4-multi-region": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-stream-browser": "3.310.0", - "@aws-sdk/util-stream-node": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.310.0", + "@aws-sdk/client-sts": "3.405.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-bucket-endpoint": "3.405.0", + "@aws-sdk/middleware-expect-continue": "3.398.0", + "@aws-sdk/middleware-flexible-checksums": "3.400.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-location-constraint": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-s3": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-ssec": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/signature-v4-multi-region": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", "@aws-sdk/xml-builder": "3.310.0", - "fast-xml-parser": "4.1.2", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^2.0.5", + "@smithy/eventstream-serde-browser": "^2.0.5", + "@smithy/eventstream-serde-config-resolver": "^2.0.5", + "@smithy/eventstream-serde-node": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-blob-browser": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/hash-stream-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/md5-js": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, "@aws-sdk/client-sso": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.310.0.tgz", - "integrity": "sha512-netFap3Mp9I7bzAjsswHPA5WEbQtNMmXvW9/IVb7tmf85/esXCWindtyI43e/Xerut9ZVyEACPBFn30CLLE2xQ==", + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.405.0.tgz", + "integrity": "sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==", "requires": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/client-sso-oidc": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.310.0.tgz", - "integrity": "sha512-3GKaRSfMD3OiYWGa+qg5KvJw0nLV0Vu7zRiulLuKDvgmWw3SNJKn3frWlmq/bKFUKahLsV8zozbeJItxtKAD6g==", + "@aws-sdk/client-sts": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.405.0.tgz", + "integrity": "sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==", "requires": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-sts": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/client-sts": { + "@aws-sdk/credential-provider-ini": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.405.0.tgz", + "integrity": "sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==", + "requires": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.405.0.tgz", + "integrity": "sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==", + "requires": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.405.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.405.0.tgz", + "integrity": "sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.405.0.tgz", + "integrity": "sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==", + "requires": { + "@aws-sdk/client-sso": "3.405.0", + "@aws-sdk/token-providers": "3.405.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/lib-storage": { "version": "3.312.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.312.0.tgz", - "integrity": "sha512-t0U7vRvWaMjrzBUo6tPrHe6HE97Blqx+b4GOjFbcbLtzxLlcRfhnWJik0Lp8hJtVqzNoN5mL4OeYgK7CRpL/Sw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.312.0.tgz", + "integrity": "sha512-LwpZsNrKi0CR8hM9bOphMAgw3CYfqkNUnxyPA8PKSffuEwQtpdNuvJCY3q7tOBWnuz+BbzkevqUXO6HsTp3RLw==", "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-sdk-sts": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", "@aws-sdk/smithy-client": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.310.0", - "@aws-sdk/util-defaults-mode-node": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "fast-xml-parser": "4.1.2", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + } + } + }, + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.405.0.tgz", + "integrity": "sha512-wKmHZi44NkbaGXXbMwassUm06/wDtSYucPbM4paU2cMbBUOnwFpndHWlrRYCNmj5Ty5A2HjdkGlhgla8nifHzQ==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/config-resolver": { + "@aws-sdk/middleware-endpoint": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz", - "integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz", + "integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==", "requires": { + "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", + "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-middleware": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/credential-provider-env": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz", - "integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==", + "@aws-sdk/middleware-expect-continue": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/credential-provider-imds": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz", - "integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==", + "@aws-sdk/middleware-flexible-checksums": { + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", "requires": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.398.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/credential-provider-ini": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.310.0.tgz", - "integrity": "sha512-gtRz7I+4BBpwZ3tc6UIt5lQuiAFnkpOibxHh95x1M6HDxBjm+uqD6RPZYVH+dULZPYXOtOTsHV0IGjrcV0sSRg==", - "requires": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.310.0", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/middleware-location-constraint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/credential-provider-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.310.0.tgz", - "integrity": "sha512-FrOztUcOq2Sp32xGtJvxfvdlmuAeoxIu/AElHzV1bkx6Pzo9DkQBhXrSQ+JFSpI++weOD4ZGFhAvgbgUOT4VAg==", - "requires": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-ini": "3.310.0", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.310.0", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/middleware-logger": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", + "requires": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/credential-provider-process": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz", - "integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==", + "@aws-sdk/middleware-sdk-s3": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/credential-provider-sso": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.310.0.tgz", - "integrity": "sha512-nXkpT8mrM/wRqSiz/a4p9U2UrOKyfZXhbPHIHyQj8K+uLjsYS+WPuH287J4A5Q57A6uarTrj5RjHmVeZVLaHmg==", + "@aws-sdk/middleware-sdk-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", "requires": { - "@aws-sdk/client-sso": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/token-providers": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/credential-provider-web-identity": { + "@aws-sdk/middleware-serde": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz", - "integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz", + "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==", "requires": { - "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/eventstream-codec": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.310.0.tgz", - "integrity": "sha512-clIeSgWbZbxwtsxZ/yoedNM0/kJFSIjjHPikuDGhxhqc+vP6TN3oYyVMFrYwFaTFhk2+S5wZcWYMw8Op1pWo+A==", + "@aws-sdk/middleware-signing": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", "requires": { - "@aws-crypto/crc32": "3.0.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/eventstream-serde-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.310.0.tgz", - "integrity": "sha512-3S6ziuQVALgEyz0TANGtYDVeG8ArK4Y05mcgrs8qUTmsvlDIXX37cR/DvmVbNB76M4IrsZeSAIajL9644CywkA==", + "@aws-sdk/middleware-ssec": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", "requires": { - "@aws-sdk/eventstream-serde-universal": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/eventstream-serde-config-resolver": { + "@aws-sdk/middleware-stack": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.310.0.tgz", - "integrity": "sha512-8s1Qdn9STj+sV75nUp9yt0W6fHS4BZ2jTm4Z/1Pcbvh2Gqs0WjH5n2StS+pDW5Y9J/HSGBl0ogmUr5lC5bXFHg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz", + "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==", "requires": { - "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/eventstream-serde-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.310.0.tgz", - "integrity": "sha512-kSnRomCgW43K9TmQYuwN9+AoYPnhyOKroanUMyZEzJk7rpCPMj4OzaUpXfDYOvznFNYn7NLaH6nHLJAr0VPlJA==", + "@aws-sdk/middleware-user-agent": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", "requires": { - "@aws-sdk/eventstream-serde-universal": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/eventstream-serde-universal": { + "@aws-sdk/querystring-parser": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.310.0.tgz", - "integrity": "sha512-Qyjt5k/waV5cDukpgT824ISZAz5U0pwzLz5ztR409u85AGNkF/9n7MS+LSyBUBSb0WJ5pUeSD47WBk+nLq9Nhw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz", + "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==", "requires": { - "@aws-sdk/eventstream-codec": "3.310.0", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/fetch-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz", - "integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==", + "@aws-sdk/signature-v4-multi-region": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/hash-blob-browser": { + "@aws-sdk/smithy-client": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.310.0.tgz", - "integrity": "sha512-OoR8p0cbypToysLT0v3o2oyjy6+DKrY7GNCAzHOHJK9xmqXCt+DsjKoPeiY7o1sWX2aN6Plmvubj/zWxMKEn/A==", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.310.0.tgz", + "integrity": "sha512-UHMFvhoB2RLzsTb0mQe1ofvBUg/+/JEu1uptavxf/hEpEKZnRAaHH5FNkTG+mbFd/olay/QFjqNcMD6t8LcsNQ==", "requires": { - "@aws-sdk/chunked-blob-reader": "3.310.0", + "@aws-sdk/middleware-stack": "3.310.0", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/hash-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz", - "integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==", + "@aws-sdk/token-providers": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.405.0.tgz", + "integrity": "sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==", "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/hash-stream-node": { + "@aws-sdk/types": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.310.0.tgz", - "integrity": "sha512-ZoXdybNgvMz1Hl6k/e32xVL3jmG5p2IEk5mTtLfFEuskTJ74Z+VMYKkkF1whyy7KQfH83H+TQGnsGtlRCchQKw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz", + "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==", "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/invalid-dependency": { + "@aws-sdk/url-parser": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz", - "integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz", + "integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==", "requires": { + "@aws-sdk/querystring-parser": "3.310.0", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/is-array-buffer": { + "@aws-sdk/util-arn-parser": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", "requires": { "tslib": "^2.5.0" } }, - "@aws-sdk/lib-storage": { - "version": "3.312.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.312.0.tgz", - "integrity": "sha512-LwpZsNrKi0CR8hM9bOphMAgw3CYfqkNUnxyPA8PKSffuEwQtpdNuvJCY3q7tOBWnuz+BbzkevqUXO6HsTp3RLw==", + "@aws-sdk/util-endpoints": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", "requires": { - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/smithy-client": "3.310.0", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", + "@aws-sdk/types": "3.398.0", "tslib": "^2.5.0" }, "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" } - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" } } }, - "@aws-sdk/md5-js": { + "@aws-sdk/util-locate-window": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.310.0.tgz", - "integrity": "sha512-x5sRBUrEfLWAS1EhwbbDQ7cXq6uvBxh3qR2XAsnGvFFceTeAadk7cVogWxlk3PC+OCeeym7c3/6Bv2HQ2f1YyQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-bucket-endpoint": { + "@aws-sdk/util-middleware": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.310.0.tgz", - "integrity": "sha512-uJJfHI7v4AgbJZRLtyI8ap2QRWkBokGc3iyUoQ+dVNT3/CE2ZCu694A6W+H0dRqg79dIE+f9CRNdtLGa/Ehhvg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz", + "integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-arn-parser": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-content-length": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz", - "integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==", + "@aws-sdk/util-user-agent-browser": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/middleware-endpoint": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz", - "integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==", + "@aws-sdk/util-user-agent-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.405.0.tgz", + "integrity": "sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==", "requires": { - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", + "@aws-sdk/types": "3.398.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "requires": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + } + } } }, - "@aws-sdk/middleware-expect-continue": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.310.0.tgz", - "integrity": "sha512-l3d1z2gt+gINJDnPSyu84IxfzjzPfCQrqC1sunw2cZGo/sXtEiq698Q3SiTcO2PGP4LBQAy2RHb5wVBJP708CQ==", + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" + "tslib": "^2.3.1" } }, - "@aws-sdk/middleware-flexible-checksums": { + "@aws-sdk/xml-builder": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.310.0.tgz", - "integrity": "sha512-5ndnLgzgGVpWkmHBAiYkagHqiSuow8q62J4J6E2PzaQ77+fm8W3nfdy7hK5trHokEyouCZdxT/XK/IRhgj/4PA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", "requires": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-host-header": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz", - "integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==", + "@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" + "sparse-bitfield": "^3.0.3" } }, - "@aws-sdk/middleware-location-constraint": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.310.0.tgz", - "integrity": "sha512-LFm0JTQWwTPWL/tZU2wsQTl8J5PpDEkXjEhaXVKamtyH0xhysRqd+0n92n65dc8oztAuQkb9xUbErGn5b6gsew==", + "@redis/bloom": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", + "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", + "requires": {} + }, + "@redis/client": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.6.tgz", + "integrity": "sha512-dFD1S6je+A47Lj22jN/upVU2fj4huR7S9APd7/ziUXsIXDL+11GPYti4Suv5y8FuXaN+0ZG4JF+y1houEJ7ToA==", "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" + "cluster-key-slot": "1.1.2", + "generic-pool": "3.9.0", + "yallist": "4.0.0" } }, - "@aws-sdk/middleware-logger": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz", - "integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==", + "@redis/graph": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", + "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==", + "requires": {} + }, + "@redis/json": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", + "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", + "requires": {} + }, + "@redis/search": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.2.tgz", + "integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==", + "requires": {} + }, + "@redis/time-series": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", + "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", + "requires": {} + }, + "@smithy/abort-controller": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.5.tgz", + "integrity": "sha512-byVZ2KWLMPYAZGKjRpniAzLcygJO4ruClZKdJTuB0eCB76ONFTdptBHlviHpAZXknRz7skYWPfcgO9v30A1SyA==", "requires": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz", - "integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==", + "@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz", - "integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==", + "@smithy/chunked-blob-reader-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", + "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/service-error-classification": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-sdk-s3": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.310.0.tgz", - "integrity": "sha512-QK9x9g2ksg0hOjjYgqddeFcn5ctUEGdxJVu4OumPXceulefMcSO2jyH2qTybYSA93nqNQFdFmg5wQfvIRUWFCQ==", + "@smithy/config-resolver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.5.tgz", + "integrity": "sha512-n0c2AXz+kjALY2FQr7Zy9zhYigXzboIh1AuUUVCqFBKFtdEvTwnwPXrTDoEehLiRTUHNL+4yzZ3s+D0kKYSLSg==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz", - "integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==", + "@smithy/credential-provider-imds": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.7.tgz", + "integrity": "sha512-XivkZj/pipzpQPxgleE1odwJQ6oDsVViB4VUO/HRDI4EdEfZjud44USupOUOa/xOjS39/75DYB4zgTbyV+totw==", "requires": { - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/node-config-provider": "^2.0.7", + "@smithy/property-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-serde": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz", - "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==", + "@smithy/eventstream-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.5.tgz", + "integrity": "sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==", "requires": { - "@aws-sdk/types": "3.310.0", + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-signing": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz", - "integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==", + "@smithy/eventstream-serde-browser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.5.tgz", + "integrity": "sha512-8NU51y94qFJbxL6SmvgWDfITHO/svvbAigkLYk2pckX17TGCSf4EXuGpGLliJp5Ljh5+vASC7mUH2jYX7MWBxA==", "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", + "@smithy/eventstream-serde-universal": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-ssec": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.310.0.tgz", - "integrity": "sha512-CnEwNKVpd5bXnrCKPaePF8mWTA9ET21OMBb54y9b0fd8K02zoOcdBz4DWfh1SjFD4HkgCdja4egd8l2ivyvqmw==", + "@smithy/eventstream-serde-config-resolver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.5.tgz", + "integrity": "sha512-u3gvukRaTH4X6tsryuZ4T1WGIEP34fPaTTzphFDJe8GJz/k11oBW1MPnkcaucBMxLnObK9swCF85j5cp1Kj1oA==", "requires": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-stack": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz", - "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==", + "@smithy/eventstream-serde-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.5.tgz", + "integrity": "sha512-/C8jb+k/vKUBIe80D30vzjvRXlJf76kG2AJY7/NwiqWuD2usRuuDFCDaswXdVsSh9P1+FeaxZ48chsK10yDryQ==", "requires": { + "@smithy/eventstream-serde-universal": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/middleware-user-agent": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.310.0.tgz", - "integrity": "sha512-x3IOwSwSbwKidlxRk3CNVHVUb06SRuaELxggCaR++QVI8NU6qD/l4VHXKVRvbTHiC/cYxXE/GaBDgQVpDR7V/g==", + "@smithy/eventstream-serde-universal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.5.tgz", + "integrity": "sha512-+vHvbQtlSVYTQ/20tNpVaKi0EpTR7E8GoEUHJypRZIRgiT03b3h2MAWk+SNaqMrCJrYG9vKLkJFzDylRlUvDWg==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/node-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz", - "integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==", + "@smithy/fetch-http-handler": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.5.tgz", + "integrity": "sha512-EzFoMowdBNy1VqtvkiXgPFEdosIAt4/4bgZ8uiDiUyfhmNXq/3bV+CagPFFBsgFOR/X2XK4zFZHRsoa7PNHVVg==", "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/querystring-builder": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/node-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.310.0.tgz", - "integrity": "sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg==", + "@smithy/hash-blob-browser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.5.tgz", + "integrity": "sha512-ZVAUBtJXGf9bEko4/RwWcTK6d3b/ZmQMxJMrxOOcQhVDiqny9zI0mzgstO4Oxz3135R7S3V/bbGw3w3woCYpQg==", "requires": { - "@aws-sdk/abort-controller": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/property-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz", - "integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==", + "@smithy/hash-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.5.tgz", + "integrity": "sha512-mk551hIywBITT+kXruRNXk7f8Fy7DTzBjZJSr/V6nolYKmUHIG3w5QU6nO9qPYEQGKc/yEPtkpdS28ndeG93lA==", "requires": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/protocol-http": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz", - "integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==", + "@smithy/hash-stream-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.5.tgz", + "integrity": "sha512-XiR4Aoux5kXy8OWPLQisKy3GPmm0l6deHepvPvr4MUzIwa5XWazG3JdbZXy+mk93CvEZrOwKPHU5Kul6QybJiQ==", "requires": { - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/querystring-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz", - "integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==", + "@smithy/invalid-dependency": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.5.tgz", + "integrity": "sha512-0wEi+JT0hM+UUwrJVYbqjuGFhy5agY/zXyiN7BNAJ1XoCDjU5uaNSj8ekPWsXd/d4yM6NSe8UbPd8cOc1+3oBQ==", "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/querystring-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz", - "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==", + "@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "requires": { - "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/service-error-classification": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz", - "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==" + "@smithy/md5-js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.5.tgz", + "integrity": "sha512-k5EOte/Ye2r7XBVaXv2rhiehk6l3T4uRiPF+pnxKEc+G9Fwd1xAXBDZrtOq1syFPBKBmVfNszG4nevngST7NKg==", + "requires": { + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } }, - "@aws-sdk/shared-ini-file-loader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz", - "integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==", + "@smithy/middleware-content-length": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.5.tgz", + "integrity": "sha512-E7VwV5H02fgZIUGRli4GevBCAPvkyEI/fgl9SU47nPPi3DAAX3nEtUb8xfGbXjOcJ5BdSUoWWZn42tEd/blOqA==", "requires": { - "@aws-sdk/types": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/signature-v4": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz", - "integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==", + "@smithy/middleware-endpoint": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.5.tgz", + "integrity": "sha512-tyzDuoNTbsMQCq5Xkc4QOt6e2GACUllQIV8SQ5fc59FtOIV9/vbf58/GxVjZm2o8+MMbdDBANjTDZe/ijZKfyA==", "requires": { - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/signature-v4-multi-region": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.310.0.tgz", - "integrity": "sha512-q8W+RIomTS/q85Ntgks/CoDElwqkC9+4OCicee5YznNHjQ4gtNWhUkYIyIRWRmXa/qx/AUreW9DM8FAecCOdng==", + "@smithy/middleware-retry": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.5.tgz", + "integrity": "sha512-ulIfbFyzQTVnJbLjUl1CTSi0etg6tej/ekwaLp0Gn8ybUkDkKYa+uB6CF/m2J5B6meRwyJlsryR+DjaOVyiicg==", + "requires": { + "@smithy/protocol-http": "^2.0.5", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + } + }, + "@smithy/middleware-serde": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.5.tgz", + "integrity": "sha512-in0AA5sous74dOfTGU9rMJBXJ0bDVNxwdXtEt5lh3FVd2sEyjhI+rqpLLRF1E4ixbw3RSEf80hfRpcPdjg4vvQ==", "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/smithy-client": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.310.0.tgz", - "integrity": "sha512-UHMFvhoB2RLzsTb0mQe1ofvBUg/+/JEu1uptavxf/hEpEKZnRAaHH5FNkTG+mbFd/olay/QFjqNcMD6t8LcsNQ==", + "@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", "requires": { - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/token-providers": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.310.0.tgz", - "integrity": "sha512-G1JvB+2v8k900VJFkKVQXgLGF50ShOEIPxfK1gSQLkSU85vPwGIAANs1KvnlW08FsNbWp3+sKca4kfYKsooXMw==", + "@smithy/node-config-provider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.7.tgz", + "integrity": "sha512-GuLxhnf0aVQsfQp4ZWaM1TRCIndpQjAswyFcmDFRNf4yFqpxpLPDeV540+O0Z21Hmu3deoQm/dCPXbVn90PYzg==", "requires": { - "@aws-sdk/client-sso-oidc": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/property-provider": "^2.0.6", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/types": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz", - "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==", + "@smithy/node-http-handler": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.5.tgz", + "integrity": "sha512-lZm5DZf4b3V0saUw9WTC4/du887P6cy2fUyQgQQKRRV6OseButyD5yTzeMmXE53CaXJBMBsUvvIQ0hRVxIq56w==", "requires": { + "@smithy/abort-controller": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/querystring-builder": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/url-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz", - "integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==", + "@smithy/property-provider": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.6.tgz", + "integrity": "sha512-CVem6ZkkWxbTnhjDLyLESY0oLA6IUZYtdqrCpGQKUXaFBOuc/izjm7fIFGBxEbjZ1EGcH9hHxrjqX36RWULNRg==", "requires": { - "@aws-sdk/querystring-parser": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", "requires": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", + "@smithy/querystring-builder": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.5.tgz", + "integrity": "sha512-4DCX9krxLzATj+HdFPC3i8pb7XTAWzzKqSw8aTZMjXjtQY+vhe4azMAqIvbb6g7JKwIkmkRAjK6EXO3YWSnJVQ==", "requires": { - "@aws-sdk/util-buffer-from": "3.310.0", + "@smithy/types": "^2.2.2", + "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", + "@smithy/querystring-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.5.tgz", + "integrity": "sha512-C2stCULH0r54KBksv3AWcN8CLS3u9+WsEW8nBrvctrJ5rQTNa1waHkffpVaiKvcW2nP0aIMBPCobD/kYf/q9mA==", "requires": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", + "@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==" + }, + "@smithy/shared-ini-file-loader": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.6.tgz", + "integrity": "sha512-NO6dHqho6APbVR0DxPtYoL4KXBqUeSM3Slsd103MOgL50YbzzsQmMLtDMZ87W8MlvvCN0tuiq+OrAO/rM7hTQg==", "requires": { + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "@smithy/signature-v4": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.5.tgz", + "integrity": "sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==", "requires": { - "@aws-sdk/is-array-buffer": "3.310.0", + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", + "@smithy/smithy-client": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.5.tgz", + "integrity": "sha512-kCTFr8wfOAWKDzGvfBElc6shHigWtHNhMQ1IbosjC4jOlayFyZMSs2PysKB+Ox/dhQ41KqOzgVjgiQ+PyWqHMQ==", "requires": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-stream": "^2.0.5", "tslib": "^2.5.0" } }, - "@aws-sdk/util-defaults-mode-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.310.0.tgz", - "integrity": "sha512-Mr2AoQsjAYNM5oAS2YJlYJqhiCvkFV/hu48slOZgbY4G7ueW4cM0DPkR16wqjcRCGqZ4JmAZB8Q5R0DMrLjhOQ==", + "@smithy/types": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.2.tgz", + "integrity": "sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==", "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-defaults-mode-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.310.0.tgz", - "integrity": "sha512-JyBlvhQGR8w8NpFRZZXRVTDesafFKTu/gTWjcoxP7twa+fYHSIgPPFGnlcJ/iHaucjamSaWi5EQ+YQmnSZ8yHA==", + "@smithy/url-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.5.tgz", + "integrity": "sha512-OdMBvZhpckQSkugCXNJQCvqJ71wE7Ftxce92UOQLQ9pwF6hoS5PLL7wEfpnuEXtStzBqJYkzu1C1ZfjuFGOXAA==", "requires": { - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/querystring-parser": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/util-endpoints": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.310.0.tgz", - "integrity": "sha512-zG+/d/O5KPmAaeOMPd6bW1abifdT0H03f42keLjYEoRZzYtHPC5DuPE0UayiWGckI6BCDgy0sRKXCYS49UNFaQ==", + "@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", "requires": { - "@aws-sdk/types": "3.310.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", + "@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", "requires": { "tslib": "^2.5.0" } }, - "@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", "requires": { "tslib": "^2.5.0" } }, - "@aws-sdk/util-middleware": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz", - "integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==", + "@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", "requires": { + "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz", - "integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==", + "@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", "requires": { - "@aws-sdk/service-error-classification": "3.310.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-stream-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.310.0.tgz", - "integrity": "sha512-bysXZHwFwvbqOTCScCdCnoLk1K3GCo0HRIYEZuL7O7MHrQmfaYRXcaft/p22+GUv9VeFXS/eJJZ5r4u32az94w==", + "@smithy/util-defaults-mode-browser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.6.tgz", + "integrity": "sha512-h8xyKTZIIom62DN4xbPUmL+RL1deZcK1qJGmCr4c2yXjOrs5/iZ1VtQQcl+xP78620ga/565AikZE1sktdg2yA==", "requires": { - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@smithy/property-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-stream-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.310.0.tgz", - "integrity": "sha512-hueAXFK0GVvnfYFgqbF7587xZfMZff5jlIFZOHqx7XVU7bl7qrRUCnphHk8H6yZ7RoQbDPcfmHJgtEoAJg1T1Q==", + "@smithy/util-defaults-mode-node": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.7.tgz", + "integrity": "sha512-2C1YfmYJj9bpM/cRAgQppYNzPd8gDEXZ5XIVDuEQg3TmmIiinZaFf/HsHYo9NK/PMy5oawJVdIuR7SVriIo1AQ==", "requires": { - "@aws-sdk/node-http-handler": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/credential-provider-imds": "^2.0.7", + "@smithy/node-config-provider": "^2.0.7", + "@smithy/property-provider": "^2.0.6", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", + "@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", "requires": { "tslib": "^2.5.0" } }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz", - "integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==", + "@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", "requires": { - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-user-agent-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz", - "integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==", + "@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", "requires": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/service-error-classification": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", + "@smithy/util-stream": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.5.tgz", + "integrity": "sha512-ylx27GwI05xLpYQ4hDIfS15vm+wYjNN0Sc2P0FxuzgRe8v0BOLHppGIQ+Bezcynk8C9nUzsUue3TmtRhjut43g==", "requires": { - "@aws-sdk/util-buffer-from": "3.310.0", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/types": "^2.2.2", + "@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.5.0" } }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "requires": { - "tslib": "^2.3.1" + "tslib": "^2.5.0" } }, - "@aws-sdk/util-waiter": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.310.0.tgz", - "integrity": "sha512-AV5j3guH/Y4REu+Qh3eXQU9igljHuU4XjX2sADAgf54C0kkhcCCkkiuzk3IsX089nyJCqIcj5idbjdvpnH88Vw==", + "@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", "requires": { - "@aws-sdk/abort-controller": "3.310.0", - "@aws-sdk/types": "3.310.0", + "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" } }, - "@aws-sdk/xml-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", - "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "@smithy/util-waiter": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.5.tgz", + "integrity": "sha512-1lkkUmI/bhaDX+LIT3RiUNAn+NzPmsWjE7beMq0oQ3H1/CffaILIN67riDA0aE1YBj6xll7uWMIy4tJqc+peXw==", "requires": { + "@smithy/abort-controller": "^2.0.5", + "@smithy/types": "^2.2.2", "tslib": "^2.5.0" } }, - "@redis/bloom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", - "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", - "requires": {} + "@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, - "@redis/client": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.6.tgz", - "integrity": "sha512-dFD1S6je+A47Lj22jN/upVU2fj4huR7S9APd7/ziUXsIXDL+11GPYti4Suv5y8FuXaN+0ZG4JF+y1houEJ7ToA==", + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", "requires": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" + "@types/node": "*" } }, - "@redis/graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", - "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==", - "requires": {} - }, - "@redis/json": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", - "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", - "requires": {} + "@types/node": { + "version": "20.5.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.8.tgz", + "integrity": "sha512-eajsR9aeljqNhK028VG0Wuw+OaY5LLxYmxeoXynIoE6jannr9/Ucd1LL0hSSoafk5LTYG+FfqsyGt81Q6Zkybw==" }, - "@redis/search": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.2.tgz", - "integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==", - "requires": {} + "@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" }, - "@redis/time-series": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", - "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", - "requires": {} + "@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } }, "abbrev": { "version": "1.1.1", @@ -4593,6 +5878,11 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -4677,6 +5967,11 @@ "fill-range": "^7.0.1" } }, + "bson": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", + "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -4932,6 +6227,43 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4992,9 +6324,9 @@ } }, "fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "requires": { "strnum": "^1.0.5" } @@ -5137,6 +6469,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -5225,6 +6562,11 @@ "safe-buffer": "^5.0.1" } }, + "kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -5245,6 +6587,12 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -5309,6 +6657,47 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, + "mongodb": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz", + "integrity": "sha512-wKyh4kZvm6NrCPH8AxyzXm3JBoEf4Xulo0aUWh3hCgwgYJxyQ1KLST86ZZaSWdj6/kxYUA3+YZuyADCE61CMSg==", + "requires": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^5.4.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + } + }, + "mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "mongoose": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.5.0.tgz", + "integrity": "sha512-FpOWOb0AJuaVcplmEyIJ2eCbVGe4gOoniPD+pmft5BrGrNrsFcnYXlERdXtBApGHMHPwD7WbxTyhCbUNr72F3Q==", + "requires": { + "bson": "^5.4.0", + "kareem": "2.5.1", + "mongodb": "5.8.1", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -5321,6 +6710,34 @@ "on-headers": "~1.0.1" } }, + "mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" + }, + "mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "requires": { + "debug": "4.x" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -5429,9 +6846,9 @@ "integrity": "sha512-jFaCEGTeT3E/m/5R2MHWiyQH3pSARECRUDM+1hokOYc3lQAAG7ASuy+2jIsYVf+RVa9zePopSQwKNVFH8DKUpA==" }, "nodemon": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.21.tgz", - "integrity": "sha512-djN/n2549DUtY33S7o1djRCd7dEm0kBnj9c7S9XVXqRUbuggN1MZH/Nqa+5RFQr63Fbefq37nFXAE9VU86yL1A==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -5459,9 +6876,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -5576,6 +6993,11 @@ "once": "^1.3.1" } }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -5667,9 +7089,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" }, @@ -5753,6 +7175,11 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -5791,6 +7218,90 @@ } } }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "requires": { + "ws": "~8.11.0" + } + }, + "socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", @@ -5909,6 +7420,14 @@ "nopt": "~1.0.10" } }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -5956,11 +7475,30 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5974,6 +7512,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 75a4e57..7ad1b6a 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "express": "~4.16.1", "jsonwebtoken": "^9.0.0", "moment": "^2.29.4", + "mongoose": "^7.5.0", "morgan": "~1.9.1", "multer": "^1.4.5-lts.1", "multer-s3": "^3.0.1", @@ -30,6 +31,7 @@ "nodemailer": "^6.9.0", "nodemon": "^2.0.20", "redis": "^4.6.5", - "sharp": "^0.31.3" + "sharp": "^0.31.3", + "socket.io": "^4.7.2" } } From 60954c88bb2878479ec3ae1cf372a0cba3d3abed Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sat, 23 Sep 2023 20:44:22 +0900 Subject: [PATCH 48/52] Add insert_farmDate API --- components/farm/farmController.js | 46 ++++++++++++++++++++++++++++++- components/farm/farmDao.js | 25 +++++++++++++++++ components/farm/farmProvider.js | 7 +++++ components/farm/farmRoute.js | 10 +++++++ components/farm/farmService.js | 23 +++++++++++++++- config/resStatus_5000.js | 4 +++ 6 files changed, 113 insertions(+), 2 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 310979d..7bfca56 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -264,4 +264,48 @@ exports.getMyFarm = async(req,res)=>{ console.log(e); return res.send(errResponse(resStatus.SERVER_ERROR)); } -} \ No newline at end of file +} + +/* farmDate */ +exports.addFarmDate = async(req, res) => { + try { + const { farmID, unavailableStartDate, unavailableEndDate } = req.body; + + if (!farmID) return res.send(errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST)); + + // Date Availability 유효성 검사 + if (dateAvailability.isValidDatetype(unavailableStartDate) == false || dateAvailability.isValidDatetype(unavailableEndDate) == false) + return res.send(errResponse(resStatus_5000.DATE_TYPE_WEIRD)); + + const farmDateResponse = await farmService.addFarmDate(farmID, unavailableStartDate, unavailableEndDate); + + return res.send(farmDateResponse) + + } + catch (e) { + // console.log(e); + return res.send(errResponse(resStatus.SERVER_ERROR)); + } +} + +/* farmDate */ +exports.deleteFarmDate = async(req, res) => { + try { + + } + catch (e) { + // console.log(e); + return res.send(errResponse(resStatus.SERVER_ERROR)); + } +} + +/* farmDate */ +exports.getFarmDate = async(req, res) => { + try { + + } + catch (e) { + // console.log(e); + return res.send(errResponse(resStatus.SERVER_ERROR)); + } +} diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index 1a759a1..ed71cb3 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -284,4 +284,29 @@ exports.getFarmsbyOwner = async(connection, owner) =>{ const [farms] = await connection.query(getFarmsbyOwnerQuery, owner) return farms; +} + +/* farmDate */ +exports.insertFarmDate = async(connection, FarmDateInfo) => { + //FarmDateInfo [farmID, unavailableStartDate, unavailableEndDate] + const insertFarmDateQuery =` + INSERT INTO FarmDate(FarmID, UnavailableStartDate, UnavailableEndDate) + VALUES (?, ?, ?); + `; + const insertFarmDateResult = await connection.query(insertFarmDateQuery, FarmDateInfo); + + return insertFarmDateResult[0].insertId; +} + +/* farmDate */ +exports.selectFarmbyFarmDate = async(connection, FarmDateInfo) => { + //FarmDateInfo [farmID, unavailableStartDate, unavailableEndDate] + const selectFarmDateQuery =` + SELECT * + FROM FarmDate + WHERE FarmID = ? AND UnavailableStartDate = ? AND UnavailableEndDate = ?; + `; + const selectFarmDateResult = await connection.query(selectFarmDateQuery, FarmDateInfo); + + return selectFarmDateResult; } \ No newline at end of file diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index aa8e8b3..02e818b 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -98,3 +98,10 @@ exports.getOwnerFarms = withConnection(async (connection, email) => { const farms = await farmDao.getFarmsbyOwner(connection, email); return farms; }); + +/* farmDate */ +exports.isSameFarmDate = withConnection(async (connection, farmDateInfo) => { + const [sameFarmDate] = await farmDao.selectFarmbyFarmDate(connection, farmDateInfo); + if (sameFarmDate.length > 0) return true; + else return false; +}); \ No newline at end of file diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index 17ed78b..8fdca9b 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -36,4 +36,14 @@ module.exports = function (app) { //보유 농장 조회 app.get('/farm/myfarm', farm.getMyFarm); + + //(farmDate) 농장 예약 불가 기간 등록 + app.post('/farm/unavailableDate', farm.addFarmDate); + + //(farmDate) 농장 예약 불가 기간 삭제 + app.put('/farm/unavailableDate/delete/:farmDateid', farm.deleteFarmDate); + + //(farmDate) 농장 예약 불가 기간 목록 + app.get('/farm/unavailableDate/:farmid', farm.getFarmDate); + }; \ No newline at end of file diff --git a/components/farm/farmService.js b/components/farm/farmService.js index 3d7e245..f86a420 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -156,4 +156,25 @@ exports.deleteLike = withConnection(async (connection, likeFarms, farmID) => { exports.deletePhoto = withConnection(async (connection, key) => { const deleteFarmPicture = await farmDao.deletePhoto(connection, key); return deleteFarmPicture; -}); \ No newline at end of file +}); + +/* farmDate */ +exports.addFarmDate = withConnection(async (connection, farmID, unavailableStartDate, unavailableEndDate) => { + + let FarmDateInfo = [farmID, unavailableStartDate, unavailableEndDate]; + + const isSameFarmDate = await FarmProvider.isSameFarmDate(FarmDateInfo); //중복체크 + if (isSameFarmDate) return errResponse(resStatus_5000.FARM_DATE_DUPLICATED_EXISTS); + + const newFarmDate = await farmDao.insertFarmDate(connection, FarmDateInfo); + + // console.log(newFarmDate, "newFarmDate"); + + return response(resStatus_5000.FARM_UNAVAILABLE_DATE_SUCCESS, { "farmDateID": newFarmDate }); +}); + +//farmDate - delete +/* farmDate */ + +//farmDate - list +/* farmDate */ \ No newline at end of file diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index c9fe8e6..594a983 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -39,6 +39,10 @@ module.exports = { FARM_NEW_SAVE_SUCCESS : {"isSuccess" : true, "code" : 5250, "message" : "농장이 등록되었습니다."}, FARM_LIST_AVAILABLE_FOR_RESERVATION : {"isSuccess" : true, "code" : 5251, "message" : "예약 가능한 농장 목록을 불러왔어요."}, FARM_DETAIL_GET_SUCCESS : {"isSuccess" : true, "code" : 5252, "message" : "농장 상세 정보를 불러왔어요."}, + + //farmDate + FARM_UNAVAILABLE_DATE_SUCCESS : {"isSuccess" : true, "code" : 5253, "message" : "농장 이용 불가능한 기간을 등록하였습니다."}, + FARM_DATE_DUPLICATED_EXISTS : {"isSuccess" : true, "code" : 5254, "message" : "해당 기간은 이미 등록된 기간입니다."}, //reserve RESERVE_REQUEST_DATA_SHORTAGE : { "isSuccess": false, "code": 5300, "message": "농장을 예약하는 데 필요한 정보가 부족합니다." }, From c9f0f9a7c8118b29eac46919348c9aa05f0ae0d8 Mon Sep 17 00:00:00 2001 From: "user,name" Date: Sat, 23 Sep 2023 22:04:15 +0900 Subject: [PATCH 49/52] Add delete_farmDate & get_farmDate API --- components/farm/farmController.js | 16 +++++++++++++++ components/farm/farmDao.js | 34 ++++++++++++++++++++++++++++++- components/farm/farmProvider.js | 14 ++++++++++++- components/farm/farmRoute.js | 2 +- components/farm/farmService.js | 29 ++++++++++++++++++++++---- config/resStatus_5000.js | 21 +++++++++++-------- 6 files changed, 100 insertions(+), 16 deletions(-) diff --git a/components/farm/farmController.js b/components/farm/farmController.js index 7bfca56..4ed9d6e 100644 --- a/components/farm/farmController.js +++ b/components/farm/farmController.js @@ -291,6 +291,14 @@ exports.addFarmDate = async(req, res) => { /* farmDate */ exports.deleteFarmDate = async(req, res) => { try { + const farmDateId = req.params.farmDateID; + + const invalidation = await validator.oneParams(farmDateId); + if (invalidation) return(res.send(response(invalidation))); + + const deleteFarmDateResponse = await farmService.deleteFarmDate(farmDateId); + + return(res.send(deleteFarmDateResponse)); } catch (e) { @@ -302,6 +310,14 @@ exports.deleteFarmDate = async(req, res) => { /* farmDate */ exports.getFarmDate = async(req, res) => { try { + const farmId = req.params.farmid; + + const invalidation = await validator.oneParams(farmId); + if (invalidation) return(res.send(response(invalidation))); + + const getFarmDateResponse = await farmService.getFarmDate(farmId); + + return(res.send(getFarmDateResponse)); } catch (e) { diff --git a/components/farm/farmDao.js b/components/farm/farmDao.js index ed71cb3..b7e3209 100644 --- a/components/farm/farmDao.js +++ b/components/farm/farmDao.js @@ -299,7 +299,7 @@ exports.insertFarmDate = async(connection, FarmDateInfo) => { } /* farmDate */ -exports.selectFarmbyFarmDate = async(connection, FarmDateInfo) => { +exports.selectFarmDatebyDate = async(connection, FarmDateInfo) => { //FarmDateInfo [farmID, unavailableStartDate, unavailableEndDate] const selectFarmDateQuery =` SELECT * @@ -309,4 +309,36 @@ exports.selectFarmbyFarmDate = async(connection, FarmDateInfo) => { const selectFarmDateResult = await connection.query(selectFarmDateQuery, FarmDateInfo); return selectFarmDateResult; +} + +/* farmDate */ +exports.selectFarmDatebyFarmDateId = async(connection, farmDateId) => { + const selectFarmDateQuery =` + SELECT * + FROM FarmDate + WHERE FarmDateID = ?; + `; + const selectFarmDateResult = await connection.query(selectFarmDateQuery, farmDateId); + + return selectFarmDateResult; +} + +exports.selectFarmDatebyFarmId = async(connection, farmId) => { + const selectFarmDateQuery =` + SELECT FarmDateID, UnavailableStartDate, UnavailableEndDate + FROM FarmDate + WHERE FarmID = ?; + `; + const selectFarmDateResult = await connection.query(selectFarmDateQuery, farmId); + + return selectFarmDateResult; +} + +exports.deleteFarmDate = async(connection, farmDateId) => { + const deleteFarmDateQuery = ` + DELETE FROM FarmDate + WHERE FarmDateID = ?; + ` + const deleteFarmDateResult = await connection.query(deleteFarmDateQuery, farmDateId); + return deleteFarmDateResult; } \ No newline at end of file diff --git a/components/farm/farmProvider.js b/components/farm/farmProvider.js index 02e818b..2a05752 100644 --- a/components/farm/farmProvider.js +++ b/components/farm/farmProvider.js @@ -101,7 +101,19 @@ exports.getOwnerFarms = withConnection(async (connection, email) => { /* farmDate */ exports.isSameFarmDate = withConnection(async (connection, farmDateInfo) => { - const [sameFarmDate] = await farmDao.selectFarmbyFarmDate(connection, farmDateInfo); + const [sameFarmDate] = await farmDao.selectFarmDatebyDate(connection, farmDateInfo); if (sameFarmDate.length > 0) return true; else return false; +}); + +/* farmDate */ +exports.farmDateByFarmDateId = withConnection(async (connection, farmDateId) => { + const [farmDate] = await farmDao.selectFarmDatebyFarmDateId(connection, farmDateId); + return farmDate[0]; +}); + +/* farmDate */ +exports.getFarmDateByFarmId = withConnection(async (connection, farmId) => { + const farmDates= await farmDao.selectFarmDatebyFarmId(connection, farmId); + return farmDates[0]; }); \ No newline at end of file diff --git a/components/farm/farmRoute.js b/components/farm/farmRoute.js index 8fdca9b..84b8a63 100644 --- a/components/farm/farmRoute.js +++ b/components/farm/farmRoute.js @@ -41,7 +41,7 @@ module.exports = function (app) { app.post('/farm/unavailableDate', farm.addFarmDate); //(farmDate) 농장 예약 불가 기간 삭제 - app.put('/farm/unavailableDate/delete/:farmDateid', farm.deleteFarmDate); + app.put('/farm/unavailableDate/delete/:farmDateID', farm.deleteFarmDate); //(farmDate) 농장 예약 불가 기간 목록 app.get('/farm/unavailableDate/:farmid', farm.getFarmDate); diff --git a/components/farm/farmService.js b/components/farm/farmService.js index f86a420..12dbf07 100644 --- a/components/farm/farmService.js +++ b/components/farm/farmService.js @@ -160,7 +160,10 @@ exports.deletePhoto = withConnection(async (connection, key) => { /* farmDate */ exports.addFarmDate = withConnection(async (connection, farmID, unavailableStartDate, unavailableEndDate) => { - + + const farmInfo = await FarmProvider.retrieveFarmInfo(farmID); //존재여부확인 + if (farmInfo.length <= 0) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); + let FarmDateInfo = [farmID, unavailableStartDate, unavailableEndDate]; const isSameFarmDate = await FarmProvider.isSameFarmDate(FarmDateInfo); //중복체크 @@ -173,8 +176,26 @@ exports.addFarmDate = withConnection(async (connection, farmID, unavailableStart return response(resStatus_5000.FARM_UNAVAILABLE_DATE_SUCCESS, { "farmDateID": newFarmDate }); }); -//farmDate - delete /* farmDate */ +exports.deleteFarmDate = withConnection(async (connection, farmDateId) => { + + const farmDate = await FarmProvider.farmDateByFarmDateId(farmDateId); //존재여부확인 + if (!farmDate) return errResponse(resStatus_5000.FARM_DATE_NOT_EXIST); + + // console.log(farmDate, "farmDate"); + + const deletedFarmDate = await farmDao.deleteFarmDate(connection, farmDateId); + + return response(resStatus_5000.FARM_UNAVAILABLE_DATE_DELETE, { "farmDateID": farmDateId }); +}); + +/* farmDate */ +exports.getFarmDate = async (farmId) => { + + const farmInfo = await FarmProvider.retrieveFarmInfo(farmId); //존재여부확인 + if (farmInfo.length <= 0) return errResponse(resStatus_5000.FARM_FARMID_NOT_EXIST); + + const farmDate = await FarmProvider.getFarmDateByFarmId(farmId); -//farmDate - list -/* farmDate */ \ No newline at end of file + return response(resStatus_5000.FARM_UNAVAILABLE_DATE, farmDate); +}; \ No newline at end of file diff --git a/config/resStatus_5000.js b/config/resStatus_5000.js index 594a983..f4f65d6 100644 --- a/config/resStatus_5000.js +++ b/config/resStatus_5000.js @@ -2,13 +2,13 @@ module.exports = { /** * [CODE RULE IN 5000] - * common | 5000 ~ 5099 - * user | 5100 ~ 5199 - * farm | 5200 ~ 5299 - * reserve | 5300 ~ 5399 - * district| 5400 ~ 5499 - * fail | ##00 ~ ##49 - * success | ##50 ~ ##99 + * common | 5000 ~ 5099 + * user | 5100 ~ 5199 + * farm(Date)| 5200 ~ 5299 + * reserve | 5300 ~ 5399 + * district | 5400 ~ 5499 + * fail | ##00 ~ ##49 + * success | ##50 ~ ##99 */ //common @@ -35,14 +35,17 @@ module.exports = { FARM_FARMID_NOT_EXIST : { "isSuccess" : false, "code" : 5200, "message" : "해당 아이디를 가진 농장이 존재하지 않습니다."}, FARM_NEW_DATA_SHORTAGE : {"isSuccess" : false, "code" : 5201, "message" : "농장을 등록하는 데 필요한 정보가 부족합니다."}, FARM_UPDATE_STAR_ERROR : {"isSuccess" : false, "code" : 5202, "message" : "농장의 찜 개수를 업데이트 하는 데 실패했습니다."}, - FARM_DUPLICATED_EXISTS : {"isSuccess" : false, "code" : 5202, "message" : "이미 동일한 정보를 가진 농장이 존재합니다."}, + FARM_DUPLICATED_EXISTS : {"isSuccess" : false, "code" : 5203, "message" : "이미 동일한 정보를 가진 농장이 존재합니다."}, FARM_NEW_SAVE_SUCCESS : {"isSuccess" : true, "code" : 5250, "message" : "농장이 등록되었습니다."}, FARM_LIST_AVAILABLE_FOR_RESERVATION : {"isSuccess" : true, "code" : 5251, "message" : "예약 가능한 농장 목록을 불러왔어요."}, FARM_DETAIL_GET_SUCCESS : {"isSuccess" : true, "code" : 5252, "message" : "농장 상세 정보를 불러왔어요."}, //farmDate + FARM_DATE_DUPLICATED_EXISTS : {"isSuccess" : false, "code" : 5204, "message" : "해당 기간은 이미 등록된 기간입니다."}, + FARM_DATE_NOT_EXIST : {"isSuccess" : false, "code" : 5205, "message" : "해당 기간은 등록되지 않은 기간입니다."}, FARM_UNAVAILABLE_DATE_SUCCESS : {"isSuccess" : true, "code" : 5253, "message" : "농장 이용 불가능한 기간을 등록하였습니다."}, - FARM_DATE_DUPLICATED_EXISTS : {"isSuccess" : true, "code" : 5254, "message" : "해당 기간은 이미 등록된 기간입니다."}, + FARM_UNAVAILABLE_DATE_DELETE : {"isSuccess" : true, "code" : 5254, "message" : "해당 이용 불가 기간을 삭제하였습니다."}, + FARM_UNAVAILABLE_DATE : {"isSuccess" : true, "code" : 5255, "message" : "등록된 이용 불가 기간을 모두 불러왔어요."}, //reserve RESERVE_REQUEST_DATA_SHORTAGE : { "isSuccess": false, "code": 5300, "message": "농장을 예약하는 데 필요한 정보가 부족합니다." }, From 00ea08963032bbdbd3cd607ea94b130d7918687e Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Tue, 26 Sep 2023 21:54:27 +0900 Subject: [PATCH 50/52] =?UTF-8?q?=EC=B1=84=ED=8C=85=20=EB=82=B4=EC=97=AD?= =?UTF-8?q?=20=EB=B6=88=EB=9F=AC=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 13 - bin/www | 19 +- components/chat/chatController.js | 0 components/chat/chatModel.js | 8 +- components/chat/chatRoute.js | 108 +- components/user/userController.js | 23 - config/dynamo.js | 12 + config/s3.js | 1 - config/secret.js | 7 +- package-lock.json | 1654 ++++++++++++++++++++++++----- package.json | 2 + 11 files changed, 1477 insertions(+), 370 deletions(-) delete mode 100644 components/chat/chatController.js create mode 100644 config/dynamo.js diff --git a/app.js b/app.js index 6f8790e..5bcb82c 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,6 @@ const cookieParser = require('cookie-parser'); const logger = require('morgan'); const cors = require("cors"); const { corsOptions } = require('./config/cors'); -const fs = require('fs'); const app = express(); app.use(cors(corsOptions)) @@ -18,19 +17,7 @@ app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static('src')); -/* -app.get('/chat', function(req, res){ - fs.readFile('./src/index.html', (err, data) => { - if(err) throw err; - res.writeHead(200, { - 'Content-Type' : 'text/html' - }) - res.write(data) - res.end(); - }); -}); -*/ require('./components/user/userRoute')(app); require('./components/farm/farmRoute')(app); require('./components/reserve/reserveRoute')(app); diff --git a/bin/www b/bin/www index cc4626c..931d5e4 100644 --- a/bin/www +++ b/bin/www @@ -21,21 +21,28 @@ app.set('port', port); const server = http.createServer(app); const io = require('socket.io')(server); -io.on('connection', (socket)=>{ - require('../components/chat/chatRoute')(io,socket); - console.log('user connected'); -}) - /** * Listen on provided port, on all network interfaces. */ //httpsServer.listen(httpsPort) server.listen(port); + +io.on('connection', (socket)=>{ + require('../components/chat/chatRoute')(io,socket); + console.log('user connected'); + socket.on('error', (err)=>{ + console.log("Socket error: ", err); + }) +}) +io.on('error', (err) => { + console.log("testtest"); + console.error("Socket.IO 서버 오류:", err); +}); + server.on('error', onError); server.on('listening', onListening); - /** * Normalize a port into a number, string, or false. */ diff --git a/components/chat/chatController.js b/components/chat/chatController.js deleted file mode 100644 index e69de29..0000000 diff --git a/components/chat/chatModel.js b/components/chat/chatModel.js index aeafcf7..33c736e 100644 --- a/components/chat/chatModel.js +++ b/components/chat/chatModel.js @@ -1,11 +1,8 @@ const mongoose = require('mongoose'); const chatSchema = new mongoose.Schema({ -/* - chatRoomID:{ - type: String - }*/ - name: { + + UserEmail:{ type: String, required: true, }, @@ -17,6 +14,7 @@ const chatSchema = new mongoose.Schema({ type: Date, default: Date.now, }, + }); module.exports = mongoose.model('Chat', chatSchema); diff --git a/components/chat/chatRoute.js b/components/chat/chatRoute.js index 51d63a8..e7954ec 100644 --- a/components/chat/chatRoute.js +++ b/components/chat/chatRoute.js @@ -1,54 +1,72 @@ -const mongoose = require('mongoose'); - const Chat = require('./chatModel'); -//const mongoURI = 'mongodb://localhost:27017'; // MongoDB URI (로컬로 설정됨) - -module.exports = function (io, socket) { - - /* mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true }) - .then(()=>{*/ - socket.on('send', async(data)=>{ - data.name = socket.name - /* - const chatMessage = new Chat({ - name: data.name, - message: data.message, - }) - */ - try{ - //await chatMessage.save(); - io.sockets.emit('update', data) - }catch(err){ - console.error("채팅 메시지 저장 오류", err); - } - - }) - - socket.on('newUser', function(name){ - - socket.name = name; - const message = name + '님이 접속했습니다'; +const docClient = require('../../config/dynamo') +const {PutItemCommand, QueryCommand } = require("@aws-sdk/client-dynamodb"); +const moment = require('moment-timezone'); + +module.exports = function (io,socket) { + socket.on('send', async(data)=>{ + data.name = socket.sender + + const koreanTime = moment().tz('Asia/Seoul'); + const currentDate = koreanTime.toISOString(); + + const params = { + TableName: 'Chats', + Item: { + ChatId: {S: socket.id}, + sendDate : {S: currentDate}, + Sender: {S: socket.sender}, + Receiver: {S: socket.receiver}, + Message: {S: data.message}, + }, + }; + try{ + const command = new PutItemCommand(params); + await docClient.send(command); + console.log("저장완료!!!"); + io.sockets.emit('update', data) + }catch(err){ + console.error("채팅 메시지 저장 오류", err); + } + }) + socket.on('newUser', async(chatInfo)=>{ + socket.id = chatInfo.farmer + '_' + chatInfo.user; + if (chatInfo.farmer == chatInfo.email){ + socket.sender = chatInfo.farmer + socket.receiver = chatInfo.user + } + else{ + socket.sender = chatInfo.user + socket.receiver = chatInfo.farmer + } + try{ + const params = { + TableName: 'Chats', + KeyConditionExpression: "ChatId = :ChatId", + ExpressionAttributeValues: { + ":ChatId": {S : socket.id} + } + }; + const command = new QueryCommand(params) + const result = await docClient.send(command) + + const chatLog = result.Items io.sockets.emit('update', { name : 'SERVER', - message : message + chatLog : chatLog }); - console.log(message); - }); + console.log(chatLog); - socket.on('disconnect', ()=>{ - const message = socket.name + '님이 퇴장했습니다.'; + }catch (err) { + console.error(err); + } - socket.broadcast.emit('update', { - name : 'SERVER', - message : message - }); - console.log(message); - }) - /*}) - .catch((err)=>{ - console.error('MongoDB 연결 오류 : ', err); - })*/ + }); + socket.on('disconnect', ()=>{ + console.log("채팅종료"); + }) + +} -}; \ No newline at end of file diff --git a/components/user/userController.js b/components/user/userController.js index 6dcbe22..4d9ed46 100644 --- a/components/user/userController.js +++ b/components/user/userController.js @@ -392,29 +392,6 @@ exports.editUserProfileImg = async(req,res)=> { const decoded = jwt.verify(req.headers.token, secretKey); try{ - //sharp(req.file.path) - //.resize({width:80}) - //.withMetadata() //이미지 크기 변경 시 손실되는 exif 데이터 유지 (이미지 방향 정보) - ///* - //.toBuffer((err,buff)=>{ - // console.log(req.file.path); - // console.log(req) - // fs.writeFile("config/images/", buff, (err)=>{ - // if (err) throw err - // }) - //}) - //*/ - //.toFile(`${req.file.path}/resize.png`, (err, info) => { - // if (err) throw err; - // console.log(`info : ${info}`); - // fs.unlink(`${req.file.path}/resize.png`, (err) => { - // if (err) throw err; - // }); - //}); - - //const {id} = req.decoded - //console.log(id); - const eidtImage = await userService.eidtProfileImg(decoded.email, req.file.location, req.file.key) if (!eidtImage) return res.send(errResponse2(baseResponse.USER_USEREMAIL_NOT_EXIST)) diff --git a/config/dynamo.js b/config/dynamo.js new file mode 100644 index 0000000..30aa9e0 --- /dev/null +++ b/config/dynamo.js @@ -0,0 +1,12 @@ +const {DYNAMO_ACCESS} = require('../config/secret') +const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); + +const docClient = new DynamoDBClient({ + region: 'ap-northeast-2', + credentials:{ + accessKeyId: DYNAMO_ACCESS.KEY, + secretAccessKey: DYNAMO_ACCESS.SECRET_KEY, + } +}); + +module.exports = docClient; \ No newline at end of file diff --git a/config/s3.js b/config/s3.js index 4550301..b853acf 100644 --- a/config/s3.js +++ b/config/s3.js @@ -7,7 +7,6 @@ const s3 = new S3Client({ accessKeyId: S3_ACCESS.KEY, secretAccessKey: S3_ACCESS.SECRET_KEY , } - }) module.exports = s3; \ No newline at end of file diff --git a/config/secret.js b/config/secret.js index ba5f8ab..9b8d2c1 100644 --- a/config/secret.js +++ b/config/secret.js @@ -37,6 +37,10 @@ const KOR_DIST = { SERVICEID : process.env.KOR_DIST_SERVICEID, SECRET_KEY : process.env.KOR_DIST_SECRET_KEY } +const DYNAMO_ACCESS = { + KEY: process.env.DYNAMO_ACCESS_KEY, + SECRET_KEY: process.env.DYNAMO_SECRET_KEY +} module.exports = { googleSecret, @@ -46,5 +50,6 @@ module.exports = { S3_ACCESS, secretKey, options, - KOR_DIST + KOR_DIST, + DYNAMO_ACCESS } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index db47b84..fe4c196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "@aws-sdk/abort-controller": "^3.310.0", + "@aws-sdk/client-dynamodb": "^3.418.0", "@aws-sdk/client-s3": "^3.312.0", "axios": "^1.3.4", "cookie-parser": "~1.4.4", @@ -20,6 +21,7 @@ "express": "~4.16.1", "jsonwebtoken": "^9.0.0", "moment": "^2.29.4", + "moment-timezone": "^0.5.43", "mongoose": "^7.5.0", "morgan": "~1.9.1", "multer": "^1.4.5-lts.1", @@ -170,6 +172,450 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-dynamodb": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.418.0.tgz", + "integrity": "sha512-xoxWNsUO2NfUrf4qKeoJY2wEQr50E8hQcEElIuDsX5h7EzXBdORABri+BAQC8pEBqrMg6NUW1kdXrgaAM9Algg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.418.0", + "@aws-sdk/credential-provider-node": "3.418.0", + "@aws-sdk/middleware-endpoint-discovery": "3.418.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-signing": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/region-config-resolver": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/protocol-http": "^3.0.5", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.9", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sso": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.418.0.tgz", + "integrity": "sha512-fakz3YeSW/kCAOJ5w4ObrrQBxsYO8sU8i6WHLv6iWAsYZKAws2Mqa8g89P61+GitSH4z9waksdLouS6ep78/5A==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/region-config-resolver": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/protocol-http": "^3.0.5", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sts": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.418.0.tgz", + "integrity": "sha512-L0n0Hw+Pm+BhXTN1bYZ0y4JAMArYgazdHf1nUSlEHndgZicCCuQtlMLxfo3i/IbtWi0dzfZcZ9d/MdAM8p4Jyw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.418.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-sdk-sts": "3.418.0", + "@aws-sdk/middleware-signing": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/region-config-resolver": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/protocol-http": "^3.0.5", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.418.0.tgz", + "integrity": "sha512-e74sS+x63EZUBO+HaI8zor886YdtmULzwKdctsZp5/37Xho1CVUNtEC+fYa69nigBD9afoiH33I4JggaHgrekQ==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.418.0.tgz", + "integrity": "sha512-LTAeKKV85unlSqGNIeqEZ4N9gufaSoH+670n5YTUEk564zHCkUQW0PJomzLF5jKBco6Yfzv6rPBTukd+x9XWqw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.418.0", + "@aws-sdk/credential-provider-process": "3.418.0", + "@aws-sdk/credential-provider-sso": "3.418.0", + "@aws-sdk/credential-provider-web-identity": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.418.0.tgz", + "integrity": "sha512-VveTjtSC6m8YXj3fQDkMKEZuHv+CR2Z4u/NAN51Fi4xOtIWUtOBj5rfZ8HmBYoBjRF0DtRlPXuMiNnXAzTctfQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.418.0", + "@aws-sdk/credential-provider-ini": "3.418.0", + "@aws-sdk/credential-provider-process": "3.418.0", + "@aws-sdk/credential-provider-sso": "3.418.0", + "@aws-sdk/credential-provider-web-identity": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.418.0.tgz", + "integrity": "sha512-xPbdm2WKz1oH6pTkrJoUmr3OLuqvvcPYTQX0IIlc31tmDwDWPQjXGGFD/vwZGIZIkKaFpFxVMgAzfFScxox7dw==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.418.0.tgz", + "integrity": "sha512-tUF5Hg/HfaU5t+E7IuvohYlodSIlBXa28xAJPPFxhKrUnvP6AIoW6JLazOtCIQjQgJYEUILV29XX+ojUuITcaw==", + "dependencies": { + "@aws-sdk/client-sso": "3.418.0", + "@aws-sdk/token-providers": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.418.0.tgz", + "integrity": "sha512-do7ang565n9p3dS1JdsQY01rUfRx8vkxQqz5M8OlcEHBNiCdi2PvSjNwcBdrv/FKkyIxZb0TImOfBSt40hVdxQ==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.418.0.tgz", + "integrity": "sha512-LrMTdzalkPw/1ujLCKPLwCGvPMCmT4P+vOZQRbSEVZPnlZk+Aj++aL/RaHou0jL4kJH3zl8iQepriBt4a7UvXQ==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/middleware-logger": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.418.0.tgz", + "integrity": "sha512-StKGmyPVfoO/wdNTtKemYwoJsqIl4l7oqarQY7VSf2Mp3mqaa+njLViHsQbirYpyqpgUEusOnuTlH5utxJ1NsQ==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.418.0.tgz", + "integrity": "sha512-kKFrIQglBLUFPbHSDy1+bbe3Na2Kd70JSUC3QLMbUHmqipXN8KeXRfAj7vTv97zXl0WzG0buV++WcNwOm1rFjg==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.418.0.tgz", + "integrity": "sha512-cW8ijrCTP+mgihvcq4+TbhAcE/we5lFl4ydRqvTdtcSnYQAVQADg47rnTScQiFsPFEB3NKq7BGeyTJF9MKolPA==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/middleware-signing": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.418.0.tgz", + "integrity": "sha512-onvs5KoYQE8OlOE740RxWBGtsUyVIgAo0CzRKOQO63ZEYqpL1Os+MS1CGzdNhvQnJgJruE1WW+Ix8fjN30zKPA==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.3", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.418.0.tgz", + "integrity": "sha512-Jdcztg9Tal9SEAL0dKRrnpKrm6LFlWmAhvuwv0dQ7bNTJxIxyEFbpqdgy7mpQHsLVZgq1Aad/7gT/72c9igyZw==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/token-providers": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.418.0.tgz", + "integrity": "sha512-9P7Q0VN0hEzTngy3Sz5eya2qEOEf0Q8qf1vB3um0gE6ID6EVAdz/nc/DztfN32MFxk8FeVBrCP5vWdoOzmd72g==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/types": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz", + "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/util-endpoints": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.418.0.tgz", + "integrity": "sha512-sYSDwRTl7yE7LhHkPzemGzmIXFVHSsi3AQ1KeNEk84eBqxMHHcCc2kqklaBk2roXWe50QDgRMy1ikZUxvtzNHQ==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.418.0.tgz", + "integrity": "sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/types": "^2.3.3", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.418.0.tgz", + "integrity": "sha512-BXMskXFtg+dmzSCgmnWOffokxIbPr1lFqa1D9kvM3l3IFRiFGx2IyDg+8MAhq11aPDLvoa/BDuQ0Yqma5izOhg==", + "dependencies": { + "@aws-sdk/types": "3.418.0", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-dynamodb/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/client-s3": { "version": "3.405.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", @@ -533,6 +979,18 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/endpoint-cache": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.310.0.tgz", + "integrity": "sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ==", + "dependencies": { + "mnemonist": "0.38.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/lib-storage": { "version": "3.312.0", "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.312.0.tgz", @@ -613,6 +1071,46 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.418.0.tgz", + "integrity": "sha512-KRhvFQDzTrayXzswx6KhS+oBDH0NoDT+vERCqvFsGvus+/HhVGACVxINuOJ+b6mqdUPfipSD4Bje3XYunqxbSw==", + "dependencies": { + "@aws-sdk/endpoint-cache": "3.310.0", + "@aws-sdk/types": "3.418.0", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-endpoint-discovery/node_modules/@aws-sdk/types": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz", + "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-endpoint-discovery/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.398.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", @@ -940,6 +1438,21 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.418.0.tgz", + "integrity": "sha512-lJRZ/9TjZU6yLz+mAwxJkcJZ6BmyYoIJVo1p5+BN//EFdEmC8/c0c9gXMRzfISV/mqWSttdtccpAyN4/goHTYA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.398.0", "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", @@ -1262,11 +1775,11 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.5.tgz", - "integrity": "sha512-byVZ2KWLMPYAZGKjRpniAzLcygJO4ruClZKdJTuB0eCB76ONFTdptBHlviHpAZXknRz7skYWPfcgO9v30A1SyA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.9.tgz", + "integrity": "sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1291,13 +1804,14 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.5.tgz", - "integrity": "sha512-n0c2AXz+kjALY2FQr7Zy9zhYigXzboIh1AuUUVCqFBKFtdEvTwnwPXrTDoEehLiRTUHNL+4yzZ3s+D0kKYSLSg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.10.tgz", + "integrity": "sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1305,14 +1819,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.7.tgz", - "integrity": "sha512-XivkZj/pipzpQPxgleE1odwJQ6oDsVViB4VUO/HRDI4EdEfZjud44USupOUOa/xOjS39/75DYB4zgTbyV+totw==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.12.tgz", + "integrity": "sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==", "dependencies": { - "@smithy/node-config-provider": "^2.0.7", - "@smithy/property-provider": "^2.0.6", - "@smithy/types": "^2.2.2", - "@smithy/url-parser": "^2.0.5", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", "tslib": "^2.5.0" }, "engines": { @@ -1382,17 +1896,29 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.5.tgz", - "integrity": "sha512-EzFoMowdBNy1VqtvkiXgPFEdosIAt4/4bgZ8uiDiUyfhmNXq/3bV+CagPFFBsgFOR/X2XK4zFZHRsoa7PNHVVg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz", + "integrity": "sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==", "dependencies": { - "@smithy/protocol-http": "^2.0.5", - "@smithy/querystring-builder": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" } }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@smithy/hash-blob-browser": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.5.tgz", @@ -1405,11 +1931,11 @@ } }, "node_modules/@smithy/hash-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.5.tgz", - "integrity": "sha512-mk551hIywBITT+kXruRNXk7f8Fy7DTzBjZJSr/V6nolYKmUHIG3w5QU6nO9qPYEQGKc/yEPtkpdS28ndeG93lA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.9.tgz", + "integrity": "sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -1432,11 +1958,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.5.tgz", - "integrity": "sha512-0wEi+JT0hM+UUwrJVYbqjuGFhy5agY/zXyiN7BNAJ1XoCDjU5uaNSj8ekPWsXd/d4yM6NSe8UbPd8cOc1+3oBQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz", + "integrity": "sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -1462,12 +1988,24 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.5.tgz", - "integrity": "sha512-E7VwV5H02fgZIUGRli4GevBCAPvkyEI/fgl9SU47nPPi3DAAX3nEtUb8xfGbXjOcJ5BdSUoWWZn42tEd/blOqA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.11.tgz", + "integrity": "sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==", "dependencies": { - "@smithy/protocol-http": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1475,14 +2013,14 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.5.tgz", - "integrity": "sha512-tyzDuoNTbsMQCq5Xkc4QOt6e2GACUllQIV8SQ5fc59FtOIV9/vbf58/GxVjZm2o8+MMbdDBANjTDZe/ijZKfyA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.9.tgz", + "integrity": "sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==", "dependencies": { - "@smithy/middleware-serde": "^2.0.5", - "@smithy/types": "^2.2.2", - "@smithy/url-parser": "^2.0.5", - "@smithy/util-middleware": "^2.0.0", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-middleware": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1490,15 +2028,16 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.5.tgz", - "integrity": "sha512-ulIfbFyzQTVnJbLjUl1CTSi0etg6tej/ekwaLp0Gn8ybUkDkKYa+uB6CF/m2J5B6meRwyJlsryR+DjaOVyiicg==", - "dependencies": { - "@smithy/protocol-http": "^2.0.5", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.2.2", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.12.tgz", + "integrity": "sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/protocol-http": "^3.0.5", + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", + "@smithy/util-middleware": "^2.0.2", + "@smithy/util-retry": "^2.0.2", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1506,12 +2045,24 @@ "node": ">=14.0.0" } }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.5.tgz", - "integrity": "sha512-in0AA5sous74dOfTGU9rMJBXJ0bDVNxwdXtEt5lh3FVd2sEyjhI+rqpLLRF1E4ixbw3RSEf80hfRpcPdjg4vvQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.9.tgz", + "integrity": "sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1519,10 +2070,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.3.tgz", + "integrity": "sha512-AlhPmbwpkC4lQBVaVHXczmjFvsAhDHhrakqLt038qFLotnJcvDLhmMzAtu23alBeOSkKxkTQq0LsAt2N0WpAbw==", "dependencies": { + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1530,13 +2082,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.7.tgz", - "integrity": "sha512-GuLxhnf0aVQsfQp4ZWaM1TRCIndpQjAswyFcmDFRNf4yFqpxpLPDeV540+O0Z21Hmu3deoQm/dCPXbVn90PYzg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.12.tgz", + "integrity": "sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==", "dependencies": { - "@smithy/property-provider": "^2.0.6", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.2.2", + "@smithy/property-provider": "^2.0.10", + "@smithy/shared-ini-file-loader": "^2.0.11", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1544,14 +2096,26 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.5.tgz", - "integrity": "sha512-lZm5DZf4b3V0saUw9WTC4/du887P6cy2fUyQgQQKRRV6OseButyD5yTzeMmXE53CaXJBMBsUvvIQ0hRVxIq56w==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.5.tgz", + "integrity": "sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==", "dependencies": { - "@smithy/abort-controller": "^2.0.5", - "@smithy/protocol-http": "^2.0.5", - "@smithy/querystring-builder": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/abort-controller": "^2.0.9", + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dependencies": { + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1559,11 +2123,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.6.tgz", - "integrity": "sha512-CVem6ZkkWxbTnhjDLyLESY0oLA6IUZYtdqrCpGQKUXaFBOuc/izjm7fIFGBxEbjZ1EGcH9hHxrjqX36RWULNRg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.10.tgz", + "integrity": "sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1583,11 +2147,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.5.tgz", - "integrity": "sha512-4DCX9krxLzATj+HdFPC3i8pb7XTAWzzKqSw8aTZMjXjtQY+vhe4azMAqIvbb6g7JKwIkmkRAjK6EXO3YWSnJVQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.9.tgz", + "integrity": "sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -1596,11 +2160,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.5.tgz", - "integrity": "sha512-C2stCULH0r54KBksv3AWcN8CLS3u9+WsEW8nBrvctrJ5rQTNa1waHkffpVaiKvcW2nP0aIMBPCobD/kYf/q9mA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.9.tgz", + "integrity": "sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1608,19 +2172,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.2.tgz", + "integrity": "sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==", + "dependencies": { + "@smithy/types": "^2.3.3" + }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.6.tgz", - "integrity": "sha512-NO6dHqho6APbVR0DxPtYoL4KXBqUeSM3Slsd103MOgL50YbzzsQmMLtDMZ87W8MlvvCN0tuiq+OrAO/rM7hTQg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.11.tgz", + "integrity": "sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==", "dependencies": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1646,13 +2213,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.5.tgz", - "integrity": "sha512-kCTFr8wfOAWKDzGvfBElc6shHigWtHNhMQ1IbosjC4jOlayFyZMSs2PysKB+Ox/dhQ41KqOzgVjgiQ+PyWqHMQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.7.tgz", + "integrity": "sha512-r6T/oiBQ8vCbGqObH4/h0YqD0jFB1hAS9KFRmuTfaNJueu/L2hjmjqFjv3PV5lkbNHTgUYraSv4cFQ1naxiELQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.2.2", - "@smithy/util-stream": "^2.0.5", + "@smithy/middleware-stack": "^2.0.3", + "@smithy/types": "^2.3.3", + "@smithy/util-stream": "^2.0.12", "tslib": "^2.5.0" }, "engines": { @@ -1660,9 +2227,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.2.tgz", - "integrity": "sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.3.tgz", + "integrity": "sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==", "dependencies": { "tslib": "^2.5.0" }, @@ -1671,12 +2238,12 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.5.tgz", - "integrity": "sha512-OdMBvZhpckQSkugCXNJQCvqJ71wE7Ftxce92UOQLQ9pwF6hoS5PLL7wEfpnuEXtStzBqJYkzu1C1ZfjuFGOXAA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.9.tgz", + "integrity": "sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==", "dependencies": { - "@smithy/querystring-parser": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/querystring-parser": "^2.0.9", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -1735,12 +2302,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.6.tgz", - "integrity": "sha512-h8xyKTZIIom62DN4xbPUmL+RL1deZcK1qJGmCr4c2yXjOrs5/iZ1VtQQcl+xP78620ga/565AikZE1sktdg2yA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.11.tgz", + "integrity": "sha512-0syV1Mz/mCQ7CG/MHKQfH+w86xq59jpD0EOXv5oe0WBXLmq2lWPpVHl2Y6+jQ+/9fYzyZ5NF+NC/WEIuiv690A==", "dependencies": { - "@smithy/property-provider": "^2.0.6", - "@smithy/types": "^2.2.2", + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -1749,15 +2317,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.7.tgz", - "integrity": "sha512-2C1YfmYJj9bpM/cRAgQppYNzPd8gDEXZ5XIVDuEQg3TmmIiinZaFf/HsHYo9NK/PMy5oawJVdIuR7SVriIo1AQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.13.tgz", + "integrity": "sha512-6BtCHYdw5Z8r6KpW8tRCc3yURgvcQwfIEeHhR70BeSOfx8T/TXPPjb8A+K45+KASspa3fzrsSxeIwB0sAeMoHA==", "dependencies": { - "@smithy/config-resolver": "^2.0.5", - "@smithy/credential-provider-imds": "^2.0.7", - "@smithy/node-config-provider": "^2.0.7", - "@smithy/property-provider": "^2.0.6", - "@smithy/types": "^2.2.2", + "@smithy/config-resolver": "^2.0.10", + "@smithy/credential-provider-imds": "^2.0.12", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1776,10 +2345,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.2.tgz", + "integrity": "sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==", "dependencies": { + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1787,11 +2357,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.2.tgz", + "integrity": "sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==", "dependencies": { - "@smithy/service-error-classification": "^2.0.0", + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1799,13 +2370,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.5.tgz", - "integrity": "sha512-ylx27GwI05xLpYQ4hDIfS15vm+wYjNN0Sc2P0FxuzgRe8v0BOLHppGIQ+Bezcynk8C9nUzsUue3TmtRhjut43g==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.12.tgz", + "integrity": "sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==", "dependencies": { - "@smithy/fetch-http-handler": "^2.0.5", - "@smithy/node-http-handler": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/types": "^2.3.3", "@smithy/util-base64": "^2.0.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", @@ -1840,12 +2411,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.5.tgz", - "integrity": "sha512-1lkkUmI/bhaDX+LIT3RiUNAn+NzPmsWjE7beMq0oQ3H1/CffaILIN67riDA0aE1YBj6xll7uWMIy4tJqc+peXw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.9.tgz", + "integrity": "sha512-Hy9Cs0FtIacC1aVFk98bm/7CYqim9fnHAPRnV/SB2mj02ExYs/9Dn5SrNQmtTBTLCn65KqYnNVBNS8GuGpZOOw==", "dependencies": { - "@smithy/abort-controller": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/abort-controller": "^2.0.9", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" }, "engines": { @@ -1863,9 +2434,9 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", "dependencies": { "@types/node": "*" } @@ -3019,6 +3590,14 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, + "node_modules/mnemonist": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", + "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", + "dependencies": { + "obliterator": "^1.6.1" + } + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -3027,6 +3606,17 @@ "node": "*" } }, + "node_modules/moment-timezone": { + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/mongodb": { "version": "5.8.1", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz", @@ -3373,6 +3963,11 @@ "node": ">=0.10.0" } }, + "node_modules/obliterator": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", + "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -4386,6 +4981,384 @@ "tslib": "^2.5.0" } }, + "@aws-sdk/client-dynamodb": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.418.0.tgz", + "integrity": "sha512-xoxWNsUO2NfUrf4qKeoJY2wEQr50E8hQcEElIuDsX5h7EzXBdORABri+BAQC8pEBqrMg6NUW1kdXrgaAM9Algg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.418.0", + "@aws-sdk/credential-provider-node": "3.418.0", + "@aws-sdk/middleware-endpoint-discovery": "3.418.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-signing": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/region-config-resolver": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/protocol-http": "^3.0.5", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.9", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "@aws-sdk/client-sso": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.418.0.tgz", + "integrity": "sha512-fakz3YeSW/kCAOJ5w4ObrrQBxsYO8sU8i6WHLv6iWAsYZKAws2Mqa8g89P61+GitSH4z9waksdLouS6ep78/5A==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/region-config-resolver": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/protocol-http": "^3.0.5", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sts": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.418.0.tgz", + "integrity": "sha512-L0n0Hw+Pm+BhXTN1bYZ0y4JAMArYgazdHf1nUSlEHndgZicCCuQtlMLxfo3i/IbtWi0dzfZcZ9d/MdAM8p4Jyw==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.418.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-sdk-sts": "3.418.0", + "@aws-sdk/middleware-signing": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/region-config-resolver": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/protocol-http": "^3.0.5", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.418.0.tgz", + "integrity": "sha512-e74sS+x63EZUBO+HaI8zor886YdtmULzwKdctsZp5/37Xho1CVUNtEC+fYa69nigBD9afoiH33I4JggaHgrekQ==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.418.0.tgz", + "integrity": "sha512-LTAeKKV85unlSqGNIeqEZ4N9gufaSoH+670n5YTUEk564zHCkUQW0PJomzLF5jKBco6Yfzv6rPBTukd+x9XWqw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.418.0", + "@aws-sdk/credential-provider-process": "3.418.0", + "@aws-sdk/credential-provider-sso": "3.418.0", + "@aws-sdk/credential-provider-web-identity": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.418.0.tgz", + "integrity": "sha512-VveTjtSC6m8YXj3fQDkMKEZuHv+CR2Z4u/NAN51Fi4xOtIWUtOBj5rfZ8HmBYoBjRF0DtRlPXuMiNnXAzTctfQ==", + "requires": { + "@aws-sdk/credential-provider-env": "3.418.0", + "@aws-sdk/credential-provider-ini": "3.418.0", + "@aws-sdk/credential-provider-process": "3.418.0", + "@aws-sdk/credential-provider-sso": "3.418.0", + "@aws-sdk/credential-provider-web-identity": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.418.0.tgz", + "integrity": "sha512-xPbdm2WKz1oH6pTkrJoUmr3OLuqvvcPYTQX0IIlc31tmDwDWPQjXGGFD/vwZGIZIkKaFpFxVMgAzfFScxox7dw==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.418.0.tgz", + "integrity": "sha512-tUF5Hg/HfaU5t+E7IuvohYlodSIlBXa28xAJPPFxhKrUnvP6AIoW6JLazOtCIQjQgJYEUILV29XX+ojUuITcaw==", + "requires": { + "@aws-sdk/client-sso": "3.418.0", + "@aws-sdk/token-providers": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.418.0.tgz", + "integrity": "sha512-do7ang565n9p3dS1JdsQY01rUfRx8vkxQqz5M8OlcEHBNiCdi2PvSjNwcBdrv/FKkyIxZb0TImOfBSt40hVdxQ==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.418.0.tgz", + "integrity": "sha512-LrMTdzalkPw/1ujLCKPLwCGvPMCmT4P+vOZQRbSEVZPnlZk+Aj++aL/RaHou0jL4kJH3zl8iQepriBt4a7UvXQ==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.418.0.tgz", + "integrity": "sha512-StKGmyPVfoO/wdNTtKemYwoJsqIl4l7oqarQY7VSf2Mp3mqaa+njLViHsQbirYpyqpgUEusOnuTlH5utxJ1NsQ==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.418.0.tgz", + "integrity": "sha512-kKFrIQglBLUFPbHSDy1+bbe3Na2Kd70JSUC3QLMbUHmqipXN8KeXRfAj7vTv97zXl0WzG0buV++WcNwOm1rFjg==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.418.0.tgz", + "integrity": "sha512-cW8ijrCTP+mgihvcq4+TbhAcE/we5lFl4ydRqvTdtcSnYQAVQADg47rnTScQiFsPFEB3NKq7BGeyTJF9MKolPA==", + "requires": { + "@aws-sdk/middleware-signing": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.418.0.tgz", + "integrity": "sha512-onvs5KoYQE8OlOE740RxWBGtsUyVIgAo0CzRKOQO63ZEYqpL1Os+MS1CGzdNhvQnJgJruE1WW+Ix8fjN30zKPA==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.3", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.418.0.tgz", + "integrity": "sha512-Jdcztg9Tal9SEAL0dKRrnpKrm6LFlWmAhvuwv0dQ7bNTJxIxyEFbpqdgy7mpQHsLVZgq1Aad/7gT/72c9igyZw==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/token-providers": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.418.0.tgz", + "integrity": "sha512-9P7Q0VN0hEzTngy3Sz5eya2qEOEf0Q8qf1vB3um0gE6ID6EVAdz/nc/DztfN32MFxk8FeVBrCP5vWdoOzmd72g==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.418.0", + "@aws-sdk/middleware-logger": "3.418.0", + "@aws-sdk/middleware-recursion-detection": "3.418.0", + "@aws-sdk/middleware-user-agent": "3.418.0", + "@aws-sdk/types": "3.418.0", + "@aws-sdk/util-endpoints": "3.418.0", + "@aws-sdk/util-user-agent-browser": "3.418.0", + "@aws-sdk/util-user-agent-node": "3.418.0", + "@smithy/config-resolver": "^2.0.10", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/hash-node": "^2.0.9", + "@smithy/invalid-dependency": "^2.0.9", + "@smithy/middleware-content-length": "^2.0.11", + "@smithy/middleware-endpoint": "^2.0.9", + "@smithy/middleware-retry": "^2.0.12", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/middleware-stack": "^2.0.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.6", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.10", + "@smithy/util-defaults-mode-node": "^2.0.12", + "@smithy/util-retry": "^2.0.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/types": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz", + "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.418.0.tgz", + "integrity": "sha512-sYSDwRTl7yE7LhHkPzemGzmIXFVHSsi3AQ1KeNEk84eBqxMHHcCc2kqklaBk2roXWe50QDgRMy1ikZUxvtzNHQ==", + "requires": { + "@aws-sdk/types": "3.418.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.418.0.tgz", + "integrity": "sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/types": "^2.3.3", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.418.0.tgz", + "integrity": "sha512-BXMskXFtg+dmzSCgmnWOffokxIbPr1lFqa1D9kvM3l3IFRiFGx2IyDg+8MAhq11aPDLvoa/BDuQ0Yqma5izOhg==", + "requires": { + "@aws-sdk/types": "3.418.0", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + } + } + }, "@aws-sdk/client-s3": { "version": "3.405.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", @@ -4713,6 +5686,15 @@ } } }, + "@aws-sdk/endpoint-cache": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.310.0.tgz", + "integrity": "sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ==", + "requires": { + "mnemonist": "0.38.3", + "tslib": "^2.5.0" + } + }, "@aws-sdk/lib-storage": { "version": "3.312.0", "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.312.0.tgz", @@ -4778,6 +5760,39 @@ "tslib": "^2.5.0" } }, + "@aws-sdk/middleware-endpoint-discovery": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.418.0.tgz", + "integrity": "sha512-KRhvFQDzTrayXzswx6KhS+oBDH0NoDT+vERCqvFsGvus+/HhVGACVxINuOJ+b6mqdUPfipSD4Bje3XYunqxbSw==", + "requires": { + "@aws-sdk/endpoint-cache": "3.310.0", + "@aws-sdk/types": "3.418.0", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz", + "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + } + } + }, "@aws-sdk/middleware-expect-continue": { "version": "3.398.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", @@ -5052,6 +6067,18 @@ "tslib": "^2.5.0" } }, + "@aws-sdk/region-config-resolver": { + "version": "3.418.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.418.0.tgz", + "integrity": "sha512-lJRZ/9TjZU6yLz+mAwxJkcJZ6BmyYoIJVo1p5+BN//EFdEmC8/c0c9gXMRzfISV/mqWSttdtccpAyN4/goHTYA==", + "requires": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" + } + }, "@aws-sdk/signature-v4-multi-region": { "version": "3.398.0", "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", @@ -5310,11 +6337,11 @@ "requires": {} }, "@smithy/abort-controller": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.5.tgz", - "integrity": "sha512-byVZ2KWLMPYAZGKjRpniAzLcygJO4ruClZKdJTuB0eCB76ONFTdptBHlviHpAZXknRz7skYWPfcgO9v30A1SyA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.9.tgz", + "integrity": "sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5336,25 +6363,26 @@ } }, "@smithy/config-resolver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.5.tgz", - "integrity": "sha512-n0c2AXz+kjALY2FQr7Zy9zhYigXzboIh1AuUUVCqFBKFtdEvTwnwPXrTDoEehLiRTUHNL+4yzZ3s+D0kKYSLSg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.10.tgz", + "integrity": "sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", "tslib": "^2.5.0" } }, "@smithy/credential-provider-imds": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.7.tgz", - "integrity": "sha512-XivkZj/pipzpQPxgleE1odwJQ6oDsVViB4VUO/HRDI4EdEfZjud44USupOUOa/xOjS39/75DYB4zgTbyV+totw==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.12.tgz", + "integrity": "sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==", "requires": { - "@smithy/node-config-provider": "^2.0.7", - "@smithy/property-provider": "^2.0.6", - "@smithy/types": "^2.2.2", - "@smithy/url-parser": "^2.0.5", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", "tslib": "^2.5.0" } }, @@ -5409,15 +6437,26 @@ } }, "@smithy/fetch-http-handler": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.5.tgz", - "integrity": "sha512-EzFoMowdBNy1VqtvkiXgPFEdosIAt4/4bgZ8uiDiUyfhmNXq/3bV+CagPFFBsgFOR/X2XK4zFZHRsoa7PNHVVg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz", + "integrity": "sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==", "requires": { - "@smithy/protocol-http": "^2.0.5", - "@smithy/querystring-builder": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" + }, + "dependencies": { + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + } } }, "@smithy/hash-blob-browser": { @@ -5432,11 +6471,11 @@ } }, "@smithy/hash-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.5.tgz", - "integrity": "sha512-mk551hIywBITT+kXruRNXk7f8Fy7DTzBjZJSr/V6nolYKmUHIG3w5QU6nO9qPYEQGKc/yEPtkpdS28ndeG93lA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.9.tgz", + "integrity": "sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -5453,11 +6492,11 @@ } }, "@smithy/invalid-dependency": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.5.tgz", - "integrity": "sha512-0wEi+JT0hM+UUwrJVYbqjuGFhy5agY/zXyiN7BNAJ1XoCDjU5uaNSj8ekPWsXd/d4yM6NSe8UbPd8cOc1+3oBQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz", + "integrity": "sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5480,87 +6519,122 @@ } }, "@smithy/middleware-content-length": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.5.tgz", - "integrity": "sha512-E7VwV5H02fgZIUGRli4GevBCAPvkyEI/fgl9SU47nPPi3DAAX3nEtUb8xfGbXjOcJ5BdSUoWWZn42tEd/blOqA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.11.tgz", + "integrity": "sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==", "requires": { - "@smithy/protocol-http": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" + }, + "dependencies": { + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + } } }, "@smithy/middleware-endpoint": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.5.tgz", - "integrity": "sha512-tyzDuoNTbsMQCq5Xkc4QOt6e2GACUllQIV8SQ5fc59FtOIV9/vbf58/GxVjZm2o8+MMbdDBANjTDZe/ijZKfyA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.9.tgz", + "integrity": "sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==", "requires": { - "@smithy/middleware-serde": "^2.0.5", - "@smithy/types": "^2.2.2", - "@smithy/url-parser": "^2.0.5", - "@smithy/util-middleware": "^2.0.0", + "@smithy/middleware-serde": "^2.0.9", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-middleware": "^2.0.2", "tslib": "^2.5.0" } }, "@smithy/middleware-retry": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.5.tgz", - "integrity": "sha512-ulIfbFyzQTVnJbLjUl1CTSi0etg6tej/ekwaLp0Gn8ybUkDkKYa+uB6CF/m2J5B6meRwyJlsryR+DjaOVyiicg==", - "requires": { - "@smithy/protocol-http": "^2.0.5", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.2.2", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.12.tgz", + "integrity": "sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==", + "requires": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/protocol-http": "^3.0.5", + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", + "@smithy/util-middleware": "^2.0.2", + "@smithy/util-retry": "^2.0.2", "tslib": "^2.5.0", "uuid": "^8.3.2" + }, + "dependencies": { + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + } } }, "@smithy/middleware-serde": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.5.tgz", - "integrity": "sha512-in0AA5sous74dOfTGU9rMJBXJ0bDVNxwdXtEt5lh3FVd2sEyjhI+rqpLLRF1E4ixbw3RSEf80hfRpcPdjg4vvQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.9.tgz", + "integrity": "sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, "@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.3.tgz", + "integrity": "sha512-AlhPmbwpkC4lQBVaVHXczmjFvsAhDHhrakqLt038qFLotnJcvDLhmMzAtu23alBeOSkKxkTQq0LsAt2N0WpAbw==", "requires": { + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, "@smithy/node-config-provider": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.7.tgz", - "integrity": "sha512-GuLxhnf0aVQsfQp4ZWaM1TRCIndpQjAswyFcmDFRNf4yFqpxpLPDeV540+O0Z21Hmu3deoQm/dCPXbVn90PYzg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.12.tgz", + "integrity": "sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==", "requires": { - "@smithy/property-provider": "^2.0.6", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.2.2", + "@smithy/property-provider": "^2.0.10", + "@smithy/shared-ini-file-loader": "^2.0.11", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, "@smithy/node-http-handler": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.5.tgz", - "integrity": "sha512-lZm5DZf4b3V0saUw9WTC4/du887P6cy2fUyQgQQKRRV6OseButyD5yTzeMmXE53CaXJBMBsUvvIQ0hRVxIq56w==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.5.tgz", + "integrity": "sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==", "requires": { - "@smithy/abort-controller": "^2.0.5", - "@smithy/protocol-http": "^2.0.5", - "@smithy/querystring-builder": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/abort-controller": "^2.0.9", + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" + }, + "dependencies": { + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + } } }, "@smithy/property-provider": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.6.tgz", - "integrity": "sha512-CVem6ZkkWxbTnhjDLyLESY0oLA6IUZYtdqrCpGQKUXaFBOuc/izjm7fIFGBxEbjZ1EGcH9hHxrjqX36RWULNRg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.10.tgz", + "integrity": "sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5574,35 +6648,38 @@ } }, "@smithy/querystring-builder": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.5.tgz", - "integrity": "sha512-4DCX9krxLzATj+HdFPC3i8pb7XTAWzzKqSw8aTZMjXjtQY+vhe4azMAqIvbb6g7JKwIkmkRAjK6EXO3YWSnJVQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.9.tgz", + "integrity": "sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" } }, "@smithy/querystring-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.5.tgz", - "integrity": "sha512-C2stCULH0r54KBksv3AWcN8CLS3u9+WsEW8nBrvctrJ5rQTNa1waHkffpVaiKvcW2nP0aIMBPCobD/kYf/q9mA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.9.tgz", + "integrity": "sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, "@smithy/service-error-classification": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.2.tgz", + "integrity": "sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==", + "requires": { + "@smithy/types": "^2.3.3" + } }, "@smithy/shared-ini-file-loader": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.6.tgz", - "integrity": "sha512-NO6dHqho6APbVR0DxPtYoL4KXBqUeSM3Slsd103MOgL50YbzzsQmMLtDMZ87W8MlvvCN0tuiq+OrAO/rM7hTQg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.11.tgz", + "integrity": "sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==", "requires": { - "@smithy/types": "^2.2.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5622,31 +6699,31 @@ } }, "@smithy/smithy-client": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.5.tgz", - "integrity": "sha512-kCTFr8wfOAWKDzGvfBElc6shHigWtHNhMQ1IbosjC4jOlayFyZMSs2PysKB+Ox/dhQ41KqOzgVjgiQ+PyWqHMQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.7.tgz", + "integrity": "sha512-r6T/oiBQ8vCbGqObH4/h0YqD0jFB1hAS9KFRmuTfaNJueu/L2hjmjqFjv3PV5lkbNHTgUYraSv4cFQ1naxiELQ==", "requires": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.2.2", - "@smithy/util-stream": "^2.0.5", + "@smithy/middleware-stack": "^2.0.3", + "@smithy/types": "^2.3.3", + "@smithy/util-stream": "^2.0.12", "tslib": "^2.5.0" } }, "@smithy/types": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.2.tgz", - "integrity": "sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.3.tgz", + "integrity": "sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==", "requires": { "tslib": "^2.5.0" } }, "@smithy/url-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.5.tgz", - "integrity": "sha512-OdMBvZhpckQSkugCXNJQCvqJ71wE7Ftxce92UOQLQ9pwF6hoS5PLL7wEfpnuEXtStzBqJYkzu1C1ZfjuFGOXAA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.9.tgz", + "integrity": "sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==", "requires": { - "@smithy/querystring-parser": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/querystring-parser": "^2.0.9", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5693,26 +6770,28 @@ } }, "@smithy/util-defaults-mode-browser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.6.tgz", - "integrity": "sha512-h8xyKTZIIom62DN4xbPUmL+RL1deZcK1qJGmCr4c2yXjOrs5/iZ1VtQQcl+xP78620ga/565AikZE1sktdg2yA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.11.tgz", + "integrity": "sha512-0syV1Mz/mCQ7CG/MHKQfH+w86xq59jpD0EOXv5oe0WBXLmq2lWPpVHl2Y6+jQ+/9fYzyZ5NF+NC/WEIuiv690A==", "requires": { - "@smithy/property-provider": "^2.0.6", - "@smithy/types": "^2.2.2", + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "@smithy/util-defaults-mode-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.7.tgz", - "integrity": "sha512-2C1YfmYJj9bpM/cRAgQppYNzPd8gDEXZ5XIVDuEQg3TmmIiinZaFf/HsHYo9NK/PMy5oawJVdIuR7SVriIo1AQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.13.tgz", + "integrity": "sha512-6BtCHYdw5Z8r6KpW8tRCc3yURgvcQwfIEeHhR70BeSOfx8T/TXPPjb8A+K45+KASspa3fzrsSxeIwB0sAeMoHA==", "requires": { - "@smithy/config-resolver": "^2.0.5", - "@smithy/credential-provider-imds": "^2.0.7", - "@smithy/node-config-provider": "^2.0.7", - "@smithy/property-provider": "^2.0.6", - "@smithy/types": "^2.2.2", + "@smithy/config-resolver": "^2.0.10", + "@smithy/credential-provider-imds": "^2.0.12", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5725,30 +6804,32 @@ } }, "@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.2.tgz", + "integrity": "sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==", "requires": { + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, "@smithy/util-retry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.2.tgz", + "integrity": "sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==", "requires": { - "@smithy/service-error-classification": "^2.0.0", + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, "@smithy/util-stream": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.5.tgz", - "integrity": "sha512-ylx27GwI05xLpYQ4hDIfS15vm+wYjNN0Sc2P0FxuzgRe8v0BOLHppGIQ+Bezcynk8C9nUzsUue3TmtRhjut43g==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.12.tgz", + "integrity": "sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==", "requires": { - "@smithy/fetch-http-handler": "^2.0.5", - "@smithy/node-http-handler": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/types": "^2.3.3", "@smithy/util-base64": "^2.0.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", @@ -5774,12 +6855,12 @@ } }, "@smithy/util-waiter": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.5.tgz", - "integrity": "sha512-1lkkUmI/bhaDX+LIT3RiUNAn+NzPmsWjE7beMq0oQ3H1/CffaILIN67riDA0aE1YBj6xll7uWMIy4tJqc+peXw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.9.tgz", + "integrity": "sha512-Hy9Cs0FtIacC1aVFk98bm/7CYqim9fnHAPRnV/SB2mj02ExYs/9Dn5SrNQmtTBTLCn65KqYnNVBNS8GuGpZOOw==", "requires": { - "@smithy/abort-controller": "^2.0.5", - "@smithy/types": "^2.2.2", + "@smithy/abort-controller": "^2.0.9", + "@smithy/types": "^2.3.3", "tslib": "^2.5.0" } }, @@ -5794,9 +6875,9 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", "requires": { "@types/node": "*" } @@ -6652,11 +7733,27 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, + "mnemonist": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", + "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", + "requires": { + "obliterator": "^1.6.1" + } + }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, + "moment-timezone": { + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "requires": { + "moment": "^2.29.4" + } + }, "mongodb": { "version": "5.8.1", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz", @@ -6900,6 +7997,11 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "obliterator": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", + "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", diff --git a/package.json b/package.json index 7ad1b6a..a698ab0 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@aws-sdk/abort-controller": "^3.310.0", + "@aws-sdk/client-dynamodb": "^3.418.0", "@aws-sdk/client-s3": "^3.312.0", "axios": "^1.3.4", "cookie-parser": "~1.4.4", @@ -22,6 +23,7 @@ "express": "~4.16.1", "jsonwebtoken": "^9.0.0", "moment": "^2.29.4", + "moment-timezone": "^0.5.43", "mongoose": "^7.5.0", "morgan": "~1.9.1", "multer": "^1.4.5-lts.1", From 02a95d5a7a31345c31a694cd6fcf1caf249c563f Mon Sep 17 00:00:00 2001 From: Junho Choi Date: Tue, 26 Sep 2023 21:56:43 +0900 Subject: [PATCH 51/52] =?UTF-8?q?=EC=9D=B4=EC=9A=A9=EB=B6=88=EA=B0=80?= =?UTF-8?q?=EA=B8=B0=EA=B0=84=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/chat/chatModel.js | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 components/chat/chatModel.js diff --git a/components/chat/chatModel.js b/components/chat/chatModel.js deleted file mode 100644 index 33c736e..0000000 --- a/components/chat/chatModel.js +++ /dev/null @@ -1,20 +0,0 @@ -const mongoose = require('mongoose'); - -const chatSchema = new mongoose.Schema({ - - UserEmail:{ - type: String, - required: true, - }, - message: { - type: String, - required: true, - }, - timestamp: { - type: Date, - default: Date.now, - }, - -}); - -module.exports = mongoose.model('Chat', chatSchema); From ea823eb38886006b8cd5727d178f51e4deeb0edd Mon Sep 17 00:00:00 2001 From: "user,name" Date: Wed, 11 Oct 2023 02:17:56 +0900 Subject: [PATCH 52/52] fix login error about no such user --- components/user/userDao.js | 4 ++-- components/user/userService.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/user/userDao.js b/components/user/userDao.js index 4bdb61b..85ff223 100644 --- a/components/user/userDao.js +++ b/components/user/userDao.js @@ -19,14 +19,14 @@ const SelectionUseFarmArray = async (connection, userid) => { } async function selectUserbyEmail(connection, email) { - console.log(email); + const selectUserbyEmailQuery = ` SELECT * FROM User WHERE Email = ?; `; const userInfo = await connection.query(selectUserbyEmailQuery, email); - console.log(userInfo); + return userInfo; } diff --git a/components/user/userService.js b/components/user/userService.js index d87f3b7..ab34a9a 100644 --- a/components/user/userService.js +++ b/components/user/userService.js @@ -16,7 +16,7 @@ const withConnection = require('../../config/connection') exports.login = async(email, password) =>{ - const userInfo = await userProvider.retrieveUserEmail(email); + const userInfo = await userProvider.usersbyEmail(email); if (userInfo.length < 1) return errResponse(resStatus.USER_USEREMAIL_NOT_EXIST); console.log(userInfo);