From 2cc044a89ea8a6082849a88bb72420aa26d314d7 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 3 Feb 2025 20:50:16 +0100 Subject: [PATCH] - --- apps/server/debug-2025-02-03.log | 640 ++++++++++++++++++ apps/server/error-2025-02-03.log | 15 + apps/server/package.json | 3 + apps/server/src/app.ts | 5 +- .../express/express-controller.ts | 52 +- .../middlewares/global-error-handler.ts | 2 +- apps/server/src/config/database.ts | 27 +- apps/server/src/config/register-models.ts | 60 +- .../domain/aggregates/authenticated-user.ts | 16 + .../passport/passport-auth-provider.ts | 77 ++- .../sequelize/auth-user.model.ts | 108 +-- .../contexts/auth/presentation/auth.routes.ts | 3 +- .../auth/presentation/middleware/index.ts | 2 +- .../middleware/passport-auth.middleware.ts | 70 ++ .../presentation/middleware/passport-auth.ts | 12 - apps/server/src/index.ts | 13 +- pnpm-lock.yaml | 93 +++ 17 files changed, 1053 insertions(+), 145 deletions(-) create mode 100644 apps/server/src/contexts/auth/presentation/middleware/passport-auth.middleware.ts delete mode 100644 apps/server/src/contexts/auth/presentation/middleware/passport-auth.ts diff --git a/apps/server/debug-2025-02-03.log b/apps/server/debug-2025-02-03.log index 5149fce1..b8a4343c 100644 --- a/apps/server/debug-2025-02-03.log +++ b/apps/server/debug-2025-02-03.log @@ -855,3 +855,643 @@ {"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:03:04.163Z"} {"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:03:04.163Z"} {"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:03:09.003Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:03:47.637Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:04:04.164Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:04:06.826Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:04:07.698Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:09:27.164Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:09:29.516Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:09:36.046Z"} +{"label":"index.ts","level":"info","message":"Incoming request GET to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:09:47.862Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:09:53.366Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Validation Error","metadata":{},"timestamp":"2025-02-03T18:09:57.217Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:10:08.470Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:10:21.199Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Validation Error","metadata":{},"timestamp":"2025-02-03T18:10:42.558Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:16 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:16:48.286Z"} +{"label":"index.ts","level":"info","message":"Launched in: 107 ms","metadata":{},"timestamp":"2025-02-03T18:16:48.291Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:16:48.291Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49407","metadata":{},"timestamp":"2025-02-03T18:16:48.292Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:16:48.292Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:16:48.293Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:17 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:17:25.029Z"} +{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T18:17:25.035Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:17:25.035Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49483","metadata":{},"timestamp":"2025-02-03T18:17:25.036Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:17:25.036Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:17:25.037Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:17 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:17:37.087Z"} +{"label":"index.ts","level":"info","message":"Launched in: 117 ms","metadata":{},"timestamp":"2025-02-03T18:17:37.092Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:17:37.092Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49548","metadata":{},"timestamp":"2025-02-03T18:17:37.093Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:17:37.093Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:17:37.094Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:19 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:19:46.798Z"} +{"label":"index.ts","level":"info","message":"Launched in: 117 ms","metadata":{},"timestamp":"2025-02-03T18:19:46.802Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:19:46.803Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49656","metadata":{},"timestamp":"2025-02-03T18:19:46.803Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:19:46.804Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:19:46.804Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:20 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:20:36.247Z"} +{"label":"index.ts","level":"info","message":"Launched in: 119 ms","metadata":{},"timestamp":"2025-02-03T18:20:36.252Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:20:36.252Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49728","metadata":{},"timestamp":"2025-02-03T18:20:36.253Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:20:36.253Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:20:36.253Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:21 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:21:04.057Z"} +{"label":"index.ts","level":"info","message":"Launched in: 124 ms","metadata":{},"timestamp":"2025-02-03T18:21:04.061Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:21:04.062Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49794","metadata":{},"timestamp":"2025-02-03T18:21:04.062Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:21:04.063Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:21:04.063Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:21 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:21:18.109Z"} +{"label":"index.ts","level":"info","message":"Launched in: 107 ms","metadata":{},"timestamp":"2025-02-03T18:21:18.114Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:21:18.114Z"} +{"label":"index.ts","level":"info","message":"Process PID: 49858","metadata":{},"timestamp":"2025-02-03T18:21:18.115Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:21:18.115Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:21:18.116Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:23:10.780Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:26 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:26:40.771Z"} +{"label":"index.ts","level":"info","message":"Launched in: 240 ms","metadata":{},"timestamp":"2025-02-03T18:26:40.776Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:26:40.777Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50042","metadata":{},"timestamp":"2025-02-03T18:26:40.777Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:26:40.777Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:26:40.778Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:27 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:27:12.867Z"} +{"label":"index.ts","level":"info","message":"Launched in: 109 ms","metadata":{},"timestamp":"2025-02-03T18:27:12.871Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:27:12.872Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50120","metadata":{},"timestamp":"2025-02-03T18:27:12.872Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:27:12.873Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:27:12.873Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:27 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:27:45.671Z"} +{"label":"index.ts","level":"info","message":"Launched in: 109 ms","metadata":{},"timestamp":"2025-02-03T18:27:45.675Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:27:45.676Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50187","metadata":{},"timestamp":"2025-02-03T18:27:45.676Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:27:45.677Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:27:45.677Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:34:31.984Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:34:31.991Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:35 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:35:03.370Z"} +{"label":"index.ts","level":"info","message":"Launched in: 124 ms","metadata":{},"timestamp":"2025-02-03T18:35:03.375Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:35:03.375Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50362","metadata":{},"timestamp":"2025-02-03T18:35:03.376Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:35:03.376Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:35:03.376Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:36:02.661Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:36:02.667Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:43 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:43:52.093Z"} +{"label":"index.ts","level":"info","message":"Launched in: 127 ms","metadata":{},"timestamp":"2025-02-03T18:43:52.098Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:43:52.099Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50563","metadata":{},"timestamp":"2025-02-03T18:43:52.100Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:43:52.100Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:43:52.101Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:44:04.621Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:44:04.627Z"} +{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T18:44:08.372Z"} +{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 19:44 CET","metadata":{},"timestamp":"2025-02-03T18:44:08.377Z"} +{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T18:44:08.378Z"} +{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T18:44:08.379Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:44 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:44:17.109Z"} +{"label":"index.ts","level":"info","message":"Launched in: 143 ms","metadata":{},"timestamp":"2025-02-03T18:44:17.115Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:44:17.115Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50689","metadata":{},"timestamp":"2025-02-03T18:44:17.116Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:44:17.117Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:44:17.117Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:44:24.713Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:44:24.719Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:44:53.807Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:46:29.064Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:46 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:46:30.119Z"} +{"label":"index.ts","level":"info","message":"Launched in: 117 ms","metadata":{},"timestamp":"2025-02-03T18:46:30.124Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:46:30.124Z"} +{"label":"index.ts","level":"info","message":"Process PID: 50968","metadata":{},"timestamp":"2025-02-03T18:46:30.125Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:46:30.125Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:46:30.126Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:46:38.101Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:46:40.967Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:49 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:49:27.177Z"} +{"label":"index.ts","level":"info","message":"Launched in: 119 ms","metadata":{},"timestamp":"2025-02-03T18:49:27.182Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:49:27.182Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51154","metadata":{},"timestamp":"2025-02-03T18:49:27.183Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:49:27.183Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:49:27.184Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:51 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:51:51.468Z"} +{"label":"index.ts","level":"info","message":"Launched in: 109 ms","metadata":{},"timestamp":"2025-02-03T18:51:51.472Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:51:51.473Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51266","metadata":{},"timestamp":"2025-02-03T18:51:51.473Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:51:51.474Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:51:51.474Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:53 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:53:21.511Z"} +{"label":"index.ts","level":"info","message":"Launched in: 129 ms","metadata":{},"timestamp":"2025-02-03T18:53:21.518Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:53:21.519Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51397","metadata":{},"timestamp":"2025-02-03T18:53:21.520Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:53:21.521Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:53:21.521Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:53 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:53:50.597Z"} +{"label":"index.ts","level":"info","message":"Launched in: 115 ms","metadata":{},"timestamp":"2025-02-03T18:53:50.602Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:53:50.602Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51475","metadata":{},"timestamp":"2025-02-03T18:53:50.603Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:53:50.603Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:53:50.604Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:54 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:54:11.566Z"} +{"label":"index.ts","level":"info","message":"Launched in: 104 ms","metadata":{},"timestamp":"2025-02-03T18:54:11.571Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:54:11.572Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51540","metadata":{},"timestamp":"2025-02-03T18:54:11.572Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:54:11.573Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:54:11.573Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:54 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:54:58.382Z"} +{"label":"index.ts","level":"info","message":"Launched in: 116 ms","metadata":{},"timestamp":"2025-02-03T18:54:58.386Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:54:58.387Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51614","metadata":{},"timestamp":"2025-02-03T18:54:58.387Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:54:58.388Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:54:58.388Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:55 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:55:35.234Z"} +{"label":"index.ts","level":"info","message":"Launched in: 119 ms","metadata":{},"timestamp":"2025-02-03T18:55:35.240Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:55:35.241Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51702","metadata":{},"timestamp":"2025-02-03T18:55:35.241Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:55:35.242Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:55:35.242Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:55 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:55:47.550Z"} +{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T18:55:47.554Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:55:47.555Z"} +{"label":"index.ts","level":"info","message":"Process PID: 51768","metadata":{},"timestamp":"2025-02-03T18:55:47.555Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T18:55:47.556Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:55:47.556Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:05 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:05:51.690Z"} +{"label":"index.ts","level":"info","message":"Launched in: 127 ms","metadata":{},"timestamp":"2025-02-03T19:05:51.694Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:05:51.695Z"} +{"label":"index.ts","level":"info","message":"Process PID: 52891","metadata":{},"timestamp":"2025-02-03T19:05:51.695Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:05:51.696Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:05:51.696Z"} +{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T19:06:13.851Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:06 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:06:58.320Z"} +{"label":"index.ts","level":"info","message":"Launched in: 128 ms","metadata":{},"timestamp":"2025-02-03T19:06:58.325Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:06:58.325Z"} +{"label":"index.ts","level":"info","message":"Process PID: 53113","metadata":{},"timestamp":"2025-02-03T19:06:58.325Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:06:58.326Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:06:58.326Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:07 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:07:20.867Z"} +{"label":"index.ts","level":"info","message":"Launched in: 130 ms","metadata":{},"timestamp":"2025-02-03T19:07:20.872Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:07:20.873Z"} +{"label":"index.ts","level":"info","message":"Process PID: 53205","metadata":{},"timestamp":"2025-02-03T19:07:20.874Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:07:20.874Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:07:20.874Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T19:07:24.176Z"} +{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T19:07:24.292Z"} +{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T19:07:24.350Z"} +{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T19:07:24.352Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T19:07:32.448Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T19:07:35.510Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:09 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:09:09.701Z"} +{"label":"index.ts","level":"info","message":"Launched in: 101 ms","metadata":{},"timestamp":"2025-02-03T19:09:09.706Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:09:09.706Z"} +{"label":"index.ts","level":"info","message":"Process PID: 53342","metadata":{},"timestamp":"2025-02-03T19:09:09.707Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:09:09.707Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:09:09.708Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T19:09:15.066Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"local-jwt\"","metadata":{},"timestamp":"2025-02-03T19:09:15.070Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:09 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:09:22.273Z"} +{"label":"index.ts","level":"info","message":"Launched in: 113 ms","metadata":{},"timestamp":"2025-02-03T19:09:22.277Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:09:22.278Z"} +{"label":"index.ts","level":"info","message":"Process PID: 53435","metadata":{},"timestamp":"2025-02-03T19:09:22.278Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:09:22.279Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:09:22.279Z"} +{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T19:09:23.874Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T19:09:23.879Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:14 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:14:17.823Z"} +{"label":"index.ts","level":"info","message":"Launched in: 65 ms","metadata":{},"timestamp":"2025-02-03T19:14:17.828Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:14:17.828Z"} +{"label":"index.ts","level":"info","message":"Process PID: 55285","metadata":{},"timestamp":"2025-02-03T19:14:17.829Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:14:17.829Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:14:17.829Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:15 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:15:46.935Z"} +{"label":"index.ts","level":"info","message":"Launched in: 64 ms","metadata":{},"timestamp":"2025-02-03T19:15:46.939Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:15:46.940Z"} +{"label":"index.ts","level":"info","message":"Process PID: 55394","metadata":{},"timestamp":"2025-02-03T19:15:46.940Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:15:46.941Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:15:46.941Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:16 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:16:22.016Z"} +{"label":"index.ts","level":"info","message":"Launched in: 60 ms","metadata":{},"timestamp":"2025-02-03T19:16:22.021Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:16:22.021Z"} +{"label":"index.ts","level":"info","message":"Process PID: 55455","metadata":{},"timestamp":"2025-02-03T19:16:22.022Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:16:22.022Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:16:22.022Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:16 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:16:36.817Z"} +{"label":"index.ts","level":"info","message":"Launched in: 61 ms","metadata":{},"timestamp":"2025-02-03T19:16:36.821Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:16:36.822Z"} +{"label":"index.ts","level":"info","message":"Process PID: 55520","metadata":{},"timestamp":"2025-02-03T19:16:36.822Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:16:36.823Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:16:36.823Z"} +{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T19:17:48.155Z"} +{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 20:17 CET","metadata":{},"timestamp":"2025-02-03T19:17:48.159Z"} +{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T19:17:48.160Z"} +{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T19:17:48.162Z"} +{"label":"index.ts","level":"error","message":"❌ Error synchronizing database: (conn:635, no: 1069, SQLState: 42000) Too many keys specified; max 64 keys allowed\nsql: ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE; - parameters:[]","metadata":{"name":"SequelizeDatabaseError","original":{"code":"ER_TOO_MANY_KEYS","errno":1069,"fatal":false,"name":"SqlError","sql":"ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE;","sqlMessage":"Too many keys specified; max 64 keys allowed","sqlState":"42000"},"parameters":{},"parent":{"code":"ER_TOO_MANY_KEYS","errno":1069,"fatal":false,"name":"SqlError","sql":"ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE;","sqlMessage":"Too many keys specified; max 64 keys allowed","sqlState":"42000"},"sql":"ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE;","stack":"Error: \n at Query.run (/home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/dialects/mariadb/query.js:47:25)\n at /home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/sequelize.js:650:28\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at Function.sync (/home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/model.js:1408:11)\n at Sequelize.sync (/home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/sequelize.js:825:9)\n at registerModels (/home/rodax/Documentos/uecko-erp/apps/server/src/config/register-models.ts:50:7)\n at connectToDatabase (/home/rodax/Documentos/uecko-erp/apps/server/src/config/database.ts:42:5)\n at /home/rodax/Documentos/uecko-erp/apps/server/src/index.ts:109:5"},"timestamp":"2025-02-03T19:24:23.645Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:25:09.339Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:25 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:25:09.347Z"} +{"label":"index.ts","level":"info","message":"Launched in: 112 ms","metadata":{},"timestamp":"2025-02-03T19:25:09.349Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:25:09.350Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56108","metadata":{},"timestamp":"2025-02-03T19:25:09.351Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:25:09.351Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:25:09.351Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:26:06.590Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:26:06.680Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:26 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:26:06.684Z"} +{"label":"index.ts","level":"info","message":"Launched in: 122 ms","metadata":{},"timestamp":"2025-02-03T19:26:06.686Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:26:06.687Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56180","metadata":{},"timestamp":"2025-02-03T19:26:06.687Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:26:06.687Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:26:06.688Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:26:48.044Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:26:48.153Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:26 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:26:48.159Z"} +{"label":"index.ts","level":"info","message":"Launched in: 142 ms","metadata":{},"timestamp":"2025-02-03T19:26:48.162Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:26:48.162Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56246","metadata":{},"timestamp":"2025-02-03T19:26:48.163Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:26:48.163Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:26:48.163Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:26:59.660Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:26:59.676Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:26:59.756Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:26 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:26:59.765Z"} +{"label":"index.ts","level":"info","message":"Launched in: 131 ms","metadata":{},"timestamp":"2025-02-03T19:26:59.768Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:26:59.768Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56311","metadata":{},"timestamp":"2025-02-03T19:26:59.769Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:26:59.769Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:26:59.770Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:27:28.819Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:27:28.836Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> undefined","metadata":{},"timestamp":"2025-02-03T19:27:28.845Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:27:28.914Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:27 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:27:28.923Z"} +{"label":"index.ts","level":"info","message":"Launched in: 133 ms","metadata":{},"timestamp":"2025-02-03T19:27:28.927Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:27:28.927Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56390","metadata":{},"timestamp":"2025-02-03T19:27:28.928Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:27:28.928Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:27:28.929Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:27:39.617Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:27:39.634Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> undefined","metadata":{},"timestamp":"2025-02-03T19:27:39.643Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:27:39.717Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:27 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:27:39.722Z"} +{"label":"index.ts","level":"info","message":"Launched in: 134 ms","metadata":{},"timestamp":"2025-02-03T19:27:39.724Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:27:39.724Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56462","metadata":{},"timestamp":"2025-02-03T19:27:39.725Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:27:39.725Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:27:39.726Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:27:58.359Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:27:58.375Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:27:58.384Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:27:58.450Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:27 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:27:58.455Z"} +{"label":"index.ts","level":"info","message":"Launched in: 124 ms","metadata":{},"timestamp":"2025-02-03T19:27:58.456Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:27:58.457Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56524","metadata":{},"timestamp":"2025-02-03T19:27:58.457Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:27:58.458Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:27:58.458Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:28:13.983Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:28:13.999Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:28:14.009Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:28:14.090Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:28 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:28:14.095Z"} +{"label":"index.ts","level":"info","message":"Launched in: 139 ms","metadata":{},"timestamp":"2025-02-03T19:28:14.097Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:28:14.098Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56585","metadata":{},"timestamp":"2025-02-03T19:28:14.098Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:28:14.098Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:28:14.099Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:28:22.671Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:28:22.687Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:28:22.697Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:28:22.766Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:28 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:28:22.771Z"} +{"label":"index.ts","level":"info","message":"Launched in: 128 ms","metadata":{},"timestamp":"2025-02-03T19:28:22.773Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:28:22.773Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56646","metadata":{},"timestamp":"2025-02-03T19:28:22.774Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:28:22.774Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:28:22.775Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:28:25.220Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:28:25.237Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:28:25.246Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:28:25.326Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:28 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:28:25.336Z"} +{"label":"index.ts","level":"info","message":"Launched in: 145 ms","metadata":{},"timestamp":"2025-02-03T19:28:25.338Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:28:25.339Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56675","metadata":{},"timestamp":"2025-02-03T19:28:25.339Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:28:25.339Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:28:25.340Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:28:38.481Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:28:38.497Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:28:38.506Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:28:38.576Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:28 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:28:38.584Z"} +{"label":"index.ts","level":"info","message":"Launched in: 130 ms","metadata":{},"timestamp":"2025-02-03T19:28:38.587Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:28:38.588Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56758","metadata":{},"timestamp":"2025-02-03T19:28:38.588Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:28:38.588Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:28:38.589Z"} +{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T19:32:46.306Z"} +{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 20:32 CET","metadata":{},"timestamp":"2025-02-03T19:32:46.309Z"} +{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T19:32:46.310Z"} +{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T19:32:46.311Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:32:50.420Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> /home/rodax/Documentos/uecko-erp/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:32:50.437Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:32:50.446Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:32:50.515Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:32 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:32:50.519Z"} +{"label":"index.ts","level":"info","message":"Launched in: 127 ms","metadata":{},"timestamp":"2025-02-03T19:32:50.521Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:32:50.521Z"} +{"label":"index.ts","level":"info","message":"Process PID: 56931","metadata":{},"timestamp":"2025-02-03T19:32:50.522Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:32:50.522Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:32:50.523Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:33:29.548Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:33:29.566Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> [object Object]","metadata":{},"timestamp":"2025-02-03T19:33:29.576Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:33:29.795Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:33 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:33:29.801Z"} +{"label":"index.ts","level":"info","message":"Launched in: 284 ms","metadata":{},"timestamp":"2025-02-03T19:33:29.803Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:33:29.804Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57095","metadata":{},"timestamp":"2025-02-03T19:33:29.804Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:33:29.805Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:33:29.805Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:34:10.091Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:34:10.111Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> (sequelize) => {\n AuthUserModel.init({\n id: {\n type: sequelize_1.DataTypes.UUID,\n primaryKey: true,\n allowNull: false,\n },\n username: {\n type: sequelize_1.DataTypes.STRING,\n allowNull: false,\n },\n email: {\n type: sequelize_1.DataTypes.STRING,\n allowNull: false,\n unique: true,\n },\n password: {\n type: sequelize_1.DataTypes.STRING,\n allowNull: false,\n },\n roles: {\n type: sequelize_1.DataTypes.STRING,\n allowNull: false,\n defaultValue: \"USER\",\n get() {\n const rawValue = this.getDataValue(\"roles\");\n return String(rawValue).split(\";\");\n },\n set(value) {\n const rawValue = value.join(\";\");\n this.setDataValue(\"roles\", rawValue);\n },\n },\n isActive: {\n type: sequelize_1.DataTypes.BOOLEAN,\n defaultValue: true,\n },\n }, {\n sequelize,\n tableName: \"users\",\n paranoid: true,\n timestamps: true,\n createdAt: \"created_at\",\n updatedAt: \"updated_at\",\n deletedAt: \"deleted_at\",\n indexes: [{ name: \"email_idx\", fields: [\"email\"], unique: true }],\n });\n}","metadata":{},"timestamp":"2025-02-03T19:34:10.121Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:34:10.204Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:34 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:34:10.209Z"} +{"label":"index.ts","level":"info","message":"Launched in: 152 ms","metadata":{},"timestamp":"2025-02-03T19:34:10.348Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:34:10.349Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57164","metadata":{},"timestamp":"2025-02-03T19:34:10.349Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:34:10.350Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:34:10.350Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:34:36.658Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:34:36.678Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> undefined","metadata":{},"timestamp":"2025-02-03T19:34:36.688Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:34:36.767Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:34 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:34:36.772Z"} +{"label":"index.ts","level":"info","message":"Launched in: 148 ms","metadata":{},"timestamp":"2025-02-03T19:34:36.774Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:34:36.774Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57234","metadata":{},"timestamp":"2025-02-03T19:34:36.775Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:34:36.775Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:34:36.776Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:35:04.998Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:35:05.017Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> class AuthUserModel extends sequelize_1.Model {\n static associate(connection) { }\n}","metadata":{},"timestamp":"2025-02-03T19:35:05.027Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:35:05.104Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:35 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:35:05.113Z"} +{"label":"index.ts","level":"info","message":"Launched in: 147 ms","metadata":{},"timestamp":"2025-02-03T19:35:05.115Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:35:05.115Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57307","metadata":{},"timestamp":"2025-02-03T19:35:05.116Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:35:05.116Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:35:05.117Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:35:25.632Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:35:25.648Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> class AuthUserModel extends sequelize_1.Model {\n static associate(connection) { }\n}","metadata":{},"timestamp":"2025-02-03T19:35:25.657Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:35:25.729Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:35 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:35:25.733Z"} +{"label":"index.ts","level":"info","message":"Launched in: 130 ms","metadata":{},"timestamp":"2025-02-03T19:35:25.735Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:35:25.736Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57371","metadata":{},"timestamp":"2025-02-03T19:35:25.736Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:35:25.737Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:35:25.738Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:35:32.644Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> contexts/auth/infraestructure/sequelize/auth-user.model.ts","metadata":{},"timestamp":"2025-02-03T19:35:32.661Z"} +{"label":"index.ts","level":"info","message":"✅ Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:35:32.671Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:35:32.751Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:35 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:35:32.761Z"} +{"label":"index.ts","level":"info","message":"Launched in: 145 ms","metadata":{},"timestamp":"2025-02-03T19:35:32.764Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:35:32.764Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57424","metadata":{},"timestamp":"2025-02-03T19:35:32.764Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:35:32.765Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:35:32.765Z"} +{"label":"index.ts","level":"info","message":"Searching models... /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:36:21.140Z"} +{"label":"index.ts","level":"info","message":"File >> contexts/auth/infraestructure/sequelize/auth-user.model.ts...","metadata":{},"timestamp":"2025-02-03T19:36:21.160Z"} +{"label":"index.ts","level":"info","message":"Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:36:21.170Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:36:21.414Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:36 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:36:21.422Z"} +{"label":"index.ts","level":"info","message":"Launched in: 315 ms","metadata":{},"timestamp":"2025-02-03T19:36:21.424Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:36:21.425Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57497","metadata":{},"timestamp":"2025-02-03T19:36:21.425Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:36:21.426Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:36:21.426Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:38:22.554Z"} +{"label":"index.ts","level":"info","message":"📄 File >> contexts/auth/infraestructure/sequelize/auth-user.model.ts...","metadata":{},"timestamp":"2025-02-03T19:38:22.575Z"} +{"label":"index.ts","level":"info","message":"🏷️ Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:38:22.585Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:38:22.805Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:38 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:38:22.814Z"} +{"label":"index.ts","level":"info","message":"Launched in: 297 ms","metadata":{},"timestamp":"2025-02-03T19:38:22.816Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:38:22.817Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57569","metadata":{},"timestamp":"2025-02-03T19:38:22.817Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:38:22.818Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:38:22.819Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:38:32.132Z"} +{"label":"index.ts","level":"info","message":"📄 File >> contexts/auth/infraestructure/sequelize/auth-user.model.ts...","metadata":{},"timestamp":"2025-02-03T19:38:32.149Z"} +{"label":"index.ts","level":"info","message":"🏷️ Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:38:32.157Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:38:32.234Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:38 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:38:32.242Z"} +{"label":"index.ts","level":"info","message":"Launched in: 139 ms","metadata":{},"timestamp":"2025-02-03T19:38:32.244Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:38:32.245Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57642","metadata":{},"timestamp":"2025-02-03T19:38:32.245Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:38:32.245Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:38:32.246Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:38:50.700Z"} +{"label":"index.ts","level":"info","message":"🏷️ Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:38:50.728Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:38:50.816Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:38 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:38:50.823Z"} +{"label":"index.ts","level":"info","message":"Launched in: 157 ms","metadata":{},"timestamp":"2025-02-03T19:38:50.987Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:38:50.988Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57706","metadata":{},"timestamp":"2025-02-03T19:38:50.988Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:38:50.989Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:38:50.989Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:38:59.624Z"} +{"label":"index.ts","level":"info","message":"🏷️ Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:38:59.649Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:38:59.720Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:38 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:38:59.725Z"} +{"label":"index.ts","level":"info","message":"Launched in: 130 ms","metadata":{},"timestamp":"2025-02-03T19:38:59.727Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:38:59.727Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57774","metadata":{},"timestamp":"2025-02-03T19:38:59.728Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:38:59.728Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:38:59.728Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:39:14.739Z"} +{"label":"index.ts","level":"info","message":"📄 Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:39:14.765Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:39:14.850Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:39 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:39:14.860Z"} +{"label":"index.ts","level":"info","message":"Launched in: 151 ms","metadata":{},"timestamp":"2025-02-03T19:39:14.863Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:39:14.863Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57851","metadata":{},"timestamp":"2025-02-03T19:39:14.863Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:39:14.864Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:39:14.864Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:41:08.844Z"} +{"label":"index.ts","level":"info","message":"🗃️ Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:41:08.874Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:41:08.950Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:41 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:41:08.955Z"} +{"label":"index.ts","level":"info","message":"Launched in: 145 ms","metadata":{},"timestamp":"2025-02-03T19:41:08.957Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:41:08.958Z"} +{"label":"index.ts","level":"info","message":"Process PID: 57927","metadata":{},"timestamp":"2025-02-03T19:41:08.958Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:41:08.959Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:41:08.959Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:41:26.406Z"} +{"label":"index.ts","level":"info","message":"📃 Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:41:26.433Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:41:26.637Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:41 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:41:26.643Z"} +{"label":"index.ts","level":"info","message":"Launched in: 264 ms","metadata":{},"timestamp":"2025-02-03T19:41:26.645Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:41:26.646Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58001","metadata":{},"timestamp":"2025-02-03T19:41:26.646Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:41:26.647Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:41:26.647Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:42:16.348Z"} +{"label":"index.ts","level":"info","message":"📁 Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:42:16.373Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:42:16.451Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:42 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:42:16.460Z"} +{"label":"index.ts","level":"info","message":"Launched in: 139 ms","metadata":{},"timestamp":"2025-02-03T19:42:16.463Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:42:16.463Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58085","metadata":{},"timestamp":"2025-02-03T19:42:16.463Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:42:16.464Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:42:16.464Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:43:04.839Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel","metadata":{},"timestamp":"2025-02-03T19:43:04.867Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:43:04.935Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:43 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:43:04.940Z"} +{"label":"index.ts","level":"info","message":"Launched in: 138 ms","metadata":{},"timestamp":"2025-02-03T19:43:04.942Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:43:04.943Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58150","metadata":{},"timestamp":"2025-02-03T19:43:04.943Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:43:04.944Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:43:04.944Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:43:28.630Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:43:28.655Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:43:28.731Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:43 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:43:28.738Z"} +{"label":"index.ts","level":"info","message":"Launched in: 136 ms","metadata":{},"timestamp":"2025-02-03T19:43:28.740Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:43:28.741Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58216","metadata":{},"timestamp":"2025-02-03T19:43:28.741Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:43:28.742Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:43:28.742Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:44:46.040Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:44:46.064Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:44:46.141Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:44 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:44:46.150Z"} +{"label":"index.ts","level":"info","message":"Launched in: 137 ms","metadata":{},"timestamp":"2025-02-03T19:44:46.154Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:44:46.155Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58283","metadata":{},"timestamp":"2025-02-03T19:44:46.155Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:44:46.156Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:44:46.157Z"} +{"label":"index.ts","level":"info","message":"▶️ Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T19:44:50.714Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T19:45:07.427Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:45:50.093Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:45:50.118Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:45:50.189Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:45 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:45:50.194Z"} +{"label":"index.ts","level":"info","message":"Launched in: 128 ms","metadata":{},"timestamp":"2025-02-03T19:45:50.197Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:45:50.197Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58431","metadata":{},"timestamp":"2025-02-03T19:45:50.197Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:45:50.198Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:45:50.198Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:46:15.017Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:46:15.041Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:46:15.129Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:46 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:46:15.138Z"} +{"label":"index.ts","level":"info","message":"Launched in: 148 ms","metadata":{},"timestamp":"2025-02-03T19:46:15.140Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:46:15.141Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58500","metadata":{},"timestamp":"2025-02-03T19:46:15.141Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:46:15.142Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:46:15.142Z"} +{"label":"index.ts","level":"info","message":"▶️ Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T19:46:17.947Z"} +{"label":"index.ts","level":"error","message":"💥 Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T19:46:17.959Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:47 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:47:05.832Z"} +{"label":"index.ts","level":"info","message":"Launched in: 35 ms","metadata":{},"timestamp":"2025-02-03T19:47:05.837Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:47:05.838Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58586","metadata":{},"timestamp":"2025-02-03T19:47:05.838Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:47:05.839Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:47:05.864Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:47:05.945Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:47:05.949Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:47:05.950Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:48 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:48:02.768Z"} +{"label":"index.ts","level":"info","message":"Launched in: 28 ms","metadata":{},"timestamp":"2025-02-03T19:48:02.772Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:48:02.773Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58654","metadata":{},"timestamp":"2025-02-03T19:48:02.773Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:48:02.774Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:48:02.796Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:48:02.860Z"} +{"label":"index.ts","level":"info","message":"✅ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:48:02.865Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:48:02.867Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:48:02.868Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:48 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:48:11.097Z"} +{"label":"index.ts","level":"info","message":"Launched in: 29 ms","metadata":{},"timestamp":"2025-02-03T19:48:11.102Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:48:11.103Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58723","metadata":{},"timestamp":"2025-02-03T19:48:11.103Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:48:11.104Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:48:11.126Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:48:11.193Z"} +{"label":"index.ts","level":"info","message":"✅ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:48:11.195Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:48:11.197Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:48:11.197Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:48 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:48:30.460Z"} +{"label":"index.ts","level":"info","message":"Launched in: 30 ms","metadata":{},"timestamp":"2025-02-03T19:48:30.465Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:48:30.465Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58769","metadata":{},"timestamp":"2025-02-03T19:48:30.466Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:48:30.467Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:48:30.488Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:48:30.554Z"} +{"label":"index.ts","level":"info","message":"✅ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:48:30.556Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:48:30.557Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:48:30.558Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:48 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:48:57.187Z"} +{"label":"index.ts","level":"info","message":"Launched in: 29 ms","metadata":{},"timestamp":"2025-02-03T19:48:57.192Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:48:57.193Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58849","metadata":{},"timestamp":"2025-02-03T19:48:57.193Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:48:57.194Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:48:57.215Z"} +{"label":"index.ts","level":"info","message":"✅ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:48:57.293Z"} +{"label":"index.ts","level":"info","message":"✔️ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:48:57.295Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:48:57.296Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:48:57.297Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:49 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:49:04.695Z"} +{"label":"index.ts","level":"info","message":"Launched in: 29 ms","metadata":{},"timestamp":"2025-02-03T19:49:04.700Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:49:04.701Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58916","metadata":{},"timestamp":"2025-02-03T19:49:04.701Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:49:04.702Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:49:04.723Z"} +{"label":"index.ts","level":"info","message":"✔️ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:49:04.791Z"} +{"label":"index.ts","level":"info","message":"✔️ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:49:04.793Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:49:04.795Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:49:04.795Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:49 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:49:27.656Z"} +{"label":"index.ts","level":"info","message":"Launched in: 28 ms","metadata":{},"timestamp":"2025-02-03T19:49:27.661Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:49:27.661Z"} +{"label":"index.ts","level":"info","message":"Process PID: 58960","metadata":{},"timestamp":"2025-02-03T19:49:27.662Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:49:27.662Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:49:27.684Z"} +{"label":"index.ts","level":"info","message":"✔️ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:49:27.770Z"} +{"label":"index.ts","level":"info","message":"✔️ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:49:27.774Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:49:27.777Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:49:27.778Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:49 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:49:32.822Z"} +{"label":"index.ts","level":"info","message":"Launched in: 34 ms","metadata":{},"timestamp":"2025-02-03T19:49:32.828Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:49:32.828Z"} +{"label":"index.ts","level":"info","message":"Process PID: 59000","metadata":{},"timestamp":"2025-02-03T19:49:32.829Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:49:32.830Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:49:32.856Z"} +{"label":"index.ts","level":"info","message":"✔️ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:49:33.112Z"} +{"label":"index.ts","level":"info","message":"✔️ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:49:33.116Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:49:33.121Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:49:33.122Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:49 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:49:39.935Z"} +{"label":"index.ts","level":"info","message":"Launched in: 27 ms","metadata":{},"timestamp":"2025-02-03T19:49:39.939Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:49:39.940Z"} +{"label":"index.ts","level":"info","message":"Process PID: 59064","metadata":{},"timestamp":"2025-02-03T19:49:39.941Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:49:39.941Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:49:39.964Z"} +{"label":"index.ts","level":"info","message":"✔️ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:49:40.046Z"} +{"label":"index.ts","level":"info","message":"✔️ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:49:40.050Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:49:40.054Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:49:40.055Z"} +{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 20:50 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T19:50:05.408Z"} +{"label":"index.ts","level":"info","message":"Launched in: 34 ms","metadata":{},"timestamp":"2025-02-03T19:50:05.414Z"} +{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T19:50:05.414Z"} +{"label":"index.ts","level":"info","message":"Process PID: 59119","metadata":{},"timestamp":"2025-02-03T19:50:05.415Z"} +{"label":"index.ts","level":"info","message":"🔎 Searching models in: /home/rodax/Documentos/uecko-erp/apps/server/src","metadata":{},"timestamp":"2025-02-03T19:50:05.416Z"} +{"label":"index.ts","level":"info","message":"🔸 Model >> AuthUserModel (contexts/auth/infraestructure/sequelize/auth-user.model.ts)","metadata":{},"timestamp":"2025-02-03T19:50:05.441Z"} +{"label":"index.ts","level":"info","message":"✔️ Database synchronized successfully.","metadata":{},"timestamp":"2025-02-03T19:50:05.517Z"} +{"label":"index.ts","level":"info","message":"✔️ Database connection established successfully.","metadata":{},"timestamp":"2025-02-03T19:50:05.519Z"} +{"label":"index.ts","level":"info","message":"To shut down your server, press + C at any time","metadata":{},"timestamp":"2025-02-03T19:50:05.521Z"} +{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T19:50:05.683Z"} diff --git a/apps/server/error-2025-02-03.log b/apps/server/error-2025-02-03.log index 9a339e68..dfc63873 100644 --- a/apps/server/error-2025-02-03.log +++ b/apps/server/error-2025-02-03.log @@ -51,3 +51,18 @@ {"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:53:59.783Z"} {"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T17:53:46.420Z"} {"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T17:53:46.434Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Validation Error","metadata":{},"timestamp":"2025-02-03T18:09:57.217Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Validation Error","metadata":{},"timestamp":"2025-02-03T18:10:42.558Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:34:31.991Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:36:02.667Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:44:04.627Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:44:24.719Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:46:29.064Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T18:46:40.967Z"} +{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T19:07:24.350Z"} +{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T19:07:24.352Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"local-jwt\"","metadata":{},"timestamp":"2025-02-03T19:09:15.070Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T19:09:23.879Z"} +{"label":"index.ts","level":"error","message":"❌ Error synchronizing database: (conn:635, no: 1069, SQLState: 42000) Too many keys specified; max 64 keys allowed\nsql: ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE; - parameters:[]","metadata":{"name":"SequelizeDatabaseError","original":{"code":"ER_TOO_MANY_KEYS","errno":1069,"fatal":false,"name":"SqlError","sql":"ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE;","sqlMessage":"Too many keys specified; max 64 keys allowed","sqlState":"42000"},"parameters":{},"parent":{"code":"ER_TOO_MANY_KEYS","errno":1069,"fatal":false,"name":"SqlError","sql":"ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE;","sqlMessage":"Too many keys specified; max 64 keys allowed","sqlState":"42000"},"sql":"ALTER TABLE `users` CHANGE `email` `email` VARCHAR(255) NOT NULL UNIQUE;","stack":"Error: \n at Query.run (/home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/dialects/mariadb/query.js:47:25)\n at /home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/sequelize.js:650:28\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at Function.sync (/home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/model.js:1408:11)\n at Sequelize.sync (/home/rodax/Documentos/uecko-erp/node_modules/.pnpm/sequelize@6.37.5_mariadb@3.4.0_mysql2@3.12.0/node_modules/sequelize/src/sequelize.js:825:9)\n at registerModels (/home/rodax/Documentos/uecko-erp/apps/server/src/config/register-models.ts:50:7)\n at connectToDatabase (/home/rodax/Documentos/uecko-erp/apps/server/src/config/database.ts:42:5)\n at /home/rodax/Documentos/uecko-erp/apps/server/src/index.ts:109:5"},"timestamp":"2025-02-03T19:24:23.645Z"} +{"label":"index.ts","level":"error","message":"Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T19:45:07.427Z"} +{"label":"index.ts","level":"error","message":"💥 Unhandled API error: Unknown authentication strategy \"jwt\"","metadata":{},"timestamp":"2025-02-03T19:46:17.959Z"} diff --git a/apps/server/package.json b/apps/server/package.json index 1a230ab3..71b23479 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -21,6 +21,7 @@ "@repo/typescript-config": "workspace:*", "@types/bcrypt": "^5.0.2", "@types/express": "^4.17.21", + "@types/glob": "^8.1.0", "@types/jest": "^29.5.14", "@types/jsonwebtoken": "^9.0.8", "@types/luxon": "^3.4.2", @@ -53,6 +54,7 @@ "dotenv": "^16.4.7", "esbuild": "^0.24.0", "express": "^4.18.2", + "glob": "^11.0.1", "helmet": "^8.0.0", "http": "0.0.1-security", "http-status": "^2.1.0", @@ -64,6 +66,7 @@ "passport": "^0.7.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", + "path": "^0.12.7", "reflect-metadata": "^0.2.2", "response-time": "^2.3.3", "sequelize": "^6.37.5", diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 574adb7f..64eb56ce 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -3,7 +3,6 @@ import { globalErrorHandler } from "@common/presentation"; import dotenv from "dotenv"; import express, { Application } from "express"; import helmet from "helmet"; -import passport from "passport"; import responseTime from "response-time"; import { v1Routes } from "./routes"; @@ -25,10 +24,10 @@ export function createApp(): Application { app.use(responseTime()); // set up the response-time middleware // Inicializar Passport - app.use(passport.initialize()); + //app.use((req, res, next) => createPassportAuthProvider()); app.use((req, _, next) => { - logger.info(`Incoming request ${req.method} to ${req.path}`); + logger.info(`▶️ Incoming request ${req.method} to ${req.path}`); next(); }); diff --git a/apps/server/src/common/presentation/express/express-controller.ts b/apps/server/src/common/presentation/express/express-controller.ts index 79345180..7805d186 100644 --- a/apps/server/src/common/presentation/express/express-controller.ts +++ b/apps/server/src/common/presentation/express/express-controller.ts @@ -8,6 +8,11 @@ export abstract class ExpressController { protected res!: Response; protected next!: NextFunction; + static errorResponse(apiError: ApiError, res: Response) { + logger.error(`[${apiError.status}] ${apiError.title}: ${apiError.detail}`); + return res.status(apiError.status).json(apiError); + } + protected abstract executeImpl(): Promise; protected ok(dto?: T) { @@ -24,22 +29,18 @@ export abstract class ExpressController { return this.res.status(httpStatus.NO_CONTENT).send(); } - protected errorResponse(apiError: ApiError) { - logger.error(`[${apiError.status}] ${apiError.title}: ${apiError.detail}`); - return this.res.status(apiError.status).json(apiError); - } - /** * 🔹 Respuesta para errores de cliente (400 Bad Request) */ - protected clientError(message: string, errors?: any[]) { - return this.errorResponse( + public clientError(message: string, errors?: any[]) { + return ExpressController.errorResponse( new ApiError({ status: 400, title: "Bad Request", detail: message, errors, - }) + }), + this.res ); } @@ -47,12 +48,13 @@ export abstract class ExpressController { * 🔹 Respuesta para errores de autenticación (401 Unauthorized) */ protected unauthorizedError(message?: string) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 401, title: "Unauthorized", detail: message ?? "You are not authorized to access this resource.", - }) + }), + this.res ); } @@ -60,12 +62,13 @@ export abstract class ExpressController { * 🔹 Respuesta para errores de autorización (403 Forbidden) */ protected forbiddenError(message?: string) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 403, title: "Forbidden", detail: message ?? "You do not have permission to perform this action.", - }) + }), + this.res ); } @@ -73,12 +76,13 @@ export abstract class ExpressController { * 🔹 Respuesta para recursos no encontrados (404 Not Found) */ protected notFoundError(message: string) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 404, title: "Not Found", detail: message, - }) + }), + this.res ); } @@ -86,13 +90,14 @@ export abstract class ExpressController { * 🔹 Respuesta para conflictos (409 Conflict) */ protected conflictError(message: string, errors?: any[]) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 409, title: "Conflict", detail: message, errors, - }) + }), + this.res ); } @@ -100,13 +105,14 @@ export abstract class ExpressController { * 🔹 Respuesta para errores de validación de entrada (422 Unprocessable Entity) */ protected invalidInputError(message: string, errors?: any[]) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 422, title: "Invalid Input", detail: message, errors, - }) + }), + this.res ); } @@ -116,12 +122,13 @@ export abstract class ExpressController { * @returns */ protected unavailableError(message?: string) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 503, title: "Service Unavailable", detail: message ?? "The service is currently unavailable. Please try again later.", - }) + }), + this.res ); } @@ -129,12 +136,13 @@ export abstract class ExpressController { * 🔹 Respuesta para errores internos del servidor (500 Internal Server Error) */ protected internalServerError(message?: string) { - return this.errorResponse( + return ExpressController.errorResponse( new ApiError({ status: 500, title: "Internal Server Error", detail: message ?? "An unexpected error occurred. Please try again later.", - }) + }), + this.res ); } diff --git a/apps/server/src/common/presentation/express/middlewares/global-error-handler.ts b/apps/server/src/common/presentation/express/middlewares/global-error-handler.ts index 0003575a..0cf7b636 100644 --- a/apps/server/src/common/presentation/express/middlewares/global-error-handler.ts +++ b/apps/server/src/common/presentation/express/middlewares/global-error-handler.ts @@ -8,7 +8,7 @@ export const globalErrorHandler = (error: any, req: Request, res: Response, next return next(error); } - logger.error(`Unhandled API error: ${error.message}`); + logger.error(`❌ Unhandled API error: ${error.message}`); // Verifica si el error es una instancia de ApiError if (error instanceof ApiError) { diff --git a/apps/server/src/config/database.ts b/apps/server/src/config/database.ts index c5884032..029e05db 100644 --- a/apps/server/src/config/database.ts +++ b/apps/server/src/config/database.ts @@ -1,3 +1,4 @@ +import { logger } from "@common/infrastructure/logger"; import dotenv from "dotenv"; import { Sequelize } from "sequelize"; import { registerModels } from "./register-models"; @@ -5,20 +6,34 @@ import { registerModels } from "./register-models"; dotenv.config(); export const sequelize = new Sequelize( - process.env.DB_NAME as string, - process.env.DB_USER as string, - process.env.DB_PASSWORD as string, + process.env.DB_NAME as string, // database + process.env.DB_USER as string, // username + process.env.DB_PASSWORD as string, // password { host: process.env.DB_HOST as string, dialect: "mariadb", port: parseInt(process.env.DB_PORT || "3306", 10), - logging: process.env.DB_LOGGING === "true" ? console.log : false, + dialectOptions: { + multipleStatements: true, + dateStrings: true, + typeCast: true, + //timezone: "Z", + }, pool: { max: 10, min: 0, acquire: 30000, idle: 10000, }, + logQueryParameters: true, + logging: process.env.DB_LOGGING === "true" ? logger.debug : false, + define: { + charset: "utf8mb4", + collate: "utf8mb4_unicode_ci", + //freezeTableName: true, + underscored: true, + timestamps: true, + }, } ); @@ -26,9 +41,9 @@ export async function connectToDatabase(): Promise { try { await registerModels(); await sequelize.authenticate(); - console.log("✅ Database connection established successfully."); + logger.info(`✔️${" "}Database connection established successfully.`); } catch (error) { - console.error("❌ Unable to connect to the database:", error); + logger.error("❌ Unable to connect to the database:", error); process.exit(1); } } diff --git a/apps/server/src/config/register-models.ts b/apps/server/src/config/register-models.ts index 3a1eaf03..47248068 100644 --- a/apps/server/src/config/register-models.ts +++ b/apps/server/src/config/register-models.ts @@ -1,18 +1,66 @@ +import { logger } from "@common/infrastructure/logger"; +import * as glob from "glob"; +import * as path from "path"; +import { DataTypes } from "sequelize"; import { sequelize } from "./database"; /** * 🔹 Registra todos los modelos en Sequelize */ export const registerModels = async () => { + const cwd = path.resolve(`${__dirname}/../`); + const models: { [key: string]: any } = {}; + + // Opciones para buscar los modelos + const globOptions = { + cwd, + nocase: true, + nodir: true, + absolute: false, + }; + try { - if (process.env.NODE_ENV !== "production") { - await sequelize.sync({ alter: true }); - console.log("✅ Database synchronized successfully."); - } else { - console.log("⚠️ Running in production mode - Skipping database sync."); + logger.info(`🔎 Searching models in: ${cwd}`); + + // Buscamos los ficheros que terminen en .model.js o .model.ts + glob.sync("**/*.model.{js,ts}", globOptions).forEach((file) => { + //logger.info(`📄 File >> ${file}...`); + const modelDef = require(path.join(file)).default; + const model = typeof modelDef === "function" ? modelDef(sequelize, DataTypes) : false; + + if (model) { + models[model.name] = model; + logger.info(`🔸 Model >> ${model.name} (${file})`); + } else { + logger.info(`🚫 No model`); + } + }); + + // Asociaciones y hooks de los modelos, si existen + for (const modelName in models) { + const model = models[modelName]; + if (model.associate) { + model.associate(sequelize, models); + } + if (model.hooks) { + model.hooks(sequelize); + } } } catch (error) { - console.error("❌ Error synchronizing database:", error); + logger.error("❌ Error registering models:", error); + process.exit(1); + } + + try { + // Sincronizamos DB en modo desarrollo + if (process.env.NODE_ENV !== "production") { + await sequelize.sync({ alter: true }); + logger.info(`✔️${" "}Database synchronized successfully.`); + } else { + logger.warning("⚠️ Running in production mode - Skipping database sync."); + } + } catch (error) { + logger.error("❌ Error synchronizing database:", error); process.exit(1); } }; diff --git a/apps/server/src/contexts/auth/domain/aggregates/authenticated-user.ts b/apps/server/src/contexts/auth/domain/aggregates/authenticated-user.ts index cb173118..5be7d171 100644 --- a/apps/server/src/contexts/auth/domain/aggregates/authenticated-user.ts +++ b/apps/server/src/contexts/auth/domain/aggregates/authenticated-user.ts @@ -21,10 +21,26 @@ export class AuthenticatedUser extends AggregateRoot { return Result.ok(user); } + private _hasRole(role: string): boolean { + return (this._props.roles || []).some((r) => r === role); + } + comparePassword(plainPassword: string): Promise { return this._props.passwordHash.compare(plainPassword); } + public getRoles(): string[] { + return this._props.roles; + } + + get isUser(): boolean { + return this._hasRole("user"); + } + + get isAdmin(): boolean { + return this._hasRole("admin"); + } + /** * 🔹 Devuelve una representación lista para persistencia */ diff --git a/apps/server/src/contexts/auth/infraestructure/passport/passport-auth-provider.ts b/apps/server/src/contexts/auth/infraestructure/passport/passport-auth-provider.ts index 510fee68..472b046c 100644 --- a/apps/server/src/contexts/auth/infraestructure/passport/passport-auth-provider.ts +++ b/apps/server/src/contexts/auth/infraestructure/passport/passport-auth-provider.ts @@ -20,6 +20,47 @@ export class PassportAuthProvider implements IAuthProvider { private readonly _repository: IAuthenticatedUserRepository; private readonly _transactionManager!: ITransactionManager; + /** + * 🔹 Configura PassportJS + */ + initializePassport(): void { + const jwtOptions = { + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + secretOrKey: SECRET_KEY, + }; + + passport.use( + "jwt", + new JwtStrategy(jwtOptions, (payload, done) => { + try { + console.log(payload); + return done(null, payload); + } catch (error) { + return done(error, false); + } + }) + ); + + passport.use( + "email", + new LocalStrategy( + { usernameField: "email", passwordField: "password" }, + async (email, password, done) => { + try { + const user = await this.verifyUser(email, password); + return user + ? done(null, user) + : done(null, false, { message: "Invalid email or password" }); + } catch (error) { + return done(error, false); + } + } + ) + ); + + passport.initialize(); + } + constructor(repository: IAuthenticatedUserRepository, transactionManager: ITransactionManager) { this._repository = repository; this._transactionManager = transactionManager; @@ -50,42 +91,6 @@ export class PassportAuthProvider implements IAuthProvider { return !isValidPassword ? Promise.resolve(null) : Promise.resolve(user); } - - /** - * 🔹 Configura PassportJS con la estrategia JWT - */ - private initializePassport(): void { - const jwtOptions = { - jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), - secretOrKey: SECRET_KEY, - }; - - passport.use( - new JwtStrategy(jwtOptions, (payload, done) => { - try { - return done(null, payload); - } catch (error) { - return done(error, false); - } - }) - ); - - passport.use( - new LocalStrategy( - { usernameField: "email", passwordField: "password" }, - async (email, password, done) => { - try { - const user = await this.verifyUser(email, password); - return user - ? done(null, user) - : done(null, false, { message: "Invalid email or password" }); - } catch (error) { - return done(error, false); - } - } - ) - ); - } } export const createPassportAuthProvider = ( diff --git a/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts b/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts index 60263202..8f7615fb 100644 --- a/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts +++ b/apps/server/src/contexts/auth/infraestructure/sequelize/auth-user.model.ts @@ -1,12 +1,17 @@ -import { sequelize } from "@config/database"; -import { DataTypes, InferAttributes, InferCreationAttributes, Model } from "sequelize"; +import { DataTypes, InferAttributes, InferCreationAttributes, Model, Sequelize } from "sequelize"; export type AuthUserCreationAttributes = InferCreationAttributes; -class AuthUserModel extends Model< +export class AuthUserModel extends Model< InferAttributes, InferCreationAttributes > { + // To avoid table creation + /*static async sync(): Promise { + return Promise.resolve(); + }*/ + + static associate(connection: Sequelize) {} declare id: string; declare username: string; declare email: string; @@ -15,56 +20,57 @@ class AuthUserModel extends Model< declare isActive: boolean; } -AuthUserModel.init( - { - id: { - type: DataTypes.UUID, - primaryKey: true, - allowNull: false, - }, - username: { - type: DataTypes.STRING, - allowNull: false, - }, - email: { - type: DataTypes.STRING, - allowNull: false, - unique: true, - }, - password: { - type: DataTypes.STRING, - allowNull: false, - }, - roles: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: "USER", - get(this: AuthUserModel): string[] { - const rawValue = this.getDataValue("roles") as any; - return String(rawValue).split(";"); +export default (sequelize: Sequelize) => { + AuthUserModel.init( + { + id: { + type: DataTypes.UUID, + primaryKey: true, + allowNull: false, }, - set(this: AuthUserModel, value: string[]) { - const rawValue = value.join(";") as any; - this.setDataValue("roles", rawValue); + username: { + type: DataTypes.STRING, + allowNull: false, + }, + email: { + type: DataTypes.STRING, + allowNull: false, + unique: true, + }, + password: { + type: DataTypes.STRING, + allowNull: false, + }, + roles: { + type: DataTypes.STRING, + allowNull: false, + defaultValue: "USER", + get(this: AuthUserModel): string[] { + const rawValue = this.getDataValue("roles") as any; + return String(rawValue).split(";"); + }, + set(this: AuthUserModel, value: string[]) { + const rawValue = value.join(";") as any; + this.setDataValue("roles", rawValue); + }, + }, + isActive: { + type: DataTypes.BOOLEAN, + defaultValue: true, }, }, - isActive: { - type: DataTypes.BOOLEAN, - defaultValue: true, - }, - }, - { - sequelize, - tableName: "users", - paranoid: true, // softs deletes - timestamps: true, + { + sequelize, + tableName: "users", + paranoid: true, // softs deletes + timestamps: true, - createdAt: "created_at", - updatedAt: "updated_at", - deletedAt: "deleted_at", + createdAt: "created_at", + updatedAt: "updated_at", + deletedAt: "deleted_at", - indexes: [{ name: "email_idx", fields: ["email"], unique: true }], - } -); - -export { AuthUserModel }; + indexes: [{ name: "email_idx", fields: ["email"], unique: true }], + } + ); + return AuthUserModel; +}; diff --git a/apps/server/src/contexts/auth/presentation/auth.routes.ts b/apps/server/src/contexts/auth/presentation/auth.routes.ts index 872abbfa..3996005e 100644 --- a/apps/server/src/contexts/auth/presentation/auth.routes.ts +++ b/apps/server/src/contexts/auth/presentation/auth.routes.ts @@ -2,6 +2,7 @@ import { validateRequest } from "@common/presentation"; import { Router } from "express"; import { createRegisterController } from "./controllers"; import { LoginUserSchema, RegisterUserSchema } from "./dto"; +import { checkUser } from "./middleware"; export const authRouter = (appRouter: Router) => { const authRoutes: Router = Router({ mergeParams: true }); @@ -38,7 +39,7 @@ export const authRouter = (appRouter: Router) => { * * @apiError (401) {String} message Invalid email or password. */ - authRoutes.post("/login", validateRequest(LoginUserSchema)); + authRoutes.post("/login", validateRequest(LoginUserSchema), checkUser); /** * @api {post} /api/auth/select-company Select an active company diff --git a/apps/server/src/contexts/auth/presentation/middleware/index.ts b/apps/server/src/contexts/auth/presentation/middleware/index.ts index db9a0811..0ea5a7ac 100644 --- a/apps/server/src/contexts/auth/presentation/middleware/index.ts +++ b/apps/server/src/contexts/auth/presentation/middleware/index.ts @@ -1 +1 @@ -export * from "./passport-auth"; +export * from "./passport-auth.middleware"; diff --git a/apps/server/src/contexts/auth/presentation/middleware/passport-auth.middleware.ts b/apps/server/src/contexts/auth/presentation/middleware/passport-auth.middleware.ts new file mode 100644 index 00000000..3a339a1e --- /dev/null +++ b/apps/server/src/contexts/auth/presentation/middleware/passport-auth.middleware.ts @@ -0,0 +1,70 @@ +import { UniqueID } from "@common/domain"; +import { ApiError, ExpressController } from "@common/presentation"; +import { AuthenticatedUser } from "@contexts/auth/domain"; +import { NextFunction, Request, Response } from "express"; +import passport from "passport"; + +// Extender el Request de Express para incluir el usuario autenticado optionalmente +interface AuthenticatedRequest extends Request { + user?: AuthenticatedUser; +} + +// Middleware para autenticar usando passport con el local-jwt strategy +const authenticateJwt = passport.authenticate("jwt", { session: false }); + +// Comprueba el rol del usuario +const authorizeUser = (condition: (user: AuthenticatedUser) => boolean) => { + return (req: AuthenticatedRequest, res: Response, next: NextFunction) => { + const user = req.user as AuthenticatedUser; + if (!user || !condition(user)) { + return ExpressController.errorResponse( + new ApiError({ + status: 401, + title: "Unauthorized", + detail: "You are not authorized to access this resource.", + }), + res + ); + } + + //setAuthContext(req, res, user); + return next(); + }; +}; + +// Verifica que el usuario esté autenticado +export const checkUser = [authenticateJwt, authorizeUser((user) => user.isUser)]; + +// Verifica que el usuario sea administrador +export const checkIsAdmin = [authenticateJwt, authorizeUser((user) => user.isAdmin)]; + +// Middleware para verificar que el usuario sea administrador o el dueño de los datos (self) +export const checkAdminOrSelf = [ + authenticateJwt, + (req: AuthenticatedRequest, res: Response, next: NextFunction) => { + const user = req.user as AuthenticatedUser; + const { userId } = req.params; + + // Si el usuario es admin, está autorizado + if (user.isAdmin) { + return next(); + } + + // Si el usuario es sí mismo + if (user.isUser && userId) { + const paramIdOrError = UniqueID.create(userId); + if (paramIdOrError.isSuccess && user.id.equals(paramIdOrError.data)) { + return next(); + } + } + + return ExpressController.errorResponse( + new ApiError({ + status: 401, + title: "Unauthorized", + detail: "You are not authorized to access this resource.", + }), + res + ); + }, +]; diff --git a/apps/server/src/contexts/auth/presentation/middleware/passport-auth.ts b/apps/server/src/contexts/auth/presentation/middleware/passport-auth.ts deleted file mode 100644 index 538ef256..00000000 --- a/apps/server/src/contexts/auth/presentation/middleware/passport-auth.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NextFunction, Request, Response } from "express"; -import passport from "passport"; - -export function authenticateJWT(req: Request, res: Response, next: NextFunction) { - passport.authenticate("jwt", { session: false }, (err, user) => { - if (err || !user) { - return res.status(401).json({ message: "Unauthorized: Invalid token" }); - } - (req as any).user = user; - next(); - })(req, res, next); -} diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts index bca1174d..ea564f4e 100644 --- a/apps/server/src/index.ts +++ b/apps/server/src/index.ts @@ -40,7 +40,7 @@ const serverStop = (server: http.Server) => { // Manejo de errores al iniciar el servidor const serverError = (error: NodeJS.ErrnoException) => { - logger.debug(`⛔️ Server wasn't able to start properly.`); + logger.info(`⛔️ Server wasn't able to start properly.`); if (error.code === "EADDRINUSE") { logger.error(`The port ${error.port} is already used by another application.`); @@ -106,17 +106,18 @@ process.on("uncaughtException", (error: Error) => { // Arranca el servidor si la conexión a la base de datos va bien (async () => { try { + const now = DateTime.now(); + logger.info(`Time: ${now.toLocaleString(DateTime.DATETIME_FULL)} ${now.zoneName}`); + logger.info(`Launched in: ${now.diff(currentState.launchedAt).toMillis()} ms`); + logger.info(`Environment: ${currentState.environment}`); + logger.info(`Process PID: ${process.pid}`); + await connectToDatabase(); // Lógica de inicialización de DB, si procede: // initStructure(sequelizeConn.connection); // insertUsers(); server.listen(currentState.port, () => { - const now = DateTime.now(); - logger.info(`Time: ${now.toLocaleString(DateTime.DATETIME_FULL)} ${now.zoneName}`); - logger.info(`Launched in: ${now.diff(currentState.launchedAt).toMillis()} ms`); - logger.info(`Environment: ${currentState.environment}`); - logger.info(`Process PID: ${process.pid}`); logger.info("To shut down your server, press + C at any time"); logger.info(`⚡️ Server: http://${currentState.host}:${currentState.port}`); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f42ec40..d89d0ddd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: express: specifier: ^4.18.2 version: 4.21.2 + glob: + specifier: ^11.0.1 + version: 11.0.1 helmet: specifier: ^8.0.0 version: 8.0.0 @@ -71,6 +74,9 @@ importers: passport-local: specifier: ^1.0.0 version: 1.0.0 + path: + specifier: ^0.12.7 + version: 0.12.7 reflect-metadata: specifier: ^0.2.2 version: 0.2.2 @@ -114,6 +120,9 @@ importers: '@types/express': specifier: ^4.17.21 version: 4.17.21 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 '@types/jest': specifier: ^29.5.14 version: 29.5.14 @@ -1157,6 +1166,9 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/glob@8.1.0': + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1190,6 +1202,9 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -2289,6 +2304,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -2419,6 +2439,9 @@ packages: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2588,6 +2611,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -2854,6 +2881,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -2935,6 +2966,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3183,6 +3218,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -3190,6 +3229,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + pause@0.0.1: resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} @@ -3277,6 +3319,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3936,6 +3982,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -4919,6 +4968,11 @@ snapshots: '@types/geojson@7946.0.16': {} + '@types/glob@8.1.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.12.0 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 22.12.0 @@ -4953,6 +5007,8 @@ snapshots: '@types/mime@1.3.5': {} + '@types/minimatch@5.1.2': {} + '@types/ms@2.1.0': {} '@types/node@22.12.0': @@ -6407,6 +6463,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.1: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -6524,6 +6589,8 @@ snapshots: once: 1.4.0 wrappy: 1.0.2 + inherits@2.0.3: {} + inherits@2.0.4: {} internal-slot@1.1.0: @@ -6715,6 +6782,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.0.2: + dependencies: + '@isaacs/cliui': 8.0.2 + jake@10.9.2: dependencies: async: 3.2.6 @@ -7155,6 +7226,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.0.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -7218,6 +7291,10 @@ snapshots: mimic-fn@2.1.0: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -7468,10 +7545,20 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + path-to-regexp@0.1.12: {} path-type@4.0.0: {} + path@0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + pause@0.0.1: {} pg-connection-string@2.7.0: {} @@ -7542,6 +7629,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + process@0.11.10: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -8309,6 +8398,10 @@ snapshots: util-deprecate@1.0.2: {} + util@0.10.4: + dependencies: + inherits: 2.0.3 + utils-merge@1.0.1: {} uuid@11.0.5: {}