emilsoftware-utilities 1.8.0-dev.2 → 2.0.0-dev.2
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 +38 -34
- package/dist/ContractGenerator.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/Logger.js.map +1 -1
- package/dist/Orm.js.map +1 -1
- package/dist/RoutesLoggerMiddleware.js.map +1 -1
- package/dist/Utilities.d.ts +18 -0
- package/dist/Utilities.js +90 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +15 -0
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Controllers/AuthController.d.ts +4 -4
- package/dist/accessi-module/Controllers/AuthController.js +36 -21
- package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.d.ts +3 -3
- package/dist/accessi-module/Controllers/EmailController.js +15 -15
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.d.ts +3 -3
- package/dist/accessi-module/Controllers/FiltriController.js +32 -15
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -17
- package/dist/accessi-module/Controllers/PermissionController.js +140 -124
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.d.ts +12 -11
- package/dist/accessi-module/Controllers/UserController.js +112 -79
- 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 +6 -0
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +6 -0
- 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 +5 -0
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +37 -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 +13 -2
- 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 +6 -0
- 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 +59 -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.d.ts +8 -3
- package/dist/accessi-module/Services/AuthService/AuthService.js +159 -27
- 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 +44 -21
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +87 -87
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +15 -6
- package/dist/accessi-module/Services/UserService/UserService.js +165 -139
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/Views/reset-password.html +213 -195
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +25 -16
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/index.js +33 -4
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.d.ts +4 -2
- package/dist/accessi-module/jwt/jwt.strategy.js +47 -19
- 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.d.ts +3 -1
- package/dist/accessi-module/middleware/authenticateGen.js +17 -11
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.d.ts +17 -0
- package/dist/accessi-module/security/accessControl.js +44 -0
- package/dist/accessi-module/security/accessControl.js.map +1 -0
- package/dist/accessi-module/security/authenticatedToken.d.ts +11 -0
- package/dist/accessi-module/security/authenticatedToken.js +39 -0
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -0
- package/dist/accessi-module/security/passwordResetToken.d.ts +8 -0
- package/dist/accessi-module/security/passwordResetToken.js +73 -0
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -0
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +10 -0
- package/dist/accessi-module/security/publicAuthRateLimit.js +105 -0
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -0
- 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/index.js.map +1 -1
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +83 -83
- package/dist/emilsoftware-utilities-1.8.0-dev.2.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetListResponse.js","sourceRoot":"","sources":["../../../../src/allegati-module/Dtos/responses/GetListResponse.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,yDAAyC;AACzC,qDAAiD;AACjD,kDAA+C;AAC/C,gDAA6C;AAE7C,MAAa,eAAgB,SAAQ,2BAAY;CAKhD;AALD,0CAKC;AADC;IAHC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,CAAC,yBAAW,CAAC,EAAE,CAAC;IACpC,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,yBAAW,CAAC;;+CACF","sourcesContent":["import { ApiProperty } from '@nestjs/swagger';\n\nimport { Type } from 'class-transformer';\nimport { ValidateNested } from 'class-validator';\nimport { BaseResponse } from '../BaseResponse';\nimport { AllegatoDto } from '../AllegatoDto';\n\nexport class GetListResponse extends BaseResponse {\n @ApiProperty({ type: [AllegatoDto] })\n @ValidateNested({ each: true })\n @Type(() => AllegatoDto)\n Result: AllegatoDto[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GetListResponse.js","sourceRoot":"","sources":["../../../../src/allegati-module/Dtos/responses/GetListResponse.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,yDAAyC;AACzC,qDAAiD;AACjD,kDAA+C;AAC/C,gDAA6C;AAE7C,MAAa,eAAgB,SAAQ,2BAAY;CAKhD;AALD,0CAKC;AADC;IAHC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,CAAC,yBAAW,CAAC,EAAE,CAAC;IACpC,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,yBAAW,CAAC;;+CACF","sourcesContent":["import { ApiProperty } from '@nestjs/swagger';\r\n\r\nimport { Type } from 'class-transformer';\r\nimport { ValidateNested } from 'class-validator';\r\nimport { BaseResponse } from '../BaseResponse';\r\nimport { AllegatoDto } from '../AllegatoDto';\r\n\r\nexport class GetListResponse extends BaseResponse {\r\n @ApiProperty({ type: [AllegatoDto] })\r\n @ValidateNested({ each: true })\r\n @Type(() => AllegatoDto)\r\n Result: AllegatoDto[];\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadAllegatoResponseDto.js","sourceRoot":"","sources":["../../../../src/allegati-module/Dtos/responses/UploadAllegatoResponseDto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAiE;AAEjE,MAAa,yBAAyB;CAerC;AAfD,8DAeC;AATG;IALC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,EAAE;KACd,CAAC;IACD,IAAA,0BAAQ,GAAE;;qDACA;AAQX;IANC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,gBAAgB;KAC5B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;;2DACvC","sourcesContent":["import { ApiProperty } from \"@nestjs/swagger\";\nimport { IsNumber, IsString, IsNotEmpty } from \"class-validator\";\n\nexport class UploadAllegatoResponseDto {\n @ApiProperty({\n description: 'ID assegnato al file caricato',\n example: 42,\n })\n @IsNumber()\n id: number;\n\n @ApiProperty({\n description: 'Nome file salvato',\n example: 'preventivo.pdf',\n })\n @IsString()\n @IsNotEmpty({ message: \"Il nome file è obbligatorio.\" })\n filename: string;\n}"]}
|
|
1
|
+
{"version":3,"file":"UploadAllegatoResponseDto.js","sourceRoot":"","sources":["../../../../src/allegati-module/Dtos/responses/UploadAllegatoResponseDto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAiE;AAEjE,MAAa,yBAAyB;CAerC;AAfD,8DAeC;AATG;IALC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,EAAE;KACd,CAAC;IACD,IAAA,0BAAQ,GAAE;;qDACA;AAQX;IANC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,gBAAgB;KAC5B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;;2DACvC","sourcesContent":["import { ApiProperty } from \"@nestjs/swagger\";\r\nimport { IsNumber, IsString, IsNotEmpty } from \"class-validator\";\r\n\r\nexport class UploadAllegatoResponseDto {\r\n @ApiProperty({\r\n description: 'ID assegnato al file caricato',\r\n example: 42,\r\n })\r\n @IsNumber()\r\n id: number;\r\n\r\n @ApiProperty({\r\n description: 'Nome file salvato',\r\n example: 'preventivo.pdf',\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"Il nome file è obbligatorio.\" })\r\n filename: string;\r\n}"]}
|
|
@@ -93,12 +93,12 @@ let AllegatiService = class AllegatiService {
|
|
|
93
93
|
const chunk = file.buffer.slice(i, i + chunkSize);
|
|
94
94
|
base64Content += chunk.toString('base64');
|
|
95
95
|
}
|
|
96
|
-
const insertQuery = `
|
|
97
|
-
INSERT INTO ALLEGATI (
|
|
98
|
-
CODICE, TIPCOD, ORDINE, DESALL, NOMEFILE,
|
|
99
|
-
DADATAVAL, ADATAVAL, ALLEGATO, IDXTIPOALL, DATMODIF, DOCRIF
|
|
100
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, ?)
|
|
101
|
-
RETURNING IDXALL
|
|
96
|
+
const insertQuery = `
|
|
97
|
+
INSERT INTO ALLEGATI (
|
|
98
|
+
CODICE, TIPCOD, ORDINE, DESALL, NOMEFILE,
|
|
99
|
+
DADATAVAL, ADATAVAL, ALLEGATO, IDXTIPOALL, DATMODIF, DOCRIF
|
|
100
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, ?)
|
|
101
|
+
RETURNING IDXALL
|
|
102
102
|
`;
|
|
103
103
|
const params = [
|
|
104
104
|
uploadSingleFileRequest.codice,
|
|
@@ -133,10 +133,10 @@ let AllegatiService = class AllegatiService {
|
|
|
133
133
|
ensureTableExists() {
|
|
134
134
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
135
|
try {
|
|
136
|
-
const query = `
|
|
137
|
-
SELECT RDB$RELATION_NAME
|
|
138
|
-
FROM RDB$RELATIONS
|
|
139
|
-
WHERE RDB$RELATION_NAME = 'ALLEGATI'
|
|
136
|
+
const query = `
|
|
137
|
+
SELECT RDB$RELATION_NAME
|
|
138
|
+
FROM RDB$RELATIONS
|
|
139
|
+
WHERE RDB$RELATION_NAME = 'ALLEGATI'
|
|
140
140
|
`;
|
|
141
141
|
const result = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query);
|
|
142
142
|
if (!result || result.length === 0) {
|
|
@@ -155,13 +155,13 @@ let AllegatiService = class AllegatiService {
|
|
|
155
155
|
if (!id || id <= 0) {
|
|
156
156
|
throw new common_1.BadRequestException('ID allegato non valido');
|
|
157
157
|
}
|
|
158
|
-
const query = `
|
|
159
|
-
SELECT
|
|
160
|
-
ALLEGATO as content,
|
|
161
|
-
NOMEFILE as filename,
|
|
162
|
-
IDXTIPOALL as idTipoAllegato
|
|
163
|
-
FROM ALLEGATI
|
|
164
|
-
WHERE IDXALL = ?
|
|
158
|
+
const query = `
|
|
159
|
+
SELECT
|
|
160
|
+
ALLEGATO as content,
|
|
161
|
+
NOMEFILE as filename,
|
|
162
|
+
IDXTIPOALL as idTipoAllegato
|
|
163
|
+
FROM ALLEGATI
|
|
164
|
+
WHERE IDXALL = ?
|
|
165
165
|
`;
|
|
166
166
|
const results = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query, [id]);
|
|
167
167
|
if (!results || results.length === 0) {
|
|
@@ -255,22 +255,22 @@ let AllegatiService = class AllegatiService {
|
|
|
255
255
|
params.push(filters.idxtipoall);
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
|
-
const query = `
|
|
259
|
-
SELECT
|
|
260
|
-
IDXALL as id,
|
|
261
|
-
NOMEFILE as filename,
|
|
262
|
-
'application/octet-stream' as mimetype,
|
|
263
|
-
DATMODIF as uploadDate,
|
|
264
|
-
CODICE as codice,
|
|
265
|
-
TIPCOD as tipoCodice,
|
|
266
|
-
ORDINE as ordine,
|
|
267
|
-
DESALL as descrizioneAllegato,
|
|
268
|
-
DADATAVAL as dataInizioValidita,
|
|
269
|
-
ADATAVAL as dataFineValidita,
|
|
270
|
-
IDXTIPOALL as idTipoAllegato,
|
|
271
|
-
DOCRIF as riferimentoDocumento
|
|
272
|
-
FROM ALLEGATI
|
|
273
|
-
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
258
|
+
const query = `
|
|
259
|
+
SELECT
|
|
260
|
+
IDXALL as id,
|
|
261
|
+
NOMEFILE as filename,
|
|
262
|
+
'application/octet-stream' as mimetype,
|
|
263
|
+
DATMODIF as uploadDate,
|
|
264
|
+
CODICE as codice,
|
|
265
|
+
TIPCOD as tipoCodice,
|
|
266
|
+
ORDINE as ordine,
|
|
267
|
+
DESALL as descrizioneAllegato,
|
|
268
|
+
DADATAVAL as dataInizioValidita,
|
|
269
|
+
ADATAVAL as dataFineValidita,
|
|
270
|
+
IDXTIPOALL as idTipoAllegato,
|
|
271
|
+
DOCRIF as riferimentoDocumento
|
|
272
|
+
FROM ALLEGATI
|
|
273
|
+
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
274
274
|
`;
|
|
275
275
|
const results = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query, params);
|
|
276
276
|
if (!results) {
|
|
@@ -324,22 +324,22 @@ let AllegatiService = class AllegatiService {
|
|
|
324
324
|
whereConditions.push('IDXTIPOALL = ?');
|
|
325
325
|
params.push(fields.idxtipoall);
|
|
326
326
|
}
|
|
327
|
-
const query = `
|
|
328
|
-
SELECT
|
|
329
|
-
IDXALL as id,
|
|
330
|
-
NOMEFILE as filename,
|
|
331
|
-
'application/octet-stream' as mimetype,
|
|
332
|
-
DATMODIF as uploadDate,
|
|
333
|
-
CODICE as codice,
|
|
334
|
-
TIPCOD as tipoCodice,
|
|
335
|
-
ORDINE as ordine,
|
|
336
|
-
DESALL as descrizioneAllegato,
|
|
337
|
-
DADATAVAL as dataInizioValidita,
|
|
338
|
-
ADATAVAL as dataFineValidita,
|
|
339
|
-
IDXTIPOALL as idTipoAllegato,
|
|
340
|
-
DOCRIF as riferimentoDocumento
|
|
341
|
-
FROM ALLEGATI
|
|
342
|
-
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
327
|
+
const query = `
|
|
328
|
+
SELECT
|
|
329
|
+
IDXALL as id,
|
|
330
|
+
NOMEFILE as filename,
|
|
331
|
+
'application/octet-stream' as mimetype,
|
|
332
|
+
DATMODIF as uploadDate,
|
|
333
|
+
CODICE as codice,
|
|
334
|
+
TIPCOD as tipoCodice,
|
|
335
|
+
ORDINE as ordine,
|
|
336
|
+
DESALL as descrizioneAllegato,
|
|
337
|
+
DADATAVAL as dataInizioValidita,
|
|
338
|
+
ADATAVAL as dataFineValidita,
|
|
339
|
+
IDXTIPOALL as idTipoAllegato,
|
|
340
|
+
DOCRIF as riferimentoDocumento
|
|
341
|
+
FROM ALLEGATI
|
|
342
|
+
${whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : ''}
|
|
343
343
|
`;
|
|
344
344
|
const results = yield Orm_1.Orm.query(this.allegatiOptions.databaseOptions, query, params);
|
|
345
345
|
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 } from \"@nestjs/common\";\nimport { autobind } from \"../../../autobind\";\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 {\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 this.ensureTableExists().catch(error => {\n console.error('[AllegatiService] Errore creazione tabella ALLEGATI:', error);\n // throw new InternalServerErrorException('Errore durante l\\'inizializzazione del servizio allegati');\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\n\n async getAttachmentTypes(): Promise<any[]> {\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 console.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 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 \n if (!result || !result.IDXALL) {\n throw new InternalServerErrorException('Errore durante il salvataggio del file');\n }\n\n return {\n id: result.IDXALL,\n filename: file.originalname,\n };\n } catch (error) {\n console.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 console.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 if (!result.CONTENT) {\n throw new InternalServerErrorException('Contenuto file non disponibile');\n }\n\n if (!result.FILENAME) {\n throw new InternalServerErrorException('Nome file non disponibile');\n }\n\n const mimetype = this.detectMimeType(result.FILENAME);\n \n return {\n contentBase64: result.CONTENT,\n filename: result.FILENAME,\n mimetype\n };\n } catch (error) {\n console.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 console.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: any[] = [];\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: any) => ({\n id: r.ID,\n filename: r.FILENAME,\n mimetype: r.MIMETYPE,\n uploadDate: r.UPLOADDATE,\n codice: r.CODICE,\n tipoCodice: r.TIPOCODICE,\n ordine: r.ORDINE,\n descrizioneAllegato: r.DESCRIZIONEALLEGATO,\n dataInizioValidita: r.DATAINIZIOVALIDITA,\n dataFineValidita: r.DATAFINEVALIDITA,\n idTipoAllegato: r.IDTIPOALLEGATO,\n riferimentoDocumento: r.RIFERIMENTODOCUMENTO\n }));\n } catch (error) {\n console.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 any 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: any[] = [];\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: any) => ({\n id: r.ID,\n filename: r.FILENAME,\n mimetype: r.MIMETYPE,\n uploadDate: r.UPLOADDATE,\n codice: r.CODICE,\n tipoCodice: r.TIPOCODICE,\n ordine: r.ORDINE,\n descrizioneAllegato: r.DESCRIZIONEALLEGATO,\n dataInizioValidita: r.DATAINIZIOVALIDITA,\n dataFineValidita: r.DATAFINEVALIDITA,\n idTipoAllegato: r.IDTIPOALLEGATO,\n riferimentoDocumento: r.RIFERIMENTODOCUMENTO\n }));\n } catch (error) {\n console.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: any[] = [];\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 console.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;\n }\n\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 } from \"@nestjs/common\";\r\nimport { autobind } from \"../../../autobind\";\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 {\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 this.ensureTableExists().catch(error => {\r\n console.error('[AllegatiService] Errore creazione tabella ALLEGATI:', error);\r\n // throw new InternalServerErrorException('Errore durante l\\'inizializzazione del servizio allegati');\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\r\n\r\n async getAttachmentTypes(): Promise<any[]> {\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 console.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 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 \r\n if (!result || !result.IDXALL) {\r\n throw new InternalServerErrorException('Errore durante il salvataggio del file');\r\n }\r\n\r\n return {\r\n id: result.IDXALL,\r\n filename: file.originalname,\r\n };\r\n } catch (error) {\r\n console.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 console.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 if (!result.CONTENT) {\r\n throw new InternalServerErrorException('Contenuto file non disponibile');\r\n }\r\n\r\n if (!result.FILENAME) {\r\n throw new InternalServerErrorException('Nome file non disponibile');\r\n }\r\n\r\n const mimetype = this.detectMimeType(result.FILENAME);\r\n \r\n return {\r\n contentBase64: result.CONTENT,\r\n filename: result.FILENAME,\r\n mimetype\r\n };\r\n } catch (error) {\r\n console.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 console.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: any[] = [];\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: any) => ({\r\n id: r.ID,\r\n filename: r.FILENAME,\r\n mimetype: r.MIMETYPE,\r\n uploadDate: r.UPLOADDATE,\r\n codice: r.CODICE,\r\n tipoCodice: r.TIPOCODICE,\r\n ordine: r.ORDINE,\r\n descrizioneAllegato: r.DESCRIZIONEALLEGATO,\r\n dataInizioValidita: r.DATAINIZIOVALIDITA,\r\n dataFineValidita: r.DATAFINEVALIDITA,\r\n idTipoAllegato: r.IDTIPOALLEGATO,\r\n riferimentoDocumento: r.RIFERIMENTODOCUMENTO\r\n }));\r\n } catch (error) {\r\n console.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 any 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: any[] = [];\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: any) => ({\r\n id: r.ID,\r\n filename: r.FILENAME,\r\n mimetype: r.MIMETYPE,\r\n uploadDate: r.UPLOADDATE,\r\n codice: r.CODICE,\r\n tipoCodice: r.TIPOCODICE,\r\n ordine: r.ORDINE,\r\n descrizioneAllegato: r.DESCRIZIONEALLEGATO,\r\n dataInizioValidita: r.DATAINIZIOVALIDITA,\r\n dataFineValidita: r.DATAFINEVALIDITA,\r\n idTipoAllegato: r.IDTIPOALLEGATO,\r\n riferimentoDocumento: r.RIFERIMENTODOCUMENTO\r\n }));\r\n } catch (error) {\r\n console.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: any[] = [];\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 console.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;\r\n }\r\n\r\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\";\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."]}
|
|
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\";\r\nimport { NestFactory } from \"@nestjs/core\";\r\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\r\nimport { AllegatiModule, AllegatiOptions } from \"./AllegatiModule\";\r\nimport { Logger } from \"../Logger\";\r\n\r\nexport async function initializeAllegatiModule(app: Application, options: AllegatiOptions) {\r\n const logger: Logger = new Logger(\"initializeAllegatiModule\");\r\n try {\r\n const nestExpressInstance = new ExpressAdapter(app);\r\n const nestApp = await NestFactory.create(AllegatiModule.forRoot(options), nestExpressInstance, {\r\n bufferLogs: true\r\n });\r\n\r\n nestApp.enableCors();\r\n\r\n nestApp.setGlobalPrefix('api', {\r\n exclude: ['/swagger', '/swagger/(.*)']\r\n });\r\n\r\n // Note: Swagger setup is now handled by the unified module\r\n await nestApp.init();\r\n\r\n } catch (error) {\r\n logger.error(\"Errore in initialize AllegatiModule:\", error);\r\n throw error;\r\n }\r\n}\r\n\r\nexport { AllegatiModule } from \"./AllegatiModule\";\r\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":";;AAAA,4BAYC;AAZD,SAAgB,QAAQ,CAA0C,WAAc;IAC5E,OAAO,KAAM,SAAQ,WAAW;QAC5B,YAAY,GAAG,IAAW;YACtB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACf,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC/E,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;oBAChF,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["export function autobind<T extends { new (...args: any[]): any }>(constructor: T): T {\n return class extends constructor {\n constructor(...args: any[]) {\n super(...args);\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 this[key] = this[key].bind(this);\n }\n });\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"autobind.js","sourceRoot":"","sources":["../src/autobind.ts"],"names":[],"mappings":";;AAAA,4BAYC;AAZD,SAAgB,QAAQ,CAA0C,WAAc;IAC5E,OAAO,KAAM,SAAQ,WAAW;QAC5B,YAAY,GAAG,IAAW;YACtB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACf,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC/E,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;oBAChF,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["export function autobind<T extends { new (...args: any[]): any }>(constructor: T): T {\r\n return class extends constructor {\r\n constructor(...args: any[]) {\r\n super(...args);\r\n Object.getOwnPropertyNames(constructor.prototype).forEach(key => {\r\n const descriptor = Object.getOwnPropertyDescriptor(constructor.prototype, key);\r\n if (descriptor && typeof descriptor.value === 'function' && key !== 'constructor') {\r\n this[key] = this[key].bind(this);\r\n }\r\n });\r\n }\r\n };\r\n}\r\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uDAAoD;AAoB6D,gGApBxG,iCAAe,OAoBwG;AAnBhI,+DAA2D;AAmBxC,oGAnBV,yCAAmB,OAmBU;AAlBtC,qCAA6C;AAkBG,0FAlBvC,kBAAS,OAkBuC;AAAjB,uFAlBpB,eAAM,OAkBoB;AAjB9C,+BAA4B;AAiB+B,oFAjBlD,SAAG,OAiBkD;AAhB9D,2CAA0F;AAgB1B,8FAhBvD,yBAAa,OAgBuD;AAAE,8FAhBvD,yBAAa,OAgBuD;AAAE,kGAhBvD,6BAAiB,OAgBuD;AAAmB,2FAhBxE,sBAAU,OAgBwE;AAf5I,yCAAsC;AAe7B,yFAfA,mBAAQ,OAeA;AAdjB,2DAAwD;AAcsF,kGAdrI,qCAAiB,OAcqI;AAZ/J,wCAAsB;AACtB,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B;AAC3B,wDAAsC;AACtC,2DAAyC;AACzC,sDAAoC;AACpC,oDAAkC;AAElC,mDAAiC;AACjC,oDAAkC;AAClC,mDAAiC;AAEjC,yBAAyB;AACzB,0DAAwC;AACxC,2DAAyC","sourcesContent":["import { DatabaseUpdater } from \"./DatabaseUpdater\";\nimport { ExecutionTimeLogger } from \"./ExecutionTimeLogger\"\nimport { LogLevels, Logger } from \"./Logger\";\nimport { Orm } from \"./Orm\";\nimport { DateUtilities, RestUtilities, DatabaseUtilities, StatusCode } from \"./Utilities\";\nimport { autobind } from \"./autobind\";\nimport { DocumentGenerator } from \"./ContractGenerator\";\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\";\n\nexport * from \"./accessi-module\";\nexport * from \"./allegati-module\";\nexport * from \"es-node-firebird\";\nexport { autobind, ExecutionTimeLogger, Logger, LogLevels, Orm, DateUtilities, RestUtilities, DatabaseUtilities, DatabaseUpdater, StatusCode, DocumentGenerator };\n// Unified module exports\nexport * from \"./swagger/SwaggerConfig\";\nexport * from \"./initEmilsoftwareModule\";"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uDAAoD;AAoB6D,gGApBxG,iCAAe,OAoBwG;AAnBhI,+DAA2D;AAmBxC,oGAnBV,yCAAmB,OAmBU;AAlBtC,qCAA6C;AAkBG,0FAlBvC,kBAAS,OAkBuC;AAAjB,uFAlBpB,eAAM,OAkBoB;AAjB9C,+BAA4B;AAiB+B,oFAjBlD,SAAG,OAiBkD;AAhB9D,2CAA0F;AAgB1B,8FAhBvD,yBAAa,OAgBuD;AAAE,8FAhBvD,yBAAa,OAgBuD;AAAE,kGAhBvD,6BAAiB,OAgBuD;AAAmB,2FAhBxE,sBAAU,OAgBwE;AAf5I,yCAAsC;AAe7B,yFAfA,mBAAQ,OAeA;AAdjB,2DAAwD;AAcsF,kGAdrI,qCAAiB,OAcqI;AAZ/J,wCAAsB;AACtB,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B;AAC3B,wDAAsC;AACtC,2DAAyC;AACzC,sDAAoC;AACpC,oDAAkC;AAElC,mDAAiC;AACjC,oDAAkC;AAClC,mDAAiC;AAEjC,yBAAyB;AACzB,0DAAwC;AACxC,2DAAyC","sourcesContent":["import { DatabaseUpdater } from \"./DatabaseUpdater\";\r\nimport { ExecutionTimeLogger } from \"./ExecutionTimeLogger\"\r\nimport { LogLevels, Logger } from \"./Logger\";\r\nimport { Orm } from \"./Orm\";\r\nimport { DateUtilities, RestUtilities, DatabaseUtilities, StatusCode } from \"./Utilities\";\r\nimport { autobind } from \"./autobind\";\r\nimport { DocumentGenerator } from \"./ContractGenerator\";\r\n\r\nexport * from \"./Orm\";\r\nexport * from \"./Utilities\";\r\nexport * from \"./Logger\";\r\nexport * from \"./autobind\";\r\nexport * from \"./ExecutionTimeLogger\";\r\nexport * from \"./RoutesLoggerMiddleware\";\r\nexport * from \"./ContractGenerator\";\r\nexport * from \"./DatabaseUpdater\";\r\n\r\nexport * from \"./accessi-module\";\r\nexport * from \"./allegati-module\";\r\nexport * from \"es-node-firebird\";\r\nexport { autobind, ExecutionTimeLogger, Logger, LogLevels, Orm, DateUtilities, RestUtilities, DatabaseUtilities, DatabaseUpdater, StatusCode, DocumentGenerator };\r\n// Unified module exports\r\nexport * from \"./swagger/SwaggerConfig\";\r\nexport * from \"./initEmilsoftwareModule\";"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initEmilsoftwareModule.js","sourceRoot":"","sources":["../src/initEmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAkBA,wDAsDC;AAxED,sDAAwD;AACxD,uCAA2C;AAC3C,+DAA0D;AAC1D,2DAAuD;AACvD,qCAAkC;AAClC,6DAA+E;AAC/E,iFAKqD;AAErD;;;;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;YAErB,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\";\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\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
|
+
{"version":3,"file":"initEmilsoftwareModule.js","sourceRoot":"","sources":["../src/initEmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAkBA,wDAsDC;AAxED,sDAAwD;AACxD,uCAA2C;AAC3C,+DAA0D;AAC1D,2DAAuD;AACvD,qCAAkC;AAClC,6DAA+E;AAC/E,iFAKqD;AAErD;;;;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;YAErB,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\";\r\nimport { NestFactory } from \"@nestjs/core\";\r\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\r\nimport { setupSwagger } from \"./swagger/SwaggerConfig\";\r\nimport { Logger } from \"./Logger\";\r\nimport { EmilsoftwareModule, EmilsoftwareOptions } from \"./EmilsoftwareModule\";\r\nimport {\r\n beginAccessiAuthInitialization,\r\n failAccessiAuthInitialization,\r\n AuthenticateGenService,\r\n setAccessiAuthService\r\n} from \"./accessi-module/middleware/authenticateGen\";\r\n\r\n/**\r\n * Initializes the unified module that combines Accessi and Allegati functionality\r\n * @param app Express application instance\r\n * @param options Configuration options for both modules\r\n */\r\nexport async function initEmilsoftwareModule(app: Application, options: EmilsoftwareOptions) {\r\n const logger: Logger = new Logger(initEmilsoftwareModule.name);\r\n if (options?.accessiOptions) {\r\n beginAccessiAuthInitialization();\r\n }\r\n\r\n try {\r\n // Isolate Nest on a dedicated Express instance and dispatch only module routes.\r\n // This keeps pre-existing routes/middlewares on the host app untouched.\r\n const nestHostApp = express();\r\n const isNestRoute = (path: string) =>\r\n path === \"/api\" ||\r\n path.startsWith(\"/api/\") ||\r\n path === \"/swagger\" ||\r\n path.startsWith(\"/swagger/\") ||\r\n path === \"/swagger-json\";\r\n\r\n app.use((req: Request, res, next) => {\r\n if (!isNestRoute(req.path)) {\r\n return next();\r\n }\r\n return nestHostApp(req, res, next);\r\n });\r\n\r\n const nestExpressInstance = new ExpressAdapter(nestHostApp);\r\n const nestApp = await NestFactory.create(EmilsoftwareModule.forRoot(options), nestExpressInstance, {\r\n bufferLogs: true\r\n });\r\n\r\n nestApp.enableCors();\r\n\r\n nestApp.setGlobalPrefix('api', {\r\n exclude: ['/swagger', '/swagger/(.*)']\r\n });\r\n\r\n // Setup unified Swagger documentation for all modules\r\n setupSwagger(nestApp);\r\n\r\n await nestApp.init();\r\n if (options?.accessiOptions) {\r\n const authService = nestApp.get(AuthenticateGenService);\r\n app.locals.accessiAuthService = authService;\r\n setAccessiAuthService(authService);\r\n }\r\n\r\n logger.info(\"Emilsoftware module initialized successfully\");\r\n\r\n } catch (error) {\r\n if (options?.accessiOptions) {\r\n failAccessiAuthInitialization(error);\r\n }\r\n logger.error(\"Error initializing Emilsoftware Module:\", error);\r\n throw error;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwaggerConfig.js","sourceRoot":"","sources":["../../src/swagger/SwaggerConfig.ts"],"names":[],"mappings":";;AAIA,oCAyBC;AA5BD,6CAAiE;AACjE,sCAAmC;AAEnC,SAAgB,YAAY,CAAC,GAAqB;;IAC9C,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,SAAS,CAAC;IAC9B,MAAM,eAAe,GAAG,GAAG,WAAW,OAAO,CAAC;IAE9C,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SAC/B,QAAQ,CAAC,mBAAmB,CAAC;SAC7B,cAAc,CAAC,kDAAkD,CAAC;SAClE,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,CAAC,EAAE,GAAG,EAAE,EAAE;QACtC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,CAAA,MAAA,MAAA,GAAG,CAAC,aAAa,EAAE,0CAAE,OAAO,0CAAE,IAAI,KAAI,IAAI,CAAC;IAEtD,MAAM,CAAC,IAAI,CACP,wDAAwD,IAAI,IAAI,WAAW,EAAE,CAChF,CAAC;AACN,CAAC","sourcesContent":["import { INestApplication } from \"@nestjs/common\";\nimport { DocumentBuilder, SwaggerModule } from \"@nestjs/swagger\";\nimport { Logger } from \"../Logger\";\n\nexport function setupSwagger(app: INestApplication) {\n const logger: Logger = new Logger(\"SwaggerConfig\");\n const swaggerPath = \"swagger\";\n const swaggerJsonPath = `${swaggerPath}-json`;\n\n const config = new DocumentBuilder()\n .setTitle(\"API Documentation\")\n .setDescription(\"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}`, (_, res) => {\n res.setHeader(\"Content-Type\", \"application/json\");\n res.send(document);\n });\n\n let port = app.getHttpServer()?.address?.port || 3000;\n\n logger.info(\n `Swagger documentation available at: http://localhost:${port}/${swaggerPath}`\n );\n} "]}
|
|
1
|
+
{"version":3,"file":"SwaggerConfig.js","sourceRoot":"","sources":["../../src/swagger/SwaggerConfig.ts"],"names":[],"mappings":";;AAIA,oCAyBC;AA5BD,6CAAiE;AACjE,sCAAmC;AAEnC,SAAgB,YAAY,CAAC,GAAqB;;IAC9C,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,SAAS,CAAC;IAC9B,MAAM,eAAe,GAAG,GAAG,WAAW,OAAO,CAAC;IAE9C,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SAC/B,QAAQ,CAAC,mBAAmB,CAAC;SAC7B,cAAc,CAAC,kDAAkD,CAAC;SAClE,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,CAAC,EAAE,GAAG,EAAE,EAAE;QACtC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,CAAA,MAAA,MAAA,GAAG,CAAC,aAAa,EAAE,0CAAE,OAAO,0CAAE,IAAI,KAAI,IAAI,CAAC;IAEtD,MAAM,CAAC,IAAI,CACP,wDAAwD,IAAI,IAAI,WAAW,EAAE,CAChF,CAAC;AACN,CAAC","sourcesContent":["import { INestApplication } from \"@nestjs/common\";\r\nimport { DocumentBuilder, SwaggerModule } from \"@nestjs/swagger\";\r\nimport { Logger } from \"../Logger\";\r\n\r\nexport function setupSwagger(app: INestApplication) {\r\n const logger: Logger = new Logger(\"SwaggerConfig\");\r\n const swaggerPath = \"swagger\";\r\n const swaggerJsonPath = `${swaggerPath}-json`;\r\n\r\n const config = new DocumentBuilder()\r\n .setTitle(\"API Documentation\")\r\n .setDescription(\"API per la gestione di accessi utenti e allegati\")\r\n .setVersion(\"1.0\")\r\n .addBearerAuth() // Per abilitare l'autenticazione JWT\r\n .build();\r\n\r\n const document = SwaggerModule.createDocument(app, config);\r\n SwaggerModule.setup(swaggerPath, app, document);\r\n\r\n app.use(`/${swaggerJsonPath}`, (_, res) => {\r\n res.setHeader(\"Content-Type\", \"application/json\");\r\n res.send(document);\r\n });\r\n\r\n let port = app.getHttpServer()?.address?.port || 3000;\r\n\r\n logger.info(\r\n `Swagger documentation available at: http://localhost:${port}/${swaggerPath}`\r\n );\r\n} "]}
|
package/package.json
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "emilsoftware-utilities",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Utilities for EmilSoftware",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"module": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"release": "semantic-release",
|
|
10
|
-
"build": "tsc && npm run copy-views",
|
|
11
|
-
"copy-views": "node copy-views.js",
|
|
12
|
-
"db:update:accessi": "ts-node src/accessi-module/database-updates/runAccessiDbUpdate.ts",
|
|
13
|
-
"db:update:accessi:dist": "npm run build && node dist/accessi-module/database-updates/runAccessiDbUpdate.js",
|
|
14
|
-
"prepublishOnly": "npm run build",
|
|
15
|
-
"test:allegati": "ts-node src/tests/allegati/allegati.ts",
|
|
16
|
-
"test:accessi": "npm run build && ts-node test/index.js"
|
|
17
|
-
},
|
|
18
|
-
"publishConfig": {
|
|
19
|
-
"access": "public"
|
|
20
|
-
},
|
|
21
|
-
"repository": {
|
|
22
|
-
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/Emil-Software/emilsoftware-utilities.git"
|
|
24
|
-
},
|
|
25
|
-
"author": "",
|
|
26
|
-
"license": "ISC",
|
|
27
|
-
"bugs": {
|
|
28
|
-
"url": "https://github.com/Emil-Software/emilsoftware-utilities/issues"
|
|
29
|
-
},
|
|
30
|
-
"homepage": "https://github.com/Emil-Software/emilsoftware-utilities#readme",
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"@nestjs/common": "^11.0.11",
|
|
33
|
-
"@nestjs/core": "^11.0.11",
|
|
34
|
-
"@nestjs/platform-express": "^11.0.11",
|
|
35
|
-
"@nestjs/swagger": "^11.0.6",
|
|
36
|
-
"axios": "^1.7.9",
|
|
37
|
-
"class-transformer": "^0.5.1",
|
|
38
|
-
"class-validator": "^0.14.1",
|
|
39
|
-
"colorette": "^2.0.20",
|
|
40
|
-
"es-node-firebird": "^1.2.9",
|
|
41
|
-
"jsonwebtoken": "^9.0.2",
|
|
42
|
-
"jspdf": "^3.0.0",
|
|
43
|
-
"jspdf-autotable": "^5.0.2",
|
|
44
|
-
"multer": "^1.4.5-lts.2",
|
|
45
|
-
"node-fetch": "^3.3.2",
|
|
46
|
-
"nodemailer": "^6.10.0",
|
|
47
|
-
"reflect-metadata": "^0.2.2",
|
|
48
|
-
"swagger-jsdoc": "^6.2.8",
|
|
49
|
-
"swagger-ui-express": "^5.0.1",
|
|
50
|
-
"uuid": "^11.0.5",
|
|
51
|
-
"winston": "^3.11.0"
|
|
52
|
-
},
|
|
53
|
-
"devDependencies": {
|
|
54
|
-
"@semantic-release/changelog": "^6.0.3",
|
|
55
|
-
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
56
|
-
"@semantic-release/git": "^10.0.1",
|
|
57
|
-
"@semantic-release/github": "^11.0.3",
|
|
58
|
-
"@semantic-release/npm": "^12.0.2",
|
|
59
|
-
"@semantic-release/release-notes-generator": "^14.0.3",
|
|
60
|
-
"@types/express": "^5.0.0",
|
|
61
|
-
"@types/jsonwebtoken": "^9.0.7",
|
|
62
|
-
"@types/multer": "^1.4.12",
|
|
63
|
-
"@types/node": "^22.13.4",
|
|
64
|
-
"@types/nodemailer": "^6.4.17",
|
|
65
|
-
"@types/reflect-metadata": "^0.0.5",
|
|
66
|
-
"@types/swagger-jsdoc": "^6.0.4",
|
|
67
|
-
"@types/swagger-ui-express": "^4.1.7",
|
|
68
|
-
"commitizen": "^4.3.1",
|
|
69
|
-
"cz-conventional-changelog": "^3.3.0",
|
|
70
|
-
"fs-extra": "^11.3.0",
|
|
71
|
-
"semantic-release": "^24.2.7",
|
|
72
|
-
"ts-node": "^10.9.2",
|
|
73
|
-
"typescript": "^5.8.3"
|
|
74
|
-
},
|
|
75
|
-
"files": [
|
|
76
|
-
"dist"
|
|
77
|
-
],
|
|
78
|
-
"config": {
|
|
79
|
-
"commitizen": {
|
|
80
|
-
"path": "./node_modules/cz-conventional-changelog"
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "emilsoftware-utilities",
|
|
3
|
+
"version": "2.0.0-dev.2",
|
|
4
|
+
"description": "Utilities for EmilSoftware",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"release": "semantic-release",
|
|
10
|
+
"build": "tsc && npm run copy-views",
|
|
11
|
+
"copy-views": "node copy-views.js",
|
|
12
|
+
"db:update:accessi": "ts-node src/accessi-module/database-updates/runAccessiDbUpdate.ts",
|
|
13
|
+
"db:update:accessi:dist": "npm run build && node dist/accessi-module/database-updates/runAccessiDbUpdate.js",
|
|
14
|
+
"prepublishOnly": "npm run build",
|
|
15
|
+
"test:allegati": "ts-node src/tests/allegati/allegati.ts",
|
|
16
|
+
"test:accessi": "npm run build && ts-node test/index.js"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/Emil-Software/emilsoftware-utilities.git"
|
|
24
|
+
},
|
|
25
|
+
"author": "",
|
|
26
|
+
"license": "ISC",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/Emil-Software/emilsoftware-utilities/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/Emil-Software/emilsoftware-utilities#readme",
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@nestjs/common": "^11.0.11",
|
|
33
|
+
"@nestjs/core": "^11.0.11",
|
|
34
|
+
"@nestjs/platform-express": "^11.0.11",
|
|
35
|
+
"@nestjs/swagger": "^11.0.6",
|
|
36
|
+
"axios": "^1.7.9",
|
|
37
|
+
"class-transformer": "^0.5.1",
|
|
38
|
+
"class-validator": "^0.14.1",
|
|
39
|
+
"colorette": "^2.0.20",
|
|
40
|
+
"es-node-firebird": "^1.2.9",
|
|
41
|
+
"jsonwebtoken": "^9.0.2",
|
|
42
|
+
"jspdf": "^3.0.0",
|
|
43
|
+
"jspdf-autotable": "^5.0.2",
|
|
44
|
+
"multer": "^1.4.5-lts.2",
|
|
45
|
+
"node-fetch": "^3.3.2",
|
|
46
|
+
"nodemailer": "^6.10.0",
|
|
47
|
+
"reflect-metadata": "^0.2.2",
|
|
48
|
+
"swagger-jsdoc": "^6.2.8",
|
|
49
|
+
"swagger-ui-express": "^5.0.1",
|
|
50
|
+
"uuid": "^11.0.5",
|
|
51
|
+
"winston": "^3.11.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
55
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
56
|
+
"@semantic-release/git": "^10.0.1",
|
|
57
|
+
"@semantic-release/github": "^11.0.3",
|
|
58
|
+
"@semantic-release/npm": "^12.0.2",
|
|
59
|
+
"@semantic-release/release-notes-generator": "^14.0.3",
|
|
60
|
+
"@types/express": "^5.0.0",
|
|
61
|
+
"@types/jsonwebtoken": "^9.0.7",
|
|
62
|
+
"@types/multer": "^1.4.12",
|
|
63
|
+
"@types/node": "^22.13.4",
|
|
64
|
+
"@types/nodemailer": "^6.4.17",
|
|
65
|
+
"@types/reflect-metadata": "^0.0.5",
|
|
66
|
+
"@types/swagger-jsdoc": "^6.0.4",
|
|
67
|
+
"@types/swagger-ui-express": "^4.1.7",
|
|
68
|
+
"commitizen": "^4.3.1",
|
|
69
|
+
"cz-conventional-changelog": "^3.3.0",
|
|
70
|
+
"fs-extra": "^11.3.0",
|
|
71
|
+
"semantic-release": "^24.2.7",
|
|
72
|
+
"ts-node": "^10.9.2",
|
|
73
|
+
"typescript": "^5.8.3"
|
|
74
|
+
},
|
|
75
|
+
"files": [
|
|
76
|
+
"dist"
|
|
77
|
+
],
|
|
78
|
+
"config": {
|
|
79
|
+
"commitizen": {
|
|
80
|
+
"path": "./node_modules/cz-conventional-changelog"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
Binary file
|