diff --git a/server/package.json b/server/package.json index 9d881ae..fccc621 100644 --- a/server/package.json +++ b/server/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "main": "index.js", "license": "MIT", - "packageManager": "pnpm@9.10.0", + "packageManager": "pnpm@9.15.4", "scripts": { "dev": "nodemon -r dotenv/config src/index.ts", "start": "node -r dotenv/config dist/index.js", @@ -11,33 +11,33 @@ }, "dependencies": { "bcrypt": "^5.1.1", - "cookie-parser": "^1.4.6", + "cookie-parser": "^1.4.7", "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.21.0", - "express-session": "^1.18.0", + "dotenv": "^16.4.7", + "express": "^4.21.2", + "express-session": "^1.18.1", "jsonwebtoken": "^9.0.2", - "mysql2": "^3.11.3", + "mysql2": "^3.12.0", "passport": "^0.7.0", "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", - "sequelize": "^6.37.3", + "sequelize": "^6.37.5", "ws": "^8.18.0" }, "devDependencies": { "@types/bcrypt": "^5.0.2", - "@types/cookie-parser": "^1.4.7", + "@types/cookie-parser": "^1.4.8", "@types/cors": "^2.8.17", - "@types/express": "^4.17.21", - "@types/express-session": "^1.18.0", - "@types/jsonwebtoken": "^9.0.6", - "@types/node": "^20.16.5", - "@types/passport": "^1.0.16", + "@types/express": "^5.0.0", + "@types/express-session": "^1.18.1", + "@types/jsonwebtoken": "^9.0.8", + "@types/node": "^22.13.0", + "@types/passport": "^1.0.17", "@types/passport-local": "^1.0.38", - "@types/ws": "^8.5.12", + "@types/ws": "^8.5.14", "joi": "^17.13.3", - "nodemon": "^3.1.4", + "nodemon": "^3.1.9", "ts-node": "^10.9.2", - "typescript": "^5.6.2" + "typescript": "^5.7.3" } } diff --git a/server/pnpm-lock.yaml b/server/pnpm-lock.yaml index 93484e2..2af15da 100644 --- a/server/pnpm-lock.yaml +++ b/server/pnpm-lock.yaml @@ -12,26 +12,26 @@ importers: specifier: ^5.1.1 version: 5.1.1 cookie-parser: - specifier: ^1.4.6 - version: 1.4.6 + specifier: ^1.4.7 + version: 1.4.7 cors: specifier: ^2.8.5 version: 2.8.5 dotenv: - specifier: ^16.4.5 - version: 16.4.5 + specifier: ^16.4.7 + version: 16.4.7 express: - specifier: ^4.21.0 - version: 4.21.0 + specifier: ^4.21.2 + version: 4.21.2 express-session: - specifier: ^1.18.0 - version: 1.18.0 + specifier: ^1.18.1 + version: 1.18.1 jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 mysql2: - specifier: ^3.11.3 - version: 3.11.3 + specifier: ^3.12.0 + version: 3.12.0 passport: specifier: ^0.7.0 version: 0.7.0 @@ -42,8 +42,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 sequelize: - specifier: ^6.37.3 - version: 6.37.3(mysql2@3.11.3) + specifier: ^6.37.5 + version: 6.37.5(mysql2@3.12.0) ws: specifier: ^8.18.0 version: 8.18.0 @@ -52,44 +52,44 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/cookie-parser': - specifier: ^1.4.7 - version: 1.4.7 + specifier: ^1.4.8 + version: 1.4.8(@types/express@5.0.0) '@types/cors': specifier: ^2.8.17 version: 2.8.17 '@types/express': - specifier: ^4.17.21 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.0 '@types/express-session': - specifier: ^1.18.0 - version: 1.18.0 + specifier: ^1.18.1 + version: 1.18.1 '@types/jsonwebtoken': - specifier: ^9.0.6 - version: 9.0.6 + specifier: ^9.0.8 + version: 9.0.8 '@types/node': - specifier: ^20.16.5 - version: 20.16.5 + specifier: ^22.13.0 + version: 22.13.0 '@types/passport': - specifier: ^1.0.16 - version: 1.0.16 + specifier: ^1.0.17 + version: 1.0.17 '@types/passport-local': specifier: ^1.0.38 version: 1.0.38 '@types/ws': - specifier: ^8.5.12 - version: 8.5.12 + specifier: ^8.5.14 + version: 8.5.14 joi: specifier: ^17.13.3 version: 17.13.3 nodemon: - specifier: ^3.1.4 - version: 3.1.4 + specifier: ^3.1.9 + version: 3.1.9 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.16.5)(typescript@5.6.2) + version: 10.9.2(@types/node@22.13.0)(typescript@5.7.3) typescript: - specifier: ^5.6.2 - version: 5.6.2 + specifier: ^5.7.3 + version: 5.7.3 packages: @@ -147,8 +147,10 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cookie-parser@1.4.7': - resolution: {integrity: sha512-Fvuyi354Z+uayxzIGCwYTayFKocfV7TuDYZClCdIP9ckhvAu/ixDtCB6qx2TT0FKjPLf1f3P/J1rgf6lPs64mw==} + '@types/cookie-parser@1.4.8': + resolution: {integrity: sha512-l37JqFrOJ9yQfRQkljb41l0xVphc7kg5JTjjr+pLRZ0IyZ49V4BQ8vbF4Ut2C2e+WH4al3xD3ZwYwIUfnbT4NQ==} + peerDependencies: + '@types/express': '*' '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} @@ -156,29 +158,29 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/express-serve-static-core@4.19.5': - resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} - '@types/express-session@1.18.0': - resolution: {integrity: sha512-27JdDRgor6PoYlURY+Y5kCakqp5ulC0kmf7y+QwaY+hv9jEFuQOThgkjyA53RP3jmKuBsH5GR6qEfFmvb8mwOA==} + '@types/express-session@1.18.1': + resolution: {integrity: sha512-S6TkD/lljxDlQ2u/4A70luD8/ZxZcrU5pQwI1rVXCiaVIywoFgbA+PIUNDjPhQpPdK0dGleLtYc/y7XWBfclBg==} - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/jsonwebtoken@9.0.6': - resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + '@types/jsonwebtoken@9.0.8': + resolution: {integrity: sha512-7fx54m60nLFUVYlxAB1xpe9CBWX2vSrk50Y6ogRJ1v5xxtba7qXTg5BgYDN5dq+yuQQ9HaVlHJyAAt1/mxryFg==} '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.16.5': - resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + '@types/node@22.13.0': + resolution: {integrity: sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==} '@types/passport-local@1.0.38': resolution: {integrity: sha512-nsrW4A963lYE7lNTv9cr5WmiUD1ibYJvWrpE13oxApFsRt77b0RdtZvKbCdNIY4v/QZ6TRQWaDDEwV1kCTmcXg==} @@ -186,11 +188,11 @@ packages: '@types/passport-strategy@0.2.38': resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==} - '@types/passport@1.0.16': - resolution: {integrity: sha512-FD0qD5hbPWQzaM0wHUnJ/T0BBCJBxCeemtnCwc/ThhTg3x9jfrAcRUmj5Dopza+MfFS9acTe3wk7rcVnRIp/0A==} + '@types/passport@1.0.17': + resolution: {integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==} - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -201,11 +203,11 @@ packages: '@types/serve-static@1.15.7': resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - '@types/validator@13.12.1': - resolution: {integrity: sha512-w0URwf7BQb0rD/EuiG12KP0bailHKHP5YVviJG9zw3ykAokL0TuxU2TUqMB7EwZ59bDHYdeTIvjI5m0S7qHfOA==} + '@types/validator@13.12.2': + resolution: {integrity: sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==} - '@types/ws@8.5.12': - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.5.14': + resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -218,8 +220,8 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -286,8 +288,12 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} chokidar@3.6.0: @@ -316,8 +322,8 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - cookie-parser@1.4.6: - resolution: {integrity: sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==} + cookie-parser@1.4.7: + resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} engines: {node: '>= 0.8.0'} cookie-signature@1.0.6: @@ -326,12 +332,12 @@ packages: cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - cookie@0.4.1: - resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} cors@2.8.5: @@ -349,8 +355,8 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -358,10 +364,6 @@ packages: supports-color: optional: true - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -385,13 +387,17 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} dottie@2.0.6: resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -409,14 +415,18 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -424,12 +434,12 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - express-session@1.18.0: - resolution: {integrity: sha512-m93QLWr0ju+rOwApSsyso838LQwgfs44QtOP/WBiwtAgPIo/SAh1a5c6nn2BR6mFNZehTpqKDESzP+fRHVbxwQ==} + express-session@1.18.1: + resolution: {integrity: sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==} engines: {node: '>= 0.8.0'} - express@4.21.0: - resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} fill-range@7.1.1: @@ -471,8 +481,12 @@ packages: generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} glob-parent@5.1.2: @@ -483,22 +497,16 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-unicode@2.0.1: @@ -602,15 +610,15 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + long@5.2.4: + resolution: {integrity: sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==} lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lru.min@1.1.0: - resolution: {integrity: sha512-86xXMB6DiuKrTqkE/lRL0drlNh568awttBPJ7D66fzDHpy6NC5r3N+Ly/lKCS2zjmeGyvFDx670z0cD0PVBwGA==} + lru.min@1.1.1: + resolution: {integrity: sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==} engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} make-dir@3.1.0: @@ -620,6 +628,10 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -664,8 +676,8 @@ packages: engines: {node: '>=10'} hasBin: true - moment-timezone@0.5.45: - resolution: {integrity: sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==} + moment-timezone@0.5.47: + resolution: {integrity: sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA==} moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} @@ -676,8 +688,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mysql2@3.11.3: - resolution: {integrity: sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==} + mysql2@3.12.0: + resolution: {integrity: sha512-C8fWhVysZoH63tJbX8d10IAoYCyXy4fdRFz2Ihrt9jtPILYynFEKUUzpp1U7qxzDc3tMbotvaBH+sl6bFnGZiw==} engines: {node: '>= 8.0'} named-placeholders@1.1.3: @@ -700,8 +712,8 @@ packages: encoding: optional: true - nodemon@3.1.4: - resolution: {integrity: sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==} + nodemon@3.1.9: + resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} engines: {node: '>=10'} hasBin: true @@ -725,8 +737,8 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} on-finished@2.4.1: @@ -768,14 +780,14 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} pause@0.0.1: resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} - pg-connection-string@2.6.4: - resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} + pg-connection-string@2.7.0: + resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -830,8 +842,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.0: + resolution: {integrity: sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==} engines: {node: '>=10'} hasBin: true @@ -846,8 +858,8 @@ packages: resolution: {integrity: sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==} engines: {node: '>= 10.0.0'} - sequelize@6.37.3: - resolution: {integrity: sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==} + sequelize@6.37.5: + resolution: {integrity: sha512-10WA4poUb3XWnUROThqL2Apq9C2NhyV1xHPMZuybNMCucDsbbFuKg51jhmyvvAUyUqCiimwTZamc3AHhMoBr2Q==} engines: {node: '>=10.0.0'} peerDependencies: ibm_db: '*' @@ -886,15 +898,23 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} signal-exit@3.0.7: @@ -967,8 +987,8 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -982,8 +1002,8 @@ packages: undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -1075,7 +1095,7 @@ snapshots: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.6.3 + semver: 7.7.0 tar: 6.2.1 transitivePeerDependencies: - encoding @@ -1099,96 +1119,97 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 20.16.5 + '@types/node': 22.13.0 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.16.5 + '@types/node': 22.13.0 '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.5 + '@types/node': 22.13.0 - '@types/cookie-parser@1.4.7': + '@types/cookie-parser@1.4.8(@types/express@5.0.0)': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.0 '@types/cors@2.8.17': dependencies: - '@types/node': 20.16.5 + '@types/node': 22.13.0 '@types/debug@4.1.12': dependencies: - '@types/ms': 0.7.34 + '@types/ms': 2.1.0 - '@types/express-serve-static-core@4.19.5': + '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 20.16.5 - '@types/qs': 6.9.16 + '@types/node': 22.13.0 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express-session@1.18.0': + '@types/express-session@1.18.1': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.0 - '@types/express@4.17.21': + '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.5 - '@types/qs': 6.9.16 + '@types/express-serve-static-core': 5.0.6 + '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 '@types/http-errors@2.0.4': {} - '@types/jsonwebtoken@9.0.6': + '@types/jsonwebtoken@9.0.8': dependencies: - '@types/node': 20.16.5 + '@types/ms': 2.1.0 + '@types/node': 22.13.0 '@types/mime@1.3.5': {} - '@types/ms@0.7.34': {} + '@types/ms@2.1.0': {} - '@types/node@20.16.5': + '@types/node@22.13.0': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 '@types/passport-local@1.0.38': dependencies: - '@types/express': 4.17.21 - '@types/passport': 1.0.16 + '@types/express': 5.0.0 + '@types/passport': 1.0.17 '@types/passport-strategy': 0.2.38 '@types/passport-strategy@0.2.38': dependencies: - '@types/express': 4.17.21 - '@types/passport': 1.0.16 + '@types/express': 5.0.0 + '@types/passport': 1.0.17 - '@types/passport@1.0.16': + '@types/passport@1.0.17': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.0 - '@types/qs@6.9.16': {} + '@types/qs@6.9.18': {} '@types/range-parser@1.2.7': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.16.5 + '@types/node': 22.13.0 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.16.5 + '@types/node': 22.13.0 '@types/send': 0.17.4 - '@types/validator@13.12.1': {} + '@types/validator@13.12.2': {} - '@types/ws@8.5.12': + '@types/ws@8.5.14': dependencies: - '@types/node': 20.16.5 + '@types/node': 22.13.0 abbrev@1.1.1: {} @@ -1199,13 +1220,13 @@ snapshots: acorn-walk@8.3.4: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} agent-base@6.0.2: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -1273,13 +1294,15 @@ snapshots: bytes@3.1.2: {} - call-bind@1.0.7: + call-bind-apply-helpers@1.0.1: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 chokidar@3.6.0: dependencies: @@ -1307,18 +1330,18 @@ snapshots: content-type@1.0.5: {} - cookie-parser@1.4.6: + cookie-parser@1.4.7: dependencies: - cookie: 0.4.1 + cookie: 0.7.2 cookie-signature: 1.0.6 cookie-signature@1.0.6: {} cookie-signature@1.0.7: {} - cookie@0.4.1: {} + cookie@0.7.1: {} - cookie@0.6.0: {} + cookie@0.7.2: {} cors@2.8.5: dependencies: @@ -1331,18 +1354,12 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7(supports-color@5.5.0): + debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 5.5.0 - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - delegates@1.0.0: {} denque@2.1.0: {} @@ -1355,10 +1372,16 @@ snapshots: diff@4.0.2: {} - dotenv@16.4.5: {} + dotenv@16.4.7: {} dottie@2.0.6: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 @@ -1371,19 +1394,21 @@ snapshots: encodeurl@2.0.0: {} - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + escape-html@1.0.3: {} etag@1.8.1: {} - express-session@1.18.0: + express-session@1.18.1: dependencies: - cookie: 0.6.0 + cookie: 0.7.2 cookie-signature: 1.0.7 debug: 2.6.9 depd: 2.0.0 @@ -1394,14 +1419,14 @@ snapshots: transitivePeerDependencies: - supports-color - express@4.21.0: + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.6.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 @@ -1415,7 +1440,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 @@ -1477,13 +1502,23 @@ snapshots: dependencies: is-property: 1.0.2 - get-intrinsic@1.2.4: + get-intrinsic@1.2.7: dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 glob-parent@5.1.2: dependencies: @@ -1498,19 +1533,11 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + gopd@1.2.0: {} has-flag@3.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} has-unicode@2.0.1: {} @@ -1529,7 +1556,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -1589,7 +1616,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.3 + semver: 7.7.0 jwa@1.4.1: dependencies: @@ -1618,11 +1645,11 @@ snapshots: lodash@4.17.21: {} - long@5.2.3: {} + long@5.2.4: {} lru-cache@7.18.3: {} - lru.min@1.1.0: {} + lru.min@1.1.1: {} make-dir@3.1.0: dependencies: @@ -1630,6 +1657,8 @@ snapshots: make-error@1.3.6: {} + math-intrinsics@1.1.0: {} + media-typer@0.3.0: {} merge-descriptors@1.0.3: {} @@ -1661,7 +1690,7 @@ snapshots: mkdirp@1.0.4: {} - moment-timezone@0.5.45: + moment-timezone@0.5.47: dependencies: moment: 2.30.1 @@ -1671,14 +1700,14 @@ snapshots: ms@2.1.3: {} - mysql2@3.11.3: + mysql2@3.12.0: dependencies: aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 iconv-lite: 0.6.3 - long: 5.2.3 - lru.min: 1.1.0 + long: 5.2.4 + lru.min: 1.1.1 named-placeholders: 1.1.3 seq-queue: 0.0.5 sqlstring: 2.3.3 @@ -1695,14 +1724,14 @@ snapshots: dependencies: whatwg-url: 5.0.0 - nodemon@3.1.4: + nodemon@3.1.9: dependencies: chokidar: 3.6.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.6.3 + semver: 7.7.0 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 @@ -1725,7 +1754,7 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.2: {} + object-inspect@1.13.3: {} on-finished@2.4.1: dependencies: @@ -1765,11 +1794,11 @@ snapshots: path-is-absolute@1.0.1: {} - path-to-regexp@0.1.10: {} + path-to-regexp@0.1.12: {} pause@0.0.1: {} - pg-connection-string@2.6.4: {} + pg-connection-string@2.7.0: {} picomatch@2.3.1: {} @@ -1782,7 +1811,7 @@ snapshots: qs@6.13.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 random-bytes@1.0.0: {} @@ -1817,7 +1846,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} + semver@7.7.0: {} send@0.19.0: dependencies: @@ -1841,26 +1870,26 @@ snapshots: sequelize-pool@7.1.0: {} - sequelize@6.37.3(mysql2@3.11.3): + sequelize@6.37.5(mysql2@3.12.0): dependencies: '@types/debug': 4.1.12 - '@types/validator': 13.12.1 - debug: 4.3.7(supports-color@5.5.0) + '@types/validator': 13.12.2 + debug: 4.4.0(supports-color@5.5.0) dottie: 2.0.6 inflection: 1.13.4 lodash: 4.17.21 moment: 2.30.1 - moment-timezone: 0.5.45 - pg-connection-string: 2.6.4 + moment-timezone: 0.5.47 + pg-connection-string: 2.7.0 retry-as-promised: 7.0.4 - semver: 7.6.3 + semver: 7.7.0 sequelize-pool: 7.1.0 toposort-class: 1.0.1 uuid: 8.3.2 validator: 13.12.0 wkx: 0.5.0 optionalDependencies: - mysql2: 3.11.3 + mysql2: 3.12.0 transitivePeerDependencies: - supports-color @@ -1875,29 +1904,41 @@ snapshots: set-blocking@2.0.0: {} - set-function-length@1.2.2: + setprototypeof@1.2.0: {} + + side-channel-list@1.0.0: dependencies: - define-data-property: 1.1.4 es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 + object-inspect: 1.13.3 - setprototypeof@1.2.0: {} + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 - side-channel@1.0.6: + side-channel@1.1.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 signal-exit@3.0.7: {} simple-update-notifier@2.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.0 sqlstring@2.3.3: {} @@ -1942,21 +1983,21 @@ snapshots: tr46@0.0.3: {} - ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2): + ts-node@10.9.2(@types/node@22.13.0)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 - acorn: 8.12.1 + '@types/node': 22.13.0 + acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.2 + typescript: 5.7.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -1965,7 +2006,7 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript@5.6.2: {} + typescript@5.7.3: {} uid-safe@2.1.5: dependencies: @@ -1975,7 +2016,7 @@ snapshots: undefsafe@2.0.5: {} - undici-types@6.19.8: {} + undici-types@6.20.0: {} unpipe@1.0.0: {} @@ -2004,7 +2045,7 @@ snapshots: wkx@0.5.0: dependencies: - '@types/node': 20.16.5 + '@types/node': 22.13.0 wrappy@1.0.2: {} diff --git a/server/src/index.ts b/server/src/index.ts index 2d41a86..3a597a3 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -79,7 +79,7 @@ interface BroadcastData { const broadcast = (data: BroadcastData) => { - wss.clients.forEach((client) => { + wss.clients?.forEach((client) => { if (client.readyState === client.OPEN) { client.send(JSON.stringify(data)); } diff --git a/server/src/middleware/auth.ts b/server/src/middleware/auth.ts index afd4ec5..9ea8de5 100644 --- a/server/src/middleware/auth.ts +++ b/server/src/middleware/auth.ts @@ -7,7 +7,9 @@ export const isAuthenticated = async(req: Request, res: Response, next: NextFunc const token = req?.cookies?.token; if (!token) { - return res.status(401).json({ error: 'Unauthorized' }); + res.status(401).json({ error: 'Unauthorized' }); + + return; } try { @@ -15,12 +17,16 @@ export const isAuthenticated = async(req: Request, res: Response, next: NextFunc const user = await User.findByPk(decoded.user.id); if (!user) { - return res.status(401).json({ error: 'Unauthorized' }); + res.status(401).json({ error: 'Unauthorized' }); + + return; } req.user = user; next(); } catch (error) { - return res.status(401).json({ error: 'Unauthorized' }); + res.status(401).json({ error: 'Unauthorized' }); + + return; } }; diff --git a/server/src/middleware/validation.ts b/server/src/middleware/validation.ts index e780645..8b7dce4 100644 --- a/server/src/middleware/validation.ts +++ b/server/src/middleware/validation.ts @@ -28,7 +28,9 @@ export const validateExpense = (req: Request, res: Response, next: NextFunction) const { error } = expenseSchema.validate(req.body); if (error) { - return res.status(400).json({ error: error.details[0].message }); + res.status(400).json({ error: error.details[0].message }); + + return; } next(); @@ -38,7 +40,9 @@ export const validateIncome = (req: Request, res: Response, next: NextFunction) const { error } = incomeSchema.validate(req.body); if (error) { - return res.status(400).json({ error: error.details[0].message }); + res.status(400).json({ error: error.details[0].message }); + + return; } next(); diff --git a/server/src/routes/auth.ts b/server/src/routes/auth.ts index 2028ff5..9899b93 100644 --- a/server/src/routes/auth.ts +++ b/server/src/routes/auth.ts @@ -1,4 +1,4 @@ -import express from 'express'; +import express, { Request, Response } from 'express'; import passport from 'passport'; import bcrypt from 'bcrypt'; import jwt from 'jsonwebtoken'; @@ -7,7 +7,7 @@ import User from '../models/User'; const router = express.Router(); -router.post('/register', async(req, res) => { +router.post('/register', async(req: Request, res: Response) => { try { const { username, password } = req.body; @@ -29,9 +29,11 @@ router.post('/register', async(req, res) => { } }); -router.post('/login', passport.authenticate('local'), (req, res) => { +router.post('/login', passport.authenticate('local'), (req: Request, res: Response) => { if (!process.env.JWT_SECRET) { - return res.status(500).json({ error: 'JWT_SECRET not set' }); + res.status(500).json({ message: 'JWT_SECRET not set' }); + + return; } try { @@ -49,12 +51,12 @@ router.post('/login', passport.authenticate('local'), (req, res) => { } }); -router.post('/logout', (req, res) => { +router.post('/logout', (req: Request, res: Response) => { req.logout({}, () => {}); res.status(200).send('Logged out'); }); -router.get('/user', (req, res) => { +router.get('/user', (req: Request, res: Response) => { if (req.isAuthenticated()) { res.json(req.user); } else { @@ -62,9 +64,11 @@ router.get('/user', (req, res) => { } }); -router.put('/update', async(req, res) => { +router.put('/update', async(req: Request, res: Response) => { if (!req.isAuthenticated()) { - return res.status(401).send('Unauthorized'); + res.status(401).send('Unauthorized'); + + return; } const { username, newPassword } = req.body; @@ -90,9 +94,11 @@ router.put('/update', async(req, res) => { } }); -router.delete('/delete', async(req, res) => { +router.delete('/delete', async(req: Request, res: Response) => { if (!req.isAuthenticated()) { - return res.status(401).send('Unauthorized'); + res.status(401).send('Unauthorized'); + + return; } const user = req.user as User; diff --git a/server/src/routes/expenses.ts b/server/src/routes/expenses.ts index eca53b3..3556844 100644 --- a/server/src/routes/expenses.ts +++ b/server/src/routes/expenses.ts @@ -1,4 +1,4 @@ -import express from 'express'; +import express, { Request, Response } from 'express'; import Expense from '../models/Expense'; import { isAuthenticated } from '../middleware/auth'; @@ -8,7 +8,7 @@ import { broadcast } from '../index'; const router = express.Router(); -router.post('/', isAuthenticated, validateExpense, async(req, res) => { +router.post('/', isAuthenticated, validateExpense, async(req: Request, res: Response) => { try { const { description, amount, category, date, recurring, recurrenceType, recurrenceEndDate @@ -36,7 +36,7 @@ router.post('/', isAuthenticated, validateExpense, async(req, res) => { } }); -router.get('/', isAuthenticated, async(req, res) => { +router.get('/', isAuthenticated, async(req: Request, res: Response) => { try { const user = req?.user as User; @@ -48,7 +48,7 @@ router.get('/', isAuthenticated, async(req, res) => { } }); -router.delete('/:id', isAuthenticated, async(req, res) => { +router.delete('/:id', isAuthenticated, async(req: Request, res: Response) => { try { const { id } = req.params; const user = req?.user as User; @@ -65,7 +65,7 @@ router.delete('/:id', isAuthenticated, async(req, res) => { } }); -router.put('/:id', isAuthenticated, validateExpense, async(req, res) => { +router.put('/:id', isAuthenticated, validateExpense, async(req: Request, res: Response) => { try { const { id } = req.params; const user = req?.user as User; @@ -81,7 +81,9 @@ router.put('/:id', isAuthenticated, validateExpense, async(req, res) => { }); if (!expense) { - return res.status(404).json({ message: 'Expense not found' }); + res.status(404).json({ message: 'Expense not found' }); + + return; } expense.description = description || expense.description; diff --git a/server/src/routes/incomes.ts b/server/src/routes/incomes.ts index 4cce6d8..66be999 100644 --- a/server/src/routes/incomes.ts +++ b/server/src/routes/incomes.ts @@ -1,4 +1,4 @@ -import express from 'express'; +import express, { Request, Response } from 'express'; import Income from '../models/Income'; import { isAuthenticated } from '../middleware/auth'; @@ -8,7 +8,7 @@ import { broadcast } from '../index'; const router = express.Router(); -router.post('/', isAuthenticated, validateIncome, async(req, res) => { +router.post('/', isAuthenticated, validateIncome, async(req: Request, res: Response) => { try { const { description, amount, date, recurring, recurrenceType, recurrenceEndDate @@ -35,7 +35,7 @@ router.post('/', isAuthenticated, validateIncome, async(req, res) => { } }); -router.get('/', isAuthenticated, async(req, res) => { +router.get('/', isAuthenticated, async(req: Request, res: Response) => { try { const user = req?.user as User; @@ -47,7 +47,7 @@ router.get('/', isAuthenticated, async(req, res) => { } }); -router.delete('/:id', isAuthenticated, async(req, res) => { +router.delete('/:id', isAuthenticated, async(req: Request, res: Response) => { try { const { id } = req.params; const user = req?.user as User; @@ -64,7 +64,7 @@ router.delete('/:id', isAuthenticated, async(req, res) => { } }); -router.put('/:id', isAuthenticated, validateIncome, async(req, res) => { +router.put('/:id', isAuthenticated, validateIncome, async(req: Request, res: Response) => { try { const { id } = req.params; const user = req?.user as User; @@ -80,7 +80,9 @@ router.put('/:id', isAuthenticated, validateIncome, async(req, res) => { }); if (!income) { - return res.status(404).json({ message: 'Income not found' }); + res.status(404).json({ message: 'Income not found' }); + + return; } income.description = description || income.description;