This commit is contained in:
David Arranz 2025-02-03 20:50:16 +01:00
parent 0f70a770ec
commit 2cc044a89e
17 changed files with 1053 additions and 145 deletions

View File

@ -855,3 +855,643 @@
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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 <CTRL> + 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"}

View File

@ -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"}

View File

@ -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",

View File

@ -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();
});

View File

@ -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<void | any>;
protected ok<T>(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
);
}

View File

@ -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) {

View File

@ -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<void> {
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);
}
}

View File

@ -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);
}
};

View File

@ -21,10 +21,26 @@ export class AuthenticatedUser extends AggregateRoot<IAuthenticatedUserProps> {
return Result.ok(user);
}
private _hasRole(role: string): boolean {
return (this._props.roles || []).some((r) => r === role);
}
comparePassword(plainPassword: string): Promise<boolean> {
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
*/

View File

@ -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 = (

View File

@ -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<AuthUserModel>;
class AuthUserModel extends Model<
export class AuthUserModel extends Model<
InferAttributes<AuthUserModel>,
InferCreationAttributes<AuthUserModel>
> {
// To avoid table creation
/*static async sync(): Promise<any> {
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;
};

View File

@ -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

View File

@ -1 +1 @@
export * from "./passport-auth";
export * from "./passport-auth.middleware";

View File

@ -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
);
},
];

View File

@ -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);
}

View File

@ -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 <CTRL> + C at any time");
logger.info(`⚡️ Server: http://${currentState.host}:${currentState.port}`);
});

View File

@ -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: {}