emilsoftware-utilities 2.0.0-dev.24 → 2.0.0-dev.26
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 +185 -182
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DailyFileTransport.js.map +1 -1
- package/dist/DatabaseUpdater.js +24 -24
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/EmilsoftwareModule.js.map +1 -1
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Orm.js.map +1 -1
- package/dist/RoutesLoggerMiddleware.js.map +1 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- 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.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/BaseResponse.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.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +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.js.map +1 -1
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.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/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoAbilitazione.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/UpdateEnabledStatusRequest.js.map +1 -1
- 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/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +11 -11
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +118 -118
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +4 -4
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.js +72 -72
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/Views/reset-password.html +213 -213
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +5 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +82 -46
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +9 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.js.map +1 -1
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- 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/index.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.js +49 -49
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/index.js.map +1 -1
- package/dist/autobind.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.26.tgz +0 -0
- package/dist/firebird-compat.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +103 -103
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +0 -9
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +0 -9
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +0 -9
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +0 -9
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +0 -1
- package/dist/accessi-module/Console/openApiClient.d.ts +0 -34
- package/dist/accessi-module/Console/openApiClient.js +0 -111
- package/dist/accessi-module/Console/openApiClient.js.map +0 -1
|
@@ -160,12 +160,12 @@ let AllegatiService = AllegatiService_1 = class AllegatiService {
|
|
|
160
160
|
const chunk = file.buffer.slice(i, i + chunkSize);
|
|
161
161
|
base64Content += chunk.toString('base64');
|
|
162
162
|
}
|
|
163
|
-
const insertQuery = `
|
|
164
|
-
INSERT INTO ALLEGATI (
|
|
165
|
-
CODICE, TIPCOD, ORDINE, DESALL, NOMEFILE,
|
|
166
|
-
DADATAVAL, ADATAVAL, ALLEGATO, IDXTIPOALL, DATMODIF, DOCRIF
|
|
167
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, ?)
|
|
168
|
-
RETURNING IDXALL
|
|
163
|
+
const insertQuery = `
|
|
164
|
+
INSERT INTO ALLEGATI (
|
|
165
|
+
CODICE, TIPCOD, ORDINE, DESALL, NOMEFILE,
|
|
166
|
+
DADATAVAL, ADATAVAL, ALLEGATO, IDXTIPOALL, DATMODIF, DOCRIF
|
|
167
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, ?)
|
|
168
|
+
RETURNING IDXALL
|
|
169
169
|
`;
|
|
170
170
|
const params = [
|
|
171
171
|
uploadSingleFileRequest.codice,
|
|
@@ -204,10 +204,10 @@ let AllegatiService = AllegatiService_1 = class AllegatiService {
|
|
|
204
204
|
ensureTableExists() {
|
|
205
205
|
return __awaiter(this, void 0, void 0, function* () {
|
|
206
206
|
try {
|
|
207
|
-
const query = `
|
|
208
|
-
SELECT RDB$RELATION_NAME
|
|
209
|
-
FROM RDB$RELATIONS
|
|
210
|
-
WHERE RDB$RELATION_NAME = 'ALLEGATI'
|
|
207
|
+
const query = `
|
|
208
|
+
SELECT RDB$RELATION_NAME
|
|
209
|
+
FROM RDB$RELATIONS
|
|
210
|
+
WHERE RDB$RELATION_NAME = 'ALLEGATI'
|
|
211
211
|
`;
|
|
212
212
|
const result = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query);
|
|
213
213
|
if (!result || result.length === 0) {
|
|
@@ -227,13 +227,13 @@ let AllegatiService = AllegatiService_1 = class AllegatiService {
|
|
|
227
227
|
if (!id || id <= 0) {
|
|
228
228
|
throw new common_1.BadRequestException('ID allegato non valido');
|
|
229
229
|
}
|
|
230
|
-
const query = `
|
|
231
|
-
SELECT
|
|
232
|
-
ALLEGATO as content,
|
|
233
|
-
NOMEFILE as filename,
|
|
234
|
-
IDXTIPOALL as idTipoAllegato
|
|
235
|
-
FROM ALLEGATI
|
|
236
|
-
WHERE IDXALL = ?
|
|
230
|
+
const query = `
|
|
231
|
+
SELECT
|
|
232
|
+
ALLEGATO as content,
|
|
233
|
+
NOMEFILE as filename,
|
|
234
|
+
IDXTIPOALL as idTipoAllegato
|
|
235
|
+
FROM ALLEGATI
|
|
236
|
+
WHERE IDXALL = ?
|
|
237
237
|
`;
|
|
238
238
|
const results = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query, [id]);
|
|
239
239
|
if (!results || results.length === 0) {
|
|
@@ -329,22 +329,22 @@ let AllegatiService = AllegatiService_1 = class AllegatiService {
|
|
|
329
329
|
params.push(filters.idxtipoall);
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
|
-
const query = `
|
|
333
|
-
SELECT
|
|
334
|
-
IDXALL as id,
|
|
335
|
-
NOMEFILE as filename,
|
|
336
|
-
'application/octet-stream' as mimetype,
|
|
337
|
-
DATMODIF as uploadDate,
|
|
338
|
-
CODICE as codice,
|
|
339
|
-
TIPCOD as tipoCodice,
|
|
340
|
-
ORDINE as ordine,
|
|
341
|
-
DESALL as descrizioneAllegato,
|
|
342
|
-
DADATAVAL as dataInizioValidita,
|
|
343
|
-
ADATAVAL as dataFineValidita,
|
|
344
|
-
IDXTIPOALL as idTipoAllegato,
|
|
345
|
-
DOCRIF as riferimentoDocumento
|
|
346
|
-
FROM ALLEGATI
|
|
347
|
-
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
332
|
+
const query = `
|
|
333
|
+
SELECT
|
|
334
|
+
IDXALL as id,
|
|
335
|
+
NOMEFILE as filename,
|
|
336
|
+
'application/octet-stream' as mimetype,
|
|
337
|
+
DATMODIF as uploadDate,
|
|
338
|
+
CODICE as codice,
|
|
339
|
+
TIPCOD as tipoCodice,
|
|
340
|
+
ORDINE as ordine,
|
|
341
|
+
DESALL as descrizioneAllegato,
|
|
342
|
+
DADATAVAL as dataInizioValidita,
|
|
343
|
+
ADATAVAL as dataFineValidita,
|
|
344
|
+
IDXTIPOALL as idTipoAllegato,
|
|
345
|
+
DOCRIF as riferimentoDocumento
|
|
346
|
+
FROM ALLEGATI
|
|
347
|
+
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
348
348
|
`;
|
|
349
349
|
const results = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query, params);
|
|
350
350
|
if (!results) {
|
|
@@ -385,22 +385,22 @@ let AllegatiService = AllegatiService_1 = class AllegatiService {
|
|
|
385
385
|
whereConditions.push('IDXTIPOALL = ?');
|
|
386
386
|
params.push(fields.idxtipoall);
|
|
387
387
|
}
|
|
388
|
-
const query = `
|
|
389
|
-
SELECT
|
|
390
|
-
IDXALL as id,
|
|
391
|
-
NOMEFILE as filename,
|
|
392
|
-
'application/octet-stream' as mimetype,
|
|
393
|
-
DATMODIF as uploadDate,
|
|
394
|
-
CODICE as codice,
|
|
395
|
-
TIPCOD as tipoCodice,
|
|
396
|
-
ORDINE as ordine,
|
|
397
|
-
DESALL as descrizioneAllegato,
|
|
398
|
-
DADATAVAL as dataInizioValidita,
|
|
399
|
-
ADATAVAL as dataFineValidita,
|
|
400
|
-
IDXTIPOALL as idTipoAllegato,
|
|
401
|
-
DOCRIF as riferimentoDocumento
|
|
402
|
-
FROM ALLEGATI
|
|
403
|
-
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
388
|
+
const query = `
|
|
389
|
+
SELECT
|
|
390
|
+
IDXALL as id,
|
|
391
|
+
NOMEFILE as filename,
|
|
392
|
+
'application/octet-stream' as mimetype,
|
|
393
|
+
DATMODIF as uploadDate,
|
|
394
|
+
CODICE as codice,
|
|
395
|
+
TIPCOD as tipoCodice,
|
|
396
|
+
ORDINE as ordine,
|
|
397
|
+
DESALL as descrizioneAllegato,
|
|
398
|
+
DADATAVAL as dataInizioValidita,
|
|
399
|
+
ADATAVAL as dataFineValidita,
|
|
400
|
+
IDXTIPOALL as idTipoAllegato,
|
|
401
|
+
DOCRIF as riferimentoDocumento
|
|
402
|
+
FROM ALLEGATI
|
|
403
|
+
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
404
404
|
`;
|
|
405
405
|
const results = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query, params);
|
|
406
406
|
if (!results) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllegatiService.js","sourceRoot":"","sources":["../../../../src/allegati-module/Services/AllegatiService/AllegatiService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, NotFoundException, BadRequestException, InternalServerErrorException, OnModuleInit } from \"@nestjs/common\";\r\nimport { autobind } from \"../../../autobind\";\r\nimport { Logger } from \"../../../Logger\";\r\nimport { Orm } from \"../../../Orm\";\r\nimport { AllegatiOptions } from \"../../AllegatiModule\";\r\nimport { UploadAllegatoResponseDto, DownloadAllegatoResponseDto, AllegatoDto} from \"../../Dtos\";\r\nimport { UploadSingleFileRequest } from \"../../Dtos/UploadSingleFileRequest\";\r\n\r\nexport class AllegatiError extends Error {\r\n constructor(\r\n message: string,\r\n public readonly code: string,\r\n public readonly statusCode: number = 500\r\n ) {\r\n super(message);\r\n this.name = 'AllegatiError';\r\n }\r\n}\r\n\r\n@autobind\r\n@Injectable()\r\nexport class AllegatiService implements OnModuleInit {\r\n private readonly logger = new Logger(AllegatiService.name);\r\n private readonly MAX_FILE_SIZE = 90 * 1024 * 1024; // 90MB\r\n private readonly ALLOWED_MIME_TYPES = [\r\n 'application/pdf',\r\n 'image/jpeg',\r\n 'image/png',\r\n 'application/msword',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n ];\r\n\r\n constructor(@Inject('ALLEGATI_OPTIONS') private readonly allegatiOptions: AllegatiOptions) {}\r\n\r\n /** Verifica la tabella ALLEGATI all'avvio (attesa da Nest, senza promise floating). */\r\n async onModuleInit(): Promise<void> {\r\n try {\r\n await this.ensureTableExists();\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] Errore verifica tabella ALLEGATI:', error);\r\n }\r\n }\r\n\r\n private toAllegatoDto(row: Record<string, unknown>): AllegatoDto {\r\n const optionalString = (value: unknown): string | undefined => value === undefined || value === null ? undefined : String(value);\r\n const optionalNumber = (value: unknown): number | undefined => value === undefined || value === null ? undefined : Number(value);\r\n\r\n return {\r\n id: Number(row.ID ?? row.id),\r\n filename: String(row.FILENAME ?? row.filename ?? ''),\r\n mimetype: String(row.MIMETYPE ?? row.mimetype ?? ''),\r\n uploadDate: String(row.UPLOADDATE ?? row.uploadDate ?? ''),\r\n codice: optionalString(row.CODICE ?? row.codice),\r\n tipoCodice: optionalString(row.TIPOCODICE ?? row.tipoCodice),\r\n ordine: optionalString(row.ORDINE ?? row.ordine),\r\n descrizioneAllegato: optionalString(row.DESCRIZIONEALLEGATO ?? row.descrizioneAllegato),\r\n dataInizioValidita: optionalString(row.DATAINIZIOVALIDITA ?? row.dataInizioValidita),\r\n dataFineValidita: optionalString(row.DATAFINEVALIDITA ?? row.dataFineValidita),\r\n idTipoAllegato: optionalNumber(row.IDTIPOALLEGATO ?? row.idTipoAllegato),\r\n riferimentoDocumento: optionalString(row.RIFERIMENTODOCUMENTO ?? row.riferimentoDocumento),\r\n };\r\n }\r\n\r\n private validateFile(file: Express.Multer.File): void {\r\n if (!file) {\r\n throw new BadRequestException('Nessun file fornito');\r\n }\r\n\r\n if (file.size > this.MAX_FILE_SIZE) {\r\n throw new BadRequestException(`File troppo grande. Dimensione massima consentita: ${this.MAX_FILE_SIZE / (1024 * 1024)}MB`);\r\n }\r\n\r\n if (!this.ALLOWED_MIME_TYPES.includes(file.mimetype)) {\r\n throw new BadRequestException(`Tipo di file non consentito. Tipi consentiti: ${this.ALLOWED_MIME_TYPES.join(', ')}`);\r\n }\r\n\r\n // Il mimetype dichiarato dal client e falsificabile: verifica i magic byte reali.\r\n if (!this.hasValidSignature(file)) {\r\n throw new BadRequestException('Il contenuto del file non corrisponde al tipo dichiarato.');\r\n }\r\n }\r\n\r\n private hasValidSignature(file: Express.Multer.File): boolean {\r\n const buffer = file?.buffer;\r\n if (!buffer || buffer.length < 4) {\r\n return false;\r\n }\r\n\r\n const startsWith = (...bytes: number[]): boolean => bytes.every((byte, index) => buffer[index] === byte);\r\n\r\n switch (file.mimetype) {\r\n case 'application/pdf':\r\n return startsWith(0x25, 0x50, 0x44, 0x46);\r\n case 'image/jpeg':\r\n return startsWith(0xff, 0xd8, 0xff);\r\n case 'image/png':\r\n return startsWith(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a);\r\n case 'application/msword':\r\n case 'application/vnd.ms-excel':\r\n return startsWith(0xd0, 0xcf, 0x11, 0xe0);\r\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\r\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\r\n // DOCX/XLSX sono archivi ZIP.\r\n return startsWith(0x50, 0x4b, 0x03, 0x04)\r\n || startsWith(0x50, 0x4b, 0x05, 0x06)\r\n || startsWith(0x50, 0x4b, 0x07, 0x08);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private sanitizeFilename(name: unknown): string {\r\n const raw = typeof name === 'string' ? name : '';\r\n const base = raw.replace(/\\\\/g, '/').split('/').pop() ?? '';\r\n const cleaned = base.replace(/[\\u0000-\\u001f\\u007f<>:\"|?*]/g, '_').trim();\r\n return cleaned.slice(0, 255) || 'allegato';\r\n }\r\n\r\n\r\n async getAttachmentTypes(): Promise<Array<Record<string, unknown>>> {\r\n try {\r\n const query = `SELECT IDXTIPOALL as id, DESCRIZIONE as description FROM TIPOALL`;\r\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query);\r\n \r\n if (!results) {\r\n throw new InternalServerErrorException('Errore durante il recupero dei tipi di allegato');\r\n }\r\n\r\n return results;\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] getAttachmentTypes - Errore:', error);\r\n if (error instanceof InternalServerErrorException) {\r\n throw error;\r\n }\r\n throw new InternalServerErrorException('Errore durante il recupero dei tipi di allegato');\r\n }\r\n }\r\n async uploadFile(file: Express.Multer.File, uploadSingleFileRequest: UploadSingleFileRequest): Promise<UploadAllegatoResponseDto> {\r\n try {\r\n this.validateFile(file);\r\n\r\n // Convert buffer to base64 in chunks to avoid memory issues\r\n const chunkSize = 1024 * 1024; // 1MB chunks\r\n let base64Content = '';\r\n for (let i = 0; i < file.buffer.length; i += chunkSize) {\r\n const chunk = file.buffer.slice(i, i + chunkSize);\r\n base64Content += chunk.toString('base64');\r\n }\r\n\r\n const insertQuery = `\r\n INSERT INTO ALLEGATI (\r\n CODICE, TIPCOD, ORDINE, DESALL, NOMEFILE,\r\n DADATAVAL, ADATAVAL, ALLEGATO, IDXTIPOALL, DATMODIF, DOCRIF\r\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, ?)\r\n RETURNING IDXALL\r\n `;\r\n\r\n const params = [\r\n uploadSingleFileRequest.codice,\r\n uploadSingleFileRequest.tipoCodice,\r\n uploadSingleFileRequest.ordine,\r\n uploadSingleFileRequest.descrizioneAllegato,\r\n this.sanitizeFilename(file.originalname),\r\n uploadSingleFileRequest.dataInizioValidita,\r\n uploadSingleFileRequest.dataFineValidita,\r\n base64Content,\r\n uploadSingleFileRequest.idTipoAllegato,\r\n uploadSingleFileRequest.riferimentoDocumento\r\n ];\r\n\r\n const result = await Orm.query(this.allegatiOptions.databaseOptions, insertQuery, params);\r\n // node-firebird restituisce le righe di INSERT ... RETURNING come array; il fallback\r\n // copre le versioni/driver che restituiscono un singolo oggetto.\r\n const inserted = (Array.isArray(result) ? result[0] : result) as Record<string, unknown> | undefined;\r\n const insertedId = inserted?.IDXALL ?? inserted?.idxall;\r\n\r\n if (insertedId === undefined || insertedId === null) {\r\n throw new InternalServerErrorException('Errore durante il salvataggio del file');\r\n }\r\n\r\n return {\r\n id: Number(insertedId),\r\n filename: this.sanitizeFilename(file.originalname),\r\n };\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] uploadFile - Errore:', error);\r\n if (error instanceof BadRequestException || error instanceof InternalServerErrorException) {\r\n throw error;\r\n }\r\n throw new InternalServerErrorException('Errore durante il caricamento del file');\r\n }\r\n }\r\n\r\n async ensureTableExists(): Promise<void> {\r\n try {\r\n const query = `\r\n SELECT RDB$RELATION_NAME \r\n FROM RDB$RELATIONS \r\n WHERE RDB$RELATION_NAME = 'ALLEGATI'\r\n `;\r\n const result = await Orm.query(this.allegatiOptions.databaseOptions, query);\r\n \r\n if (!result || result.length === 0) {\r\n throw new Error('Tabella ALLEGATI non trovata nel database');\r\n }\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] Errore verifica tabella ALLEGATI:', error);\r\n throw new InternalServerErrorException('Errore durante la verifica della tabella ALLEGATI');\r\n }\r\n }\r\n\r\n async downloadFile(id: number): Promise<DownloadAllegatoResponseDto> {\r\n try {\r\n if (!id || id <= 0) {\r\n throw new BadRequestException('ID allegato non valido');\r\n }\r\n\r\n const query = `\r\n SELECT \r\n ALLEGATO as content,\r\n NOMEFILE as filename,\r\n IDXTIPOALL as idTipoAllegato\r\n FROM ALLEGATI \r\n WHERE IDXALL = ?\r\n `;\r\n \r\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query, [id]);\r\n \r\n if (!results || results.length === 0) {\r\n throw new NotFoundException(`Allegato con ID ${id} non trovato`);\r\n }\r\n\r\n const result = results[0];\r\n const content = result?.CONTENT ?? result?.content;\r\n const filename = result?.FILENAME ?? result?.filename;\r\n\r\n if (typeof content !== 'string' || content.length === 0) {\r\n throw new InternalServerErrorException('Contenuto file non disponibile');\r\n }\r\n\r\n if (typeof filename !== 'string' || filename.length === 0) {\r\n throw new InternalServerErrorException('Nome file non disponibile');\r\n }\r\n\r\n const mimetype = this.detectMimeType(filename);\r\n \r\n return {\r\n contentBase64: content,\r\n filename,\r\n mimetype\r\n };\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] downloadFile - Errore:', error);\r\n if (error instanceof BadRequestException || \r\n error instanceof NotFoundException || \r\n error instanceof InternalServerErrorException) {\r\n throw error;\r\n }\r\n throw new InternalServerErrorException('Errore durante il download del file');\r\n }\r\n }\r\n\r\n private detectMimeType(filename: string): string {\r\n const extension = filename.split('.').pop()?.toLowerCase();\r\n const mimeTypes: { [key: string]: string } = {\r\n 'pdf': 'application/pdf',\r\n 'jpg': 'image/jpeg',\r\n 'jpeg': 'image/jpeg',\r\n 'png': 'image/png',\r\n 'doc': 'application/msword',\r\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'xls': 'application/vnd.ms-excel',\r\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n };\r\n return mimeTypes[extension || ''] || 'application/octet-stream';\r\n }\r\n\r\n async deleteFile(id: number): Promise<void> {\r\n try {\r\n if (!id || id <= 0) {\r\n throw new BadRequestException('ID allegato non valido');\r\n }\r\n\r\n const checkQuery = `SELECT IDXALL FROM ALLEGATI WHERE IDXALL = ?`;\r\n const checkResult = await Orm.query(this.allegatiOptions.databaseOptions, checkQuery, [id]);\r\n \r\n if (!checkResult || checkResult.length === 0) {\r\n throw new NotFoundException(`Allegato con ID ${id} non trovato`);\r\n }\r\n\r\n const query = `DELETE FROM ALLEGATI WHERE IDXALL = ?`;\r\n await Orm.execute(this.allegatiOptions.databaseOptions, query, [id]);\r\n \r\n \r\n } catch (error) {\r\n this.logger.error('[AllegatiService] deleteFile - Errore:', error);\r\n if (error instanceof BadRequestException || \r\n error instanceof NotFoundException || \r\n error instanceof InternalServerErrorException) {\r\n throw error;\r\n }\r\n throw new InternalServerErrorException('Errore durante la cancellazione del file');\r\n }\r\n }\r\n\r\n async listFiles(filters?: { \r\n tipcod?: string;\r\n codice?: number;\r\n docrif?: string;\r\n idxtipoall?: number;\r\n }): Promise<AllegatoDto[]> {\r\n try {\r\n const whereConditions: string[] = [];\r\n const params: unknown[] = [];\r\n\r\n if (filters) {\r\n if (filters.tipcod) {\r\n whereConditions.push('TIPCOD = ?');\r\n params.push(filters.tipcod);\r\n }\r\n if (filters.codice) {\r\n whereConditions.push('CODICE = ?');\r\n params.push(filters.codice);\r\n }\r\n if (filters.docrif) {\r\n whereConditions.push('DOCRIF = ?');\r\n params.push(filters.docrif);\r\n }\r\n if (filters.idxtipoall !== undefined) {\r\n whereConditions.push('IDXTIPOALL = ?');\r\n params.push(filters.idxtipoall);\r\n }\r\n }\r\n\r\n const query = `\r\n SELECT \r\n IDXALL as id,\r\n NOMEFILE as filename,\r\n 'application/octet-stream' as mimetype,\r\n DATMODIF as uploadDate,\r\n CODICE as codice,\r\n TIPCOD as tipoCodice,\r\n ORDINE as ordine,\r\n DESALL as descrizioneAllegato,\r\n DADATAVAL as dataInizioValidita,\r\n ADATAVAL as dataFineValidita,\r\n IDXTIPOALL as idTipoAllegato,\r\n DOCRIF as riferimentoDocumento\r\n FROM ALLEGATI\r\n ${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}\r\n `;\r\n\r\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query, params);\r\n \r\n if (!results) {\r\n throw new InternalServerErrorException('Errore durante il recupero della lista dei file');\r\n }\r\n\r\n return results.map((r: Record<string, unknown>) => this.toAllegatoDto(r));\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] listFiles - Errore:', error);\r\n if (error instanceof InternalServerErrorException) {\r\n throw error;\r\n }\r\n throw new InternalServerErrorException('Errore durante il recupero della lista dei file');\r\n }\r\n }\r\n\r\n /**\r\n * Find allegati by a combination of tipcod, codice, docrif, idxtipoall\r\n */\r\n async findByFields(fields: { tipcod?: string; codice?: number; docrif?: string; idxtipoall?: number }): Promise<AllegatoDto[]> {\r\n try {\r\n const whereConditions: string[] = [];\r\n const params: unknown[] = [];\r\n if (fields.tipcod) {\r\n whereConditions.push('TIPCOD = ?');\r\n params.push(fields.tipcod);\r\n }\r\n if (fields.codice) {\r\n whereConditions.push('CODICE = ?');\r\n params.push(fields.codice);\r\n }\r\n if (fields.docrif) {\r\n whereConditions.push('DOCRIF = ?');\r\n params.push(fields.docrif);\r\n }\r\n if (fields.idxtipoall !== undefined) {\r\n whereConditions.push('IDXTIPOALL = ?');\r\n params.push(fields.idxtipoall);\r\n }\r\n const query = `\r\n SELECT \r\n IDXALL as id,\r\n NOMEFILE as filename,\r\n 'application/octet-stream' as mimetype,\r\n DATMODIF as uploadDate,\r\n CODICE as codice,\r\n TIPCOD as tipoCodice,\r\n ORDINE as ordine,\r\n DESALL as descrizioneAllegato,\r\n DADATAVAL as dataInizioValidita,\r\n ADATAVAL as dataFineValidita,\r\n IDXTIPOALL as idTipoAllegato,\r\n DOCRIF as riferimentoDocumento\r\n FROM ALLEGATI\r\n ${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}\r\n `;\r\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query, params);\r\n if (!results) {\r\n throw new InternalServerErrorException('Errore durante la ricerca degli allegati');\r\n }\r\n return results.map((r: Record<string, unknown>) => this.toAllegatoDto(r));\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] findByFields - Errore:', error);\r\n throw new InternalServerErrorException('Errore durante la ricerca degli allegati');\r\n }\r\n }\r\n\r\n /**\r\n * Update tipcod, codice, docrif, idxtipoall for a given allegato by id\r\n */\r\n async updateFieldsById(id: number, fields: { tipcod?: string; codice?: number; docrif?: string; idxtipoall?: number }): Promise<void> {\r\n try {\r\n if (!id || id <= 0) {\r\n throw new BadRequestException('ID allegato non valido');\r\n }\r\n const updates: string[] = [];\r\n const params: unknown[] = [];\r\n if (fields.tipcod !== undefined) {\r\n updates.push('TIPCOD = ?');\r\n params.push(fields.tipcod);\r\n }\r\n if (fields.codice !== undefined) {\r\n updates.push('CODICE = ?');\r\n params.push(fields.codice);\r\n }\r\n if (fields.docrif !== undefined) {\r\n updates.push('DOCRIF = ?');\r\n params.push(fields.docrif);\r\n }\r\n if (fields.idxtipoall !== undefined) {\r\n updates.push('IDXTIPOALL = ?');\r\n params.push(fields.idxtipoall);\r\n }\r\n if (updates.length === 0) {\r\n throw new BadRequestException('Nessun campo da aggiornare');\r\n }\r\n const query = `UPDATE ALLEGATI SET ${updates.join(', ')} WHERE IDXALL = ?`;\r\n params.push(id);\r\n const result = await Orm.execute(this.allegatiOptions.databaseOptions, query, params);\r\n if (!result) {\r\n throw new InternalServerErrorException('Errore durante l\\'aggiornamento del file');\r\n }\r\n } catch (error) {\r\n this.logger.error('[AllegatiService] updateFieldsById - Errore:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Get a single allegato by fields (returns the first match)\r\n */\r\n async getOneByFields(fields: { tipcod?: string; codice?: number; docrif?: string; idxtipoall?: number }): Promise<AllegatoDto | null> {\r\n const results = await this.findByFields(fields);\r\n return results.length > 0 ? (results[0] ?? null) : null;\r\n }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"AllegatiService.js","sourceRoot":"","sources":["../../../../src/allegati-module/Services/AllegatiService/AllegatiService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, NotFoundException, BadRequestException, InternalServerErrorException, OnModuleInit } from \"@nestjs/common\";\nimport { autobind } from \"../../../autobind\";\nimport { Logger } from \"../../../Logger\";\nimport { Orm } from \"../../../Orm\";\nimport { AllegatiOptions } from \"../../AllegatiModule\";\nimport { UploadAllegatoResponseDto, DownloadAllegatoResponseDto, AllegatoDto} from \"../../Dtos\";\nimport { UploadSingleFileRequest } from \"../../Dtos/UploadSingleFileRequest\";\n\nexport class AllegatiError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode: number = 500\n ) {\n super(message);\n this.name = 'AllegatiError';\n }\n}\n\n@autobind\n@Injectable()\nexport class AllegatiService implements OnModuleInit {\n private readonly logger = new Logger(AllegatiService.name);\n private readonly MAX_FILE_SIZE = 90 * 1024 * 1024; // 90MB\n private readonly ALLOWED_MIME_TYPES = [\n 'application/pdf',\n 'image/jpeg',\n 'image/png',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n ];\n\n constructor(@Inject('ALLEGATI_OPTIONS') private readonly allegatiOptions: AllegatiOptions) {}\n\n /** Verifica la tabella ALLEGATI all'avvio (attesa da Nest, senza promise floating). */\n async onModuleInit(): Promise<void> {\n try {\n await this.ensureTableExists();\n } catch (error) {\n this.logger.error('[AllegatiService] Errore verifica tabella ALLEGATI:', error);\n }\n }\n\n private toAllegatoDto(row: Record<string, unknown>): AllegatoDto {\n const optionalString = (value: unknown): string | undefined => value === undefined || value === null ? undefined : String(value);\n const optionalNumber = (value: unknown): number | undefined => value === undefined || value === null ? undefined : Number(value);\n\n return {\n id: Number(row.ID ?? row.id),\n filename: String(row.FILENAME ?? row.filename ?? ''),\n mimetype: String(row.MIMETYPE ?? row.mimetype ?? ''),\n uploadDate: String(row.UPLOADDATE ?? row.uploadDate ?? ''),\n codice: optionalString(row.CODICE ?? row.codice),\n tipoCodice: optionalString(row.TIPOCODICE ?? row.tipoCodice),\n ordine: optionalString(row.ORDINE ?? row.ordine),\n descrizioneAllegato: optionalString(row.DESCRIZIONEALLEGATO ?? row.descrizioneAllegato),\n dataInizioValidita: optionalString(row.DATAINIZIOVALIDITA ?? row.dataInizioValidita),\n dataFineValidita: optionalString(row.DATAFINEVALIDITA ?? row.dataFineValidita),\n idTipoAllegato: optionalNumber(row.IDTIPOALLEGATO ?? row.idTipoAllegato),\n riferimentoDocumento: optionalString(row.RIFERIMENTODOCUMENTO ?? row.riferimentoDocumento),\n };\n }\n\n private validateFile(file: Express.Multer.File): void {\n if (!file) {\n throw new BadRequestException('Nessun file fornito');\n }\n\n if (file.size > this.MAX_FILE_SIZE) {\n throw new BadRequestException(`File troppo grande. Dimensione massima consentita: ${this.MAX_FILE_SIZE / (1024 * 1024)}MB`);\n }\n\n if (!this.ALLOWED_MIME_TYPES.includes(file.mimetype)) {\n throw new BadRequestException(`Tipo di file non consentito. Tipi consentiti: ${this.ALLOWED_MIME_TYPES.join(', ')}`);\n }\n\n // Il mimetype dichiarato dal client e falsificabile: verifica i magic byte reali.\n if (!this.hasValidSignature(file)) {\n throw new BadRequestException('Il contenuto del file non corrisponde al tipo dichiarato.');\n }\n }\n\n private hasValidSignature(file: Express.Multer.File): boolean {\n const buffer = file?.buffer;\n if (!buffer || buffer.length < 4) {\n return false;\n }\n\n const startsWith = (...bytes: number[]): boolean => bytes.every((byte, index) => buffer[index] === byte);\n\n switch (file.mimetype) {\n case 'application/pdf':\n return startsWith(0x25, 0x50, 0x44, 0x46);\n case 'image/jpeg':\n return startsWith(0xff, 0xd8, 0xff);\n case 'image/png':\n return startsWith(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a);\n case 'application/msword':\n case 'application/vnd.ms-excel':\n return startsWith(0xd0, 0xcf, 0x11, 0xe0);\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n // DOCX/XLSX sono archivi ZIP.\n return startsWith(0x50, 0x4b, 0x03, 0x04)\n || startsWith(0x50, 0x4b, 0x05, 0x06)\n || startsWith(0x50, 0x4b, 0x07, 0x08);\n default:\n return false;\n }\n }\n\n private sanitizeFilename(name: unknown): string {\n const raw = typeof name === 'string' ? name : '';\n const base = raw.replace(/\\\\/g, '/').split('/').pop() ?? '';\n const cleaned = base.replace(/[\\u0000-\\u001f\\u007f<>:\"|?*]/g, '_').trim();\n return cleaned.slice(0, 255) || 'allegato';\n }\n\n\n async getAttachmentTypes(): Promise<Array<Record<string, unknown>>> {\n try {\n const query = `SELECT IDXTIPOALL as id, DESCRIZIONE as description FROM TIPOALL`;\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query);\n \n if (!results) {\n throw new InternalServerErrorException('Errore durante il recupero dei tipi di allegato');\n }\n\n return results;\n } catch (error) {\n this.logger.error('[AllegatiService] getAttachmentTypes - Errore:', error);\n if (error instanceof InternalServerErrorException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante il recupero dei tipi di allegato');\n }\n }\n async uploadFile(file: Express.Multer.File, uploadSingleFileRequest: UploadSingleFileRequest): Promise<UploadAllegatoResponseDto> {\n try {\n this.validateFile(file);\n\n // Convert buffer to base64 in chunks to avoid memory issues\n const chunkSize = 1024 * 1024; // 1MB chunks\n let base64Content = '';\n for (let i = 0; i < file.buffer.length; i += chunkSize) {\n const chunk = file.buffer.slice(i, i + chunkSize);\n base64Content += chunk.toString('base64');\n }\n\n const insertQuery = `\n INSERT INTO ALLEGATI (\n CODICE, TIPCOD, ORDINE, DESALL, NOMEFILE,\n DADATAVAL, ADATAVAL, ALLEGATO, IDXTIPOALL, DATMODIF, DOCRIF\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, ?)\n RETURNING IDXALL\n `;\n\n const params = [\n uploadSingleFileRequest.codice,\n uploadSingleFileRequest.tipoCodice,\n uploadSingleFileRequest.ordine,\n uploadSingleFileRequest.descrizioneAllegato,\n this.sanitizeFilename(file.originalname),\n uploadSingleFileRequest.dataInizioValidita,\n uploadSingleFileRequest.dataFineValidita,\n base64Content,\n uploadSingleFileRequest.idTipoAllegato,\n uploadSingleFileRequest.riferimentoDocumento\n ];\n\n const result = await Orm.query(this.allegatiOptions.databaseOptions, insertQuery, params);\n // node-firebird restituisce le righe di INSERT ... RETURNING come array; il fallback\n // copre le versioni/driver che restituiscono un singolo oggetto.\n const inserted = (Array.isArray(result) ? result[0] : result) as Record<string, unknown> | undefined;\n const insertedId = inserted?.IDXALL ?? inserted?.idxall;\n\n if (insertedId === undefined || insertedId === null) {\n throw new InternalServerErrorException('Errore durante il salvataggio del file');\n }\n\n return {\n id: Number(insertedId),\n filename: this.sanitizeFilename(file.originalname),\n };\n } catch (error) {\n this.logger.error('[AllegatiService] uploadFile - Errore:', error);\n if (error instanceof BadRequestException || error instanceof InternalServerErrorException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante il caricamento del file');\n }\n }\n\n async ensureTableExists(): Promise<void> {\n try {\n const query = `\n SELECT RDB$RELATION_NAME \n FROM RDB$RELATIONS \n WHERE RDB$RELATION_NAME = 'ALLEGATI'\n `;\n const result = await Orm.query(this.allegatiOptions.databaseOptions, query);\n \n if (!result || result.length === 0) {\n throw new Error('Tabella ALLEGATI non trovata nel database');\n }\n } catch (error) {\n this.logger.error('[AllegatiService] Errore verifica tabella ALLEGATI:', error);\n throw new InternalServerErrorException('Errore durante la verifica della tabella ALLEGATI');\n }\n }\n\n async downloadFile(id: number): Promise<DownloadAllegatoResponseDto> {\n try {\n if (!id || id <= 0) {\n throw new BadRequestException('ID allegato non valido');\n }\n\n const query = `\n SELECT \n ALLEGATO as content,\n NOMEFILE as filename,\n IDXTIPOALL as idTipoAllegato\n FROM ALLEGATI \n WHERE IDXALL = ?\n `;\n \n const results = await Orm.query(this.allegatiOptions.databaseOptions, query, [id]);\n \n if (!results || results.length === 0) {\n throw new NotFoundException(`Allegato con ID ${id} non trovato`);\n }\n\n const result = results[0];\n const content = result?.CONTENT ?? result?.content;\n const filename = result?.FILENAME ?? result?.filename;\n\n if (typeof content !== 'string' || content.length === 0) {\n throw new InternalServerErrorException('Contenuto file non disponibile');\n }\n\n if (typeof filename !== 'string' || filename.length === 0) {\n throw new InternalServerErrorException('Nome file non disponibile');\n }\n\n const mimetype = this.detectMimeType(filename);\n \n return {\n contentBase64: content,\n filename,\n mimetype\n };\n } catch (error) {\n this.logger.error('[AllegatiService] downloadFile - Errore:', error);\n if (error instanceof BadRequestException || \n error instanceof NotFoundException || \n error instanceof InternalServerErrorException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante il download del file');\n }\n }\n\n private detectMimeType(filename: string): string {\n const extension = filename.split('.').pop()?.toLowerCase();\n const mimeTypes: { [key: string]: string } = {\n 'pdf': 'application/pdf',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'png': 'image/png',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n };\n return mimeTypes[extension || ''] || 'application/octet-stream';\n }\n\n async deleteFile(id: number): Promise<void> {\n try {\n if (!id || id <= 0) {\n throw new BadRequestException('ID allegato non valido');\n }\n\n const checkQuery = `SELECT IDXALL FROM ALLEGATI WHERE IDXALL = ?`;\n const checkResult = await Orm.query(this.allegatiOptions.databaseOptions, checkQuery, [id]);\n \n if (!checkResult || checkResult.length === 0) {\n throw new NotFoundException(`Allegato con ID ${id} non trovato`);\n }\n\n const query = `DELETE FROM ALLEGATI WHERE IDXALL = ?`;\n await Orm.execute(this.allegatiOptions.databaseOptions, query, [id]);\n \n \n } catch (error) {\n this.logger.error('[AllegatiService] deleteFile - Errore:', error);\n if (error instanceof BadRequestException || \n error instanceof NotFoundException || \n error instanceof InternalServerErrorException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante la cancellazione del file');\n }\n }\n\n async listFiles(filters?: { \n tipcod?: string;\n codice?: number;\n docrif?: string;\n idxtipoall?: number;\n }): Promise<AllegatoDto[]> {\n try {\n const whereConditions: string[] = [];\n const params: unknown[] = [];\n\n if (filters) {\n if (filters.tipcod) {\n whereConditions.push('TIPCOD = ?');\n params.push(filters.tipcod);\n }\n if (filters.codice) {\n whereConditions.push('CODICE = ?');\n params.push(filters.codice);\n }\n if (filters.docrif) {\n whereConditions.push('DOCRIF = ?');\n params.push(filters.docrif);\n }\n if (filters.idxtipoall !== undefined) {\n whereConditions.push('IDXTIPOALL = ?');\n params.push(filters.idxtipoall);\n }\n }\n\n const query = `\n SELECT \n IDXALL as id,\n NOMEFILE as filename,\n 'application/octet-stream' as mimetype,\n DATMODIF as uploadDate,\n CODICE as codice,\n TIPCOD as tipoCodice,\n ORDINE as ordine,\n DESALL as descrizioneAllegato,\n DADATAVAL as dataInizioValidita,\n ADATAVAL as dataFineValidita,\n IDXTIPOALL as idTipoAllegato,\n DOCRIF as riferimentoDocumento\n FROM ALLEGATI\n ${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}\n `;\n\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query, params);\n \n if (!results) {\n throw new InternalServerErrorException('Errore durante il recupero della lista dei file');\n }\n\n return results.map((r: Record<string, unknown>) => this.toAllegatoDto(r));\n } catch (error) {\n this.logger.error('[AllegatiService] listFiles - Errore:', error);\n if (error instanceof InternalServerErrorException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante il recupero della lista dei file');\n }\n }\n\n /**\n * Find allegati by a combination of tipcod, codice, docrif, idxtipoall\n */\n async findByFields(fields: { tipcod?: string; codice?: number; docrif?: string; idxtipoall?: number }): Promise<AllegatoDto[]> {\n try {\n const whereConditions: string[] = [];\n const params: unknown[] = [];\n if (fields.tipcod) {\n whereConditions.push('TIPCOD = ?');\n params.push(fields.tipcod);\n }\n if (fields.codice) {\n whereConditions.push('CODICE = ?');\n params.push(fields.codice);\n }\n if (fields.docrif) {\n whereConditions.push('DOCRIF = ?');\n params.push(fields.docrif);\n }\n if (fields.idxtipoall !== undefined) {\n whereConditions.push('IDXTIPOALL = ?');\n params.push(fields.idxtipoall);\n }\n const query = `\n SELECT \n IDXALL as id,\n NOMEFILE as filename,\n 'application/octet-stream' as mimetype,\n DATMODIF as uploadDate,\n CODICE as codice,\n TIPCOD as tipoCodice,\n ORDINE as ordine,\n DESALL as descrizioneAllegato,\n DADATAVAL as dataInizioValidita,\n ADATAVAL as dataFineValidita,\n IDXTIPOALL as idTipoAllegato,\n DOCRIF as riferimentoDocumento\n FROM ALLEGATI\n ${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}\n `;\n const results = await Orm.query(this.allegatiOptions.databaseOptions, query, params);\n if (!results) {\n throw new InternalServerErrorException('Errore durante la ricerca degli allegati');\n }\n return results.map((r: Record<string, unknown>) => this.toAllegatoDto(r));\n } catch (error) {\n this.logger.error('[AllegatiService] findByFields - Errore:', error);\n throw new InternalServerErrorException('Errore durante la ricerca degli allegati');\n }\n }\n\n /**\n * Update tipcod, codice, docrif, idxtipoall for a given allegato by id\n */\n async updateFieldsById(id: number, fields: { tipcod?: string; codice?: number; docrif?: string; idxtipoall?: number }): Promise<void> {\n try {\n if (!id || id <= 0) {\n throw new BadRequestException('ID allegato non valido');\n }\n const updates: string[] = [];\n const params: unknown[] = [];\n if (fields.tipcod !== undefined) {\n updates.push('TIPCOD = ?');\n params.push(fields.tipcod);\n }\n if (fields.codice !== undefined) {\n updates.push('CODICE = ?');\n params.push(fields.codice);\n }\n if (fields.docrif !== undefined) {\n updates.push('DOCRIF = ?');\n params.push(fields.docrif);\n }\n if (fields.idxtipoall !== undefined) {\n updates.push('IDXTIPOALL = ?');\n params.push(fields.idxtipoall);\n }\n if (updates.length === 0) {\n throw new BadRequestException('Nessun campo da aggiornare');\n }\n const query = `UPDATE ALLEGATI SET ${updates.join(', ')} WHERE IDXALL = ?`;\n params.push(id);\n const result = await Orm.execute(this.allegatiOptions.databaseOptions, query, params);\n if (!result) {\n throw new InternalServerErrorException('Errore durante l\\'aggiornamento del file');\n }\n } catch (error) {\n this.logger.error('[AllegatiService] updateFieldsById - Errore:', error);\n throw error;\n }\n }\n\n /**\n * Get a single allegato by fields (returns the first match)\n */\n async getOneByFields(fields: { tipcod?: string; codice?: number; docrif?: string; idxtipoall?: number }): Promise<AllegatoDto | null> {\n const results = await this.findByFields(fields);\n return results.length > 0 ? (results[0] ?? null) : null;\n }\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/allegati-module/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4DAqBC;AA1BD,uCAA2C;AAC3C,+DAA0D;AAC1D,qDAAmE;AACnE,sCAAmC;AAEnC,SAAsB,wBAAwB,CAAC,GAAgB,EAAE,OAAwB;;QACrF,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,0BAA0B,CAAC,CAAC;QAC9D,IAAI,CAAC;YACD,MAAM,mBAAmB,GAAG,IAAI,iCAAc,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,+BAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE;gBAC3F,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,EAAE,CAAC;YAErB,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACzC,CAAC,CAAC;YAEH,2DAA2D;YAC3D,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CAAA;AAED,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,yCAAuB,CAAC,yFAAyF","sourcesContent":["import { Application } from \"express\";\
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/allegati-module/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4DAqBC;AA1BD,uCAA2C;AAC3C,+DAA0D;AAC1D,qDAAmE;AACnE,sCAAmC;AAEnC,SAAsB,wBAAwB,CAAC,GAAgB,EAAE,OAAwB;;QACrF,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,0BAA0B,CAAC,CAAC;QAC9D,IAAI,CAAC;YACD,MAAM,mBAAmB,GAAG,IAAI,iCAAc,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,+BAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE;gBAC3F,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,EAAE,CAAC;YAErB,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACzC,CAAC,CAAC;YAEH,2DAA2D;YAC3D,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CAAA;AAED,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,yCAAuB,CAAC,yFAAyF","sourcesContent":["import { Application } from \"express\";\nimport { NestFactory } from \"@nestjs/core\";\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\nimport { AllegatiModule, AllegatiOptions } from \"./AllegatiModule\";\nimport { Logger } from \"../Logger\";\n\nexport async function initializeAllegatiModule(app: Application, options: AllegatiOptions) {\n const logger: Logger = new Logger(\"initializeAllegatiModule\");\n try {\n const nestExpressInstance = new ExpressAdapter(app);\n const nestApp = await NestFactory.create(AllegatiModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n\n nestApp.enableCors();\n\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n // Note: Swagger setup is now handled by the unified module\n await nestApp.init();\n\n } catch (error) {\n logger.error(\"Errore in initialize AllegatiModule:\", error);\n throw error;\n }\n}\n\nexport { AllegatiModule } from \"./AllegatiModule\";\nexport * from \"./Dtos\"; // per esportare automaticamente i DTOs tipo AllegatoDto, UploadAllegatoResponseDto, etc."]}
|
package/dist/autobind.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autobind.js","sourceRoot":"","sources":["../src/autobind.ts"],"names":[],"mappings":";;AASA,4BAuBC;AA9BD;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAgC,WAAc;IAClE,MAAM,gBAAgB,GAAG,UAAyB,GAAG,IAAe;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAA4B,CAAC;QAEjF,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC/E,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACrD,gBAAgB,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;IACnD,OAAO,gBAAgC,CAAC;AAC5C,CAAC","sourcesContent":["type AutobindConstructor = new (...args: never[]) => object;\
|
|
1
|
+
{"version":3,"file":"autobind.js","sourceRoot":"","sources":["../src/autobind.ts"],"names":[],"mappings":";;AASA,4BAuBC;AA9BD;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAgC,WAAc;IAClE,MAAM,gBAAgB,GAAG,UAAyB,GAAG,IAAe;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAA4B,CAAC;QAEjF,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC/E,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACrD,gBAAgB,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;IACnD,OAAO,gBAAgC,CAAC;AAC5C,CAAC","sourcesContent":["type AutobindConstructor = new (...args: never[]) => object;\n\n/**\n * Class decorator that binds every prototype method to the instance.\n *\n * Uses `Reflect.construct` instead of a class-expression mixin because\n * TypeScript requires mixin constructors to use `any[]`, which this codebase\n * avoids.\n */\nexport function autobind<T extends AutobindConstructor>(constructor: T): T {\n const boundConstructor = function (this: unknown, ...args: unknown[]): object {\n const instance = Reflect.construct(constructor, args) as Record<string, unknown>;\n\n Object.getOwnPropertyNames(constructor.prototype).forEach(key => {\n const descriptor = Object.getOwnPropertyDescriptor(constructor.prototype, key);\n if (descriptor && typeof descriptor.value === 'function' && key !== 'constructor') {\n const method = instance[key];\n if (typeof method === 'function') {\n instance[key] = method.bind(instance);\n }\n }\n });\n\n return instance;\n };\n\n // Mirror `class extends`: the constructor's prototype chain must point at the\n // original class so reflect-metadata (design:paramtypes) stays reachable and\n // NestJS dependency injection keeps working.\n Object.setPrototypeOf(boundConstructor, constructor);\n boundConstructor.prototype = constructor.prototype;\n return boundConstructor as unknown as T;\n}\n"]}
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebird-compat.js","sourceRoot":"","sources":["../src/firebird-compat.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"node-firebird\";\r\nimport type { Options } from \"node-firebird\";\r\n\r\nexport type FirebirdWireCryptMode = \"disabled\" | \"enabled\" | \"required\";\r\nexport type FirebirdAuthPlugin = \"Legacy_Auth\" | \"Srp\" | \"Srp256\" | \"Srp384\" | \"Srp512\";\r\nexport type FirebirdDriverStrategy = \"modern\";\r\n\r\nexport type FirebirdOptions = Options & {\r\n wireCrypt?: FirebirdWireCryptMode | number;\r\n pluginName?: FirebirdAuthPlugin;\r\n authPlugins?: FirebirdAuthPlugin[];\r\n connectTimeoutMs?: number;\r\n compatibilityProbeTimeoutMs?: number;\r\n compatibilityTotalTimeoutMs?: number;\r\n firebirdDriver?: FirebirdDriverStrategy;\r\n trimStringResults?: boolean;\r\n /**\r\n * When `true`, query parameters are interpolated into the logged SQL. Off by\r\n * default so that secrets, credentials and personal data are not written to\r\n * the console or to the daily log files.\r\n */\r\n logQueryParameters?: boolean;\r\n /**\r\n * When greater than zero, enables an opt-in connection pool of the given\r\n * maximum size for this connection target instead of attaching/detaching a\r\n * physical connection for every query. Default `0` keeps the historic\r\n * one-connection-per-query behaviour.\r\n */\r\n poolSize?: number;\r\n};\r\n\r\ntype FirebirdErrorContext = {\r\n stage: \"attach\" | \"query\" | \"execute\" | \"transaction\";\r\n sql?: string;\r\n};\r\n\r\ntype EnhancedFirebirdError = Error & {\r\n cause?: unknown;\r\n gdscode?: number;\r\n gdsparams?: unknown;\r\n __emilsoftwareFirebirdEnhanced?: boolean;\r\n};\r\n\r\nfunction isBlank(value: unknown): boolean {\r\n return value === undefined || value === null || (typeof value === \"string\" && value.trim() === \"\");\r\n}\r\n\r\nfunction normalizeWireCryptMode(value: FirebirdOptions[\"wireCrypt\"]): number | undefined {\r\n if (isBlank(value)) {\r\n return undefined;\r\n }\r\n\r\n if (typeof value === \"number\") {\r\n return value;\r\n }\r\n\r\n const normalized = String(value).trim().toLowerCase();\r\n if (normalized === \"disabled\") {\r\n return Firebird.WIRE_CRYPT_DISABLE;\r\n }\r\n\r\n return Firebird.WIRE_CRYPT_ENABLE;\r\n}\r\n\r\nfunction normalizeAuthPlugin(value: unknown): FirebirdAuthPlugin | undefined {\r\n if (isBlank(value)) {\r\n return undefined;\r\n }\r\n\r\n const normalized = String(value).trim().toLowerCase();\r\n if (normalized === \"legacy\" || normalized === \"legacy_auth\") {\r\n return \"Legacy_Auth\";\r\n }\r\n\r\n if (normalized === \"srp256\") {\r\n return \"Srp256\";\r\n }\r\n\r\n if (normalized === \"srp384\") {\r\n return \"Srp384\";\r\n }\r\n\r\n if (normalized === \"srp512\") {\r\n return \"Srp512\";\r\n }\r\n\r\n return \"Srp\";\r\n}\r\n\r\nfunction formatWireCryptValue(value: FirebirdOptions[\"wireCrypt\"]): string {\r\n if (isBlank(value)) {\r\n return \"auto\";\r\n }\r\n\r\n if (typeof value === \"number\") {\r\n if (value === Firebird.WIRE_CRYPT_DISABLE) {\r\n return \"disabled\";\r\n }\r\n\r\n if (value === Firebird.WIRE_CRYPT_ENABLE) {\r\n return \"enabled\";\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction formatTarget(options: Options): string {\r\n return `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\r\n}\r\n\r\nfunction uniqueDiagnostics(values: string[]): string[] {\r\n return values.filter((value, index) => values.indexOf(value) === index);\r\n}\r\n\r\nfunction buildDiagnostics(message: string, options: FirebirdOptions): string[] {\r\n const diagnostics: string[] = [];\r\n const pluginMismatch = message.match(/Server don't accept plugin\\s*:\\s*([^,]+),\\s*but support\\s*:\\s*(.+)$/i);\r\n\r\n if (pluginMismatch) {\r\n const supportedPlugins = (pluginMismatch[2] ?? \"\")\r\n .split(\",\")\r\n .map((plugin) => plugin.trim())\r\n .filter((plugin) => plugin.length > 0);\r\n const supportedMessage = supportedPlugins.length === 1\r\n ? `The server explicitly reported that only the \"${supportedPlugins[0]}\" authentication plugin is supported.`\r\n : `The server explicitly reported the supported authentication plugins: ${supportedPlugins.join(\", \")}.`;\r\n diagnostics.push(supportedMessage);\r\n }\r\n\r\n if (/Incompatible wire encryption levels requested on client and server/i.test(message)) {\r\n diagnostics.push(\"The server rejected the requested wire encryption mode. Keep wire encryption auto-enabled unless the server is known to allow disabled encryption.\");\r\n }\r\n\r\n if (/No matching plugins on server/i.test(message)) {\r\n diagnostics.push(\"The server did not find a common authentication plugin with the client configuration.\");\r\n }\r\n\r\n if (/Connection timeout after \\d+ms/i.test(message) || /Timeout during Firebird attach after \\d+ ms/i.test(message)) {\r\n diagnostics.push(\"The TCP connection was accepted but the Firebird wire-protocol attach did not complete in time.\");\r\n }\r\n\r\n if (options.pluginName) {\r\n diagnostics.push(`Client authentication plugin was forced to \"${options.pluginName}\". Leave pluginName empty to let the driver auto-negotiate when possible.`);\r\n }\r\n\r\n if (!isBlank(options.wireCrypt)) {\r\n diagnostics.push(`Client wire encryption was forced to \"${formatWireCryptValue(options.wireCrypt)}\".`);\r\n }\r\n\r\n return uniqueDiagnostics(diagnostics);\r\n}\r\n\r\nfunction copyFirebirdMetadata(target: EnhancedFirebirdError, source: unknown): void {\r\n if (!source || typeof source !== \"object\") {\r\n return;\r\n }\r\n\r\n const firebirdSource = source as Record<string, unknown>;\r\n if (\"gdscode\" in firebirdSource) {\r\n target.gdscode = firebirdSource.gdscode as number;\r\n }\r\n\r\n if (\"gdsparams\" in firebirdSource) {\r\n target.gdsparams = firebirdSource.gdsparams;\r\n }\r\n}\r\n\r\nfunction formatFirebirdMetadata(source: unknown): string {\r\n if (!source || typeof source !== \"object\") {\r\n return \"\";\r\n }\r\n\r\n const firebirdSource = source as Record<string, unknown>;\r\n const metadata: string[] = [];\r\n\r\n if (typeof firebirdSource.gdscode === \"number\") {\r\n metadata.push(`gdscode=${firebirdSource.gdscode}`);\r\n }\r\n\r\n if (firebirdSource.gdsparams !== undefined) {\r\n try {\r\n metadata.push(`gdsparams=${JSON.stringify(firebirdSource.gdsparams)}`);\r\n } catch {\r\n metadata.push(`gdsparams=${String(firebirdSource.gdsparams)}`);\r\n }\r\n }\r\n\r\n return metadata.length > 0 ? ` Metadata: ${metadata.join(\", \")}.` : \"\";\r\n}\r\n\r\nexport function normalizeFirebirdOptions(options: Options): FirebirdOptions {\r\n const compatibilityOptions = options as FirebirdOptions;\r\n const {\r\n authPlugins: _authPlugins,\r\n compatibilityProbeTimeoutMs: _compatibilityProbeTimeoutMs,\r\n compatibilityTotalTimeoutMs,\r\n connectTimeoutMs,\r\n firebirdDriver: _firebirdDriver,\r\n logQueryParameters: _logQueryParameters,\r\n poolSize: _poolSize,\r\n trimStringResults,\r\n ...baseOptions\r\n } = compatibilityOptions;\r\n\r\n const normalizedOptions: FirebirdOptions = {\r\n ...baseOptions,\r\n pluginName: normalizeAuthPlugin(compatibilityOptions.pluginName),\r\n trimStringResults,\r\n wireCrypt: normalizeWireCryptMode(compatibilityOptions.wireCrypt),\r\n };\r\n\r\n const timeoutCandidate = compatibilityOptions.connectTimeout\r\n ?? connectTimeoutMs\r\n ?? compatibilityTotalTimeoutMs;\r\n\r\n if (Number.isFinite(timeoutCandidate) && Number(timeoutCandidate) > 0) {\r\n normalizedOptions.connectTimeout = Math.trunc(Number(timeoutCandidate));\r\n }\r\n\r\n return normalizedOptions;\r\n}\r\n\r\nexport function describeFirebirdCompatibilityOptions(options: Options): string {\r\n const normalized = normalizeFirebirdOptions(options);\r\n return `plugin=${normalized.pluginName ?? \"auto\"}, wireCrypt=${formatWireCryptValue(normalized.wireCrypt)}, connectTimeout=${normalized.connectTimeout ?? \"default\"}`;\r\n}\r\n\r\nexport function enhanceFirebirdError(error: unknown, options: Options, context: FirebirdErrorContext): Error {\r\n if (error instanceof Error && (error as EnhancedFirebirdError).__emilsoftwareFirebirdEnhanced) {\r\n return error;\r\n }\r\n\r\n const normalizedOptions = normalizeFirebirdOptions(options);\r\n const target = formatTarget(normalizedOptions);\r\n const original = error instanceof Error ? error : new Error(String(error));\r\n const diagnostics = buildDiagnostics(original.message, normalizedOptions);\r\n const sqlSuffix = context.sql ? ` SQL: ${context.sql.replace(/\\s+/g, \" \").trim()}` : \"\";\r\n const diagnosticsSuffix = diagnostics.length > 0 ? ` Diagnostics: ${diagnostics.join(\" \")}` : \"\";\r\n const metadataSuffix = formatFirebirdMetadata(original);\r\n const enhanced = new Error(\r\n `Firebird ${context.stage} failed on ${target}: ${original.message}.${diagnosticsSuffix}${metadataSuffix}${sqlSuffix}`\r\n ) as EnhancedFirebirdError;\r\n\r\n enhanced.cause = original;\r\n enhanced.__emilsoftwareFirebirdEnhanced = true;\r\n copyFirebirdMetadata(enhanced, original);\r\n enhanced.stack = `${enhanced.name}: ${enhanced.message}\\nCaused by: ${original.stack ?? original.message}`;\r\n return enhanced;\r\n}\r\n\r\nexport function buildFirebirdCompatibilityCandidates(options: Options): FirebirdOptions[] {\r\n return [normalizeFirebirdOptions(options)];\r\n}\r\n\r\nexport function shouldRetryFirebirdCompatibility(): boolean {\r\n return false;\r\n}\r\n\r\nexport function ensureEsNodeFirebirdCompatibilityPatch(): void {\r\n // No-op kept for backward compatibility. The library now relies on the\r\n // official node-firebird driver, which handles Firebird 2.5+ protocol\r\n // negotiation natively.\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"firebird-compat.js","sourceRoot":"","sources":["../src/firebird-compat.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"node-firebird\";\nimport type { Options } from \"node-firebird\";\n\nexport type FirebirdWireCryptMode = \"disabled\" | \"enabled\" | \"required\";\nexport type FirebirdAuthPlugin = \"Legacy_Auth\" | \"Srp\" | \"Srp256\" | \"Srp384\" | \"Srp512\";\nexport type FirebirdDriverStrategy = \"modern\";\n\nexport type FirebirdOptions = Options & {\n wireCrypt?: FirebirdWireCryptMode | number;\n pluginName?: FirebirdAuthPlugin;\n authPlugins?: FirebirdAuthPlugin[];\n connectTimeoutMs?: number;\n compatibilityProbeTimeoutMs?: number;\n compatibilityTotalTimeoutMs?: number;\n firebirdDriver?: FirebirdDriverStrategy;\n trimStringResults?: boolean;\n /**\n * When `true`, query parameters are interpolated into the logged SQL. Off by\n * default so that secrets, credentials and personal data are not written to\n * the console or to the daily log files.\n */\n logQueryParameters?: boolean;\n /**\n * When greater than zero, enables an opt-in connection pool of the given\n * maximum size for this connection target instead of attaching/detaching a\n * physical connection for every query. Default `0` keeps the historic\n * one-connection-per-query behaviour.\n */\n poolSize?: number;\n};\n\ntype FirebirdErrorContext = {\n stage: \"attach\" | \"query\" | \"execute\" | \"transaction\";\n sql?: string;\n};\n\ntype EnhancedFirebirdError = Error & {\n cause?: unknown;\n gdscode?: number;\n gdsparams?: unknown;\n __emilsoftwareFirebirdEnhanced?: boolean;\n};\n\nfunction isBlank(value: unknown): boolean {\n return value === undefined || value === null || (typeof value === \"string\" && value.trim() === \"\");\n}\n\nfunction normalizeWireCryptMode(value: FirebirdOptions[\"wireCrypt\"]): number | undefined {\n if (isBlank(value)) {\n return undefined;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"disabled\") {\n return Firebird.WIRE_CRYPT_DISABLE;\n }\n\n return Firebird.WIRE_CRYPT_ENABLE;\n}\n\nfunction normalizeAuthPlugin(value: unknown): FirebirdAuthPlugin | undefined {\n if (isBlank(value)) {\n return undefined;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"legacy\" || normalized === \"legacy_auth\") {\n return \"Legacy_Auth\";\n }\n\n if (normalized === \"srp256\") {\n return \"Srp256\";\n }\n\n if (normalized === \"srp384\") {\n return \"Srp384\";\n }\n\n if (normalized === \"srp512\") {\n return \"Srp512\";\n }\n\n return \"Srp\";\n}\n\nfunction formatWireCryptValue(value: FirebirdOptions[\"wireCrypt\"]): string {\n if (isBlank(value)) {\n return \"auto\";\n }\n\n if (typeof value === \"number\") {\n if (value === Firebird.WIRE_CRYPT_DISABLE) {\n return \"disabled\";\n }\n\n if (value === Firebird.WIRE_CRYPT_ENABLE) {\n return \"enabled\";\n }\n\n return String(value);\n }\n\n return String(value);\n}\n\nfunction formatTarget(options: Options): string {\n return `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\n}\n\nfunction uniqueDiagnostics(values: string[]): string[] {\n return values.filter((value, index) => values.indexOf(value) === index);\n}\n\nfunction buildDiagnostics(message: string, options: FirebirdOptions): string[] {\n const diagnostics: string[] = [];\n const pluginMismatch = message.match(/Server don't accept plugin\\s*:\\s*([^,]+),\\s*but support\\s*:\\s*(.+)$/i);\n\n if (pluginMismatch) {\n const supportedPlugins = (pluginMismatch[2] ?? \"\")\n .split(\",\")\n .map((plugin) => plugin.trim())\n .filter((plugin) => plugin.length > 0);\n const supportedMessage = supportedPlugins.length === 1\n ? `The server explicitly reported that only the \"${supportedPlugins[0]}\" authentication plugin is supported.`\n : `The server explicitly reported the supported authentication plugins: ${supportedPlugins.join(\", \")}.`;\n diagnostics.push(supportedMessage);\n }\n\n if (/Incompatible wire encryption levels requested on client and server/i.test(message)) {\n diagnostics.push(\"The server rejected the requested wire encryption mode. Keep wire encryption auto-enabled unless the server is known to allow disabled encryption.\");\n }\n\n if (/No matching plugins on server/i.test(message)) {\n diagnostics.push(\"The server did not find a common authentication plugin with the client configuration.\");\n }\n\n if (/Connection timeout after \\d+ms/i.test(message) || /Timeout during Firebird attach after \\d+ ms/i.test(message)) {\n diagnostics.push(\"The TCP connection was accepted but the Firebird wire-protocol attach did not complete in time.\");\n }\n\n if (options.pluginName) {\n diagnostics.push(`Client authentication plugin was forced to \"${options.pluginName}\". Leave pluginName empty to let the driver auto-negotiate when possible.`);\n }\n\n if (!isBlank(options.wireCrypt)) {\n diagnostics.push(`Client wire encryption was forced to \"${formatWireCryptValue(options.wireCrypt)}\".`);\n }\n\n return uniqueDiagnostics(diagnostics);\n}\n\nfunction copyFirebirdMetadata(target: EnhancedFirebirdError, source: unknown): void {\n if (!source || typeof source !== \"object\") {\n return;\n }\n\n const firebirdSource = source as Record<string, unknown>;\n if (\"gdscode\" in firebirdSource) {\n target.gdscode = firebirdSource.gdscode as number;\n }\n\n if (\"gdsparams\" in firebirdSource) {\n target.gdsparams = firebirdSource.gdsparams;\n }\n}\n\nfunction formatFirebirdMetadata(source: unknown): string {\n if (!source || typeof source !== \"object\") {\n return \"\";\n }\n\n const firebirdSource = source as Record<string, unknown>;\n const metadata: string[] = [];\n\n if (typeof firebirdSource.gdscode === \"number\") {\n metadata.push(`gdscode=${firebirdSource.gdscode}`);\n }\n\n if (firebirdSource.gdsparams !== undefined) {\n try {\n metadata.push(`gdsparams=${JSON.stringify(firebirdSource.gdsparams)}`);\n } catch {\n metadata.push(`gdsparams=${String(firebirdSource.gdsparams)}`);\n }\n }\n\n return metadata.length > 0 ? ` Metadata: ${metadata.join(\", \")}.` : \"\";\n}\n\nexport function normalizeFirebirdOptions(options: Options): FirebirdOptions {\n const compatibilityOptions = options as FirebirdOptions;\n const {\n authPlugins: _authPlugins,\n compatibilityProbeTimeoutMs: _compatibilityProbeTimeoutMs,\n compatibilityTotalTimeoutMs,\n connectTimeoutMs,\n firebirdDriver: _firebirdDriver,\n logQueryParameters: _logQueryParameters,\n poolSize: _poolSize,\n trimStringResults,\n ...baseOptions\n } = compatibilityOptions;\n\n const normalizedOptions: FirebirdOptions = {\n ...baseOptions,\n pluginName: normalizeAuthPlugin(compatibilityOptions.pluginName),\n trimStringResults,\n wireCrypt: normalizeWireCryptMode(compatibilityOptions.wireCrypt),\n };\n\n const timeoutCandidate = compatibilityOptions.connectTimeout\n ?? connectTimeoutMs\n ?? compatibilityTotalTimeoutMs;\n\n if (Number.isFinite(timeoutCandidate) && Number(timeoutCandidate) > 0) {\n normalizedOptions.connectTimeout = Math.trunc(Number(timeoutCandidate));\n }\n\n return normalizedOptions;\n}\n\nexport function describeFirebirdCompatibilityOptions(options: Options): string {\n const normalized = normalizeFirebirdOptions(options);\n return `plugin=${normalized.pluginName ?? \"auto\"}, wireCrypt=${formatWireCryptValue(normalized.wireCrypt)}, connectTimeout=${normalized.connectTimeout ?? \"default\"}`;\n}\n\nexport function enhanceFirebirdError(error: unknown, options: Options, context: FirebirdErrorContext): Error {\n if (error instanceof Error && (error as EnhancedFirebirdError).__emilsoftwareFirebirdEnhanced) {\n return error;\n }\n\n const normalizedOptions = normalizeFirebirdOptions(options);\n const target = formatTarget(normalizedOptions);\n const original = error instanceof Error ? error : new Error(String(error));\n const diagnostics = buildDiagnostics(original.message, normalizedOptions);\n const sqlSuffix = context.sql ? ` SQL: ${context.sql.replace(/\\s+/g, \" \").trim()}` : \"\";\n const diagnosticsSuffix = diagnostics.length > 0 ? ` Diagnostics: ${diagnostics.join(\" \")}` : \"\";\n const metadataSuffix = formatFirebirdMetadata(original);\n const enhanced = new Error(\n `Firebird ${context.stage} failed on ${target}: ${original.message}.${diagnosticsSuffix}${metadataSuffix}${sqlSuffix}`\n ) as EnhancedFirebirdError;\n\n enhanced.cause = original;\n enhanced.__emilsoftwareFirebirdEnhanced = true;\n copyFirebirdMetadata(enhanced, original);\n enhanced.stack = `${enhanced.name}: ${enhanced.message}\\nCaused by: ${original.stack ?? original.message}`;\n return enhanced;\n}\n\nexport function buildFirebirdCompatibilityCandidates(options: Options): FirebirdOptions[] {\n return [normalizeFirebirdOptions(options)];\n}\n\nexport function shouldRetryFirebirdCompatibility(): boolean {\n return false;\n}\n\nexport function ensureEsNodeFirebirdCompatibilityPatch(): void {\n // No-op kept for backward compatibility. The library now relies on the\n // official node-firebird driver, which handles Firebird 2.5+ protocol\n // negotiation natively.\n}\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAoD;AAuB6D,gGAvBxG,iCAAe,OAuBwG;AAtBhI,+DAA2D;AAsBxC,oGAtBV,yCAAmB,OAsBU;AArBtC,wDAA0C;AAqBuH,4BAAQ;AApBzK,qCAA6C;AAoBG,0FApBvC,kBAAS,OAoBuC;AAAjB,uFApBpB,eAAM,OAoBoB;AAnB9C,+BAA4B;AAmB+B,oFAnBlD,SAAG,OAmBkD;AAlB9D,2CAA0F;AAkB1B,8FAlBvD,yBAAa,OAkBuD;AAAE,8FAlBvD,yBAAa,OAkBuD;AAAE,kGAlBvD,6BAAiB,OAkBuD;AAAmB,2FAlBxE,sBAAU,OAkBwE;AAjB5I,yCAAsC;AAiB7B,yFAjBA,mBAAQ,OAiBA;AAhBjB,2DAAwD;AAgBsF,kGAhBrI,qCAAiB,OAgBqI;AAf/J,6BAA2B;AAE3B,wCAAsB;AACtB,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B;AAC3B,wDAAsC;AACtC,2DAAyC;AACzC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAElC,mDAAiC;AACjC,oDAAkC;AAClC,gDAA8B;AAE9B,yBAAyB;AACzB,0DAAwC;AACxC,2DAAyC","sourcesContent":["import { DatabaseUpdater } from \"./DatabaseUpdater\";\nimport { ExecutionTimeLogger } from \"./ExecutionTimeLogger\"\nimport * as Firebird from \"node-firebird\";\nimport { LogLevels, Logger } from \"./Logger\";\nimport { Orm } from \"./Orm\";\nimport { DateUtilities, RestUtilities, DatabaseUtilities, StatusCode } from \"./Utilities\";\nimport { autobind } from \"./autobind\";\nimport { DocumentGenerator } from \"./ContractGenerator\";\nimport \"./firebird-compat\";\n\
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAoD;AAuB6D,gGAvBxG,iCAAe,OAuBwG;AAtBhI,+DAA2D;AAsBxC,oGAtBV,yCAAmB,OAsBU;AArBtC,wDAA0C;AAqBuH,4BAAQ;AApBzK,qCAA6C;AAoBG,0FApBvC,kBAAS,OAoBuC;AAAjB,uFApBpB,eAAM,OAoBoB;AAnB9C,+BAA4B;AAmB+B,oFAnBlD,SAAG,OAmBkD;AAlB9D,2CAA0F;AAkB1B,8FAlBvD,yBAAa,OAkBuD;AAAE,8FAlBvD,yBAAa,OAkBuD;AAAE,kGAlBvD,6BAAiB,OAkBuD;AAAmB,2FAlBxE,sBAAU,OAkBwE;AAjB5I,yCAAsC;AAiB7B,yFAjBA,mBAAQ,OAiBA;AAhBjB,2DAAwD;AAgBsF,kGAhBrI,qCAAiB,OAgBqI;AAf/J,6BAA2B;AAE3B,wCAAsB;AACtB,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B;AAC3B,wDAAsC;AACtC,2DAAyC;AACzC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAElC,mDAAiC;AACjC,oDAAkC;AAClC,gDAA8B;AAE9B,yBAAyB;AACzB,0DAAwC;AACxC,2DAAyC","sourcesContent":["import { DatabaseUpdater } from \"./DatabaseUpdater\";\nimport { ExecutionTimeLogger } from \"./ExecutionTimeLogger\"\nimport * as Firebird from \"node-firebird\";\nimport { LogLevels, Logger } from \"./Logger\";\nimport { Orm } from \"./Orm\";\nimport { DateUtilities, RestUtilities, DatabaseUtilities, StatusCode } from \"./Utilities\";\nimport { autobind } from \"./autobind\";\nimport { DocumentGenerator } from \"./ContractGenerator\";\nimport \"./firebird-compat\";\n\nexport * from \"./Orm\";\nexport * from \"./Utilities\";\nexport * from \"./Logger\";\nexport * from \"./autobind\";\nexport * from \"./ExecutionTimeLogger\";\nexport * from \"./RoutesLoggerMiddleware\";\nexport * from \"./ContractGenerator\";\nexport * from \"./DatabaseUpdater\";\nexport * from \"./firebird-compat\";\n\nexport * from \"./accessi-module\";\nexport * from \"./allegati-module\";\nexport * from \"node-firebird\";\nexport { autobind, ExecutionTimeLogger, Logger, LogLevels, Orm, DateUtilities, RestUtilities, DatabaseUtilities, DatabaseUpdater, StatusCode, DocumentGenerator, Firebird };\n// Unified module exports\nexport * from \"./swagger/SwaggerConfig\";\nexport * from \"./initEmilsoftwareModule\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initEmilsoftwareModule.js","sourceRoot":"","sources":["../src/initEmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAoBA,wDA2DC;AA/ED,sDAAwD;AACxD,uCAA2C;AAC3C,+DAA0D;AAC1D,2DAAuD;AACvD,qCAAkC;AAClC,6DAA+E;AAC/E,iFAKqD;AACrD,mFAA0F;AAC1F,qGAAkG;AAElG;;;;GAIG;AACH,SAAsB,sBAAsB,CAAC,GAAgB,EAAE,OAA4B;;QACvF,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;YAC1B,IAAA,gDAA8B,GAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACD,gFAAgF;YAChF,wEAAwE;YACxE,MAAM,WAAW,GAAG,IAAA,iBAAO,GAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,IAAI,KAAK,MAAM;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxB,IAAI,KAAK,UAAU;gBACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC5B,IAAI,KAAK,eAAe,CAAC;YAE7B,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,IAAI,iCAAc,CAAC,WAAW,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,uCAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE;gBAC/F,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,iFAAiF;gBACjF,OAAO,CAAC,cAAc,CAAC,IAAA,+CAA2B,GAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,gBAAgB,CAAC,IAAI,uDAA0B,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACzC,CAAC,CAAC;YAEH,sDAAsD;YACtD,IAAA,4BAAY,EAAC,OAAO,CAAC,CAAC;YAEtB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wCAAsB,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBAC5C,IAAA,uCAAqB,EAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAEhE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,IAAA,+CAA6B,EAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CAAA","sourcesContent":["import express, { Application, Request } from \"express\";\
|
|
1
|
+
{"version":3,"file":"initEmilsoftwareModule.js","sourceRoot":"","sources":["../src/initEmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAoBA,wDA2DC;AA/ED,sDAAwD;AACxD,uCAA2C;AAC3C,+DAA0D;AAC1D,2DAAuD;AACvD,qCAAkC;AAClC,6DAA+E;AAC/E,iFAKqD;AACrD,mFAA0F;AAC1F,qGAAkG;AAElG;;;;GAIG;AACH,SAAsB,sBAAsB,CAAC,GAAgB,EAAE,OAA4B;;QACvF,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;YAC1B,IAAA,gDAA8B,GAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACD,gFAAgF;YAChF,wEAAwE;YACxE,MAAM,WAAW,GAAG,IAAA,iBAAO,GAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,IAAI,KAAK,MAAM;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxB,IAAI,KAAK,UAAU;gBACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC5B,IAAI,KAAK,eAAe,CAAC;YAE7B,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,IAAI,iCAAc,CAAC,WAAW,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,uCAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE;gBAC/F,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,iFAAiF;gBACjF,OAAO,CAAC,cAAc,CAAC,IAAA,+CAA2B,GAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,gBAAgB,CAAC,IAAI,uDAA0B,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACzC,CAAC,CAAC;YAEH,sDAAsD;YACtD,IAAA,4BAAY,EAAC,OAAO,CAAC,CAAC;YAEtB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wCAAsB,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBAC5C,IAAA,uCAAqB,EAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAEhE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,IAAA,+CAA6B,EAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CAAA","sourcesContent":["import express, { Application, Request } from \"express\";\nimport { NestFactory } from \"@nestjs/core\";\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\nimport { setupSwagger } from \"./swagger/SwaggerConfig\";\nimport { Logger } from \"./Logger\";\nimport { EmilsoftwareModule, EmilsoftwareOptions } from \"./EmilsoftwareModule\";\nimport {\n beginAccessiAuthInitialization,\n failAccessiAuthInitialization,\n AuthenticateGenService,\n setAccessiAuthService\n} from \"./accessi-module/middleware/authenticateGen\";\nimport { createAccessiValidationPipe } from './accessi-module/security/accessiValidation';\nimport { AccessiHttpExceptionFilter } from './accessi-module/security/AccessiHttpExceptionFilter';\n\n/**\n * Initializes the unified module that combines Accessi and Allegati functionality\n * @param app Express application instance\n * @param options Configuration options for both modules\n */\nexport async function initEmilsoftwareModule(app: Application, options: EmilsoftwareOptions) {\n const logger: Logger = new Logger(initEmilsoftwareModule.name);\n if (options?.accessiOptions) {\n beginAccessiAuthInitialization();\n }\n\n try {\n // Isolate Nest on a dedicated Express instance and dispatch only module routes.\n // This keeps pre-existing routes/middlewares on the host app untouched.\n const nestHostApp = express();\n const isNestRoute = (path: string) =>\n path === \"/api\" ||\n path.startsWith(\"/api/\") ||\n path === \"/swagger\" ||\n path.startsWith(\"/swagger/\") ||\n path === \"/swagger-json\";\n\n app.use((req: Request, res, next) => {\n if (!isNestRoute(req.path)) {\n return next();\n }\n return nestHostApp(req, res, next);\n });\n\n const nestExpressInstance = new ExpressAdapter(nestHostApp);\n const nestApp = await NestFactory.create(EmilsoftwareModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n\n nestApp.enableCors();\n if (options?.accessiOptions) {\n // Keep the Accessi API contract identical for standalone and unified bootstraps.\n nestApp.useGlobalPipes(createAccessiValidationPipe());\n nestApp.useGlobalFilters(new AccessiHttpExceptionFilter());\n }\n\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n // Setup unified Swagger documentation for all modules\n setupSwagger(nestApp);\n\n await nestApp.init();\n if (options?.accessiOptions) {\n const authService = nestApp.get(AuthenticateGenService);\n app.locals.accessiAuthService = authService;\n setAccessiAuthService(authService);\n }\n\n logger.info(\"Emilsoftware module initialized successfully\");\n\n } catch (error) {\n if (options?.accessiOptions) {\n failAccessiAuthInitialization(error);\n }\n logger.error(\"Error initializing Emilsoftware Module:\", error);\n throw error;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwaggerConfig.js","sourceRoot":"","sources":["../../src/swagger/SwaggerConfig.ts"],"names":[],"mappings":";;AAaA,oCA0CC;AAtDD,6CAAiE;AAGjE,sCAAmC;AASnC,SAAgB,YAAY,CAAC,GAAqB,EAAE,OAA6B;;IAC7E,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,mCAAI,SAAS,CAAC;IACtD,MAAM,sBAAsB,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;QACpD,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc;QAC7E,CAAC,CAAC,cAAc,CAAC;IACrB,MAAM,eAAe,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,mCAAI,sBAAsB,CAAC;IAC3E,MAAM,qBAAqB,GAAG,GAAG,WAAW,OAAO,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SAC/B,QAAQ,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,mBAAmB,CAAC;SAC/C,cAAc,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,mCAAI,kDAAkD,CAAC;SAC1F,UAAU,CAAC,KAAK,CAAC;SACjB,aAAa,EAAE,CAAC,qCAAqC;SACrD,KAAK,EAAE,CAAC;IAEb,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,uBAAa,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEhD,GAAG,CAAC,GAAG,CAAC,IAAI,eAAe,EAAE,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC5D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,qBAAqB,KAAK,eAAe,EAAE,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,qBAAqB,EAAE,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;YAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,aAAa,GAAG,MAAA,MAAA,GAAG,CAAC,aAAa,EAAE,0CAAE,OAAO,kDAAI,CAAC;IACvD,MAAM,IAAI,GAAG,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ;QAC3D,CAAC,CAAE,aAA6B,CAAC,IAAI;QACrC,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,CAAC,IAAI,CACP,wDAAwD,IAAI,IAAI,WAAW,EAAE,CAChF,CAAC;IACF,MAAM,CAAC,IAAI,CACP,uDAAuD,IAAI,IAAI,eAAe,EAAE,CACnF,CAAC;AACN,CAAC","sourcesContent":["import { INestApplication } from \"@nestjs/common\";\
|
|
1
|
+
{"version":3,"file":"SwaggerConfig.js","sourceRoot":"","sources":["../../src/swagger/SwaggerConfig.ts"],"names":[],"mappings":";;AAaA,oCA0CC;AAtDD,6CAAiE;AAGjE,sCAAmC;AASnC,SAAgB,YAAY,CAAC,GAAqB,EAAE,OAA6B;;IAC7E,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,mCAAI,SAAS,CAAC;IACtD,MAAM,sBAAsB,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;QACpD,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc;QAC7E,CAAC,CAAC,cAAc,CAAC;IACrB,MAAM,eAAe,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,mCAAI,sBAAsB,CAAC;IAC3E,MAAM,qBAAqB,GAAG,GAAG,WAAW,OAAO,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SAC/B,QAAQ,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,mBAAmB,CAAC;SAC/C,cAAc,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,mCAAI,kDAAkD,CAAC;SAC1F,UAAU,CAAC,KAAK,CAAC;SACjB,aAAa,EAAE,CAAC,qCAAqC;SACrD,KAAK,EAAE,CAAC;IAEb,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,uBAAa,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEhD,GAAG,CAAC,GAAG,CAAC,IAAI,eAAe,EAAE,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC5D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,qBAAqB,KAAK,eAAe,EAAE,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,qBAAqB,EAAE,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;YAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,aAAa,GAAG,MAAA,MAAA,GAAG,CAAC,aAAa,EAAE,0CAAE,OAAO,kDAAI,CAAC;IACvD,MAAM,IAAI,GAAG,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ;QAC3D,CAAC,CAAE,aAA6B,CAAC,IAAI;QACrC,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,CAAC,IAAI,CACP,wDAAwD,IAAI,IAAI,WAAW,EAAE,CAChF,CAAC;IACF,MAAM,CAAC,IAAI,CACP,uDAAuD,IAAI,IAAI,eAAe,EAAE,CACnF,CAAC;AACN,CAAC","sourcesContent":["import { INestApplication } from \"@nestjs/common\";\nimport { DocumentBuilder, SwaggerModule } from \"@nestjs/swagger\";\nimport { Request, Response } from \"express\";\nimport { AddressInfo } from \"net\";\nimport { Logger } from \"../Logger\";\n\nexport type SwaggerSetupOptions = {\n swaggerPath?: string;\n swaggerJsonPath?: string;\n title?: string;\n description?: string;\n};\n\nexport function setupSwagger(app: INestApplication, options?: SwaggerSetupOptions) {\n const logger: Logger = new Logger(\"SwaggerConfig\");\n const swaggerPath = options?.swaggerPath ?? \"swagger\";\n const defaultSwaggerJsonPath = swaggerPath.includes(\"/\")\n ? `${swaggerPath.substring(0, swaggerPath.lastIndexOf(\"/\") + 1)}swagger.json`\n : \"swagger.json\";\n const swaggerJsonPath = options?.swaggerJsonPath ?? defaultSwaggerJsonPath;\n const legacySwaggerJsonPath = `${swaggerPath}-json`;\n\n const config = new DocumentBuilder()\n .setTitle(options?.title ?? \"API Documentation\")\n .setDescription(options?.description ?? \"API per la gestione di accessi utenti e allegati\")\n .setVersion(\"1.0\")\n .addBearerAuth() // Per abilitare l'autenticazione JWT\n .build();\n\n const document = SwaggerModule.createDocument(app, config);\n SwaggerModule.setup(swaggerPath, app, document);\n\n app.use(`/${swaggerJsonPath}`, (_req: Request, res: Response) => {\n res.setHeader(\"Content-Type\", \"application/json\");\n res.send(document);\n });\n\n if (legacySwaggerJsonPath !== swaggerJsonPath) {\n app.use(`/${legacySwaggerJsonPath}`, (_req: Request, res: Response) => {\n res.setHeader(\"Content-Type\", \"application/json\");\n res.send(document);\n });\n }\n\n const serverAddress = app.getHttpServer()?.address?.();\n const port = serverAddress && typeof serverAddress === \"object\"\n ? (serverAddress as AddressInfo).port\n : 3000;\n\n logger.info(\n `Swagger documentation available at: http://localhost:${port}/${swaggerPath}`\n );\n logger.info(\n `Swagger OpenAPI JSON available at: http://localhost:${port}/${swaggerJsonPath}`\n );\n}\n"]}
|