commit d18430798128e654c94d56f77376d0e7ac4c5fbb Author: anibilag Date: Wed Jan 29 23:37:45 2025 +0300 Первый комит diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11ddd8d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +# Keep environment variables out of version control +.env diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/__server.iml b/.idea/__server.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/__server.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..731e659 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/gg.txt b/gg.txt new file mode 100644 index 0000000..bd45690 --- /dev/null +++ b/gg.txt @@ -0,0 +1,2 @@ +aws s3 ls s3://russcult --endpoint-url https://s3.regru.cloud +SSL validation failed for https://s3.regru.cloud/russcult?list-type=2&prefix=&delimiter=%2F&encoding-type=url [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1000) \ No newline at end of file diff --git a/logs/.3963f25f71f55fe10bae9a77fb9dac3bfc6a0ff9-audit.json b/logs/.3963f25f71f55fe10bae9a77fb9dac3bfc6a0ff9-audit.json new file mode 100644 index 0000000..7b7f2f9 --- /dev/null +++ b/logs/.3963f25f71f55fe10bae9a77fb9dac3bfc6a0ff9-audit.json @@ -0,0 +1,25 @@ +{ + "keep": { + "days": true, + "amount": 14 + }, + "auditLog": "logs\\.3963f25f71f55fe10bae9a77fb9dac3bfc6a0ff9-audit.json", + "files": [ + { + "date": 1737491441425, + "name": "logs\\2025-01-21-server.log", + "hash": "54d6f0e9e1c9f3bef959db621c76d35b17b119dc818596408531d3328e7e81e7" + }, + { + "date": 1737547484760, + "name": "logs\\2025-01-22-server.log", + "hash": "14d037430ed862ed87b7171fe0dde60a8e1899b44c09cf608219bd0599ef1123" + }, + { + "date": 1737626379634, + "name": "logs\\2025-01-23-server.log", + "hash": "4a6e15f12493f7ed2997015c5040d0303131b6f6d54aa77e1e88530128ab1b26" + } + ], + "hashType": "sha256" +} \ No newline at end of file diff --git a/logs/.fccedf8ec723689a9b3fe46c233201bef1488f72-audit.json b/logs/.fccedf8ec723689a9b3fe46c233201bef1488f72-audit.json new file mode 100644 index 0000000..47690e9 --- /dev/null +++ b/logs/.fccedf8ec723689a9b3fe46c233201bef1488f72-audit.json @@ -0,0 +1,45 @@ +{ + "keep": { + "days": true, + "amount": 14 + }, + "auditLog": "logs\\.fccedf8ec723689a9b3fe46c233201bef1488f72-audit.json", + "files": [ + { + "date": 1737627693892, + "name": "logs\\23-01-2025-server.log", + "hash": "d933c871ed8be22b70e69d6d60e76bfa36ea16491863e74d6a29bb95485a5911" + }, + { + "date": 1737712760907, + "name": "logs\\24-01-2025-server.log", + "hash": "4e122ebce4fcefb2d51bb10d545620d67f4a2326adbe9e6b448185fa7983558d" + }, + { + "date": 1737808151907, + "name": "logs\\25-01-2025-server.log", + "hash": "c516c143f0afba99de2d6c0ccc8d52fc0e056d8b67462a1a0fc52cb9973b0750" + }, + { + "date": 1737839056658, + "name": "logs\\26-01-2025-server.log", + "hash": "ec8618694837659bf2e76d7584dd8f113807569d04b4d8066d816547ee9fb5f7" + }, + { + "date": 1737973675956, + "name": "logs\\27-01-2025-server.log", + "hash": "fcf05c71fda401614248d536ddf14f1b8dcdabb6fc8b2b8784951528ad905593" + }, + { + "date": 1738076171742, + "name": "logs\\28-01-2025-server.log", + "hash": "1219d8fa17a639245b81b09fd447fe3819a16c7b91cf0076c639e2e99573d4d6" + }, + { + "date": 1738177920318, + "name": "logs\\29-01-2025-server.log", + "hash": "a130d01c6d7afa2d0e25bd08102deb22016d6d986b981c8ca5e7cc6332961148" + } + ], + "hashType": "sha256" +} \ No newline at end of file diff --git a/logs/23-01-2025-server.log b/logs/23-01-2025-server.log new file mode 100644 index 0000000..0fd448f --- /dev/null +++ b/logs/23-01-2025-server.log @@ -0,0 +1,37 @@ +23-01-2025 13:53:16:5316 info: Server running on port 5000 +23-01-2025 13:53:28:5328 info: Login attempt for user: supervisor@mail.ru +23-01-2025 13:53:28:5328 debug: Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +23-01-2025 13:53:28:5328 info: User logged in successfully: supervisor@mail.ru +23-01-2025 13:53:28:5328 info: POST /api/auth/login 200 159ms +23-01-2025 13:57:42:5742 [info] Server running on port 5000 +[${info.timestamp}] [${paddedLevel}] ${info.message} +[23-01-2025 14:13:48:1348] [ info] Server running on port 5000 +[23-01-2025 14:16:45:1645] [ info] Server running on port 5000 +[23-01-2025 14:17:14:1714] [info ] Server running on port 5000 +23-01-2025 14:18:13:1813 [info ] Server running on port 5000 +23-01-2025 14:18:32:1832 [info ] Login attempt for user: supervisor@mail.ru +23-01-2025 14:18:32:1832 [debug] Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +23-01-2025 14:18:32:1832 [info ] User logged in successfully: supervisor@mail.ru +23-01-2025 14:18:32:1832 [info ] POST /api/auth/login 200 148ms +[23-01-2025 14:26:18:2618] info : Server running on port 5000 +[23-01-2025 14:26:48:2648] info : Login attempt for user: supervisor@mail.ru +[23-01-2025 14:26:48:2648] debug: Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[23-01-2025 14:26:48:2648] info : User logged in successfully: supervisor@mail.ru +[23-01-2025 14:26:48:2648] info : POST /api/auth/login 200 126ms +[23-01-2025 14:28:04:284] info : Server running on port 5000 +[23-01-2025 14:28:11:2811] info : Login attempt for user: supervisor@mail.ru +[23-01-2025 14:28:11:2811] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[23-01-2025 14:28:11:2811] info : User logged in successfully: supervisor@mail.ru +[23-01-2025 14:28:11:2811] info : POST /api/auth/login 200 128ms +[23-01-2025 23:10:35:1035] info : Server running on port 5000 +[23-01-2025 23:11:14:1114] info : Login attempt for user: supervisor@mail.ru +[23-01-2025 23:11:15:1115] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[23-01-2025 23:11:15:1115] info : User logged in successfully: supervisor@mail.ru +[23-01-2025 23:11:15:1115] http : ::ffff:127.0.0.1 - - [23/Jan/2025:20:11:15 +0000] "POST /api/auth/login HTTP/1.1" 200 325 "-" "PostmanRuntime/7.43.0" +[23-01-2025 23:11:15:1115] info : POST /api/auth/login 200 8484ms +[23-01-2025 23:13:27:1327] http : ::1 - - [23/Jan/2025:20:13:27 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[23-01-2025 23:13:32:1332] info : Login attempt for user: supervisor@mail.ru +[23-01-2025 23:13:33:1333] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[23-01-2025 23:13:33:1333] info : User logged in successfully: supervisor@mail.ru +[23-01-2025 23:13:33:1333] http : ::1 - - [23/Jan/2025:20:13:33 +0000] "POST /api/auth/login HTTP/1.1" 200 325 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[23-01-2025 23:13:33:1333] info : POST /api/auth/login 200 5844ms diff --git a/logs/24-01-2025-server.log b/logs/24-01-2025-server.log new file mode 100644 index 0000000..5cc56a6 --- /dev/null +++ b/logs/24-01-2025-server.log @@ -0,0 +1,190 @@ +[24-01-2025 14:58:56:5856] info : Server running on port 5000 +[24-01-2025 15:02:05:25] http : ::1 - - [24/Jan/2025:12:02:05 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:05:25] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 15:02:05:25] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 15:02:05:25] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 15:02:05:25] http : ::1 - - [24/Jan/2025:12:02:05 +0000] "POST /api/auth/login HTTP/1.1" 200 325 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:05:25] info : POST /api/auth/login 200 136ms +[24-01-2025 15:02:23:223] http : ::1 - - [24/Jan/2025:12:02:23 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:23:223] http : ::1 - - [24/Jan/2025:12:02:23 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:23:223] http : ::1 - - [24/Jan/2025:12:02:23 +0000] "GET /api/auth/me HTTP/1.1" 200 118 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:23:223] info : GET /api/auth/me 200 58ms +[24-01-2025 15:02:23:223] http : ::1 - - [24/Jan/2025:12:02:23 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:23:223] info : GET /api/auth/me 304 11ms +[24-01-2025 15:02:27:227] http : ::1 - - [24/Jan/2025:12:02:27 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:27:227] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 15:02:27:227] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 15:02:27:227] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 15:02:27:227] http : ::1 - - [24/Jan/2025:12:02:27 +0000] "POST /api/auth/login HTTP/1.1" 200 325 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:27:227] info : POST /api/auth/login 200 73ms +[24-01-2025 15:02:27:227] http : ::1 - - [24/Jan/2025:12:02:27 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:27:227] http : ::1 - - [24/Jan/2025:12:02:27 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:27:227] http : ::1 - - [24/Jan/2025:12:02:27 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:27:227] warn : GET /api/users 403 10ms +[24-01-2025 15:02:27:227] http : ::1 - - [24/Jan/2025:12:02:27 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:02:27:227] warn : GET /api/users 403 9ms +[24-01-2025 15:03:51:351] http : ::1 - - [24/Jan/2025:12:03:51 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:03:51:351] http : ::1 - - [24/Jan/2025:12:03:51 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:03:51:351] warn : GET /api/users 403 16ms +[24-01-2025 15:04:45:445] http : ::1 - - [24/Jan/2025:12:04:45 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:04:45:445] http : ::1 - - [24/Jan/2025:12:04:45 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:04:45:445] warn : GET /api/users 403 19ms +[24-01-2025 15:58:00:580] info : Server running on port 5000 +[24-01-2025 15:58:08:588] http : ::1 - - [24/Jan/2025:12:58:08 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:58:08:588] http : ::1 - - [24/Jan/2025:12:58:08 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:58:34:5834] http : ::1 - - [24/Jan/2025:12:58:34 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:58:34:5834] info : GET /api/auth/me 304 25159ms +[24-01-2025 15:58:34:5834] http : ::1 - - [24/Jan/2025:12:58:34 +0000] "GET /api/auth/me HTTP/1.1" 200 118 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:58:34:5834] info : GET /api/auth/me 200 4185ms +[24-01-2025 15:58:41:5841] http : ::1 - - [24/Jan/2025:12:58:41 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:58:57:5857] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 15:59:07:597] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 15:59:07:597] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 15:59:07:597] http : ::1 - - [24/Jan/2025:12:59:07 +0000] "POST /api/auth/login HTTP/1.1" 200 325 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:59:07:597] info : POST /api/auth/login 200 25825ms +[24-01-2025 15:59:07:597] http : ::1 - - [24/Jan/2025:12:59:07 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:59:07:597] http : ::1 - - [24/Jan/2025:12:59:07 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:59:16:5916] http : ::1 - - [24/Jan/2025:12:59:16 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:59:16:5916] warn : GET /api/users 403 9356ms +[24-01-2025 15:59:59:5959] http : ::1 - - [24/Jan/2025:12:59:59 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 15:59:59:5959] warn : GET /api/users 403 42730ms +[24-01-2025 16:02:47:247] http : ::1 - - [24/Jan/2025:13:02:47 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:02:47:247] http : ::1 - - [24/Jan/2025:13:02:47 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:03:07:37] http : ::1 - - [24/Jan/2025:13:03:07 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:03:07:37] info : GET /api/auth/me 304 20150ms +[24-01-2025 16:03:14:314] http : ::1 - - [24/Jan/2025:13:03:14 +0000] "GET /api/auth/me HTTP/1.1" 200 118 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:03:14:314] info : GET /api/auth/me 200 6597ms +[24-01-2025 16:03:32:332] http : ::1 - - [24/Jan/2025:13:03:32 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:03:32:332] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 16:03:32:332] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 16:03:32:332] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 16:03:32:332] http : ::1 - - [24/Jan/2025:13:03:32 +0000] "POST /api/auth/login HTTP/1.1" 200 325 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:03:32:332] info : POST /api/auth/login 200 73ms +[24-01-2025 16:03:32:332] http : ::1 - - [24/Jan/2025:13:03:32 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:03:32:332] http : ::1 - - [24/Jan/2025:13:03:32 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:04:10:410] http : ::1 - - [24/Jan/2025:13:04:10 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:04:10:410] warn : GET /api/users 403 38267ms +[24-01-2025 16:04:15:415] http : ::1 - - [24/Jan/2025:13:04:15 +0000] "GET /api/users HTTP/1.1" 403 33 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:04:15:415] warn : GET /api/users 403 5127ms +[24-01-2025 16:05:18:518] http : ::1 - - [24/Jan/2025:13:05:18 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:18:518] http : ::1 - - [24/Jan/2025:13:05:18 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:21:521] http : ::1 - - [24/Jan/2025:13:05:21 +0000] "GET /api/auth/me HTTP/1.1" 200 160 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:21:521] info : GET /api/auth/me 200 2586ms +[24-01-2025 16:05:22:522] http : ::1 - - [24/Jan/2025:13:05:22 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:22:522] info : GET /api/auth/me 304 924ms +[24-01-2025 16:05:33:533] http : ::1 - - [24/Jan/2025:13:05:33 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:33:533] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 16:05:33:533] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 16:05:33:533] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 16:05:33:533] http : ::1 - - [24/Jan/2025:13:05:33 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:33:533] info : POST /api/auth/login 200 110ms +[24-01-2025 16:05:33:533] http : ::1 - - [24/Jan/2025:13:05:33 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:33:533] http : ::1 - - [24/Jan/2025:13:05:33 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:46:546] http : ::1 - - [24/Jan/2025:13:05:46 +0000] "GET /api/users HTTP/1.1" 500 24 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:46:546] error : GET /api/users 500 12932ms +[24-01-2025 16:05:51:551] http : ::1 - - [24/Jan/2025:13:05:51 +0000] "GET /api/users HTTP/1.1" 500 24 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:05:51:551] error : GET /api/users 500 4790ms +[24-01-2025 16:07:51:751] http : ::1 - - [24/Jan/2025:13:07:51 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:51:751] http : ::1 - - [24/Jan/2025:13:07:51 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:51:751] http : ::1 - - [24/Jan/2025:13:07:51 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:51:751] info : GET /api/auth/me 304 18ms +[24-01-2025 16:07:51:751] http : ::1 - - [24/Jan/2025:13:07:51 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:51:751] info : GET /api/auth/me 304 11ms +[24-01-2025 16:07:52:752] http : ::1 - - [24/Jan/2025:13:07:52 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:52:752] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 16:07:52:752] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 16:07:52:752] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 16:07:52:752] http : ::1 - - [24/Jan/2025:13:07:52 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:52:752] info : POST /api/auth/login 200 74ms +[24-01-2025 16:07:52:752] http : ::1 - - [24/Jan/2025:13:07:52 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:07:52:752] http : ::1 - - [24/Jan/2025:13:07:52 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:08:09:89] http : ::1 - - [24/Jan/2025:13:08:09 +0000] "GET /api/users HTTP/1.1" 200 619 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:08:09:89] info : GET /api/users 200 16946ms +[24-01-2025 16:08:13:813] http : ::1 - - [24/Jan/2025:13:08:13 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:08:13:813] info : GET /api/users 304 4271ms +[24-01-2025 16:10:19:1019] http : ::1 - - [24/Jan/2025:13:10:19 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:10:29:1029] http : ::1 - - [24/Jan/2025:13:10:29 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:10:29:1029] info : GET /api/users 304 10496ms +[24-01-2025 16:11:13:1113] http : ::1 - - [24/Jan/2025:13:11:13 +0000] "OPTIONS /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:11:13:1113] http : ::1 - - [24/Jan/2025:13:11:13 +0000] "PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 200 175 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:11:13:1113] info : PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions 200 141ms +[24-01-2025 16:11:15:1115] http : ::1 - - [24/Jan/2025:13:11:15 +0000] "PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 200 187 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:11:15:1115] info : PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions 200 525ms +[24-01-2025 16:11:16:1116] http : ::1 - - [24/Jan/2025:13:11:16 +0000] "PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 200 201 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:11:16:1116] info : PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions 200 83ms +[24-01-2025 16:12:33:1233] http : ::1 - - [24/Jan/2025:13:12:33 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:12:35:1235] http : ::1 - - [24/Jan/2025:13:12:35 +0000] "GET /api/users HTTP/1.1" 200 667 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:12:35:1235] info : GET /api/users 200 2510ms +[24-01-2025 16:12:56:1256] http : ::1 - - [24/Jan/2025:13:12:56 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:12:59:1259] http : ::1 - - [24/Jan/2025:13:12:59 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:12:59:1259] info : GET /api/users 304 3254ms +[24-01-2025 16:13:46:1346] http : ::1 - - [24/Jan/2025:13:13:46 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:13:46:1346] http : ::1 - - [24/Jan/2025:13:13:46 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:13:46:1346] info : GET /api/users 304 28ms +[24-01-2025 16:14:55:1455] http : ::1 - - [24/Jan/2025:13:14:55 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:14:55:1455] http : ::1 - - [24/Jan/2025:13:14:55 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:14:55:1455] info : GET /api/users 304 33ms +[24-01-2025 16:15:11:1511] http : ::1 - - [24/Jan/2025:13:15:11 +0000] "OPTIONS /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:15:11:1511] http : ::1 - - [24/Jan/2025:13:15:11 +0000] "PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 200 211 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:15:11:1511] info : PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions 200 108ms +[24-01-2025 16:15:59:1559] http : ::1 - - [24/Jan/2025:13:15:59 +0000] "OPTIONS /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:15:59:1559] http : ::1 - - [24/Jan/2025:13:15:59 +0000] "PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions HTTP/1.1" 200 235 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:15:59:1559] info : PUT /api/users/3af07615-3a97-48cd-8c79-c9943709fa94/permissions 200 168ms +[24-01-2025 16:28:00:280] http : ::1 - - [24/Jan/2025:13:28:00 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:00:280] http : ::1 - - [24/Jan/2025:13:28:00 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:00:280] http : ::1 - - [24/Jan/2025:13:28:00 +0000] "GET /api/users HTTP/1.1" 200 701 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:00:280] info : GET /api/users 200 107ms +[24-01-2025 16:28:00:280] http : ::1 - - [24/Jan/2025:13:28:00 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:00:280] info : GET /api/users 304 15ms +[24-01-2025 16:28:08:288] http : ::1 - - [24/Jan/2025:13:28:08 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:08:288] http : ::1 - - [24/Jan/2025:13:28:08 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:08:288] http : ::1 - - [24/Jan/2025:13:28:08 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:08:288] info : GET /api/auth/me 304 10ms +[24-01-2025 16:28:08:288] http : ::1 - - [24/Jan/2025:13:28:08 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:08:288] info : GET /api/auth/me 304 10ms +[24-01-2025 16:28:09:289] http : ::1 - - [24/Jan/2025:13:28:09 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:09:289] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 16:28:09:289] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 16:28:09:289] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 16:28:09:289] http : ::1 - - [24/Jan/2025:13:28:09 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:28:09:289] info : POST /api/auth/login 200 113ms +[24-01-2025 16:47:56:4756] http : ::1 - - [24/Jan/2025:13:47:56 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:47:56:4756] http : ::1 - - [24/Jan/2025:13:47:56 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:47:58:4758] http : ::1 - - [24/Jan/2025:13:47:58 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:47:58:4758] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 16:47:58:4758] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 16:47:58:4758] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 16:47:58:4758] http : ::1 - - [24/Jan/2025:13:47:58 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 16:47:58:4758] info : POST /api/auth/login 200 109ms +[24-01-2025 23:15:17:1517] info : Server running on port 5000 +[24-01-2025 23:15:23:1523] http : ::1 - - [24/Jan/2025:20:15:23 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:15:23:1523] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 23:15:23:1523] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 23:15:23:1523] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 23:15:23:1523] http : ::1 - - [24/Jan/2025:20:15:23 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:15:23:1523] info : POST /api/auth/login 200 183ms +[24-01-2025 23:49:59:4959] info : Server running on port 5000 +[24-01-2025 23:50:10:5010] http : ::1 - - [24/Jan/2025:20:50:10 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:50:10:5010] http : ::1 - - [24/Jan/2025:20:50:10 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:50:10:5010] http : ::1 - - [24/Jan/2025:20:50:10 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:50:10:5010] info : GET /api/auth/me 304 90ms +[24-01-2025 23:50:10:5010] http : ::1 - - [24/Jan/2025:20:50:10 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:50:10:5010] info : GET /api/auth/me 304 9ms +[24-01-2025 23:50:12:5012] http : ::1 - - [24/Jan/2025:20:50:12 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:50:12:5012] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 23:50:12:5012] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 23:50:12:5012] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 23:50:12:5012] http : ::1 - - [24/Jan/2025:20:50:12 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:50:12:5012] info : POST /api/auth/login 200 117ms +[24-01-2025 23:55:24:5524] http : ::1 - - [24/Jan/2025:20:55:24 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:55:24:5524] http : ::1 - - [24/Jan/2025:20:55:24 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:55:24:5524] http : ::1 - - [24/Jan/2025:20:55:24 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:55:24:5524] info : GET /api/auth/me 304 52ms +[24-01-2025 23:55:24:5524] http : ::1 - - [24/Jan/2025:20:55:24 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:55:24:5524] info : GET /api/auth/me 304 9ms +[24-01-2025 23:55:46:5546] http : ::1 - - [24/Jan/2025:20:55:46 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:55:46:5546] info : Login attempt for user: supervisor@mail.ru +[24-01-2025 23:55:47:5547] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[24-01-2025 23:55:47:5547] info : User logged in successfully: supervisor@mail.ru +[24-01-2025 23:55:47:5547] http : ::1 - - [24/Jan/2025:20:55:47 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[24-01-2025 23:55:47:5547] info : POST /api/auth/login 200 114ms diff --git a/logs/25-01-2025-server.log b/logs/25-01-2025-server.log new file mode 100644 index 0000000..86f6c77 --- /dev/null +++ b/logs/25-01-2025-server.log @@ -0,0 +1,150 @@ +[25-01-2025 15:29:12:2912] info : Server running on port 5000 +[25-01-2025 15:31:42:3142] http : ::1 - - [25/Jan/2025:12:31:42 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:31:42:3142] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 15:31:42:3142] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 15:31:42:3142] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 15:31:42:3142] http : ::1 - - [25/Jan/2025:12:31:42 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:31:42:3142] info : POST /api/auth/login 200 280ms +[25-01-2025 15:32:05:325] http : ::1 - - [25/Jan/2025:12:32:05 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:32:05:325] http : ::1 - - [25/Jan/2025:12:32:05 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:32:05:325] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 15:34:32:3432] info : Server running on port 5000 +[25-01-2025 15:34:42:3442] http : ::1 - - [25/Jan/2025:12:34:42 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:42:3442] http : ::1 - - [25/Jan/2025:12:34:42 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:42:3442] http : ::1 - - [25/Jan/2025:12:34:42 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:42:3442] info : GET /api/auth/me 304 73ms +[25-01-2025 15:34:42:3442] http : ::1 - - [25/Jan/2025:12:34:42 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:42:3442] info : GET /api/auth/me 304 10ms +[25-01-2025 15:34:44:3444] http : ::1 - - [25/Jan/2025:12:34:44 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:44:3444] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 15:34:44:3444] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 15:34:44:3444] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 15:34:44:3444] http : ::1 - - [25/Jan/2025:12:34:44 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:44:3444] info : POST /api/auth/login 200 117ms +[25-01-2025 15:34:51:3451] http : ::1 - - [25/Jan/2025:12:34:51 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:51:3451] http : ::1 - - [25/Jan/2025:12:34:51 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 15:34:51:3451] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 16:59:53:5953] info : Server running on port 5000 +[25-01-2025 16:59:57:5957] http : ::1 - - [25/Jan/2025:13:59:57 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 16:59:57:5957] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 16:59:57:5957] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 16:59:57:5957] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 16:59:57:5957] http : ::1 - - [25/Jan/2025:13:59:57 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 16:59:57:5957] info : POST /api/auth/login 200 217ms +[25-01-2025 17:00:21:021] http : ::1 - - [25/Jan/2025:14:00:21 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:00:21:021] http : ::1 - - [25/Jan/2025:14:00:21 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:00:21:021] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 17:01:16:116] info : Server running on port 5000 +[25-01-2025 17:01:49:149] http : ::1 - - [25/Jan/2025:14:01:49 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:49:149] http : ::1 - - [25/Jan/2025:14:01:49 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] http : ::1 - - [25/Jan/2025:14:01:51 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 17:01:51:151] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 17:01:51:151] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 17:01:51:151] http : ::1 - - [25/Jan/2025:14:01:51 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] info : POST /api/auth/login 200 137ms +[25-01-2025 17:01:51:151] http : ::1 - - [25/Jan/2025:14:01:51 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] http : ::1 - - [25/Jan/2025:14:01:51 +0000] "OPTIONS /api/users HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] http : ::1 - - [25/Jan/2025:14:01:51 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] info : GET /api/users 304 143ms +[25-01-2025 17:01:51:151] http : ::1 - - [25/Jan/2025:14:01:51 +0000] "GET /api/users HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 17:01:51:151] info : GET /api/users 304 20ms +[25-01-2025 23:25:08:258] info : Server running on port 5000 +[25-01-2025 23:25:34:2534] http : ::1 - - [25/Jan/2025:20:25:34 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:34:2534] http : ::1 - - [25/Jan/2025:20:25:34 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:34:2534] http : ::1 - - [25/Jan/2025:20:25:34 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:34:2534] info : GET /api/auth/me 304 196ms +[25-01-2025 23:25:34:2534] http : ::1 - - [25/Jan/2025:20:25:34 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:34:2534] info : GET /api/auth/me 304 16ms +[25-01-2025 23:25:35:2535] http : ::1 - - [25/Jan/2025:20:25:35 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:35:2535] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 23:25:36:2536] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 23:25:36:2536] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 23:25:36:2536] http : ::1 - - [25/Jan/2025:20:25:36 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:36:2536] info : POST /api/auth/login 200 239ms +[25-01-2025 23:25:44:2544] http : ::1 - - [25/Jan/2025:20:25:44 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:44:2544] http : ::1 - - [25/Jan/2025:20:25:44 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:25:44:2544] warn : POST /api/images/upload-url 404 2ms +[25-01-2025 23:26:39:2639] http : ::1 - - [25/Jan/2025:20:26:39 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:26:39:2639] http : ::1 - - [25/Jan/2025:20:26:39 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:26:39:2639] http : ::1 - - [25/Jan/2025:20:26:39 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:26:39:2639] info : GET /api/auth/me 304 38ms +[25-01-2025 23:26:39:2639] http : ::1 - - [25/Jan/2025:20:26:39 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:26:39:2639] info : GET /api/auth/me 304 16ms +[25-01-2025 23:26:53:2653] http : ::1 - - [25/Jan/2025:20:26:53 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:26:53:2653] http : ::1 - - [25/Jan/2025:20:26:53 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:26:53:2653] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 23:27:57:2757] http : ::1 - - [25/Jan/2025:20:27:57 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:27:57:2757] http : ::1 - - [25/Jan/2025:20:27:57 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:27:57:2757] http : ::1 - - [25/Jan/2025:20:27:57 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:27:57:2757] info : GET /api/auth/me 304 18ms +[25-01-2025 23:27:57:2757] http : ::1 - - [25/Jan/2025:20:27:57 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:27:57:2757] info : GET /api/auth/me 304 10ms +[25-01-2025 23:28:06:286] http : ::1 - - [25/Jan/2025:20:28:06 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:28:06:286] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 23:28:06:286] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 23:28:06:286] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 23:28:06:286] http : ::1 - - [25/Jan/2025:20:28:06 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:28:06:286] info : POST /api/auth/login 200 79ms +[25-01-2025 23:28:17:2817] http : ::1 - - [25/Jan/2025:20:28:17 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:28:17:2817] http : ::1 - - [25/Jan/2025:20:28:17 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:28:17:2817] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 23:29:03:293] http : ::1 - - [25/Jan/2025:20:29:03 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:29:03:293] http : ::1 - - [25/Jan/2025:20:29:03 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:29:03:293] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 23:29:43:2943] http : ::1 - - [25/Jan/2025:20:29:43 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:29:43:2943] http : ::1 - - [25/Jan/2025:20:29:43 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:29:43:2943] http : ::1 - - [25/Jan/2025:20:29:43 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:29:43:2943] info : GET /api/auth/me 304 20ms +[25-01-2025 23:29:43:2943] http : ::1 - - [25/Jan/2025:20:29:43 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:29:43:2943] info : GET /api/auth/me 304 18ms +[25-01-2025 23:30:29:3029] http : ::1 - - [25/Jan/2025:20:30:29 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:29:3029] http : ::1 - - [25/Jan/2025:20:30:29 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:29:3029] http : ::1 - - [25/Jan/2025:20:30:29 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:29:3029] info : GET /api/auth/me 304 14ms +[25-01-2025 23:30:29:3029] http : ::1 - - [25/Jan/2025:20:30:29 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:29:3029] info : GET /api/auth/me 304 9ms +[25-01-2025 23:30:33:3033] http : ::1 - - [25/Jan/2025:20:30:33 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:33:3033] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 23:30:34:3034] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 23:30:34:3034] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 23:30:34:3034] http : ::1 - - [25/Jan/2025:20:30:34 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:34:3034] info : POST /api/auth/login 200 301ms +[25-01-2025 23:30:47:3047] http : ::1 - - [25/Jan/2025:20:30:47 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:47:3047] http : ::1 - - [25/Jan/2025:20:30:47 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:30:47:3047] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 23:32:48:3248] http : ::1 - - [25/Jan/2025:20:32:48 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:32:48:3248] http : ::1 - - [25/Jan/2025:20:32:48 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:32:48:3248] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 23:37:02:372] http : ::1 - - [25/Jan/2025:20:37:02 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:37:02:372] http : ::1 - - [25/Jan/2025:20:37:02 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:37:02:372] warn : POST /api/images/upload-url 404 1ms +[25-01-2025 23:41:34:4134] info : Server running on port 5000 +[25-01-2025 23:41:38:4138] http : ::ffff:127.0.0.1 - - [25/Jan/2025:20:41:38 +0000] "POST /api/images/upload-url HTTP/1.1" 404 161 "-" "PostmanRuntime/7.43.0" +[25-01-2025 23:41:38:4138] warn : POST /api/images/upload-url 404 3ms +[25-01-2025 23:42:30:4230] http : ::ffff:127.0.0.1 - - [25/Jan/2025:20:42:30 +0000] "POST /images/upload-url HTTP/1.1" 404 157 "-" "PostmanRuntime/7.43.0" +[25-01-2025 23:42:30:4230] warn : POST /images/upload-url 404 2ms +[25-01-2025 23:51:04:514] info : Server running on port 5000 +[25-01-2025 23:51:29:5129] http : ::1 - - [25/Jan/2025:20:51:29 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:29:5129] http : ::1 - - [25/Jan/2025:20:51:29 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:29:5129] http : ::1 - - [25/Jan/2025:20:51:29 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:29:5129] info : GET /api/auth/me 304 63ms +[25-01-2025 23:51:29:5129] http : ::1 - - [25/Jan/2025:20:51:29 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:29:5129] info : GET /api/auth/me 304 9ms +[25-01-2025 23:51:31:5131] http : ::1 - - [25/Jan/2025:20:51:31 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:31:5131] info : Login attempt for user: supervisor@mail.ru +[25-01-2025 23:51:31:5131] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[25-01-2025 23:51:31:5131] info : User logged in successfully: supervisor@mail.ru +[25-01-2025 23:51:31:5131] http : ::1 - - [25/Jan/2025:20:51:31 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:31:5131] info : POST /api/auth/login 200 118ms +[25-01-2025 23:51:40:5140] http : ::1 - - [25/Jan/2025:20:51:40 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:40:5140] info : Generated pre-signed URL for upload: uploads/9007b15a-78de-4b64-a3e1-c5dd73fdbe8e-Screenshot 2025-01-24 145245.png +[25-01-2025 23:51:40:5140] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[25-01-2025 23:51:40:5140] http : ::1 - - [25/Jan/2025:20:51:40 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:51:40:5140] info : POST /api/images/upload-url 200 23ms +[25-01-2025 23:52:18:5218] info : Server running on port 5000 +[25-01-2025 23:52:42:5242] http : ::1 - - [25/Jan/2025:20:52:42 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:53:44:5344] info : Generated pre-signed URL for upload: uploads/a7f86705-7bcb-432b-8663-6b5432fa9599-Screenshot 2025-01-24 145245.png +[25-01-2025 23:54:31:5431] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[25-01-2025 23:54:38:5438] http : ::1 - - [25/Jan/2025:20:54:38 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[25-01-2025 23:54:38:5438] info : POST /api/images/upload-url 200 116204ms diff --git a/logs/25-01-2025-server.log.gz b/logs/25-01-2025-server.log.gz new file mode 100644 index 0000000..e69de29 diff --git a/logs/26-01-2025-server.log b/logs/26-01-2025-server.log new file mode 100644 index 0000000..66e8ba3 --- /dev/null +++ b/logs/26-01-2025-server.log @@ -0,0 +1,26 @@ +[26-01-2025 00:04:16:416] http : ::1 - - [25/Jan/2025:21:04:16 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:04:16:416] http : ::1 - - [25/Jan/2025:21:04:16 +0000] "GET /api/auth/me HTTP/1.1" - - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:36:3336] info : Server running on port 5000 +[26-01-2025 00:33:49:3349] http : ::1 - - [25/Jan/2025:21:33:49 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:49:3349] http : ::1 - - [25/Jan/2025:21:33:49 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:49:3349] http : ::1 - - [25/Jan/2025:21:33:49 +0000] "GET /api/auth/me HTTP/1.1" 200 160 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:49:3349] info : GET /api/auth/me 200 141ms +[26-01-2025 00:33:49:3349] http : ::1 - - [25/Jan/2025:21:33:49 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:49:3349] info : GET /api/auth/me 304 9ms +[26-01-2025 00:33:50:3350] http : ::1 - - [25/Jan/2025:21:33:50 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:50:3350] info : Login attempt for user: supervisor@mail.ru +[26-01-2025 00:33:51:3351] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[26-01-2025 00:33:51:3351] info : User logged in successfully: supervisor@mail.ru +[26-01-2025 00:33:51:3351] http : ::1 - - [25/Jan/2025:21:33:51 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:51:3351] info : POST /api/auth/login 200 116ms +[26-01-2025 00:33:56:3356] http : ::1 - - [25/Jan/2025:21:33:56 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:56:3356] info : Generated pre-signed URL for upload: uploads/5925e347-c76f-46e9-95a1-d2846c711dab-Screenshot 2025-01-24 145245.png +[26-01-2025 00:33:56:3356] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[26-01-2025 00:33:56:3356] http : ::1 - - [25/Jan/2025:21:33:56 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:33:56:3356] info : POST /api/images/upload-url 200 15ms +[26-01-2025 00:34:20:3420] http : ::1 - - [25/Jan/2025:21:34:20 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:34:20:3420] info : Generated pre-signed URL for upload: uploads/60c58cdc-2fa4-43d2-aa4f-102770cdae60-Screenshot 2025-01-24 145245.png +[26-01-2025 00:34:20:3420] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[26-01-2025 00:34:20:3420] http : ::1 - - [25/Jan/2025:21:34:20 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[26-01-2025 00:34:20:3420] info : POST /api/images/upload-url 200 18ms +[26-01-2025 00:38:51:3851] info : Server running on port 5000 diff --git a/logs/27-01-2025-server.log b/logs/27-01-2025-server.log new file mode 100644 index 0000000..6bcbc63 --- /dev/null +++ b/logs/27-01-2025-server.log @@ -0,0 +1,57 @@ +[27-01-2025 13:27:58:2758] info : Server running on port 5000 +[27-01-2025 13:28:06:286] http : ::1 - - [27/Jan/2025:10:28:06 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 13:28:06:286] info : Login attempt for user: supervisor@mail.ru +[27-01-2025 13:28:06:286] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[27-01-2025 13:28:06:286] info : User logged in successfully: supervisor@mail.ru +[27-01-2025 13:28:06:286] http : ::1 - - [27/Jan/2025:10:28:06 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 13:28:06:286] info : POST /api/auth/login 200 160ms +[27-01-2025 13:28:14:2814] http : ::1 - - [27/Jan/2025:10:28:14 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 13:28:19:2819] info : Generated pre-signed URL for upload: uploads/259fe36c-ff35-4400-8c44-74ff2a2c458d-Screenshot 2025-01-24 145245.png +[27-01-2025 13:28:19:2819] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[27-01-2025 13:28:19:2819] http : ::1 - - [27/Jan/2025:10:28:19 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 13:28:19:2819] info : POST /api/images/upload-url 200 4263ms +[27-01-2025 13:36:26:3626] http : ::1 - - [27/Jan/2025:10:36:26 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 13:36:29:3629] info : Generated pre-signed URL for upload: uploads/c348af3d-afeb-4777-a7a8-d0051f278290-Screenshot 2025-01-24 145245.png +[27-01-2025 13:36:29:3629] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[27-01-2025 13:36:29:3629] http : ::1 - - [27/Jan/2025:10:36:29 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 13:36:29:3629] info : POST /api/images/upload-url 200 2621ms +[27-01-2025 16:12:16:1216] http : ::1 - - [27/Jan/2025:13:12:16 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:16:1216] http : ::1 - - [27/Jan/2025:13:12:16 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:16:1216] http : ::1 - - [27/Jan/2025:13:12:16 +0000] "GET /api/auth/me HTTP/1.1" 200 160 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:16:1216] info : GET /api/auth/me 200 59ms +[27-01-2025 16:12:16:1216] http : ::1 - - [27/Jan/2025:13:12:16 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:16:1216] info : GET /api/auth/me 304 12ms +[27-01-2025 16:12:17:1217] http : ::1 - - [27/Jan/2025:13:12:17 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:17:1217] info : Login attempt for user: supervisor@mail.ru +[27-01-2025 16:12:18:1218] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[27-01-2025 16:12:18:1218] info : User logged in successfully: supervisor@mail.ru +[27-01-2025 16:12:18:1218] http : ::1 - - [27/Jan/2025:13:12:18 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:18:1218] info : POST /api/auth/login 200 109ms +[27-01-2025 16:12:27:1227] http : ::1 - - [27/Jan/2025:13:12:27 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:33:1233] info : Generated pre-signed URL for upload: uploads/3fee0c33-5558-4306-a04b-99f296d60bf3-Screenshot 2025-01-24 145245.png +[27-01-2025 16:12:33:1233] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[27-01-2025 16:12:33:1233] http : ::1 - - [27/Jan/2025:13:12:33 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:12:33:1233] info : POST /api/images/upload-url 200 5624ms +[27-01-2025 16:13:21:1321] http : ::1 - - [27/Jan/2025:13:13:21 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:13:21:1321] info : Generated pre-signed URL for upload: uploads/d0edc792-08e7-45b3-b46b-c5ba913a6fef-Screenshot 2025-01-24 145245.png +[27-01-2025 16:13:21:1321] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[27-01-2025 16:13:21:1321] http : ::1 - - [27/Jan/2025:13:13:21 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:13:21:1321] info : POST /api/images/upload-url 200 20ms +[27-01-2025 16:22:21:2221] http : ::1 - - [27/Jan/2025:13:22:21 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:22:21:2221] info : Generated pre-signed URL for upload: uploads/73d02369-a7ed-4db8-802b-2e849d2625fa-Screenshot 2025-01-24 145245.png +[27-01-2025 16:22:21:2221] info : Generated upload URL for image: Screenshot 2025-01-24 145245.png +[27-01-2025 16:22:21:2221] http : ::1 - - [27/Jan/2025:13:22:21 +0000] "POST /api/images/upload-url HTTP/1.1" 200 655 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:22:21:2221] info : POST /api/images/upload-url 200 55ms +[27-01-2025 16:24:57:2457] http : ::1 - - [27/Jan/2025:13:24:57 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:24:57:2457] info : Generated pre-signed URL for upload: uploads/097841c3-ad9a-4776-a4e4-8fbc8f8c3f13-ok-11.svg +[27-01-2025 16:24:57:2457] info : Generated upload URL for image: ok-11.svg +[27-01-2025 16:24:57:2457] http : ::1 - - [27/Jan/2025:13:24:57 +0000] "POST /api/images/upload-url HTTP/1.1" 200 605 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:24:57:2457] info : POST /api/images/upload-url 200 20ms +[27-01-2025 16:26:40:2640] http : ::1 - - [27/Jan/2025:13:26:40 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:28:50:2850] info : Generated pre-signed URL for upload: uploads/2717ccb2-d409-4b4f-a690-e75c6cf2b391-ok-11.svg +[27-01-2025 16:29:00:290] info : Generated upload URL for image: ok-11.svg +[27-01-2025 16:29:13:2913] http : ::1 - - [27/Jan/2025:13:29:13 +0000] "POST /api/images/upload-url HTTP/1.1" 200 605 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 16:29:13:2913] info : POST /api/images/upload-url 200 153349ms +[27-01-2025 16:44:37:4437] info : Server running on port 5000 +[27-01-2025 22:39:18:3918] http : ::1 - - [27/Jan/2025:19:39:18 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" +[27-01-2025 22:39:18:3918] http : ::1 - - [27/Jan/2025:19:39:18 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" diff --git a/logs/29-01-2025-server.log b/logs/29-01-2025-server.log new file mode 100644 index 0000000..00e0dac --- /dev/null +++ b/logs/29-01-2025-server.log @@ -0,0 +1,72 @@ +[29-01-2025 22:12:02:122] info : Server running on port 5000 +[29-01-2025 22:12:10:1210] http : ::1 - - [29/Jan/2025:19:12:10 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:12:10:1210] info : Login attempt for user: supervisor@mail.ru +[29-01-2025 22:12:10:1210] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[29-01-2025 22:12:10:1210] info : User logged in successfully: supervisor@mail.ru +[29-01-2025 22:12:10:1210] http : ::1 - - [29/Jan/2025:19:12:10 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:12:10:1210] info : POST /api/auth/login 200 250ms +[29-01-2025 22:12:25:1225] http : ::1 - - [29/Jan/2025:19:12:25 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:12:25:1225] http : ::1 - - [29/Jan/2025:19:12:25 +0000] "POST /api/images/upload-url HTTP/1.1" 400 38 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:12:25:1225] warn : POST /api/images/upload-url 400 62ms +[29-01-2025 22:13:30:1330] info : Server running on port 5000 +[29-01-2025 22:13:43:1343] http : ::1 - - [29/Jan/2025:19:13:43 +0000] "OPTIONS /api/images/upload-url HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:22:08:228] info : Server running on port 5000 +[29-01-2025 22:25:47:2547] info : Server running on port 5000 +[29-01-2025 22:26:53:2653] http : ::1 - - [29/Jan/2025:19:26:53 +0000] "GET /api/check-env-key?provider=Groq HTTP/1.1" 404 156 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:26:53:2653] warn : GET /api/check-env-key?provider=Groq 404 4ms +[29-01-2025 22:56:42:5642] info : Server running on port 5000 +[29-01-2025 22:56:45:5645] http : ::1 - - [29/Jan/2025:19:56:45 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:56:45:5645] info : Login attempt for user: supervisor@mail.ru +[29-01-2025 22:56:45:5645] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[29-01-2025 22:56:45:5645] info : User logged in successfully: supervisor@mail.ru +[29-01-2025 22:56:45:5645] http : ::1 - - [29/Jan/2025:19:56:45 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:56:45:5645] info : POST /api/auth/login 200 130ms +[29-01-2025 22:57:30:5730] info : Server running on port 5000 +[29-01-2025 22:57:43:5743] http : ::1 - - [29/Jan/2025:19:57:43 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:57:43:5743] http : ::1 - - [29/Jan/2025:19:57:43 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:57:43:5743] http : ::1 - - [29/Jan/2025:19:57:43 +0000] "GET /api/auth/me HTTP/1.1" 200 160 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:57:43:5743] info : GET /api/auth/me 200 75ms +[29-01-2025 22:57:43:5743] http : ::1 - - [29/Jan/2025:19:57:43 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:57:43:5743] info : GET /api/auth/me 304 12ms +[29-01-2025 22:57:44:5744] http : ::1 - - [29/Jan/2025:19:57:44 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:57:44:5744] info : Login attempt for user: supervisor@mail.ru +[29-01-2025 22:57:44:5744] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[29-01-2025 22:57:44:5744] info : User logged in successfully: supervisor@mail.ru +[29-01-2025 22:57:44:5744] http : ::1 - - [29/Jan/2025:19:57:44 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 22:57:44:5744] info : POST /api/auth/login 200 121ms +[29-01-2025 23:00:32:032] http : ::1 - - [29/Jan/2025:20:00:32 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:00:32:032] http : ::1 - - [29/Jan/2025:20:00:32 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:00:32:032] http : ::1 - - [29/Jan/2025:20:00:32 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:00:32:032] info : GET /api/auth/me 304 20ms +[29-01-2025 23:00:32:032] http : ::1 - - [29/Jan/2025:20:00:32 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:00:32:032] info : GET /api/auth/me 304 12ms +[29-01-2025 23:00:34:034] http : ::1 - - [29/Jan/2025:20:00:34 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:00:34:034] info : Login attempt for user: supervisor@mail.ru +[29-01-2025 23:00:34:034] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[29-01-2025 23:00:34:034] info : User logged in successfully: supervisor@mail.ru +[29-01-2025 23:00:34:034] http : ::1 - - [29/Jan/2025:20:00:34 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:00:34:034] info : POST /api/auth/login 200 76ms +[29-01-2025 23:02:01:21] http : ::1 - - [29/Jan/2025:20:02:01 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:02:01:21] http : ::1 - - [29/Jan/2025:20:02:01 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:02:01:21] http : ::1 - - [29/Jan/2025:20:02:01 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:02:01:21] info : GET /api/auth/me 304 22ms +[29-01-2025 23:02:01:21] http : ::1 - - [29/Jan/2025:20:02:01 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:02:01:21] info : GET /api/auth/me 304 233ms +[29-01-2025 23:02:05:25] http : ::1 - - [29/Jan/2025:20:02:05 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:02:05:25] info : Login attempt for user: supervisor@mail.ru +[29-01-2025 23:02:05:25] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[29-01-2025 23:02:05:25] info : User logged in successfully: supervisor@mail.ru +[29-01-2025 23:02:05:25] http : ::1 - - [29/Jan/2025:20:02:05 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:02:05:25] info : POST /api/auth/login 200 74ms +[29-01-2025 23:03:03:33] http : ::1 - - [29/Jan/2025:20:03:03 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:03:03:33] http : ::1 - - [29/Jan/2025:20:03:03 +0000] "OPTIONS /api/auth/me HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:03:03:33] http : ::1 - - [29/Jan/2025:20:03:03 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:03:03:33] info : GET /api/auth/me 304 67ms +[29-01-2025 23:03:03:33] http : ::1 - - [29/Jan/2025:20:03:03 +0000] "GET /api/auth/me HTTP/1.1" 304 - "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:03:03:33] info : GET /api/auth/me 304 10ms +[29-01-2025 23:03:27:327] http : ::1 - - [29/Jan/2025:20:03:27 +0000] "OPTIONS /api/auth/login HTTP/1.1" 204 0 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:03:27:327] info : Login attempt for user: supervisor@mail.ru +[29-01-2025 23:03:29:329] debug : Generated token for user: d7535049-d839-401f-a027-dcec13ebdf28 +[29-01-2025 23:03:29:329] info : User logged in successfully: supervisor@mail.ru +[29-01-2025 23:03:29:329] http : ::1 - - [29/Jan/2025:20:03:29 +0000] "POST /api/auth/login HTTP/1.1" 200 367 "http://127.0.0.1:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" +[29-01-2025 23:03:29:329] info : POST /api/auth/login 200 1142ms diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..24c0a0c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4307 @@ +{ + "name": "russcult_server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "russcult_server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@aws-sdk/client-s3": "^3.734.0", + "@aws-sdk/s3-request-presigner": "^3.734.0", + "@prisma/client": "^6.2.1", + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "dotenv": "^16.4.7", + "express": "^4.21.2", + "jsonwebtoken": "^9.0.2", + "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", + "multer-s3": "^3.0.1", + "sharp": "^0.33.5", + "uuid": "^11.0.5", + "winston": "^3.17.0", + "winston-daily-rotate-file": "^5.0.0", + "zod": "^3.24.1" + }, + "devDependencies": { + "@types/bcryptjs": "^2.4.6", + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", + "@types/jsonwebtoken": "^9.0.7", + "@types/morgan": "^1.9.9", + "@types/multer": "^1.4.12", + "@types/multer-s3": "^3.0.3", + "@types/node": "^22.10.7", + "@types/winston": "^2.4.4", + "prisma": "^6.2.1", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.735.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.735.0.tgz", + "integrity": "sha512-6NcxX06c4tnnu6FTFiyS8shoYLy+8TvIDkYjJ5r9tvbaysOptUKQdolOuh7+Lz95QyaqiznpCsNTxsfywLXcqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.734.0", + "@aws-sdk/credential-provider-node": "3.734.0", + "@aws-sdk/middleware-bucket-endpoint": "3.734.0", + "@aws-sdk/middleware-expect-continue": "3.734.0", + "@aws-sdk/middleware-flexible-checksums": "3.735.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-location-constraint": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-sdk-s3": "3.734.0", + "@aws-sdk/middleware-ssec": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.734.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/signature-v4-multi-region": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.734.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.734.0", + "@aws-sdk/xml-builder": "3.734.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.1", + "@smithy/eventstream-serde-browser": "^4.0.1", + "@smithy/eventstream-serde-config-resolver": "^4.0.1", + "@smithy/eventstream-serde-node": "^4.0.1", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-blob-browser": "^4.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/hash-stream-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/md5-js": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.2", + "@smithy/middleware-retry": "^4.0.3", + "@smithy/middleware-serde": "^4.0.1", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.3", + "@smithy/util-defaults-mode-node": "^4.0.3", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-stream": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.734.0.tgz", + "integrity": "sha512-oerepp0mut9VlgTwnG5Ds/lb0C0b2/rQ+hL/rF6q+HGKPfGsCuPvFx1GtwGKCXd49ase88/jVgrhcA9OQbz3kg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.734.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.734.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.734.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.734.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.1", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.2", + "@smithy/middleware-retry": "^4.0.3", + "@smithy/middleware-serde": "^4.0.1", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.3", + "@smithy/util-defaults-mode-node": "^4.0.3", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.734.0.tgz", + "integrity": "sha512-SxnDqf3vobdm50OLyAKfqZetv6zzwnSqwIwd3jrbopxxHKqNIM/I0xcYjD6Tn+mPig+u7iRKb9q3QnEooFTlmg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/core": "^3.1.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.734.0.tgz", + "integrity": "sha512-gtRkzYTGafnm1FPpiNO8VBmJrYMoxhDlGPYDVcijzx3DlF8dhWnowuSBCxLSi+MJMx5hvwrX2A+e/q0QAeHqmw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.734.0.tgz", + "integrity": "sha512-JFSL6xhONsq+hKM8xroIPhM5/FOhiQ1cov0lZxhzZWj6Ai3UAjucy3zyIFDr9MgP1KfCYNdvyaUq9/o+HWvEDg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.2", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.734.0.tgz", + "integrity": "sha512-HEyaM/hWI7dNmb4NhdlcDLcgJvrilk8G4DQX6qz0i4pBZGC2l4iffuqP8K6ZQjUfz5/6894PzeFuhTORAMd+cg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/credential-provider-env": "3.734.0", + "@aws-sdk/credential-provider-http": "3.734.0", + "@aws-sdk/credential-provider-process": "3.734.0", + "@aws-sdk/credential-provider-sso": "3.734.0", + "@aws-sdk/credential-provider-web-identity": "3.734.0", + "@aws-sdk/nested-clients": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.734.0.tgz", + "integrity": "sha512-9NOSNbkPVb91JwaXOhyfahkzAwWdMsbWHL6fh5/PHlXYpsDjfIfT23I++toepNF2nODAJNLnOEHGYIxgNgf6jQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.734.0", + "@aws-sdk/credential-provider-http": "3.734.0", + "@aws-sdk/credential-provider-ini": "3.734.0", + "@aws-sdk/credential-provider-process": "3.734.0", + "@aws-sdk/credential-provider-sso": "3.734.0", + "@aws-sdk/credential-provider-web-identity": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.734.0.tgz", + "integrity": "sha512-zvjsUo+bkYn2vjT+EtLWu3eD6me+uun+Hws1IyWej/fKFAqiBPwyeyCgU7qjkiPQSXqk1U9+/HG9IQ6Iiz+eBw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.734.0.tgz", + "integrity": "sha512-cCwwcgUBJOsV/ddyh1OGb4gKYWEaTeTsqaAK19hiNINfYV/DO9r4RMlnWAo84sSBfJuj9shUNsxzyoe6K7R92Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.734.0", + "@aws-sdk/core": "3.734.0", + "@aws-sdk/token-providers": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.734.0.tgz", + "integrity": "sha512-t4OSOerc+ppK541/Iyn1AS40+2vT/qE+MFMotFkhCgCJbApeRF2ozEdnDN6tGmnl4ybcUuxnp9JWLjwDVlR/4g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/nested-clients": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.735.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.735.0.tgz", + "integrity": "sha512-rKCtjP1MC+coDXFJUpxVEZXY5qShE4aduWZTlmEdGptu81GgM6efNAU/GvMIB6Ttju/m+VqLYLWBuxG5js7Uhw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.2", + "@smithy/smithy-client": "^4.1.2", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.735.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz", + "integrity": "sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-arn-parser": "3.723.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.734.0.tgz", + "integrity": "sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.735.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.735.0.tgz", + "integrity": "sha512-Tx7lYTPwQFRe/wQEHMR6Drh/S+X0ToAEq1Ava9QyxV1riwtepzRLojpNDELFb3YQVVYbX7FEiBMCJLMkmIIY+A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz", + "integrity": "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.734.0.tgz", + "integrity": "sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz", + "integrity": "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz", + "integrity": "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.734.0.tgz", + "integrity": "sha512-zeZPenDhkP/RXYMFG3exhNOe2Qukg2l2KpIjxq9o66meELiTULoIXjCmgPoWcM8zzrue06SBdTsaJDHfDl2vdA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-arn-parser": "3.723.0", + "@smithy/core": "^3.1.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.734.0.tgz", + "integrity": "sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.734.0.tgz", + "integrity": "sha512-MFVzLWRkfFz02GqGPjqSOteLe5kPfElUrXZft1eElnqulqs6RJfVSpOV7mO90gu293tNAeggMWAVSGRPKIYVMg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.734.0", + "@smithy/core": "^3.1.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.734.0.tgz", + "integrity": "sha512-iph2XUy8UzIfdJFWo1r0Zng9uWj3253yvW9gljhtu+y/LNmNvSnJxQk1f3D2BC5WmcoPZqTS3UsycT3mLPSzWA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.734.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.734.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.734.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.734.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.1", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.2", + "@smithy/middleware-retry": "^4.0.3", + "@smithy/middleware-serde": "^4.0.1", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.3", + "@smithy/util-defaults-mode-node": "^4.0.3", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz", + "integrity": "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.734.0.tgz", + "integrity": "sha512-tMztlTKcjmf2ZcHKTNkdh1bBs8wUVaorFuXauew0OnajZymTOdphn5KSL//dK5POM7x36iT/ddnSBzkWaPH3/A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-format-url": "3.734.0", + "@smithy/middleware-endpoint": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.734.0.tgz", + "integrity": "sha512-GSRP8UH30RIYkcpPILV4pWrKFjRmmNjtUd41HTKWde5GbjJvNYpxqFXw2aIJHjKTw/js3XEtGSNeTaQMVVt3CQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.734.0.tgz", + "integrity": "sha512-2U6yWKrjWjZO8Y5SHQxkFvMVWHQWbS0ufqfAIBROqmIZNubOL7jXCiVdEFekz6MZ9LF2tvYGnOW4jX8OKDGfIw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/nested-clients": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz", + "integrity": "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz", + "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.734.0.tgz", + "integrity": "sha512-w2+/E88NUbqql6uCVAsmMxDQKu7vsKV0KqhlQb0lL+RCq4zy07yXYptVNs13qrnuTfyX7uPXkXrlugvK9R1Ucg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "@smithy/util-endpoints": "^3.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.734.0.tgz", + "integrity": "sha512-TxZMVm8V4aR/QkW9/NhujvYpPZjUYqzLwSge5imKZbWFR806NP7RMwc5ilVuHF/bMOln/cVHkl42kATElWBvNw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz", + "integrity": "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz", + "integrity": "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.734.0.tgz", + "integrity": "sha512-c6Iinh+RVQKs6jYUFQ64htOU2HUXFQ3TVx+8Tu3EDF19+9vzWi9UukhIMH9rqyyEXIAkk9XL7avt8y2Uyw2dGA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.734.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.734.0.tgz", + "integrity": "sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@prisma/client": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.2.1.tgz", + "integrity": "sha512-msKY2iRLISN8t5X0Tj7hU0UWet1u0KuxSPHWuf3IRkB4J95mCvGpyQBfQ6ufcmvKNOMQSq90O2iUmJEN2e5fiA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.2.1.tgz", + "integrity": "sha512-0KItvt39CmQxWkEw6oW+RQMD6RZ43SJWgEUnzxN8VC9ixMysa7MzZCZf22LCK5DSooiLNf8vM3LHZm/I/Ni7bQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.2.1.tgz", + "integrity": "sha512-lTBNLJBCxVT9iP5I7Mn6GlwqAxTpS5qMERrhebkUhtXpGVkBNd/jHnNJBZQW4kGDCKaQg/r2vlJYkzOHnAb7ZQ==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.2.1", + "@prisma/engines-version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69", + "@prisma/fetch-engine": "6.2.1", + "@prisma/get-platform": "6.2.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69.tgz", + "integrity": "sha512-7tw1qs/9GWSX6qbZs4He09TOTg1ff3gYsB3ubaVNN0Pp1zLm9NC5C5MZShtkz7TyQjx7blhpknB7HwEhlG+PrQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.2.1.tgz", + "integrity": "sha512-OO7O9d6Mrx2F9i+Gu1LW+DGXXyUFkP7OE5aj9iBfA/2jjDXEJjqa9X0ZmM9NZNo8Uo7ql6zKm6yjDcbAcRrw1A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.2.1", + "@prisma/engines-version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69", + "@prisma/get-platform": "6.2.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.2.1.tgz", + "integrity": "sha512-zp53yvroPl5m5/gXYLz7tGCNG33bhG+JYCm74ohxOq1pPnrL47VQYFfF3RbTZ7TzGWCrR3EtoiYMywUBw7UK6Q==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.2.1" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz", + "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz", + "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.1.tgz", + "integrity": "sha512-hhUZlBWYuh9t6ycAcN90XOyG76C1AzwxZZgaCVPMYpWqqk9uMFo7HGG5Zu2cEhCJn7DdOi5krBmlibWWWPgdsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz", + "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz", + "integrity": "sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz", + "integrity": "sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz", + "integrity": "sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz", + "integrity": "sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz", + "integrity": "sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz", + "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.1.tgz", + "integrity": "sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz", + "integrity": "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.1.tgz", + "integrity": "sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz", + "integrity": "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.1.tgz", + "integrity": "sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz", + "integrity": "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.2.tgz", + "integrity": "sha512-Z9m67CXizGpj8CF/AW/7uHqYNh1VXXOn9Ap54fenWsCa0HnT4cJuE61zqG3cBkTZJDCy0wHJphilI41co/PE5g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.1.1", + "@smithy/middleware-serde": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.3.tgz", + "integrity": "sha512-TiKwwQTwUDeDtwWW8UWURTqu7s6F3wN2pmziLU215u7bqpVT9Mk2oEvURjpRLA+5XeQhM68R5BpAGzVtomsqgA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.1.tgz", + "integrity": "sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz", + "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz", + "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz", + "integrity": "sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz", + "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz", + "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz", + "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz", + "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", + "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz", + "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz", + "integrity": "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.2.tgz", + "integrity": "sha512-0yApeHWBqocelHGK22UivZyShNxFbDNrgREBllGh5Ws0D0rg/yId/CJfeoKKpjbfY2ju8j6WgDUGZHYQmINZ5w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.1.1", + "@smithy/middleware-endpoint": "^4.0.2", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz", + "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.3.tgz", + "integrity": "sha512-7c5SF1fVK0EOs+2EOf72/qF199zwJflU1d02AevwKbAUPUZyE9RUZiyJxeUmhVxfKDWdUKaaVojNiaDQgnHL9g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.3.tgz", + "integrity": "sha512-CVnD42qYD3JKgDlImZ9+On+MqJHzq9uJgPbMdeBE8c2x8VJ2kf2R3XO/yVFx+30ts5lD/GlL0eFIShY3x9ROgQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.2", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz", + "integrity": "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz", + "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz", + "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.2.tgz", + "integrity": "sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.2", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.2.tgz", + "integrity": "sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/bcryptjs": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz", + "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.5.tgz", + "integrity": "sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/morgan": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.9.tgz", + "integrity": "sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/multer": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.12.tgz", + "integrity": "sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/multer-s3": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/multer-s3/-/multer-s3-3.0.3.tgz", + "integrity": "sha512-VgWygI9UwyS7loLithUUi0qAMIDWdNrERS2Sb06UuPYiLzKuIFn2NgL7satyl4v8sh/LLoU7DiPanvbQaRg9Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-s3": "^3.0.0", + "@types/multer": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/winston": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz", + "integrity": "sha512-BVGCztsypW8EYwJ+Hq+QNYiT/MUyCif0ouBH+flrY66O5W+KIXAMML6E/0fJpm7VjIzgangahl5S03bJJQGrZw==", + "deprecated": "This is a stub types definition. winston provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "winston": "*" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.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==", + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/file-stream-rotator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", + "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.1" + } + }, + "node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/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==", + "license": "MIT" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/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==", + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/multer-s3": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/multer-s3/-/multer-s3-3.0.1.tgz", + "integrity": "sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==", + "license": "MIT", + "dependencies": { + "@aws-sdk/lib-storage": "^3.46.0", + "file-type": "^3.3.0", + "html-comment-regex": "^1.1.2", + "run-parallel": "^1.1.6" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/prisma": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.2.1.tgz", + "integrity": "sha512-hhyM0H13pQleQ+br4CkzGizS5I0oInoeTw3JfLw1BRZduBSQxPILlJLwi+46wZzj9Je7ndyQEMGw/n5cN2fknA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "6.2.1" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/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==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/sharp/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/sharp/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-daily-rotate-file": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", + "license": "MIT", + "dependencies": { + "file-stream-rotator": "^0.6.1", + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bbb5534 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "russcult_server", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "build": "tsc", + "start": "node dist/server.js", + "dev": "ts-node src/server.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "@aws-sdk/client-s3": "^3.734.0", + "@aws-sdk/s3-request-presigner": "^3.734.0", + "@prisma/client": "^6.2.1", + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "dotenv": "^16.4.7", + "express": "^4.21.2", + "jsonwebtoken": "^9.0.2", + "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", + "multer-s3": "^3.0.1", + "sharp": "^0.33.5", + "uuid": "^11.0.5", + "winston": "^3.17.0", + "winston-daily-rotate-file": "^5.0.0", + "zod": "^3.24.1" + }, + "devDependencies": { + "@types/bcryptjs": "^2.4.6", + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", + "@types/jsonwebtoken": "^9.0.7", + "@types/morgan": "^1.9.9", + "@types/multer": "^1.4.12", + "@types/multer-s3": "^3.0.3", + "@types/node": "^22.10.7", + "@types/winston": "^2.4.4", + "prisma": "^6.2.1", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + } +} diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..0b75737 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,70 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model User { + id String @id @default(uuid()) + email String @unique + password String + displayName String + isAdmin Boolean @default(false) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + permissions Json + articles Article[] +} + +model Article { + id String @id @default(uuid()) + title String + excerpt String + content String + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int + city String + coverImage String + readTime Int + likes Int @default(0) + dislikes Int @default(0) + publishedAt DateTime @default(now()) + author User @relation(fields: [authorId], references: [id]) + authorId String + gallery GalleryImage[] +} + +model Category { + id Int @id + name String @unique + articles Article[] +} + +model GalleryImage { + id String @id @default(uuid()) + url String + caption String + alt String + width Int + height Int + size Int + format String + article Article @relation(fields: [articleId], references: [id], onDelete: Cascade) + articleId String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + order Int @default(0) +} + +model UserReaction { + id String @id @default(uuid()) + userId String + articleId String + reaction String // 'like' or 'dislike' + createdAt DateTime @default(now()) + + @@unique([userId, articleId]) +} diff --git a/public/images/main-bg.webp b/public/images/main-bg.webp new file mode 100644 index 0000000..d09eec5 Binary files /dev/null and b/public/images/main-bg.webp differ diff --git a/src/config/imageResolutions.ts b/src/config/imageResolutions.ts new file mode 100644 index 0000000..be035ac --- /dev/null +++ b/src/config/imageResolutions.ts @@ -0,0 +1,28 @@ +import { ImageResolution } from '../types/image'; + +export const imageResolutions: ImageResolution[] = [ + { + id: 'thumbnail', + width: 300, + height: 300, + label: 'Thumbnail (300x300)' + }, + { + id: 'medium', + width: 800, + height: 600, + label: 'Medium (800x600)' + }, + { + id: 'large', + width: 1920, + height: 1080, + label: 'Large (1920x1080)' + }, + { + id: 'original', + width: 0, // 0 means keep original dimensions + height: 0, + label: 'Original Size' + } +]; \ No newline at end of file diff --git a/src/config/logger.ts b/src/config/logger.ts new file mode 100644 index 0000000..5b497bd --- /dev/null +++ b/src/config/logger.ts @@ -0,0 +1,88 @@ +import winston from 'winston'; +import 'winston-daily-rotate-file'; +import path from 'path'; + +// Define log levels +const levels = { + error: 0, + warn: 1, + info: 2, + http: 3, + debug: 4, +}; + +// Define log level based on environment +const level = () => { + const env = process.env.NODE_ENV || 'development'; + return env === 'development' ? 'debug' : 'warn'; +}; + +// Define colors for each level +const colors = { + error: 'red', + warn: 'yellow', + info: 'green', + http: 'magenta', + debug: 'blue', +}; + +// Add colors to winston +winston.addColors(colors); + +// Custom format for logging +const logSimpleFormat = winston.format.combine( + winston.format.timestamp({ format: 'DD-MM-YYYY HH:mm:ss:ms' }), + winston.format.printf( + ({ timestamp, level, message }) => `${timestamp} [${level}] ${message}` + ) +); + +// Custom format for logging +const logFormat = winston.format.combine( + winston.format.timestamp({ format: 'DD-MM-YYYY HH:mm:ss:ms' }), + winston.format.printf((info) => { + const maxLevelLength = 5; // "error" — самый длинный уровень + const paddedLevel = info.level.padEnd(maxLevelLength, ' '); // Выровнять уровень + return `[${info.timestamp}] ${paddedLevel} : ${info.message}`; + }) +); + +// File transport options with uncolored plain text format +const fileRotateTransport = new winston.transports.DailyRotateFile({ + filename: path.join('logs', '%DATE%-server.log'), + datePattern: 'DD-MM-YYYY', + zippedArchive: true, + maxSize: '20m', + maxFiles: '14d', + format: winston.format.combine( + winston.format.uncolorize(), // Убираем цвета для файлового формата + logFormat // Используем текстовый формат без JSON + ), +}); + +// Create the logger +const logger = winston.createLogger({ + level: level(), + levels, + transports: [ + // Логи в файл + fileRotateTransport, + + // Логи в консоль с цветами + new winston.transports.Console({ + format: winston.format.combine( + winston.format.colorize({ all: true }), + logFormat + ), + }), + ], +}); + +// Create a stream object for Morgan middleware +const stream = { + write: (message: string) => { + logger.http(message.trim()); + }, +}; + +export { logger, stream }; diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts new file mode 100644 index 0000000..9b238a5 --- /dev/null +++ b/src/lib/prisma.ts @@ -0,0 +1,12 @@ +import { PrismaClient } from '@prisma/client'; + +// Prevent multiple instances of Prisma Client in development +declare global { + var prisma: PrismaClient | undefined; +} + +export const prisma = global.prisma || new PrismaClient(); + +if (process.env.NODE_ENV !== 'production') { + global.prisma = prisma; +} \ No newline at end of file diff --git a/src/middleware/auth/auth.ts b/src/middleware/auth/auth.ts new file mode 100644 index 0000000..7896dd2 --- /dev/null +++ b/src/middleware/auth/auth.ts @@ -0,0 +1,32 @@ +import { Response, NextFunction } from 'express'; +import { AuthRequest } from './types'; +import { extractToken } from './extractToken'; +import { validateToken } from './validateToken'; +import { getUser } from './getUser'; + +export async function auth(req: AuthRequest, res: Response, next: NextFunction) { + try { + const token = extractToken(req); + if (!token) { + res.status(401).json({ error: 'No token provided' }); + return + } + + const payload = validateToken(token); + if (!payload) { + res.status(401).json({ error: 'Invalid token' }); + return + } + + const user = await getUser(payload.id); + if (!user) { + res.status(401).json({ error: 'User not found' }); + return + } + + req.user = user; + next(); + } catch { + res.status(401).json({ error: 'Authentication failed' }); + } +} \ No newline at end of file diff --git a/src/middleware/auth/extractToken.ts b/src/middleware/auth/extractToken.ts new file mode 100644 index 0000000..f722490 --- /dev/null +++ b/src/middleware/auth/extractToken.ts @@ -0,0 +1,11 @@ +import { Request } from 'express'; + +export function extractToken(req: Request): string | null { + const authHeader = req.header('Authorization'); + if (!authHeader) return null; + + const [bearer, token] = authHeader.split(' '); + if (bearer !== 'Bearer' || !token) return null; + + return token; +} \ No newline at end of file diff --git a/src/middleware/auth/getUser.ts b/src/middleware/auth/getUser.ts new file mode 100644 index 0000000..0dec339 --- /dev/null +++ b/src/middleware/auth/getUser.ts @@ -0,0 +1,22 @@ +import { PrismaClient } from '@prisma/client'; +import { User } from '../../types/auth'; + +const prisma = new PrismaClient(); + +export async function getUser(userId: string): Promise { + try { + const user = await prisma.user.findUnique({ + where: { id: userId }, + select: { + id: true, + email: true, + displayName: true, + permissions: true + } + }); + + return user as User | null; + } catch { + return null; + } +} \ No newline at end of file diff --git a/src/middleware/auth/index.ts b/src/middleware/auth/index.ts new file mode 100644 index 0000000..dfe0edf --- /dev/null +++ b/src/middleware/auth/index.ts @@ -0,0 +1,5 @@ +export { auth } from './auth'; +export { extractToken } from './extractToken'; +export { validateToken } from './validateToken'; +export { getUser } from './getUser'; +export * from './types'; \ No newline at end of file diff --git a/src/middleware/auth/types.ts b/src/middleware/auth/types.ts new file mode 100644 index 0000000..1f80272 --- /dev/null +++ b/src/middleware/auth/types.ts @@ -0,0 +1,12 @@ +import { Request } from 'express'; +import { User } from '../../types/auth'; + +export interface AuthRequest extends Request { + user?: User; +} + +export interface JwtPayload { + id: string; + iat?: number; + exp?: number; +} \ No newline at end of file diff --git a/src/middleware/auth/validateToken.ts b/src/middleware/auth/validateToken.ts new file mode 100644 index 0000000..2d41881 --- /dev/null +++ b/src/middleware/auth/validateToken.ts @@ -0,0 +1,32 @@ +import jwt from 'jsonwebtoken'; +import { JwtPayload } from './types.js'; + +export function validateToken(token: string): JwtPayload | null { + const secret = process.env.JWT_SECRET; + if (!secret) { + console.error('JWT_SECRET is not defined'); + throw new Error('Missing JWT_SECRET environment variable'); + } + + try { + const decoded = jwt.verify(token, secret); + + // Проверяем, что полезная нагрузка соответствует интерфейсу JwtPayload + if (isJwtPayload(decoded)) { + return decoded; + } else { + console.error('Invalid token payload structure'); + return null; + } + } catch (error) { + console.error('Token validation error:', error); + return null; + } +} + +// Функция проверки структуры полезной нагрузки +function isJwtPayload(payload: unknown): payload is JwtPayload { + return ( + typeof payload === 'object' && payload !== null && 'id' in payload && 'iat' in payload && 'exp' in payload + ); +} diff --git a/src/middleware/error/errorHandler.ts b/src/middleware/error/errorHandler.ts new file mode 100644 index 0000000..26ad5c3 --- /dev/null +++ b/src/middleware/error/errorHandler.ts @@ -0,0 +1,20 @@ +import { Request, Response, NextFunction } from 'express'; + +export interface AppError extends Error { + statusCode?: number; +} + +export function errorHandler( + err: AppError, + req: Request, + res: Response, + next: NextFunction +) { + const statusCode = err.statusCode || 500; + const message = err.message || 'Internal Server Error'; + + res.status(statusCode).json({ + error: message, + stack: process.env.NODE_ENV === 'development' ? err.stack : undefined + }); +} \ No newline at end of file diff --git a/src/middleware/error/errorLogger.ts b/src/middleware/error/errorLogger.ts new file mode 100644 index 0000000..c6d9a6c --- /dev/null +++ b/src/middleware/error/errorLogger.ts @@ -0,0 +1,27 @@ +import { Request, Response, NextFunction } from 'express'; +import { logger } from '../../config/logger'; + +export interface AppError extends Error { + statusCode?: number; + details?: never; +} + +export const errorLogger = ( + err: AppError, + req: Request, + res: Response, + next: NextFunction +) => { + const errorDetails = { + message: err.message, + stack: err.stack, + timestamp: new Date().toISOString(), + path: req.path, + method: req.method, + statusCode: err.statusCode || 500, + details: err.details, + }; + + logger.error('Application error:', errorDetails); + next(err); +}; \ No newline at end of file diff --git a/src/middleware/logging/requestLogger.ts b/src/middleware/logging/requestLogger.ts new file mode 100644 index 0000000..81ab8c2 --- /dev/null +++ b/src/middleware/logging/requestLogger.ts @@ -0,0 +1,21 @@ +import { Request, Response, NextFunction } from 'express'; +import { logger } from '../../config/logger'; + +export const requestLogger = (req: Request, res: Response, next: NextFunction) => { + const start = Date.now(); + + res.on('finish', () => { + const duration = Date.now() - start; + const message = `${req.method} ${req.originalUrl} ${res.statusCode} ${duration}ms`; + + if (res.statusCode >= 500) { + logger.error(message); + } else if (res.statusCode >= 400) { + logger.warn(message); + } else { + logger.info(message); + } + }); + + next(); +}; \ No newline at end of file diff --git a/src/middleware/validation/validateRequest.ts b/src/middleware/validation/validateRequest.ts new file mode 100644 index 0000000..beffd2a --- /dev/null +++ b/src/middleware/validation/validateRequest.ts @@ -0,0 +1,17 @@ +import { Request, Response, NextFunction } from 'express'; +import { Schema } from 'zod'; + +export function validateRequest(schema: Schema) { + return async (req: Request, res: Response, next: NextFunction) => { + try { + await schema.parseAsync({ + body: req.body, + query: req.query, + params: req.params + }); + next(); + } catch (error) { + res.status(400).json({ error: 'Invalid request data' }); + } + }; +} \ No newline at end of file diff --git a/src/routes/articles/controllers/crud.ts b/src/routes/articles/controllers/crud.ts new file mode 100644 index 0000000..4291c83 --- /dev/null +++ b/src/routes/articles/controllers/crud.ts @@ -0,0 +1,187 @@ +import { Request, Response } from 'express'; +import { prisma } from '../../../lib/prisma'; +import { AuthRequest } from '../../../middleware/auth'; +import { checkPermission } from '../../../utils/permissions'; +import { logger } from '../../../config/logger'; + +export async function getArticle(req: Request, res: Response) : Promise { + try { + const article = await prisma.article.findUnique({ + where: { id: req.params.id }, + include: { + category: true, + author: { + select: { + id: true, + displayName: true, + email: true + } + } + } + }); + + if (!article) { + logger.warn(`Article not found: ${req.params.id}`); + res.status(404).json({ error: 'Article not found' }); + return + } + + res.json(article); + } catch (error) { + logger.error('Error fetching article:', error); + res.status(500).json({ error: 'Server error' }); + } +} + +export async function createArticle(req: AuthRequest, res: Response) : Promise { + try { + const { title, excerpt, content, categoryId, city, coverImage, readTime } = req.body; + + if (!req.user) { + logger.warn('Unauthorized article creation attempt'); + res.status(401).json({ error: 'Not authenticated' }); + return + } + + const category = await prisma.category.findUnique({ + where: { id: parseInt(categoryId) } + }); + + if (!category) { + logger.warn(`Invalid category ID: ${categoryId}`); + res.status(400).json({ error: 'Invalid category' }); + return + } + + if (!checkPermission(req.user, categoryId, 'create')) { + logger.warn(`Permission denied for user ${req.user.id} to create article in category ${category.name}`); + res.status(403).json({ error: 'Permission denied' }); + return + } + + const article = await prisma.article.create({ + data: { + title, + excerpt, + content, + categoryId: parseInt(categoryId), + city, + coverImage, + readTime, + authorId: req.user.id + }, + include: { + category: true, + author: { + select: { + id: true, + displayName: true, + email: true + } + } + } + }); + + logger.info(`Article created: ${article.id} by user ${req.user.id}`); + res.status(201).json(article); + } catch (error) { + logger.error('Error creating article:', error); + res.status(500).json({ error: 'Server error' }); + } +} + +export async function updateArticle(req: AuthRequest, res: Response) : Promise { + try { + const { title, excerpt, content, categoryId, city, coverImage, readTime } = req.body; + + if (!req.user) { + res.status(401).json({ error: 'Not authenticated' }); + return + } + + const article = await prisma.article.findUnique({ + where: { id: req.params.id }, + include: { category: true } + }); + + if (!article) { + res.status(404).json({ error: 'Article not found' }); + return + } + + const category = await prisma.category.findUnique({ + where: { id: parseInt(categoryId) } + }); + + if (!category) { + res.status(400).json({ error: 'Invalid category' }); + return + } + + if (!checkPermission(req.user, categoryId, 'edit')) { + res.status(403).json({ error: 'Permission denied' }); + return + } + + const updatedArticle = await prisma.article.update({ + where: { id: req.params.id }, + data: { + title, + excerpt, + content, + categoryId: parseInt(categoryId), + city, + coverImage, + readTime + }, + include: { + category: true, + author: { + select: { + id: true, + displayName: true, + email: true + } + } + } + }); + + res.json(updatedArticle); + } catch (error) { + logger.error('Error updating article:', error); + res.status(500).json({ error: 'Server error' }); + } +} + +export async function deleteArticle(req: AuthRequest, res: Response) : Promise { + try { + if (!req.user) { + res.status(401).json({ error: 'Not authenticated' }); + return + } + + const article = await prisma.article.findUnique({ + where: { id: req.params.id }, + include: { category: true } + }); + + if (!article) { + res.status(404).json({ error: 'Article not found' }); + return + } + +// if (!checkPermission(req.user, article.category, 'delete')) { +// res.status(403).json({ error: 'Permission denied' }); +// return +// } + + await prisma.article.delete({ + where: { id: req.params.id } + }); + + res.json({ message: 'Article deleted successfully' }); + } catch (error) { + logger.error('Error deleting article:', error); + res.status(500).json({ error: 'Server error' }); + } +} \ No newline at end of file diff --git a/src/routes/articles/controllers/list.ts b/src/routes/articles/controllers/list.ts new file mode 100644 index 0000000..0ba8cd7 --- /dev/null +++ b/src/routes/articles/controllers/list.ts @@ -0,0 +1,50 @@ +import { Request, Response } from 'express'; +import { prisma } from '../../../lib/prisma'; +import { Prisma } from '@prisma/client'; + +export async function listArticles(req: Request, res: Response) { + try { + const { page = 1, category, city } = req.query; + const perPage = 6; + + // Проверка и преобразование параметров в строковые значения + const where: Prisma.ArticleWhereInput = { + ...(category && { category: { name: category as string } }), + ...(city && { city: city as string }), + }; + + // Рассчитываем пропуск записей для пагинации + const skip = (Number(page) - 1) * perPage; + + // Выполняем два параллельных запроса: получение статей и подсчёт общего количества + const [articles, total] = await Promise.all([ + prisma.article.findMany({ + where, + include: { + author: { + select: { + id: true, + displayName: true, + email: true, + }, + }, + }, + skip, + take: perPage, + orderBy: { publishedAt: 'desc' }, + }), + prisma.article.count({ where }), + ]); + + // Формируем ответ + res.json({ + articles, + totalPages: Math.ceil(total / perPage), + currentPage: Number(page), + }); + } catch (error) { + // Логируем ошибку и отправляем ответ с кодом 500 + console.error('Error during articles list:', error); + res.status(500).json({ error: 'Server error' }); + } +} diff --git a/src/routes/articles/controllers/search.ts b/src/routes/articles/controllers/search.ts new file mode 100644 index 0000000..8cbff31 --- /dev/null +++ b/src/routes/articles/controllers/search.ts @@ -0,0 +1,52 @@ +import { Request, Response } from 'express'; +import { prisma } from '../../../lib/prisma'; +import { Prisma } from '@prisma/client'; + +export async function searchArticles(req: Request, res: Response) { + try { + const { q, page = 1, limit = 9 } = req.query; + const skip = ((Number(page) || 1) - 1) * (Number(limit) || 9); + + // Определение where с явной обработкой q + const where : Prisma.ArticleWhereInput = + typeof q === 'string' && q.trim() + ? { + OR: [ + { title: { contains: q, mode: 'insensitive' } }, + { excerpt: { contains: q, mode: 'insensitive' } }, + { content: { contains: q, mode: 'insensitive' } }, + ], + } + : {}; + + // Выполнение запросов + const [articles, total] = await Promise.all([ + prisma.article.findMany({ + where, + include: { + author: { + select: { + id: true, + displayName: true, + email: true, + }, + }, + }, + skip, + take: Number(limit) || 9, + orderBy: { publishedAt: 'desc' }, + }), + prisma.article.count({ where }), + ]); + + // Формирование ответа + res.json({ + articles, + totalPages: Math.ceil(total / (Number(limit) || 9)), + currentPage: Number(page) || 1, + }); + } catch (error) { + console.error('Error during article search:', error); + res.status(500).json({ error: 'Server error' }); + } +} diff --git a/src/routes/articles/crud.ts b/src/routes/articles/crud.ts new file mode 100644 index 0000000..ba0481a --- /dev/null +++ b/src/routes/articles/crud.ts @@ -0,0 +1,93 @@ +import { Request, Response } from 'express'; +import { prisma } from '../../lib/prisma'; + +export async function getArticle(req: Request, res: Response) { + try { + const article = await prisma.article.findUnique({ + where: { id: req.params.id }, + include: { + author: { + select: { + id: true, + displayName: true, + email: true + } + } + } + }); + + if (!article) { + return res.status(404).json({ error: 'Article not found' }); + } + + res.json(article); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} + +export async function createArticle(req: Request, res: Response) { + try { + const { title, excerpt, content, category, city, coverImage, readTime } = req.body; + + const article = await prisma.article.create({ + data: { + title, + excerpt, + content, + category, + city, + coverImage, + readTime, + authorId: req.user!.id + }, + include: { + author: { + select: { + id: true, + displayName: true, + email: true + } + } + } + }); + + res.status(201).json(article); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} + +export async function updateArticle(req: Request, res: Response) { + try { + const article = await prisma.article.update({ + where: { id: req.params.id }, + data: req.body, + include: { + author: { + select: { + id: true, + displayName: true, + email: true + } + } + } + }); + + res.json(article); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} + +export async function deleteArticle(req: Request, res: Response) { + try { + await prisma.article.delete({ + where: { id: req.params.id } + }); + + res.json({ message: 'Article deleted successfully' }); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} \ No newline at end of file diff --git a/src/routes/articles/index.ts b/src/routes/articles/index.ts new file mode 100644 index 0000000..71ccda1 --- /dev/null +++ b/src/routes/articles/index.ts @@ -0,0 +1,19 @@ +import express from 'express'; +import { auth } from '../../middleware/auth'; +import { searchArticles } from './controllers/search'; +import { listArticles } from './controllers/list'; +import { getArticle, createArticle, updateArticle, deleteArticle } from './controllers/crud'; + +const router = express.Router(); + +// Search and list routes +router.get('/search', searchArticles); +router.get('/', listArticles); + +// CRUD routes +router.get('/:id', getArticle); +router.post('/', auth, createArticle); +router.put('/:id', auth, updateArticle); +router.delete('/:id', auth, deleteArticle); + +export default router; \ No newline at end of file diff --git a/src/routes/articles/list.ts b/src/routes/articles/list.ts new file mode 100644 index 0000000..3cc4121 --- /dev/null +++ b/src/routes/articles/list.ts @@ -0,0 +1,41 @@ +import { Request, Response } from 'express'; +import { prisma } from '../../lib/prisma'; + +export async function listArticles(req: Request, res: Response) { + try { + const { page = 1, category, city } = req.query; + const perPage = 6; + + const where = { + ...(category && { category: category as string }), + ...(city && { city: city as string }) + }; + + const [articles, total] = await Promise.all([ + prisma.article.findMany({ + where, + include: { + author: { + select: { + id: true, + displayName: true, + email: true + } + } + }, + skip: ((page as number) - 1) * perPage, + take: perPage, + orderBy: { publishedAt: 'desc' } + }), + prisma.article.count({ where }) + ]); + + res.json({ + articles, + totalPages: Math.ceil(total / perPage), + currentPage: parseInt(page as string) + }); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} \ No newline at end of file diff --git a/src/routes/articles/search.ts b/src/routes/articles/search.ts new file mode 100644 index 0000000..86a5d6a --- /dev/null +++ b/src/routes/articles/search.ts @@ -0,0 +1,44 @@ +import { Request, Response } from 'express'; +import { prisma } from '../../lib/prisma'; + +export async function searchArticles(req: Request, res: Response) { + try { + const { q, page = 1, limit = 9 } = req.query; + const skip = ((page as number) - 1) * (limit as number); + + const where = { + OR: [ + { title: { contains: q as string, mode: 'insensitive' } }, + { excerpt: { contains: q as string, mode: 'insensitive' } }, + { content: { contains: q as string, mode: 'insensitive' } }, + ] + }; + + const [articles, total] = await Promise.all([ + prisma.article.findMany({ + where, + include: { + author: { + select: { + id: true, + displayName: true, + email: true + } + } + }, + skip, + take: parseInt(limit as string), + orderBy: { publishedAt: 'desc' } + }), + prisma.article.count({ where }) + ]); + + res.json({ + articles, + totalPages: Math.ceil(total / (limit as number)), + currentPage: parseInt(page as string) + }); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} \ No newline at end of file diff --git a/src/routes/auth/controllers/auth.ts b/src/routes/auth/controllers/auth.ts new file mode 100644 index 0000000..bf1e353 --- /dev/null +++ b/src/routes/auth/controllers/auth.ts @@ -0,0 +1,47 @@ +import { Request, Response } from 'express'; +import { AuthRequest } from '../../../middleware/auth'; +import { authService } from '../../../services/authService'; + +export async function login(req: Request, res: Response) { + try { + const { email, password } = req.body; + const { user, token } = await authService.login(email, password); + res.json({ user, token }); + } catch { + res.status(401).json({ error: 'Invalid credentials' }); + } +} + +export async function signIn(req: Request, res: Response) { + try { + const { email, password, displayName } = req.body; + const user = await authService.createUser({email : email, password : password, displayName : displayName, permissions : {}}); + res.json({ user }); + } catch { + res.status(401).json({ error: 'Invalid signIn credentials' }); + } +} + +export async function getCurrentUser(req: AuthRequest, res: Response) { + try { + if (!req.user) { + res.status(401).json({ error: 'Not authenticated' }); + return + } + res.json(req.user); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} + +export async function refreshToken(req: AuthRequest, res: Response) { + try { + if (!req.user) { + return res.status(401).json({ error: 'Not authenticated' }); + } + const token = await authService.generateToken(req.user.id); + res.json({ token }); + } catch { + res.status(500).json({ error: 'Failed to refresh token' }); + } +} \ No newline at end of file diff --git a/src/routes/auth/index.ts b/src/routes/auth/index.ts new file mode 100644 index 0000000..5cce9f7 --- /dev/null +++ b/src/routes/auth/index.ts @@ -0,0 +1,13 @@ +import express from 'express'; +import { auth } from '../../middleware/auth'; +import { login, signIn, getCurrentUser } from './controllers/auth'; +import { validateRequest } from '../../middleware/validation/validateRequest'; +import { loginSchema, signInSchema } from './validation/authSchemas'; + +const router = express.Router(); + +router.post('/signin', validateRequest(signInSchema), signIn); +router.post('/login', validateRequest(loginSchema), login); +router.get('/me', auth, getCurrentUser); + +export default router; \ No newline at end of file diff --git a/src/routes/auth/validation/authSchemas.ts b/src/routes/auth/validation/authSchemas.ts new file mode 100644 index 0000000..7061da8 --- /dev/null +++ b/src/routes/auth/validation/authSchemas.ts @@ -0,0 +1,16 @@ +import { z } from 'zod'; + +export const loginSchema = z.object({ + body: z.object({ + email: z.string().email(), + password: z.string().min(6) + }) +}); + +export const signInSchema = z.object({ + body: z.object({ + email: z.string().email(), + password: z.string().min(6), + displayName: z.string().min(5) + }) +}); \ No newline at end of file diff --git a/src/routes/gallery/controllers/crud.ts b/src/routes/gallery/controllers/crud.ts new file mode 100644 index 0000000..0dac58f --- /dev/null +++ b/src/routes/gallery/controllers/crud.ts @@ -0,0 +1,81 @@ +import { Request, Response } from 'express'; +import { AuthRequest } from '../../../middleware/auth'; +import { galleryService } from '../../../services/galleryService'; +import { s3Service } from '../../../services/s3Service'; +import { logger } from '../../../config/logger'; + +export async function createGalleryImage(req: AuthRequest, res: Response) { + try { + const { articleId } = req.params; + const { url, caption, alt, width, height, size, format } = req.body; + + const image = await galleryService.createImage({ + url, + caption, + alt, + width, + height, + size, + format, + articleId + }); + + res.status(201).json(image); + } catch (error) { + logger.error('Error creating gallery image:', error); + res.status(500).json({ error: 'Failed to create gallery image' }); + } +} + +export async function updateGalleryImage(req: AuthRequest, res: Response) { + try { + const { id } = req.params; + const { caption, alt, order } = req.body; + + const image = await galleryService.updateImage(id, { + caption, + alt, + order + }); + + res.json(image); + } catch (error) { + logger.error('Error updating gallery image:', error); + res.status(500).json({ error: 'Failed to update gallery image' }); + } +} + +export async function deleteGalleryImage(req: AuthRequest, res: Response) { + try { + const { id } = req.params; + await galleryService.deleteImage(id); + res.json({ message: 'Gallery image deleted successfully' }); + } catch (error) { + logger.error('Error deleting gallery image:', error); + res.status(500).json({ error: 'Failed to delete gallery image' }); + } +} + +export async function reorderGalleryImages(req: AuthRequest, res: Response) { + try { + const { articleId } = req.params; + const { imageIds } = req.body; + + await galleryService.reorderImages(articleId, imageIds); + res.json({ message: 'Gallery images reordered successfully' }); + } catch (error) { + logger.error('Error reordering gallery images:', error); + res.status(500).json({ error: 'Failed to reorder gallery images' }); + } +} + +export async function getArticleGallery(req: Request, res: Response) { + try { + const { articleId } = req.params; + const images = await galleryService.getArticleGallery(articleId); + res.json(images); + } catch (error) { + logger.error('Error fetching article gallery:', error); + res.status(500).json({ error: 'Failed to fetch gallery images' }); + } +} \ No newline at end of file diff --git a/src/routes/gallery/index.ts b/src/routes/gallery/index.ts new file mode 100644 index 0000000..06573d9 --- /dev/null +++ b/src/routes/gallery/index.ts @@ -0,0 +1,19 @@ +import express from 'express'; +import { auth } from '../../middleware/auth'; +import { + createGalleryImage, + updateGalleryImage, + deleteGalleryImage, + reorderGalleryImages, + getArticleGallery +} from './controllers/crud'; + +const router = express.Router(); + +router.get('/article/:articleId', getArticleGallery); +router.post('/article/:articleId', auth, createGalleryImage); +router.put('/:id', auth, updateGalleryImage); +router.delete('/:id', auth, deleteGalleryImage); +router.post('/article/:articleId/reorder', auth, reorderGalleryImages); + +export default router; \ No newline at end of file diff --git a/src/routes/images/index.ts b/src/routes/images/index.ts new file mode 100644 index 0000000..d719e91 --- /dev/null +++ b/src/routes/images/index.ts @@ -0,0 +1,100 @@ +import express from 'express'; +import multer from 'multer'; +import multerS3 from 'multer-s3'; +import { auth } from '../../middleware/auth'; +import {createS3Client, s3Service} from '../../services/s3MulterService'; +import { logger } from '../../config/logger'; +import { imageResolutions } from '../../config/imageResolutions'; + +const router = express.Router(); +//const upload = multer(); + +// Инициализация Multer-S3 +const s3Client = createS3Client(); // Экспортируем клиент из s3Service +const upload = multer({ + storage: multerS3({ + s3: s3Client, + bucket: process.env.AWS_S3_BUCKET || '', + metadata: (req, file, cb) => { + cb(null, { fieldName: file.fieldname }); + }, + key: (req, file, cb) => { + const fileName = `${Date.now()}-${file.originalname}`; + cb(null, `uploads/${fileName}`); + }, + contentType: multerS3.AUTO_CONTENT_TYPE, + }), +}); + +/* +router.post('/upload-url', auth, async (req, res) : Promise => { + try { + const { fileName, fileType, resolution } = req.body; + + if (!fileName || !fileType || !resolution) { + res.status(400).json({ error: 'Missing required fields' }); + return + } + + const selectedResolution = imageResolutions.find(r => r.id === resolution); + if (!selectedResolution) { + res.status(400).json({ error: 'Invalid resolution' }); + return + } + + const { uploadUrl, imageId, key } = await s3Service.getUploadUrl(fileName, fileType); + + logger.info(`Generated upload URL for image: ${fileName}`); + res.json({ uploadUrl, imageId, key }); + } catch (error) { + logger.error('Error generating upload URL:', error); + res.status(500).json({ error: 'Failed to generate upload URL' }); + } +}); +*/ + +// Маршрут для загрузки изображения +router.post('/upload-url', auth, upload.single('file'), async (req, res): Promise => { + try { + const file = req.file as Express.MulterS3.File; + const { resolutionId } = req.body; + + if (!file) { + res.status(400).json({ error: 'Файл не найден' }); + return; + } + + // Сохраняем оригинал и обрабатываем изображение + const originalKey = await s3Service.uploadOriginalFile(file); + const optimizedResult = await s3Service.optimizeAndUpload(file.buffer, originalKey, resolutionId); + + res.status(200).json({ + message: 'Файл успешно загружен и оптимизирован', + originalKey, + optimizedKey: optimizedResult.key, + dimensions: { + width: optimizedResult.width, + height: optimizedResult.height, + }, + format: optimizedResult.format, + size: optimizedResult.size, + }); + } catch (error) { + logger.error('Ошибка загрузки изображения:', error); + res.status(500).json({ error: 'Ошибка загрузки изображения' }); + } +}); + +/* +router.get('/:id', auth, async (req, res) => { + try { + const { id } = req.params; + const image = await s3Service.getImage(id); + res.json(image); + } catch (error) { + logger.error('Error fetching image:', error); + res.status(500).json({ error: 'Failed to fetch image' }); + } +}); +*/ +export default router; \ No newline at end of file diff --git a/src/routes/users/controllers/users.ts b/src/routes/users/controllers/users.ts new file mode 100644 index 0000000..b05752f --- /dev/null +++ b/src/routes/users/controllers/users.ts @@ -0,0 +1,39 @@ +import { Response } from 'express'; +import { AuthRequest } from '../../../middleware/auth'; +import { userService } from '../../../services/userService'; + +export async function getUsers(req: AuthRequest, res: Response): Promise { + try { + // Проверка прав администратора + if (!req.user?.permissions.isAdmin) { + res.status(403).json({ error: 'Admin access required' }); + return + } + + // Получение списка пользователей + const users = await userService.getUsers(); + res.json(users); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} + +export async function updateUserPermissions(req: AuthRequest, res: Response): Promise { + try { + // Проверка прав администратора + if (!req.user?.permissions.isAdmin) { + res.status(403).json({ error: 'Admin access required' }); + return + } + + // Извлечение параметров из запроса + const { id } = req.params; + const { permissions } = req.body; + + // Обновление прав пользователя + const user = await userService.updateUserPermissions(id, permissions); + res.json(user); + } catch { + res.status(500).json({ error: 'Server error' }); + } +} \ No newline at end of file diff --git a/src/routes/users/index.ts b/src/routes/users/index.ts new file mode 100644 index 0000000..66eeec4 --- /dev/null +++ b/src/routes/users/index.ts @@ -0,0 +1,10 @@ +import express from 'express'; +import { auth } from '../../middleware/auth'; +import { getUsers, updateUserPermissions } from './controllers/users'; + +const router = express.Router(); + +router.get('/', auth, getUsers); +router.put('/:id/permissions', auth, updateUserPermissions); + +export default router; \ No newline at end of file diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..5069884 --- /dev/null +++ b/src/server.ts @@ -0,0 +1,56 @@ +import express from 'express'; +import cors from 'cors'; +import dotenv from 'dotenv'; +import morgan from 'morgan'; +import { logger, stream } from './config/logger'; +import { requestLogger } from './middleware/logging/requestLogger'; +import { errorLogger } from './middleware/error/errorLogger'; +import authRoutes from './routes/auth/index'; +import userRoutes from './routes/users/index'; +import articleRoutes from './routes/articles/index'; +import galleryRoutes from './routes/gallery/index'; +import imagesRoutes from './routes/images/index'; + + +const app = express(); + +// Загрузка переменных окружения +dotenv.config(); + +const PORT = process.env.PORT || 5000; + +// Используем Morgan с кастомным логированием через Winston +app.use(morgan('combined', { stream })); + +// Middleware для обработки JSON +app.use(cors()); +app.use(express.json()); +app.use(requestLogger); + +// Обработка ошибок +app.use(errorLogger); + +// Маршруты +app.use('/api/auth', authRoutes); +app.use('/api/users', userRoutes); +app.use('/api/articles', articleRoutes); +app.use('/api/gallery', galleryRoutes); +app.use('/api/images', imagesRoutes); + +// Запуск сервера +app.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); + logger.info(`Server running on port ${PORT}`); +}); + +// Обработка не перехваченных исключений +process.on('uncaughtException', (error) => { + logger.error('Uncaught Exception:', error); + process.exit(1); +}); + +// Обработка не обработанных promise rejections +process.on('unhandledRejection', (reason, promise) => { + logger.error('Unhandled Rejection at:', promise, 'reason:', reason); + process.exit(1); +}); diff --git a/src/services/authService.ts b/src/services/authService.ts new file mode 100644 index 0000000..8810b20 --- /dev/null +++ b/src/services/authService.ts @@ -0,0 +1,114 @@ +import { PrismaClient } from '@prisma/client'; +import bcrypt from 'bcryptjs'; +import jwt from 'jsonwebtoken'; +import {User, UserPermissions} from '../types/auth'; +import { logger } from '../config/logger'; +import {JsonValue} from "@prisma/client/runtime/library"; + +const prisma = new PrismaClient(); + +export const authService = { + login: async (email: string, password: string) => { + try { + logger.info(`Login attempt for user: ${email}`); + + const user : { + email: string; + password: string; + id: string; + displayName: string; + permissions: JsonValue; + } | null = await prisma.user.findUnique({ + where: { email }, + select: { + id: true, + email: true, + displayName: true, + password: true, + permissions: true + } + }); + + if (!user) { + logger.warn(`Login failed: User not found - ${email}`); + throw new Error('Invalid credentials'); + } + + const isValidPassword = await bcrypt.compare(password, user.password); + if (!isValidPassword) { + logger.warn(`Login failed: Invalid password for user - ${email}`); + throw new Error('Invalid credentials'); + } + + const token = await authService.generateToken(user.id); + const { password: _, ...userWithoutPassword } = user; + + const permissions = user.permissions as unknown; + + logger.info(`User logged in successfully: ${email}`); + return { + user: {...userWithoutPassword, + permissions: permissions as UserPermissions } as User, + token + }; + } catch (error) { + logger.error('Login error:', error); + throw error; + } + }, + + generateToken: async (userId: string) => { + try { + const token = jwt.sign( + { id: userId }, + process.env.JWT_SECRET || '', + { expiresIn: '24h' } + ); + logger.debug(`Generated token for user: ${userId}`); + return token; + } catch (error) { + logger.error('Token generation error:', error); + throw error; + } + }, + + createUser: async (userData: { + email: string; + password: string; + displayName: string; + permissions: any; + }) => { + try { + logger.info(`Creating new user: ${userData.email}`); + + const hashedPassword = await bcrypt.hash(userData.password, 10); + const user : { + email: string; + id: string; + displayName: string; + permissions: JsonValue; + } = await prisma.user.create({ + data: { + ...userData, + password: hashedPassword + }, + select: { + id: true, + email: true, + displayName: true, + permissions: true + } + }); + + logger.info(`User created successfully: ${userData.email}`); + + const permissions = user.permissions as unknown; + + return {...user, + permissions: permissions as UserPermissions } as User + } catch (error) { + logger.error('User creation error:', error); + throw error; + } + } +}; \ No newline at end of file diff --git a/src/services/galleryService.ts b/src/services/galleryService.ts new file mode 100644 index 0000000..574be82 --- /dev/null +++ b/src/services/galleryService.ts @@ -0,0 +1,91 @@ +import {PrismaClient} from '@prisma/client'; +import {logger} from '../config/logger'; + +const prisma = new PrismaClient(); + +export const galleryService = { + createImage: async (data: { + url: string; + caption: string; + alt: string; + width: number; + height: number; + size: number; + format: string; + articleId: string; + order?: number; + }) => { + try { + const image = await prisma.galleryImage.create({ + data + }); + logger.info(`Created gallery image: ${image.id}`); + return image; + } catch (error) { + logger.error('Error creating gallery image:', error); + throw error; + } + }, + + updateImage: async ( + id: string, + data: { + caption?: string; + alt?: string; + order?: number; + } + ) => { + try { + const image = await prisma.galleryImage.update({ + where: { id }, + data + }); + logger.info(`Updated gallery image: ${id}`); + return image; + } catch (error) { + logger.error(`Error updating gallery image ${id}:`, error); + throw error; + } + }, + + deleteImage: async (id: string) => { + try { + await prisma.galleryImage.delete({ + where: { id } + }); + logger.info(`Deleted gallery image: ${id}`); + } catch (error) { + logger.error(`Error deleting gallery image ${id}:`, error); + throw error; + } + }, + + reorderImages: async (articleId: string, imageIds: string[]) => { + try { + await prisma.$transaction( + imageIds.map((id, index) => + prisma.galleryImage.update({ + where: { id }, + data: { order: index } + }) + ) + ); + logger.info(`Reordered gallery images for article: ${articleId}`); + } catch (error) { + logger.error(`Error reordering gallery images for article ${articleId}:`, error); + throw error; + } + }, + + getArticleGallery: async (articleId: string) => { + try { + return await prisma.galleryImage.findMany({ + where: {articleId}, + orderBy: {order: 'asc'} + }); + } catch (error) { + logger.error(`Error fetching gallery for article ${articleId}:`, error); + throw error; + } + } +}; \ No newline at end of file diff --git a/src/services/s3MulterService.ts b/src/services/s3MulterService.ts new file mode 100644 index 0000000..27982eb --- /dev/null +++ b/src/services/s3MulterService.ts @@ -0,0 +1,78 @@ +import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'; +import sharp from 'sharp'; +import { logger } from '../config/logger'; +import { imageResolutions } from '../config/imageResolutions'; + +const s3Client = new S3Client({ + region: process.env.AWS_REGION || 'ru-central1', + endpoint: process.env.AWS_ENDPOINT || '', + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID || '', + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '', + }, +}); + +// Создание клиента S3 +export const createS3Client = () => { + return new S3Client({ + region: process.env.AWS_REGION || 'ru-central1', + endpoint: process.env.AWS_ENDPOINT || '', + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID || '', + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '', + }, + }); +}; + +const BUCKET_NAME = process.env.AWS_S3_BUCKET || ''; + +export const s3Service = { + uploadOriginalFile: async (file: Express.MulterS3.File) => { + logger.info(`Оригинальный файл загружен в S3: ${file.key}`); + return file.key; + }, + + optimizeAndUpload: async (fileBuffer: Buffer, originalKey: string, resolutionId: string) => { + const selectedResolution = imageResolutions.find(r => r.id === resolutionId); + if (!selectedResolution) { + throw new Error('Недопустимое разрешение'); + } + + try { + // Оптимизация изображения + const optimizedBuffer = await sharp(fileBuffer) + .resize(selectedResolution.width, selectedResolution.height, { + fit: 'inside', + withoutEnlargement: true, + }) + .webp({ quality: 80 }) + .toBuffer(); + + // Генерация нового ключа для оптимизированного файла + const optimizedKey = originalKey.replace(/\.[^/.]+$/, '.webp'); + + // Загрузка оптимизированного файла + await s3Client.send( + new PutObjectCommand({ + Bucket: BUCKET_NAME, + Key: optimizedKey, + Body: optimizedBuffer, + ContentType: 'image/webp', + }) + ); + + logger.info(`Оптимизированное изображение загружено в S3: ${optimizedKey}`); + + return { + key: optimizedKey, + width: selectedResolution.width, + height: selectedResolution.height, + format: 'webp', + size: optimizedBuffer.length, + }; + } catch (error) { + logger.error('Ошибка при оптимизации и загрузке файла:', error); + throw error; + } + }, +}; diff --git a/src/services/s3Service.ts b/src/services/s3Service.ts new file mode 100644 index 0000000..21e228a --- /dev/null +++ b/src/services/s3Service.ts @@ -0,0 +1,128 @@ +import { S3Client, PutObjectCommand, GetObjectCommand, PutBucketCorsCommand } from '@aws-sdk/client-s3'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; +import { v4 as uuidv4 } from 'uuid'; +import sharp from 'sharp'; +import { logger } from '../config/logger'; + +// Инициализация клиента S3 +const s3Client = new S3Client({ + region: process.env.AWS_REGION || 'ru-central1', + endpoint: process.env.AWS_ENDPOINT || '', + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID || '', + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '' + }, + forcePathStyle: true +}); + +const BUCKET_NAME = process.env.AWS_S3_BUCKET || ''; + +// Конфигурация CORS +const corsConfig = { + Bucket: BUCKET_NAME, + CORSConfiguration: { + CORSRules: [ + { + AllowedOrigins: ['http://127.0.0.1:5173'], // Домен фронтенда + AllowedMethods: ['GET', 'PUT', 'POST', 'DELETE'], // Разрешенные методы + AllowedHeaders: ['*'], // Разрешенные заголовки + ExposeHeaders: ['ETag', 'x-amz-meta-custom-header'], // Заголовки в ответе + MaxAgeSeconds: 3000, // Кеширование CORS + }, + ], + }, +}; + +// Применение конфигурации +const applyCors = async () => { + try { + const command = new PutBucketCorsCommand(corsConfig); + await s3Client.send(command); + console.log('CORS успешно настроен.'); + } catch (error) { + console.error('Ошибка при настройке CORS:', error); + } +}; + +//applyCors(); + +export const s3Service = { + getUploadUrl: async (fileName: string, fileType: string) => { + const imageId = uuidv4(); + const key = `uploads/${imageId}-${fileName}`; + + const command = new PutObjectCommand({ + Bucket: BUCKET_NAME, + Key: key, + ContentType: fileType + }); + + try { + const uploadUrl = await getSignedUrl(s3Client, command, { expiresIn: 3600 }); + logger.info(`Generated pre-signed URL for upload: ${key}`); + return { uploadUrl, imageId, key }; + } catch (error) { + logger.error('Error generating pre-signed URL:', error); + throw error; + } + }, + + getImage: async (imageId: string) => { + try { + const command = new GetObjectCommand({ + Bucket: BUCKET_NAME, + Key: `uploads/${imageId}` + }); + + const url = await getSignedUrl(s3Client, command, { expiresIn: 3600 }); + return { url }; + } catch (error) { + logger.error('Error getting image:', error); + throw error; + } + }, + + optimizeAndUpload: async (buffer: Buffer, key: string, resolution: { width: number; height: number }) => { + try { + let sharpInstance = sharp(buffer); + + // Get image metadata + const metadata = await sharpInstance.metadata(); + + // Resize if resolution is specified + if (resolution.width > 0 && resolution.height > 0) { + sharpInstance = sharpInstance.resize(resolution.width, resolution.height, { + fit: 'inside', + withoutEnlargement: true + }); + } + + // Convert to WebP for better compression + const optimizedBuffer = await sharpInstance + .webp({ quality: 80 }) + .toBuffer(); + + // Upload optimized image + const optimizedKey = key.replace(/\.[^/.]+$/, '.webp'); + await s3Client.send(new PutObjectCommand({ + Bucket: BUCKET_NAME, + Key: optimizedKey, + Body: optimizedBuffer, + ContentType: 'image/webp' + })); + + logger.info(`Successfully optimized and uploaded image: ${optimizedKey}`); + + return { + key: optimizedKey, + width: metadata.width, + height: metadata.height, + format: 'webp', + size: optimizedBuffer.length + }; + } catch (error) { + logger.error('Error optimizing and uploading image:', error); + throw error; + } + } +}; \ No newline at end of file diff --git a/src/services/userService.ts b/src/services/userService.ts new file mode 100644 index 0000000..d4c0a74 --- /dev/null +++ b/src/services/userService.ts @@ -0,0 +1,83 @@ +import { PrismaClient } from '@prisma/client'; +import { User, UserPermissions } from '../types/auth'; +import { JsonValue } from '@prisma/client/runtime/library'; + +const prisma = new PrismaClient(); + +export const userService = { + getUsers: async (): Promise => { + try { + const users: Array<{ + id: string; + email: string; + displayName: string; + permissions: JsonValue; + }> = await prisma.user.findMany({ + select: { + id: true, + email: true, + displayName: true, + permissions: true, + }, + }); + + return users.map((user) => { + const permissions = user.permissions as unknown; + + if (isValidUserPermissions(permissions)) { + return { + ...user, + permissions: permissions as UserPermissions, + } as User; + } else { + throw new Error(`Invalid permissions format for user ${user.id}`); + } + }); + } catch (error) { + console.error('Error fetching users:', error); + throw new Error('Failed to fetch users'); + } + }, + updateUserPermissions: async ( + userId: string, + permissions: User['permissions'] + ): Promise => { + try { + const updatedUser = await prisma.user.update({ + where: { id: userId }, + data: { + permissions: permissions as any, // Сохраняем в базу JSON-объект + }, + select: { + id: true, + email: true, + displayName: true, + permissions: true, + }, + }); + + // Валидируем полученные данные + const updatedPermissions = updatedUser.permissions as unknown; + + if (isValidUserPermissions(updatedPermissions)) { + return { + ...updatedUser, + permissions: updatedPermissions as UserPermissions, + } as User; + } else { + throw new Error('Invalid permissions format for updated user ${userId}'); + } + } catch (error) { + console.error('Error updating user permissions:', error); + throw new Error('Failed to update user permissions'); + } + }, +}; + +// Функция проверки структуры UserPermissions +function isValidUserPermissions(value: unknown): value is UserPermissions { + if (typeof value !== 'object' || value === null) return false; + + const permissions = value as UserPermissions; + return (Array.isArray(permissions.cities) && typeof permissions.categories === 'object'); +} diff --git a/src/types/auth.ts b/src/types/auth.ts new file mode 100644 index 0000000..6b5c4c9 --- /dev/null +++ b/src/types/auth.ts @@ -0,0 +1,20 @@ +import { CategoryName, City } from './index'; + +export interface UserPermissions { + categories: { + [key in CategoryName]?: { + create: boolean; + edit: boolean; + delete: boolean; + }; + }; + cities: City[]; + isAdmin: boolean; +} + +export interface User { + id: string; + email: string; + displayName: string; + permissions: UserPermissions; +} \ No newline at end of file diff --git a/src/types/image.ts b/src/types/image.ts new file mode 100644 index 0000000..dc123fe --- /dev/null +++ b/src/types/image.ts @@ -0,0 +1,21 @@ +export interface ImageResolution { + id: string; + width: number; + height: number; + label: string; +} + +export interface UploadedImage { + id: string; + url: string; + width: number; + height: number; + size: number; + format: string; +} + +export interface ImageUploadProgress { + progress: number; + status: 'uploading' | 'processing' | 'complete' | 'error'; + error?: string; +} \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..0abbb11 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,39 @@ +export interface Article { + id: string; + title: string; + excerpt: string; + content: string; + category: Category; + categoryId: number; + city: City; + author: Author; + coverImage: string; + gallery?: GalleryImage[]; + publishedAt: string; + readTime: number; + likes: number; + dislikes: number; + userReaction?: 'like' | 'dislike' | null; +} + +export interface GalleryImage { + id: string; + url: string; + caption: string; + alt: string; +} + +export interface Author { + id: string; + name: string; + avatar: string; + bio: string; +} + +export interface Category { + id: number; + name: CategoryName; +} + +export type CategoryName = 'Film' | 'Theater' | 'Music' | 'Sports' | 'Art' | 'Legends' | 'Anniversaries' | 'Memory'; +export type City = 'New York' | 'London'; \ No newline at end of file diff --git a/src/utils/permissions.ts b/src/utils/permissions.ts new file mode 100644 index 0000000..99e01dc --- /dev/null +++ b/src/utils/permissions.ts @@ -0,0 +1,16 @@ +import { Category, City } from '../types'; +import { User } from '../types/auth'; + +export const checkPermission = ( + user: User, + category: Category, + action: 'create' | 'edit' | 'delete' +): boolean => { + if (user.permissions.isAdmin) return true; + return !!user.permissions.categories[category.name]?.[action]; +}; + +export const checkCityAccess = (user: User, city: City): boolean => { + if (user.permissions.isAdmin) return true; + return user.permissions.cities.includes(city); +}; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..05b56da --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2020", // Уровень компиляции JavaScript + "module": "CommonJS", // Для совместимости с Node.js + "outDir": "./dist", // Папка для скомпилированных файлов + "rootDir": "./src", // Исходный код + "strict": true, // Включение строгой проверки типов + "esModuleInterop": true, // Для совместимости с модулями ES + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true // Ускоряет компиляцию + }, + "include": ["src/**/*"], // Файлы, которые обрабатывает TypeScript + "exclude": ["node_modules"] // Исключение для node_modules +}