emilsoftware-utilities 2.0.0-dev.23 → 2.0.0-dev.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.MD +147 -0
- package/dist/ContractGenerator.d.ts +4 -3
- package/dist/ContractGenerator.js +15 -5
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DailyFileTransport.d.ts +8 -2
- package/dist/DailyFileTransport.js +9 -2
- package/dist/DailyFileTransport.js.map +1 -1
- package/dist/DatabaseUpdater.js +8 -3
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/ExecutionTimeLogger.d.ts +2 -2
- package/dist/ExecutionTimeLogger.js +3 -2
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Logger.d.ts +22 -9
- package/dist/Logger.js +131 -54
- package/dist/Logger.js.map +1 -1
- package/dist/Orm.d.ts +26 -6
- package/dist/Orm.js +144 -40
- package/dist/Orm.js.map +1 -1
- package/dist/Utilities.d.ts +12 -7
- package/dist/Utilities.js +57 -22
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +9 -0
- package/dist/accessi-module/AccessiModule.js +12 -4
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/console.css +529 -281
- package/dist/accessi-module/Console/console.js +2081 -85
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Console/generated/accessiApi.d.ts +167 -1
- package/dist/accessi-module/Console/generated/accessiApi.js +156 -2
- package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +20 -8
- package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +8 -0
- package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/index.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/index.js +18 -0
- package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/help.d.ts +13 -0
- package/dist/accessi-module/Console/help.js +348 -0
- package/dist/accessi-module/Console/help.js.map +1 -0
- package/dist/accessi-module/Console/index.html +89 -21
- package/dist/accessi-module/Console/wiki.d.ts +52 -0
- package/dist/accessi-module/Console/wiki.js +689 -0
- package/dist/accessi-module/Console/wiki.js.map +1 -0
- package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +8 -1
- package/dist/accessi-module/Controllers/AccessiConsoleController.js +52 -15
- package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
- package/dist/accessi-module/Controllers/ConfiguratorController.js +6 -8
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
- package/dist/accessi-module/Controllers/EmailController.js +1 -1
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
- package/dist/accessi-module/Controllers/FiltriController.js +92 -4
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.d.ts +11 -0
- package/dist/accessi-module/Controllers/PermissionController.js +273 -8
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
- package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
- package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
- package/dist/accessi-module/Controllers/UserController.d.ts +2 -2
- package/dist/accessi-module/Controllers/UserController.js +25 -9
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
- package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
- package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
- package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
- package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.d.ts +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/MenuItem.js +1 -0
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +2 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Role.js.map +1 -1
- package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
- package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
- package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
- package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
- package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -1
- package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.js +4 -2
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/index.d.ts +2 -0
- package/dist/accessi-module/Dtos/index.js +2 -0
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +2 -2
- package/dist/accessi-module/Services/AuthService/AuthService.js +36 -36
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.d.ts +2 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +9 -6
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +10 -3
- package/dist/accessi-module/Services/FiltriService/FiltriService.js +64 -6
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +44 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +418 -110
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
- package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +23 -27
- package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +10 -3
- package/dist/accessi-module/Services/UserService/UserService.js +170 -84
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +9 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +76 -28
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.d.ts +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.js +9 -1
- package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
- package/dist/accessi-module/database-updates/optionalColumns.d.ts +2 -0
- package/dist/accessi-module/database-updates/optionalColumns.js +33 -1
- package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +7 -2
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +1 -0
- package/dist/accessi-module/federated-auth/FederatedAuthController.js +26 -0
- package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +6 -0
- package/dist/accessi-module/federated-auth/FederatedAuthService.js +28 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -1
- package/dist/accessi-module/index.d.ts +4 -1
- package/dist/accessi-module/index.js +8 -2
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.js +8 -5
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.d.ts +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.js +11 -7
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.js +8 -3
- package/dist/accessi-module/security/accessControl.js.map +1 -1
- package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
- package/dist/accessi-module/security/authenticatedToken.js +2 -1
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
- package/dist/accessi-module/security/passwordResetToken.d.ts +9 -3
- package/dist/accessi-module/security/passwordResetToken.js +9 -5
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.js +28 -8
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
- package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
- package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
- package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
- package/dist/allegati-module/AllegatiModule.d.ts +11 -0
- package/dist/allegati-module/AllegatiModule.js +11 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
- package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
- package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
- package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
- package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +101 -52
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
- package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
- package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
- package/dist/autobind.d.ts +10 -3
- package/dist/autobind.js +24 -9
- package/dist/autobind.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.25.tgz +0 -0
- package/dist/firebird-compat.d.ts +13 -0
- package/dist/firebird-compat.js +3 -2
- package/dist/firebird-compat.js.map +1 -1
- package/dist/scripts/generateAccessiWiki.d.ts +1 -0
- package/dist/scripts/generateAccessiWiki.js +131 -0
- package/dist/scripts/generateAccessiWiki.js.map +1 -0
- package/dist/swagger/SwaggerConfig.js +6 -3
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +19 -8
- package/dist/emilsoftware-utilities-2.0.0-dev.23.tgz +0 -0
package/dist/Logger.d.ts
CHANGED
|
@@ -7,25 +7,38 @@ export declare enum LogLevels {
|
|
|
7
7
|
LOG = "LOG",
|
|
8
8
|
DATABASE = "DATABASE"
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Logger strutturato dell'applicazione.
|
|
12
|
+
*
|
|
13
|
+
* - I log finiscono su console (colorati) e su file JSON giornaliero.
|
|
14
|
+
* - Le istanze con la stessa `logDirectory` condividono un unico logger winston
|
|
15
|
+
* (un solo transport/timer), evitando di crearne uno per classe.
|
|
16
|
+
* - I campi sensibili (password, token, secret, ...) sono redatti automaticamente.
|
|
17
|
+
*/
|
|
10
18
|
export declare class Logger {
|
|
11
19
|
private readonly winstonLogger;
|
|
12
20
|
private readonly tag;
|
|
13
21
|
private readonly logDirectory;
|
|
14
|
-
private
|
|
22
|
+
private readonly maxLevel;
|
|
23
|
+
/** Logger winston condivisi per directory, così da non moltiplicare transport e timer. */
|
|
24
|
+
private static readonly sharedLoggers;
|
|
25
|
+
private static colorsRegistered;
|
|
15
26
|
constructor(tag: string, config?: {
|
|
16
27
|
logDirectory?: string;
|
|
17
28
|
customFormat?: winston.Logform.Format;
|
|
18
29
|
transports?: winston.transport[];
|
|
30
|
+
/** Livello minimo loggato: `error`..`database` (default `database`, ovvero tutto). Override con `LOG_LEVEL`. */
|
|
31
|
+
level?: string;
|
|
19
32
|
});
|
|
20
|
-
private
|
|
33
|
+
private static resolveSharedLogger;
|
|
21
34
|
execStart(prefix?: string): number;
|
|
22
|
-
execStop(prefix: string, startTime: number, error?: boolean): void;
|
|
23
|
-
info(...data:
|
|
24
|
-
dbLog(...data:
|
|
25
|
-
debug(...data:
|
|
26
|
-
warning(...data:
|
|
27
|
-
log(...data:
|
|
28
|
-
error(...data:
|
|
35
|
+
execStop(prefix: string | undefined, startTime: number, error?: boolean): void;
|
|
36
|
+
info(...data: unknown[]): void;
|
|
37
|
+
dbLog(...data: unknown[]): void;
|
|
38
|
+
debug(...data: unknown[]): void;
|
|
39
|
+
warning(...data: unknown[]): void;
|
|
40
|
+
log(...data: unknown[]): void;
|
|
41
|
+
error(...data: unknown[]): void;
|
|
29
42
|
private print;
|
|
30
43
|
static createLogger(tag: string, config?: {
|
|
31
44
|
logDirectory?: string;
|
package/dist/Logger.js
CHANGED
|
@@ -27,48 +27,120 @@ var LogLevels;
|
|
|
27
27
|
LogLevels["LOG"] = "LOG";
|
|
28
28
|
LogLevels["DATABASE"] = "DATABASE";
|
|
29
29
|
})(LogLevels || (exports.LogLevels = LogLevels = {}));
|
|
30
|
+
/** Livelli winston usati dal logger (comprende `database` e `general`). */
|
|
31
|
+
const WIN_LEVELS = {
|
|
32
|
+
error: 1,
|
|
33
|
+
warning: 2,
|
|
34
|
+
info: 3,
|
|
35
|
+
general: 3,
|
|
36
|
+
http: 4,
|
|
37
|
+
verbose: 5,
|
|
38
|
+
debug: 6,
|
|
39
|
+
silly: 7,
|
|
40
|
+
database: 8,
|
|
41
|
+
};
|
|
42
|
+
/** Chiavi i cui valori non devono mai finire nei log. */
|
|
43
|
+
const SENSITIVE_KEY_PATTERN = /(password|passwd|pwd|secret|token|authorization|apikey|api_key|cookie)/i;
|
|
44
|
+
const REDACTED = '[REDACTED]';
|
|
45
|
+
/**
|
|
46
|
+
* Serializza un valore per il log, redigendo i campi sensibili e risolvendo
|
|
47
|
+
* `Error` e riferimenti circolari (che altrimenti diventano `[object Object]`).
|
|
48
|
+
*/
|
|
49
|
+
function serializeLogValue(value, seen) {
|
|
50
|
+
if (value instanceof Error) {
|
|
51
|
+
return { name: value.name, message: value.message, stack: value.stack };
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
return value.map((item) => serializeLogValue(item, seen));
|
|
55
|
+
}
|
|
56
|
+
if (value && typeof value === 'object') {
|
|
57
|
+
if (seen.has(value)) {
|
|
58
|
+
return '[Circular]';
|
|
59
|
+
}
|
|
60
|
+
seen.add(value);
|
|
61
|
+
const result = {};
|
|
62
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
63
|
+
result[key] = SENSITIVE_KEY_PATTERN.test(key) ? REDACTED : serializeLogValue(nested, seen);
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
/** Costruisce il messaggio testuale del log a partire dagli argomenti. */
|
|
70
|
+
function stringifyLogData(data) {
|
|
71
|
+
return data.map((value) => {
|
|
72
|
+
var _a;
|
|
73
|
+
if (typeof value === 'string') {
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
if (value instanceof Error) {
|
|
77
|
+
return (_a = value.stack) !== null && _a !== void 0 ? _a : `${value.name}: ${value.message}`;
|
|
78
|
+
}
|
|
79
|
+
if (value === undefined) {
|
|
80
|
+
return 'undefined';
|
|
81
|
+
}
|
|
82
|
+
if (value === null) {
|
|
83
|
+
return 'null';
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
return JSON.stringify(serializeLogValue(value, new WeakSet()));
|
|
87
|
+
}
|
|
88
|
+
catch (_b) {
|
|
89
|
+
return String(value);
|
|
90
|
+
}
|
|
91
|
+
}).join(', ');
|
|
92
|
+
}
|
|
93
|
+
/** Formato condiviso: JSON a una riga, con tag/file/level/messaggio. */
|
|
94
|
+
function defaultFormat() {
|
|
95
|
+
return winston_1.default.format.printf((_a) => {
|
|
96
|
+
var { timestamp, tag, file, level, message } = _a, meta = __rest(_a, ["timestamp", "tag", "file", "level", "message"]);
|
|
97
|
+
return JSON.stringify(Object.assign({ timestamp: timestamp || new Date().toISOString(), tag, file: String(file !== null && file !== void 0 ? file : '').split('\\').join('/'), level: level === 'general' ? 'log' : level, message }, meta));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Logger strutturato dell'applicazione.
|
|
102
|
+
*
|
|
103
|
+
* - I log finiscono su console (colorati) e su file JSON giornaliero.
|
|
104
|
+
* - Le istanze con la stessa `logDirectory` condividono un unico logger winston
|
|
105
|
+
* (un solo transport/timer), evitando di crearne uno per classe.
|
|
106
|
+
* - I campi sensibili (password, token, secret, ...) sono redatti automaticamente.
|
|
107
|
+
*/
|
|
30
108
|
class Logger {
|
|
31
109
|
constructor(tag, config) {
|
|
110
|
+
var _a, _b, _c;
|
|
32
111
|
this.tag = tag || "[UNTAGGED]";
|
|
33
112
|
this.logDirectory = (config === null || config === void 0 ? void 0 : config.logDirectory) || "logs";
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
113
|
+
const configuredLevel = ((_b = (_a = config === null || config === void 0 ? void 0 : config.level) !== null && _a !== void 0 ? _a : process.env.LOG_LEVEL) !== null && _b !== void 0 ? _b : 'database').toLowerCase();
|
|
114
|
+
this.maxLevel = (_c = WIN_LEVELS[configuredLevel]) !== null && _c !== void 0 ? _c : WIN_LEVELS.database;
|
|
115
|
+
const format = winston_1.default.format.combine(winston_1.default.format.timestamp(), (config === null || config === void 0 ? void 0 : config.customFormat) || defaultFormat());
|
|
116
|
+
this.winstonLogger = (config === null || config === void 0 ? void 0 : config.transports)
|
|
117
|
+
? winston_1.default.createLogger({ level: 'database', format, transports: config.transports, levels: WIN_LEVELS })
|
|
118
|
+
: Logger.resolveSharedLogger(this.logDirectory, format);
|
|
119
|
+
if (!Logger.colorsRegistered) {
|
|
120
|
+
winston_1.default.addColors({
|
|
121
|
+
database: "green",
|
|
122
|
+
error: "red",
|
|
123
|
+
warning: "yellow",
|
|
124
|
+
info: "blue",
|
|
125
|
+
debug: "magenta",
|
|
126
|
+
log: "cyan",
|
|
127
|
+
});
|
|
128
|
+
Logger.colorsRegistered = true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
static resolveSharedLogger(logDirectory, format) {
|
|
132
|
+
const existing = Logger.sharedLoggers.get(logDirectory);
|
|
133
|
+
if (existing) {
|
|
134
|
+
return existing;
|
|
135
|
+
}
|
|
136
|
+
const logger = winston_1.default.createLogger({
|
|
43
137
|
level: 'database',
|
|
44
|
-
format
|
|
45
|
-
transports:
|
|
46
|
-
|
|
47
|
-
],
|
|
48
|
-
levels: {
|
|
49
|
-
error: 1,
|
|
50
|
-
warning: 2,
|
|
51
|
-
info: 3,
|
|
52
|
-
general: 3,
|
|
53
|
-
http: 4,
|
|
54
|
-
verbose: 5,
|
|
55
|
-
debug: 6,
|
|
56
|
-
silly: 7,
|
|
57
|
-
database: 8,
|
|
58
|
-
},
|
|
138
|
+
format,
|
|
139
|
+
transports: [new DailyFileTransport_1.DailyFileTransport(logDirectory)],
|
|
140
|
+
levels: WIN_LEVELS,
|
|
59
141
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
database: "green",
|
|
63
|
-
error: "red",
|
|
64
|
-
warning: "yellow",
|
|
65
|
-
info: "blue",
|
|
66
|
-
debug: "magenta",
|
|
67
|
-
log: "cyan",
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
replaceAll(string, match, replacer) {
|
|
71
|
-
return string.split(match).join(replacer);
|
|
142
|
+
Logger.sharedLoggers.set(logDirectory, logger);
|
|
143
|
+
return logger;
|
|
72
144
|
}
|
|
73
145
|
execStart(prefix = "") {
|
|
74
146
|
this.print(LogLevels.INFO, `${prefix} - Execution started`);
|
|
@@ -98,44 +170,49 @@ class Logger {
|
|
|
98
170
|
this.print(LogLevels.ERROR, ...data);
|
|
99
171
|
}
|
|
100
172
|
print(level, ...data) {
|
|
173
|
+
var _a;
|
|
174
|
+
const rank = level === LogLevels.LOG ? WIN_LEVELS.general : ((_a = WIN_LEVELS[level.toLowerCase()]) !== null && _a !== void 0 ? _a : WIN_LEVELS.database);
|
|
175
|
+
if (rank > this.maxLevel) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
101
178
|
const now = new Date();
|
|
102
179
|
const fileName = this.tag.split("\\").pop() || this.tag;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
file: fileName,
|
|
106
|
-
time: now,
|
|
107
|
-
};
|
|
108
|
-
const logEntry = {
|
|
109
|
-
level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),
|
|
110
|
-
message: [...data].join(","),
|
|
111
|
-
};
|
|
112
|
-
// Log to console with colors
|
|
180
|
+
const message = stringifyLogData(data);
|
|
181
|
+
// Console colorata (il livello file resta strutturato).
|
|
113
182
|
switch (level) {
|
|
114
183
|
case LogLevels.INFO:
|
|
115
|
-
console.info((0, colorette_1.blue)(`[INFO][${now}][${fileName}]`),
|
|
184
|
+
console.info((0, colorette_1.blue)(`[INFO][${now}][${fileName}]`), message);
|
|
116
185
|
break;
|
|
117
186
|
case LogLevels.ERROR:
|
|
118
|
-
console.error((0, colorette_1.red)(`[ERROR][${now}][${fileName}]`),
|
|
187
|
+
console.error((0, colorette_1.red)(`[ERROR][${now}][${fileName}]`), message);
|
|
119
188
|
break;
|
|
120
189
|
case LogLevels.DEBUG:
|
|
121
|
-
console.debug((0, colorette_1.magenta)(`[DEBUG][${now}][${fileName}]`),
|
|
190
|
+
console.debug((0, colorette_1.magenta)(`[DEBUG][${now}][${fileName}]`), message);
|
|
122
191
|
break;
|
|
123
192
|
case LogLevels.WARNING:
|
|
124
|
-
console.debug((0, colorette_1.yellow)(`[WARNING][${now}][${fileName}]`),
|
|
193
|
+
console.debug((0, colorette_1.yellow)(`[WARNING][${now}][${fileName}]`), message);
|
|
125
194
|
break;
|
|
126
195
|
case LogLevels.LOG:
|
|
127
|
-
console.log((0, colorette_1.cyan)(`[LOG][${now}][${fileName}]`),
|
|
196
|
+
console.log((0, colorette_1.cyan)(`[LOG][${now}][${fileName}]`), message);
|
|
128
197
|
break;
|
|
129
198
|
case LogLevels.DATABASE:
|
|
130
|
-
console.log((0, colorette_1.green)(`[DATABASE][${now}][${fileName}]`),
|
|
199
|
+
console.log((0, colorette_1.green)(`[DATABASE][${now}][${fileName}]`), message);
|
|
131
200
|
break;
|
|
132
201
|
}
|
|
133
|
-
|
|
134
|
-
|
|
202
|
+
this.winstonLogger.log({
|
|
203
|
+
level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),
|
|
204
|
+
message,
|
|
205
|
+
tag: this.tag,
|
|
206
|
+
file: fileName,
|
|
207
|
+
time: now,
|
|
208
|
+
});
|
|
135
209
|
}
|
|
136
210
|
static createLogger(tag, config) {
|
|
137
211
|
return new Logger(tag, config);
|
|
138
212
|
}
|
|
139
213
|
}
|
|
140
214
|
exports.Logger = Logger;
|
|
215
|
+
/** Logger winston condivisi per directory, così da non moltiplicare transport e timer. */
|
|
216
|
+
Logger.sharedLoggers = new Map();
|
|
217
|
+
Logger.colorsRegistered = false;
|
|
141
218
|
//# sourceMappingURL=Logger.js.map
|
package/dist/Logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"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","sourcesContent":["import winston from \"winston\";\nimport { DailyFileTransport } from './DailyFileTransport';\nimport { blue, red, magenta, green, cyan, yellow } from 'colorette';\n\nexport enum LogLevels {\n INFO = \"INFO\",\n ERROR = \"ERROR\",\n WARNING = \"WARNING\",\n DEBUG = \"DEBUG\",\n LOG = \"LOG\",\n DATABASE = \"DATABASE\",\n}\n\nexport class Logger {\n private readonly winstonLogger: winston.Logger;\n private readonly tag: string;\n private readonly logDirectory: string;\n private logFormat: winston.Logform.Format;\n\n constructor(\n tag: string,\n config?: {\n logDirectory?: string;\n customFormat?: winston.Logform.Format;\n transports?: winston.transport[];\n }\n ) {\n this.tag = tag || \"[UNTAGGED]\";\n this.logDirectory = config?.logDirectory || \"logs\";\n\n // Default log format\n this.logFormat =\n config?.customFormat ||\n winston.format.printf(({ timestamp, file, level, message, ...meta }) => {\n return JSON.stringify({\n timestamp: timestamp || new Date().toISOString(),\n tag: this.tag,\n file: this.replaceAll(file + \"\", \"\\\\\", \"/\"),\n level: level === 'general' ? 'log' : level,\n message,\n ...meta,\n });\n });\n\n // Configure logger\n this.winstonLogger = winston.createLogger({\n level: 'database',\n format: winston.format.combine(winston.format.timestamp(), this.logFormat),\n transports: config?.transports || [\n new DailyFileTransport(this.logDirectory),\n ],\n levels: {\n error: 1,\n warning: 2,\n info: 3,\n general: 3,\n http: 4,\n verbose: 5,\n debug: 6,\n silly: 7,\n database: 8,\n },\n });\n\n // Add colors for console logging\n winston.addColors({\n database: \"green\",\n error: \"red\",\n warning: \"yellow\",\n info: \"blue\",\n debug: \"magenta\",\n log: \"cyan\",\n });\n }\n\n private replaceAll(string: string, match: string, replacer: string) {\n return string.split(match).join(replacer);\n }\n\n public execStart(prefix: string = \"\"): number {\n this.print(LogLevels.INFO, `${prefix} - Execution started`);\n return performance.now();\n }\n\n public execStop(prefix: string = \"\", startTime: number, error: boolean = false): void {\n const executionTime = performance.now() - startTime;\n const message = `${prefix} - Execution ended ${error ? \"due to an error\" : \"successfully\"\n }. Execution time: ${executionTime.toFixed(2)} ms`;\n this.print(error ? LogLevels.ERROR : LogLevels.INFO, message);\n }\n\n public info(...data: Object[]): void {\n this.print(LogLevels.INFO, ...data);\n }\n\n public dbLog(...data: Object[]): void {\n this.print(LogLevels.DATABASE, ...data);\n }\n\n public debug(...data: Object[]): void {\n this.print(LogLevels.DEBUG, ...data);\n }\n\n public warning(...data: Object[]): void {\n this.print(LogLevels.WARNING, ...data);\n }\n\n public log(...data: Object[]): void {\n this.print(LogLevels.LOG, ...data);\n }\n\n public error(...data: Object[]): void {\n this.print(LogLevels.ERROR, ...data);\n }\n\n private print(level: LogLevels, ...data: Object[]): void {\n const now: Date = new Date();\n const fileName = this.tag.split(\"\\\\\").pop() || this.tag;\n\n // Attach metadata to Winston logger\n this.winstonLogger.defaultMeta = {\n file: fileName,\n time: now,\n };\n\n const logEntry: winston.LogEntry = {\n level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),\n message: [...data].join(\",\"),\n };\n\n // Log to console with colors\n switch (level) {\n case LogLevels.INFO:\n console.info(blue(`[INFO][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.ERROR:\n console.error(red(`[ERROR][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.DEBUG:\n console.debug(magenta(`[DEBUG][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.WARNING:\n console.debug(yellow(`[WARNING][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.LOG:\n console.log(cyan(`[LOG][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.DATABASE:\n console.log(green(`[DATABASE][${now}][${fileName}]`), logEntry.message);\n break;\n }\n\n // Log to file\n this.winstonLogger.log(logEntry);\n }\n\n public static createLogger(tag: string, config?: { logDirectory?: string }): Logger {\n return new Logger(tag, config);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAA8B;AAC9B,6DAA0D;AAC1D,yCAAoE;AAEpE,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;IACf,gCAAmB,CAAA;IACnB,4BAAe,CAAA;IACf,wBAAW,CAAA;IACX,kCAAqB,CAAA;AACzB,CAAC,EAPW,SAAS,yBAAT,SAAS,QAOpB;AAED,2EAA2E;AAC3E,MAAM,UAAU,GAAG;IACf,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;CACd,CAAC;AAEF,yDAAyD;AACzD,MAAM,qBAAqB,GAAG,yEAAyE,CAAC;AACxG,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAc,EAAE,IAAqB;IAC5D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5E,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,YAAY,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEhB,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YAC3E,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,0EAA0E;AAC1E,SAAS,gBAAgB,CAAC,IAAe;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,MAAA,KAAK,CAAC,KAAK,mCAAI,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5D,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,wEAAwE;AACxE,SAAS,aAAa;IAClB,OAAO,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAiD,EAAE,EAAE;YAArD,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,OAAW,EAAN,IAAI,cAA/C,gDAAiD,CAAF;QAAO,OAAA,IAAI,CAAC,SAAS,iBAC9F,SAAS,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAChD,GAAG,EACH,IAAI,EAAE,MAAM,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC9C,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAC1C,OAAO,IACJ,IAAI,EACT,CAAA;KAAA,CAAC,CAAC;AACR,CAAC;AAED;;;;;;;GAOG;AACH,MAAa,MAAM;IAUf,YACI,GAAW,EACX,MAMC;;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,YAAY,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,KAAI,MAAM,CAAC;QAEnD,MAAM,eAAe,GAAG,CAAC,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,OAAO,CAAC,GAAG,CAAC,SAAS,mCAAI,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7F,IAAI,CAAC,QAAQ,GAAG,MAAA,UAAU,CAAC,eAA0C,CAAC,mCAAI,UAAU,CAAC,QAAQ,CAAC;QAE9F,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,CAAC,OAAO,CACjC,iBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,KAAI,aAAa,EAAE,CAC1C,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU;YACnC,CAAC,CAAC,iBAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACxG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE5D,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC3B,iBAAO,CAAC,SAAS,CAAC;gBACd,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,MAAM;aACd,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACnC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,YAAoB,EAAE,MAA8B;QACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;YAChC,KAAK,EAAE,UAAU;YACjB,MAAM;YACN,UAAU,EAAE,CAAC,IAAI,uCAAkB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,EAAE,UAAU;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,SAAS,CAAC,SAAiB,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,sBAAsB,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ,CAAC,SAAiB,EAAE,EAAE,SAAiB,EAAE,QAAiB,KAAK;QAC1E,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACpD,MAAM,OAAO,GAAG,GAAG,MAAM,sBAAsB,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cACvE,qBAAqB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAEM,IAAI,CAAC,GAAG,IAAe;QAC1B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,GAAG,IAAe;QAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,GAAG,IAAe;QAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO,CAAC,GAAG,IAAe;QAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,GAAG,CAAC,GAAG,IAAe;QACzB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,GAAG,IAAe;QAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,KAAgB,EAAE,GAAG,IAAe;;QAC9C,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAA,UAAU,CAAC,KAAK,CAAC,WAAW,EAA6B,CAAC,mCAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChJ,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;QACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvC,wDAAwD;QACxD,QAAQ,KAAK,EAAE,CAAC;YACZ,KAAK,SAAS,CAAC,IAAI;gBACf,OAAO,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,UAAU,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3D,MAAM;YACV,KAAK,SAAS,CAAC,KAAK;gBAChB,OAAO,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,WAAW,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5D,MAAM;YACV,KAAK,SAAS,CAAC,KAAK;gBAChB,OAAO,CAAC,KAAK,CAAC,IAAA,mBAAO,EAAC,WAAW,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChE,MAAM;YACV,KAAK,SAAS,CAAC,OAAO;gBAClB,OAAO,CAAC,KAAK,CAAC,IAAA,kBAAM,EAAC,aAAa,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBACjE,MAAM;YACV,KAAK,SAAS,CAAC,GAAG;gBACd,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,SAAS,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM;YACV,KAAK,SAAS,CAAC,QAAQ;gBACnB,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAK,EAAC,cAAc,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC/D,MAAM;QACd,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YACnB,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;YAChE,OAAO;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,GAAG;SACZ,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,GAAW,EAAE,MAAkC;QACtE,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;;AA/IL,wBAgJC;AA1IG,0FAA0F;AAClE,oBAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC3D,uBAAgB,GAAG,KAAK,CAAC","sourcesContent":["import winston from \"winston\";\nimport { DailyFileTransport } from './DailyFileTransport';\nimport { blue, red, magenta, green, cyan, yellow } from 'colorette';\n\nexport enum LogLevels {\n INFO = \"INFO\",\n ERROR = \"ERROR\",\n WARNING = \"WARNING\",\n DEBUG = \"DEBUG\",\n LOG = \"LOG\",\n DATABASE = \"DATABASE\",\n}\n\n/** Livelli winston usati dal logger (comprende `database` e `general`). */\nconst WIN_LEVELS = {\n error: 1,\n warning: 2,\n info: 3,\n general: 3,\n http: 4,\n verbose: 5,\n debug: 6,\n silly: 7,\n database: 8,\n};\n\n/** Chiavi i cui valori non devono mai finire nei log. */\nconst SENSITIVE_KEY_PATTERN = /(password|passwd|pwd|secret|token|authorization|apikey|api_key|cookie)/i;\nconst REDACTED = '[REDACTED]';\n\n/**\n * Serializza un valore per il log, redigendo i campi sensibili e risolvendo\n * `Error` e riferimenti circolari (che altrimenti diventano `[object Object]`).\n */\nfunction serializeLogValue(value: unknown, seen: WeakSet<object>): unknown {\n if (value instanceof Error) {\n return { name: value.name, message: value.message, stack: value.stack };\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeLogValue(item, seen));\n }\n\n if (value && typeof value === 'object') {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n\n const result: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n result[key] = SENSITIVE_KEY_PATTERN.test(key) ? REDACTED : serializeLogValue(nested, seen);\n }\n return result;\n }\n\n return value;\n}\n\n/** Costruisce il messaggio testuale del log a partire dagli argomenti. */\nfunction stringifyLogData(data: unknown[]): string {\n return data.map((value) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value instanceof Error) {\n return value.stack ?? `${value.name}: ${value.message}`;\n }\n if (value === undefined) {\n return 'undefined';\n }\n if (value === null) {\n return 'null';\n }\n try {\n return JSON.stringify(serializeLogValue(value, new WeakSet()));\n } catch {\n return String(value);\n }\n }).join(', ');\n}\n\n/** Formato condiviso: JSON a una riga, con tag/file/level/messaggio. */\nfunction defaultFormat(): winston.Logform.Format {\n return winston.format.printf(({ timestamp, tag, file, level, message, ...meta }) => JSON.stringify({\n timestamp: timestamp || new Date().toISOString(),\n tag,\n file: String(file ?? '').split('\\\\').join('/'),\n level: level === 'general' ? 'log' : level,\n message,\n ...meta,\n }));\n}\n\n/**\n * Logger strutturato dell'applicazione.\n *\n * - I log finiscono su console (colorati) e su file JSON giornaliero.\n * - Le istanze con la stessa `logDirectory` condividono un unico logger winston\n * (un solo transport/timer), evitando di crearne uno per classe.\n * - I campi sensibili (password, token, secret, ...) sono redatti automaticamente.\n */\nexport class Logger {\n private readonly winstonLogger: winston.Logger;\n private readonly tag: string;\n private readonly logDirectory: string;\n private readonly maxLevel: number;\n\n /** Logger winston condivisi per directory, così da non moltiplicare transport e timer. */\n private static readonly sharedLoggers = new Map<string, winston.Logger>();\n private static colorsRegistered = false;\n\n constructor(\n tag: string,\n config?: {\n logDirectory?: string;\n customFormat?: winston.Logform.Format;\n transports?: winston.transport[];\n /** Livello minimo loggato: `error`..`database` (default `database`, ovvero tutto). Override con `LOG_LEVEL`. */\n level?: string;\n }\n ) {\n this.tag = tag || \"[UNTAGGED]\";\n this.logDirectory = config?.logDirectory || \"logs\";\n\n const configuredLevel = (config?.level ?? process.env.LOG_LEVEL ?? 'database').toLowerCase();\n this.maxLevel = WIN_LEVELS[configuredLevel as keyof typeof WIN_LEVELS] ?? WIN_LEVELS.database;\n\n const format = winston.format.combine(\n winston.format.timestamp(),\n config?.customFormat || defaultFormat(),\n );\n\n this.winstonLogger = config?.transports\n ? winston.createLogger({ level: 'database', format, transports: config.transports, levels: WIN_LEVELS })\n : Logger.resolveSharedLogger(this.logDirectory, format);\n\n if (!Logger.colorsRegistered) {\n winston.addColors({\n database: \"green\",\n error: \"red\",\n warning: \"yellow\",\n info: \"blue\",\n debug: \"magenta\",\n log: \"cyan\",\n });\n Logger.colorsRegistered = true;\n }\n }\n\n private static resolveSharedLogger(logDirectory: string, format: winston.Logform.Format): winston.Logger {\n const existing = Logger.sharedLoggers.get(logDirectory);\n if (existing) {\n return existing;\n }\n\n const logger = winston.createLogger({\n level: 'database',\n format,\n transports: [new DailyFileTransport(logDirectory)],\n levels: WIN_LEVELS,\n });\n Logger.sharedLoggers.set(logDirectory, logger);\n return logger;\n }\n\n public execStart(prefix: string = \"\"): number {\n this.print(LogLevels.INFO, `${prefix} - Execution started`);\n return performance.now();\n }\n\n public execStop(prefix: string = \"\", startTime: number, error: boolean = false): void {\n const executionTime = performance.now() - startTime;\n const message = `${prefix} - Execution ended ${error ? \"due to an error\" : \"successfully\"\n }. Execution time: ${executionTime.toFixed(2)} ms`;\n this.print(error ? LogLevels.ERROR : LogLevels.INFO, message);\n }\n\n public info(...data: unknown[]): void {\n this.print(LogLevels.INFO, ...data);\n }\n\n public dbLog(...data: unknown[]): void {\n this.print(LogLevels.DATABASE, ...data);\n }\n\n public debug(...data: unknown[]): void {\n this.print(LogLevels.DEBUG, ...data);\n }\n\n public warning(...data: unknown[]): void {\n this.print(LogLevels.WARNING, ...data);\n }\n\n public log(...data: unknown[]): void {\n this.print(LogLevels.LOG, ...data);\n }\n\n public error(...data: unknown[]): void {\n this.print(LogLevels.ERROR, ...data);\n }\n\n private print(level: LogLevels, ...data: unknown[]): void {\n const rank = level === LogLevels.LOG ? WIN_LEVELS.general : (WIN_LEVELS[level.toLowerCase() as keyof typeof WIN_LEVELS] ?? WIN_LEVELS.database);\n if (rank > this.maxLevel) {\n return;\n }\n\n const now: Date = new Date();\n const fileName = this.tag.split(\"\\\\\").pop() || this.tag;\n const message = stringifyLogData(data);\n\n // Console colorata (il livello file resta strutturato).\n switch (level) {\n case LogLevels.INFO:\n console.info(blue(`[INFO][${now}][${fileName}]`), message);\n break;\n case LogLevels.ERROR:\n console.error(red(`[ERROR][${now}][${fileName}]`), message);\n break;\n case LogLevels.DEBUG:\n console.debug(magenta(`[DEBUG][${now}][${fileName}]`), message);\n break;\n case LogLevels.WARNING:\n console.debug(yellow(`[WARNING][${now}][${fileName}]`), message);\n break;\n case LogLevels.LOG:\n console.log(cyan(`[LOG][${now}][${fileName}]`), message);\n break;\n case LogLevels.DATABASE:\n console.log(green(`[DATABASE][${now}][${fileName}]`), message);\n break;\n }\n\n this.winstonLogger.log({\n level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),\n message,\n tag: this.tag,\n file: fileName,\n time: now,\n });\n }\n\n public static createLogger(tag: string, config?: { logDirectory?: string }): Logger {\n return new Logger(tag, config);\n }\n}\n"]}
|
package/dist/Orm.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
import { Database, Options, Transaction } from "node-firebird";
|
|
1
|
+
import { Database, Options, QueryParams, Transaction } from "node-firebird";
|
|
2
2
|
export declare class Orm {
|
|
3
3
|
private static logger;
|
|
4
|
+
private static pools;
|
|
4
5
|
static quote(value: string): string;
|
|
6
|
+
/** Dimensione pool: default 5 (pool attivo); `poolSize: 0` disabilita e torna all'attach per query. */
|
|
7
|
+
private static getPoolSize;
|
|
8
|
+
private static shouldLogQueryParameters;
|
|
9
|
+
private static formatQueryForLog;
|
|
10
|
+
private static buildPoolKey;
|
|
11
|
+
/**
|
|
12
|
+
* Chiude tutti i pool creati (opt-in `poolSize`). Utile a fine processo o nei test,
|
|
13
|
+
* perché i pool mantengono connessioni e timer attivi.
|
|
14
|
+
*/
|
|
15
|
+
static closePools(): Promise<void>;
|
|
16
|
+
private static getPool;
|
|
5
17
|
private static getTimeoutMs;
|
|
6
18
|
private static createTimeoutError;
|
|
7
19
|
private static detachQuietly;
|
|
@@ -9,16 +21,24 @@ export declare class Orm {
|
|
|
9
21
|
private static normalizeResultValue;
|
|
10
22
|
private static attachWithTimeout;
|
|
11
23
|
static testConnection(options: Options): Promise<boolean>;
|
|
12
|
-
static query(options: Options, query: string, parameters?:
|
|
13
|
-
static execute(options: Options, query: string, parameters?:
|
|
14
|
-
static trimParam(param:
|
|
24
|
+
static query<T = Record<string, unknown>>(options: Options, query: string, parameters?: QueryParams, logQuery?: boolean): Promise<T[]>;
|
|
25
|
+
static execute<T = Record<string, unknown>>(options: Options, query: string, parameters?: QueryParams, logQuery?: boolean): Promise<T[]>;
|
|
26
|
+
static trimParam<T>(param: T): string | T;
|
|
15
27
|
static connect(options: Options): Promise<Database>;
|
|
28
|
+
/**
|
|
29
|
+
* Runs `operation` inside a single Firebird transaction: commit on success,
|
|
30
|
+
* rollback on failure, detach in every case. Use it to make multi-statement
|
|
31
|
+
* writes atomic instead of relying on auto-commit per statement.
|
|
32
|
+
*/
|
|
33
|
+
static withTransaction<T>(options: Options, operation: (transaction: Transaction) => Promise<T>): Promise<T>;
|
|
34
|
+
/** Esegue una query su una transazione esistente e ne restituisce il risultato. */
|
|
35
|
+
static transactionQuery<T = unknown>(transaction: Transaction, query: string, parameters?: QueryParams): Promise<T>;
|
|
16
36
|
static startTransaction(db: Database): Promise<Transaction>;
|
|
17
37
|
static commitTransaction(transaction: Transaction): Promise<string>;
|
|
18
38
|
static rollbackTransaction(transaction: Transaction): Promise<string>;
|
|
19
39
|
static executeMultiple(options: Options, queriesWithParams: {
|
|
20
40
|
query: string;
|
|
21
|
-
params:
|
|
41
|
+
params: QueryParams;
|
|
22
42
|
}[]): Promise<string>;
|
|
23
|
-
static executeQueries(transaction: Transaction, queries: string[], params:
|
|
43
|
+
static executeQueries(transaction: Transaction, queries: string[], params: QueryParams[]): Promise<unknown>;
|
|
24
44
|
}
|