emilsoftware-utilities 2.0.0-dev.23 → 2.0.0-dev.24

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.
Files changed (297) hide show
  1. package/README.MD +182 -38
  2. package/dist/ContractGenerator.d.ts +4 -3
  3. package/dist/ContractGenerator.js +15 -5
  4. package/dist/ContractGenerator.js.map +1 -1
  5. package/dist/DailyFileTransport.d.ts +8 -2
  6. package/dist/DailyFileTransport.js +9 -2
  7. package/dist/DailyFileTransport.js.map +1 -1
  8. package/dist/DatabaseUpdater.js +32 -27
  9. package/dist/DatabaseUpdater.js.map +1 -1
  10. package/dist/EmilsoftwareModule.js.map +1 -1
  11. package/dist/ExecutionTimeLogger.d.ts +2 -2
  12. package/dist/ExecutionTimeLogger.js +3 -2
  13. package/dist/ExecutionTimeLogger.js.map +1 -1
  14. package/dist/Logger.d.ts +22 -9
  15. package/dist/Logger.js +131 -54
  16. package/dist/Logger.js.map +1 -1
  17. package/dist/Orm.d.ts +26 -6
  18. package/dist/Orm.js +144 -40
  19. package/dist/Orm.js.map +1 -1
  20. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  21. package/dist/Utilities.d.ts +12 -7
  22. package/dist/Utilities.js +57 -22
  23. package/dist/Utilities.js.map +1 -1
  24. package/dist/accessi-module/AccessiModule.d.ts +9 -0
  25. package/dist/accessi-module/AccessiModule.js +12 -4
  26. package/dist/accessi-module/AccessiModule.js.map +1 -1
  27. package/dist/accessi-module/Console/console.css +529 -281
  28. package/dist/accessi-module/Console/console.js +2081 -85
  29. package/dist/accessi-module/Console/console.js.map +1 -1
  30. package/dist/accessi-module/Console/generated/accessiApi.d.ts +167 -1
  31. package/dist/accessi-module/Console/generated/accessiApi.js +156 -2
  32. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
  33. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +20 -8
  34. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -1
  35. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +12 -0
  36. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +9 -0
  37. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +1 -0
  38. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +12 -0
  39. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +9 -0
  40. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +1 -0
  41. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +12 -0
  42. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +9 -0
  43. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +1 -0
  44. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +12 -0
  45. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +9 -0
  46. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +1 -0
  47. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  48. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  49. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  50. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  51. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  52. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  53. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
  54. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  55. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  56. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  57. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  58. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  59. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  60. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  61. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  62. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  63. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  64. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  65. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  66. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  67. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  68. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  69. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  70. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  71. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  72. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  73. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  74. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  75. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  76. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  77. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +8 -0
  78. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -1
  79. package/dist/accessi-module/Console/generated/model/index.d.ts +18 -0
  80. package/dist/accessi-module/Console/generated/model/index.js +18 -0
  81. package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
  82. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  83. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  84. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  85. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  86. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  87. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  88. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +13 -0
  89. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +9 -0
  90. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +1 -0
  91. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +13 -0
  92. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +9 -0
  93. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +1 -0
  94. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  95. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  96. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  97. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  98. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  99. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  100. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  101. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  102. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  103. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
  104. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  105. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  106. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  107. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  108. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  109. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  110. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  111. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  112. package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +13 -0
  113. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +9 -0
  114. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +1 -0
  115. package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +13 -0
  116. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +9 -0
  117. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +1 -0
  118. package/dist/accessi-module/Console/help.d.ts +13 -0
  119. package/dist/accessi-module/Console/help.js +348 -0
  120. package/dist/accessi-module/Console/help.js.map +1 -0
  121. package/dist/accessi-module/Console/index.html +89 -21
  122. package/dist/accessi-module/Console/openApiClient.d.ts +34 -0
  123. package/dist/accessi-module/Console/openApiClient.js +111 -0
  124. package/dist/accessi-module/Console/openApiClient.js.map +1 -0
  125. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  126. package/dist/accessi-module/Console/wiki.js +689 -0
  127. package/dist/accessi-module/Console/wiki.js.map +1 -0
  128. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +8 -1
  129. package/dist/accessi-module/Controllers/AccessiConsoleController.js +52 -15
  130. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -1
  131. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
  132. package/dist/accessi-module/Controllers/ConfiguratorController.js +6 -8
  133. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  134. package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
  135. package/dist/accessi-module/Controllers/EmailController.js +1 -1
  136. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  137. package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
  138. package/dist/accessi-module/Controllers/FiltriController.js +92 -4
  139. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  140. package/dist/accessi-module/Controllers/PermissionController.d.ts +11 -0
  141. package/dist/accessi-module/Controllers/PermissionController.js +273 -8
  142. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  143. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  144. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  145. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  146. package/dist/accessi-module/Controllers/UserController.d.ts +2 -2
  147. package/dist/accessi-module/Controllers/UserController.js +25 -9
  148. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  149. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  150. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  151. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  152. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  153. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  154. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
  155. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  156. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
  157. package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
  158. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  159. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
  160. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  161. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  162. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  163. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  164. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  165. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
  166. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
  167. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  168. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  169. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  170. package/dist/accessi-module/Dtos/LoginResponse.d.ts +1 -1
  171. package/dist/accessi-module/Dtos/LoginResponse.js +1 -1
  172. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  173. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  174. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  175. package/dist/accessi-module/Dtos/RegisterRequest.js +2 -1
  176. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  177. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  178. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  179. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  180. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
  181. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  182. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  183. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  184. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  185. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  186. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  187. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  188. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  189. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -1
  190. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  191. package/dist/accessi-module/Dtos/UserDto.js +4 -2
  192. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  193. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  194. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
  195. package/dist/accessi-module/Dtos/index.d.ts +2 -0
  196. package/dist/accessi-module/Dtos/index.js +2 -0
  197. package/dist/accessi-module/Dtos/index.js.map +1 -1
  198. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +2 -2
  199. package/dist/accessi-module/Services/AuthService/AuthService.js +36 -36
  200. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  201. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  202. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +2 -1
  203. package/dist/accessi-module/Services/EmailService/EmailService.js +20 -17
  204. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  205. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +10 -3
  206. package/dist/accessi-module/Services/FiltriService/FiltriService.js +64 -6
  207. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  208. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +44 -1
  209. package/dist/accessi-module/Services/PermissionService/PermissionService.js +508 -200
  210. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  211. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  212. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  213. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  214. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +23 -27
  215. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -1
  216. package/dist/accessi-module/Services/UserService/UserService.d.ts +10 -3
  217. package/dist/accessi-module/Services/UserService/UserService.js +241 -155
  218. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  219. package/dist/accessi-module/Views/reset-password.html +213 -213
  220. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +8 -0
  221. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +89 -55
  222. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  223. package/dist/accessi-module/database-updates/accessiSchema.d.ts +1 -1
  224. package/dist/accessi-module/database-updates/accessiSchema.js +9 -1
  225. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
  226. package/dist/accessi-module/database-updates/optionalColumns.d.ts +2 -0
  227. package/dist/accessi-module/database-updates/optionalColumns.js +33 -1
  228. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -1
  229. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +7 -2
  230. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  231. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +1 -0
  232. package/dist/accessi-module/federated-auth/FederatedAuthController.js +26 -0
  233. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -1
  234. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +6 -0
  235. package/dist/accessi-module/federated-auth/FederatedAuthService.js +28 -1
  236. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -1
  237. package/dist/accessi-module/index.d.ts +4 -1
  238. package/dist/accessi-module/index.js +8 -2
  239. package/dist/accessi-module/index.js.map +1 -1
  240. package/dist/accessi-module/jwt/jwt.strategy.js +8 -5
  241. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  242. package/dist/accessi-module/middleware/accessiRequirements.d.ts +1 -1
  243. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  244. package/dist/accessi-module/middleware/authenticateGen.js +11 -7
  245. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  246. package/dist/accessi-module/security/accessControl.js +8 -3
  247. package/dist/accessi-module/security/accessControl.js.map +1 -1
  248. package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
  249. package/dist/accessi-module/security/authenticatedToken.js +2 -1
  250. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  251. package/dist/accessi-module/security/passwordResetToken.d.ts +9 -3
  252. package/dist/accessi-module/security/passwordResetToken.js +9 -5
  253. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  254. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +1 -1
  255. package/dist/accessi-module/security/publicAuthRateLimit.js +28 -8
  256. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  257. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  258. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  259. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  260. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  261. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  262. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  263. package/dist/allegati-module/AllegatiModule.d.ts +11 -0
  264. package/dist/allegati-module/AllegatiModule.js +11 -1
  265. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  266. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  267. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  268. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  269. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  270. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  271. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  272. package/dist/allegati-module/Dtos/index.js.map +1 -1
  273. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  274. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  275. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  276. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  277. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  278. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  279. package/dist/allegati-module/index.js.map +1 -1
  280. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  281. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  282. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  283. package/dist/autobind.d.ts +10 -3
  284. package/dist/autobind.js +24 -9
  285. package/dist/autobind.js.map +1 -1
  286. package/dist/firebird-compat.d.ts +13 -0
  287. package/dist/firebird-compat.js +3 -2
  288. package/dist/firebird-compat.js.map +1 -1
  289. package/dist/index.js.map +1 -1
  290. package/dist/initEmilsoftwareModule.js.map +1 -1
  291. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  292. package/dist/scripts/generateAccessiWiki.js +131 -0
  293. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  294. package/dist/swagger/SwaggerConfig.js +6 -3
  295. package/dist/swagger/SwaggerConfig.js.map +1 -1
  296. package/package.json +103 -92
  297. package/dist/emilsoftware-utilities-2.0.0-dev.23.tgz +0 -0
@@ -20,6 +20,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
20
  step((generator = generator.apply(thisArg, _arguments || [])).next());
21
21
  });
22
22
  };
23
+ var __rest = (this && this.__rest) || function (s, e) {
24
+ var t = {};
25
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
26
+ t[p] = s[p];
27
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
28
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
29
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
30
+ t[p[i]] = s[p[i]];
31
+ }
32
+ return t;
33
+ };
23
34
  Object.defineProperty(exports, "__esModule", { value: true });
24
35
  exports.UserService = void 0;
25
36
  const common_1 = require("@nestjs/common");
@@ -33,9 +44,8 @@ const EmailService_1 = require("../EmailService/EmailService");
33
44
  const FiltriService_1 = require("../FiltriService/FiltriService");
34
45
  const PermissionService_1 = require("../PermissionService/PermissionService");
35
46
  let UserService = class UserService {
36
- constructor(accessiOptions, emailService, permissionService, filtriService) {
47
+ constructor(accessiOptions, _emailService, permissionService, filtriService) {
37
48
  this.accessiOptions = accessiOptions;
38
- this.emailService = emailService;
39
49
  this.permissionService = permissionService;
40
50
  this.filtriService = filtriService;
41
51
  }
@@ -89,7 +99,7 @@ let UserService = class UserService {
89
99
  }
90
100
  const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;
91
101
  const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);
92
- if (!result || result === 0) {
102
+ if (result.length === 0) {
93
103
  return false;
94
104
  }
95
105
  const mapped = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
@@ -105,19 +115,19 @@ let UserService = class UserService {
105
115
  if (!codiceUtente || codiceUtente <= 0) {
106
116
  return null;
107
117
  }
108
- const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `
109
- SELECT
110
- U.CODUTE AS codice_utente,
111
- U.USRNAME AS email,
112
- U.STAREG AS stato_registrazione,
113
- C.FLGSUPER AS flag_super,
114
- C.FLGADMINCONFIG AS flag_admin_configurator
115
- , C.FLG2FATT AS flag_due_fattori
116
- , C.FLGPWDLESS AS passwordless_login_enabled
117
- , COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled
118
- FROM UTENTI U
119
- LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
120
- WHERE U.CODUTE = ?
118
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `
119
+ SELECT
120
+ U.CODUTE AS codice_utente,
121
+ U.USRNAME AS email,
122
+ U.STAREG AS stato_registrazione,
123
+ C.FLGSUPER AS flag_super,
124
+ C.FLGADMINCONFIG AS flag_admin_configurator
125
+ , C.FLG2FATT AS flag_due_fattori
126
+ , C.FLGPWDLESS AS passwordless_login_enabled
127
+ , COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled
128
+ FROM UTENTI U
129
+ LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
130
+ WHERE U.CODUTE = ?
121
131
  `, [codiceUtente]);
122
132
  const user = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
123
133
  if (!(user === null || user === void 0 ? void 0 : user.codiceUtente)) {
@@ -141,45 +151,54 @@ let UserService = class UserService {
141
151
  */
142
152
  getUsers(filters, options) {
143
153
  return __awaiter(this, void 0, void 0, function* () {
154
+ var _a, _b, _c, _d, _e;
144
155
  try {
145
156
  const configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
146
157
  const filterColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI');
147
- let query = `
148
- SELECT
149
- U.CODUTE as codice_utente,
150
- U.USRNAME as email,
151
- U.FLGGDPR as flag_gdpr,
152
- U.DATGDPR as data_gdpr,
153
- U.DATINS as data_inserimento,
154
- U.DATSCAPWD as data_scadenza_password,
155
- U.DATLASTLOGIN as data_last_login,
156
- U.STAREG as stato_registrazione,
157
- G.COGNOME as cognome,
158
- G.NOME as nome,
159
- G.AVATAR as avatar,
160
- G.FLG2FATT as flag_due_fattori,
161
- G.FLGPWDLESS as passwordless_login_enabled,
162
- G.CODLINGUA as codice_lingua,
163
- G.CELLULARE as cellulare,
164
- G.FLGSUPER as flag_super,
165
- G.FLGADMINCONFIG as flag_admin_configurator,
166
- COALESCE(G.FLGPASSWORD, 1) as password_login_enabled,
167
- G.PAGDEF as pagina_default,
168
- G.JSON_METADATA as json_metadata,
169
- ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'G', 'rag_soc_cli', false)},
170
- ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'G', 'nummac')},
171
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'NUMREP', 'F', 'num_rep', true)},
172
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPERS', 'F', 'idx_pers', true)},
173
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLISUPER', 'F', 'cod_cli_super', true)},
174
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODAGE', 'F', 'cod_age', true)},
175
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLICOL', 'F', 'cod_cli_col', true)},
176
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLIENTI', 'F', 'cod_clienti', false)},
177
- F.TIPFIL AS tip_fil,
178
- ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPOS', 'F', 'idx_postazione', true)}
179
- FROM UTENTI U
180
- INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
181
- LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
182
- WHERE 1=1
158
+ // Paginazione opzionale con limiti sani: il default resta "tutti gli utenti".
159
+ const limit = Number.isInteger(filters === null || filters === void 0 ? void 0 : filters.limit) && ((_a = filters === null || filters === void 0 ? void 0 : filters.limit) !== null && _a !== void 0 ? _a : 0) > 0
160
+ ? Math.min(filters === null || filters === void 0 ? void 0 : filters.limit, 1000)
161
+ : undefined;
162
+ const offset = Number.isInteger(filters === null || filters === void 0 ? void 0 : filters.offset) && ((_b = filters === null || filters === void 0 ? void 0 : filters.offset) !== null && _b !== void 0 ? _b : 0) > 0
163
+ ? Math.trunc(filters === null || filters === void 0 ? void 0 : filters.offset)
164
+ : 0;
165
+ const pagination = `${limit !== undefined ? ` FIRST ${limit}` : ''}${offset > 0 ? ` SKIP ${offset}` : ''}`;
166
+ let query = `
167
+ SELECT${pagination}
168
+ U.CODUTE as codice_utente,
169
+ U.USRNAME as email,
170
+ U.FLGGDPR as flag_gdpr,
171
+ U.DATGDPR as data_gdpr,
172
+ U.DATINS as data_inserimento,
173
+ U.DATSCAPWD as data_scadenza_password,
174
+ U.DATLASTLOGIN as data_last_login,
175
+ U.STAREG as stato_registrazione,
176
+ G.COGNOME as cognome,
177
+ G.NOME as nome,
178
+ G.AVATAR as avatar,
179
+ G.FLG2FATT as flag_due_fattori,
180
+ G.FLGPWDLESS as passwordless_login_enabled,
181
+ G.CODLINGUA as codice_lingua,
182
+ G.CELLULARE as cellulare,
183
+ G.FLGSUPER as flag_super,
184
+ G.FLGADMINCONFIG as flag_admin_configurator,
185
+ COALESCE(G.FLGPASSWORD, 1) as password_login_enabled,
186
+ G.PAGDEF as pagina_default,
187
+ G.JSON_METADATA as json_metadata,
188
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'G', 'rag_soc_cli', false)},
189
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'G', 'nummac')},
190
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'NUMREP', 'F', 'num_rep', true)},
191
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPERS', 'F', 'idx_pers', true)},
192
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLISUPER', 'F', 'cod_cli_super', true)},
193
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODAGE', 'F', 'cod_age', true)},
194
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLICOL', 'F', 'cod_cli_col', true)},
195
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLIENTI', 'F', 'cod_clienti', false)},
196
+ F.TIPFIL AS tip_fil,
197
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPOS', 'F', 'idx_postazione', true)}
198
+ FROM UTENTI U
199
+ INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
200
+ LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
201
+ WHERE 1=1
183
202
  `;
184
203
  const queryParams = [];
185
204
  if (filters === null || filters === void 0 ? void 0 : filters.email) {
@@ -194,19 +213,25 @@ let UserService = class UserService {
194
213
  let users = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, queryParams));
195
214
  users = users.map(Utilities_1.RestUtilities.convertKeysToCamelCase).map(user => this.normalizeUserFlags(user));
196
215
  const usersResponse = [];
216
+ // I campi estensione sono caricati una volta per tabella (non una per utente) in query IN
217
+ // suddivise in blocchi per non superare i limiti di parametri del driver.
218
+ const extensionFieldsByUser = (options === null || options === void 0 ? void 0 : options.includeExtensionFields)
219
+ ? yield this.loadExtensionFieldsForUsers(users.map((user) => user.codiceUtente))
220
+ : undefined;
221
+ // I grant sono caricati in batch (query IN) invece che utente per utente.
222
+ const grantsByUser = (options === null || options === void 0 ? void 0 : options.includeGrants)
223
+ ? yield this.permissionService.getUsersRolesAndGrants(users.map((user) => user.codiceUtente))
224
+ : undefined;
197
225
  for (const user of users) {
198
226
  let userGrants;
199
227
  if (options === null || options === void 0 ? void 0 : options.includeGrants) {
200
- userGrants = yield this.permissionService.getUserRolesAndGrants(user.codiceUtente);
228
+ userGrants = grantsByUser === null || grantsByUser === void 0 ? void 0 : grantsByUser.get(user.codiceUtente);
201
229
  }
202
230
  let extensionFields;
203
231
  if (options === null || options === void 0 ? void 0 : options.includeExtensionFields) {
204
232
  extensionFields = {};
205
- }
206
- if (extensionFields && this.accessiOptions.extensionFieldsOptions) {
207
- for (const ext of this.accessiOptions.extensionFieldsOptions) {
208
- const values = (yield Orm_1.Orm.query(ext.databaseOptions, `SELECT ${ext.tableFields.join(',')} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} = ?`, [user.codiceUtente])).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
209
- extensionFields[ext.objectKey] = values;
233
+ for (const ext of (_c = this.accessiOptions.extensionFieldsOptions) !== null && _c !== void 0 ? _c : []) {
234
+ extensionFields[ext.objectKey] = (_e = (_d = extensionFieldsByUser === null || extensionFieldsByUser === void 0 ? void 0 : extensionFieldsByUser.get(ext.objectKey)) === null || _d === void 0 ? void 0 : _d.get(user.codiceUtente)) !== null && _e !== void 0 ? _e : [];
210
235
  }
211
236
  }
212
237
  usersResponse.push({
@@ -222,6 +247,67 @@ let UserService = class UserService {
222
247
  }
223
248
  });
224
249
  }
250
+ /** Conteggio utenti con gli stessi filtri di `getUsers`, per la paginazione (header X-Total-Count). */
251
+ countUsers(filters) {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ var _a, _b;
254
+ const conditions = [];
255
+ const params = [];
256
+ if (filters === null || filters === void 0 ? void 0 : filters.email) {
257
+ conditions.push('LOWER(U.USRNAME) = ?');
258
+ params.push(filters.email.trim().toLowerCase());
259
+ }
260
+ if (filters === null || filters === void 0 ? void 0 : filters.codiceUtente) {
261
+ conditions.push('U.CODUTE = ?');
262
+ params.push(filters.codiceUtente);
263
+ }
264
+ const query = `SELECT COUNT(*) AS TOTAL FROM UTENTI U INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE WHERE 1=1 ${conditions.map((condition) => `AND ${condition}`).join(' ')}`;
265
+ const rows = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, params, false));
266
+ const row = rows[0];
267
+ return Number((_b = (_a = row === null || row === void 0 ? void 0 : row.TOTAL) !== null && _a !== void 0 ? _a : row === null || row === void 0 ? void 0 : row.total) !== null && _b !== void 0 ? _b : 0) || 0;
268
+ });
269
+ }
270
+ loadExtensionFieldsForUsers(codiceUtenti) {
271
+ return __awaiter(this, void 0, void 0, function* () {
272
+ var _a;
273
+ const byObjectKey = new Map();
274
+ const extensions = (_a = this.accessiOptions.extensionFieldsOptions) !== null && _a !== void 0 ? _a : [];
275
+ const uniqueCodes = Array.from(new Set(codiceUtenti));
276
+ for (const ext of extensions) {
277
+ const grouped = new Map();
278
+ for (const chunk of this.chunkArray(uniqueCodes, 500)) {
279
+ if (chunk.length === 0) {
280
+ continue;
281
+ }
282
+ const placeholders = chunk.map(() => '?').join(', ');
283
+ const rows = (yield Orm_1.Orm.query(ext.databaseOptions, `SELECT ${ext.tableJoinFieldName} AS __joinkey, ${ext.tableFields.join(', ')} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} IN (${placeholders})`, chunk)).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
284
+ for (const row of rows) {
285
+ const { __joinkey } = row, rest = __rest(row, ["__joinkey"]);
286
+ const key = Number(__joinkey);
287
+ if (!Number.isFinite(key)) {
288
+ continue;
289
+ }
290
+ const bucket = grouped.get(key);
291
+ if (bucket) {
292
+ bucket.push(rest);
293
+ }
294
+ else {
295
+ grouped.set(key, [rest]);
296
+ }
297
+ }
298
+ }
299
+ byObjectKey.set(ext.objectKey, grouped);
300
+ }
301
+ return byObjectKey;
302
+ });
303
+ }
304
+ chunkArray(items, size) {
305
+ const chunks = [];
306
+ for (let index = 0; index < items.length; index += size) {
307
+ chunks.push(items.slice(index, index + size));
308
+ }
309
+ return chunks;
310
+ }
225
311
  /** Cerca il codice interno per email normalizzata. Il chiamante deve gestire il caso senza righe. */
226
312
  getCodiceUtenteByEmail(email) {
227
313
  return __awaiter(this, void 0, void 0, function* () {
@@ -241,37 +327,36 @@ let UserService = class UserService {
241
327
  getUserByEmail(email) {
242
328
  return __awaiter(this, void 0, void 0, function* () {
243
329
  const configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
244
- const query = `
245
- SELECT
246
- U.CODUTE AS codice_utente,
247
- U.USRNAME AS email,
248
- U.FLGGDPR AS flag_gdpr,
249
- U.DATSCAPWD as data_scadenza_password,
250
- U.STAREG AS stato_registrazione,
251
- C.COGNOME AS cognome,
252
- C.NOME AS nome,
253
- C.AVATAR AS avatar,
254
- C.FLG2FATT AS flag_due_fattori,
255
- C.FLGPWDLESS AS passwordless_login_enabled,
256
- C.CODLINGUA AS codice_lingua,
257
- C.CELLULARE AS cellulare,
258
- C.FLGSUPER AS flag_super,
259
- C.FLGADMINCONFIG AS flag_admin_configurator,
260
- COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled,
261
- C.PAGDEF AS pagina_default,
262
- ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'C', 'nummac')},
263
- ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'C', 'rag_soc_cli', false)}
264
- FROM UTENTI U
265
- INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
266
- WHERE LOWER(U.USRNAME) = ?
330
+ const query = `
331
+ SELECT
332
+ U.CODUTE AS codice_utente,
333
+ U.USRNAME AS email,
334
+ U.FLGGDPR AS flag_gdpr,
335
+ U.DATSCAPWD as data_scadenza_password,
336
+ U.STAREG AS stato_registrazione,
337
+ C.COGNOME AS cognome,
338
+ C.NOME AS nome,
339
+ C.AVATAR AS avatar,
340
+ C.FLG2FATT AS flag_due_fattori,
341
+ C.FLGPWDLESS AS passwordless_login_enabled,
342
+ C.CODLINGUA AS codice_lingua,
343
+ C.CELLULARE AS cellulare,
344
+ C.FLGSUPER AS flag_super,
345
+ C.FLGADMINCONFIG AS flag_admin_configurator,
346
+ COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled,
347
+ C.PAGDEF AS pagina_default,
348
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'C', 'nummac')},
349
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'C', 'rag_soc_cli', false)}
350
+ FROM UTENTI U
351
+ INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
352
+ WHERE LOWER(U.USRNAME) = ?
267
353
  `;
268
354
  const utenti = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [email]).then((results) => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase)));
269
- if (utenti.length <= 0)
355
+ const user = utenti[0];
356
+ if (!user)
270
357
  return null;
271
- const filtriUtente = yield this.filtriService.getFiltriUser(utenti[0].codiceUtente);
272
- if (utenti.length > 0 && filtriUtente.length > 0) {
273
- const user = utenti[0];
274
- const filtro = filtriUtente[0];
358
+ const filtro = (yield this.filtriService.getFiltriUser(user.codiceUtente))[0];
359
+ if (filtro) {
275
360
  const filterValues = {};
276
361
  Object.entries(FiltriUtente_1.FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {
277
362
  if (key in filtro) {
@@ -280,7 +365,7 @@ let UserService = class UserService {
280
365
  });
281
366
  Object.assign(user, filterValues);
282
367
  }
283
- return utenti.length > 0 ? this.normalizeUserFlags(utenti[0]) : null;
368
+ return this.normalizeUserFlags(user);
284
369
  });
285
370
  }
286
371
  insertUserFilters(codiceUtente, filterData) {
@@ -288,18 +373,13 @@ let UserService = class UserService {
288
373
  yield this.filtriService.upsertFiltriUtente(codiceUtente, filterData);
289
374
  });
290
375
  }
291
- executeInTransaction(operation) {
292
- return __awaiter(this, void 0, void 0, function* () {
293
- yield operation();
294
- });
295
- }
296
376
  /**
297
377
  * Crea utente, configurazione e filtri. La registrazione pubblica resta in stato `INVIO` e non puo
298
378
  * impostare privilegi, ruoli o grant; soltanto flussi backend fidati possono usare `allowPrivilegedFields`.
299
379
  */
300
380
  register(registrationData, options) {
301
381
  return __awaiter(this, void 0, void 0, function* () {
302
- var _a, _b, _c, _d;
382
+ var _a;
303
383
  try {
304
384
  const allowPrivilegedFields = (options === null || options === void 0 ? void 0 : options.allowPrivilegedFields) === true;
305
385
  const normalizedEmail = this.normalizeEmail(registrationData.email);
@@ -319,71 +399,77 @@ let UserService = class UserService {
319
399
  }
320
400
  yield this.validateApplicationFields(registrationData);
321
401
  yield this.ensureEmailIsAvailable(normalizedEmail);
322
- const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;
402
+ const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?) RETURNING CODUTE`;
323
403
  // Public/local registrations keep the historic INVIO state; trusted master or SSO flows may opt into CONF.
324
404
  const paramsUtenti = [normalizedEmail, (_a = options === null || options === void 0 ? void 0 : options.initialState) !== null && _a !== void 0 ? _a : StatoRegistrazione_1.StatoRegistrazione.INVIO];
325
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);
326
- const codiceUtenteResult = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC', [normalizedEmail]);
327
- const codiceUtente = Number((_c = (_b = codiceUtenteResult === null || codiceUtenteResult === void 0 ? void 0 : codiceUtenteResult[0]) === null || _b === void 0 ? void 0 : _b.CODUTE) !== null && _c !== void 0 ? _c : (_d = codiceUtenteResult === null || codiceUtenteResult === void 0 ? void 0 : codiceUtenteResult[0]) === null || _d === void 0 ? void 0 : _d.codute);
328
- if (!codiceUtente) {
329
- throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');
330
- }
331
- const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];
332
- const utentiConfigPlaceholders = ['?', '?', '?'];
333
- const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];
334
- const optionalFields = [
335
- {
336
- key: 'cellulare',
337
- dbField: 'CELLULARE',
338
- transform: (v) => String(v),
339
- },
340
- {
341
- key: 'avatar',
342
- dbField: 'AVATAR',
343
- transform: (v) => String(v),
344
- },
345
- {
346
- key: 'flagDueFattori',
347
- dbField: 'FLG2FATT',
348
- transform: (v) => (v ? 1 : 0),
349
- },
350
- {
351
- key: 'paginaDefault',
352
- dbField: 'PAGDEF',
353
- transform: (v) => String(v),
354
- },
355
- {
356
- key: 'nummac',
357
- dbField: 'NUMMAC',
358
- transform: (v) => Number(v),
359
- },
360
- {
361
- key: 'ragSocCli',
362
- dbField: 'RAGSOCCLI',
363
- transform: (v) => String(v),
364
- },
365
- ];
366
- if (allowPrivilegedFields) {
367
- optionalFields.push({
368
- key: 'flagSuper',
369
- dbField: 'FLGSUPER',
370
- transform: (v) => (v ? 1 : 0),
371
- }, {
372
- key: 'flagAdminConfigurator',
373
- dbField: 'FLGADMINCONFIG',
374
- transform: (v) => (v ? 1 : 0),
375
- });
376
- }
377
- for (const field of optionalFields) {
378
- const value = registrationData[field.key];
379
- if (value !== undefined && value !== null) {
380
- utentiConfigFields.push(field.dbField);
381
- utentiConfigPlaceholders.push('?');
382
- utentiConfigParams.push(field.transform ? field.transform(value) : value);
405
+ // Utente e configurazione sono creati in un'unica transazione; filtri e assegnazioni restano
406
+ // fuori perché delegati a servizi dedicati.
407
+ const codiceUtente = yield Orm_1.Orm.withTransaction(this.accessiOptions.databaseOptions, (transaction) => __awaiter(this, void 0, void 0, function* () {
408
+ var _a;
409
+ const insertedUsers = yield Orm_1.Orm.transactionQuery(transaction, queryUtenti, paramsUtenti);
410
+ const insertedUser = (Array.isArray(insertedUsers) ? insertedUsers[0] : insertedUsers);
411
+ const newCodiceUtente = Number((_a = insertedUser === null || insertedUser === void 0 ? void 0 : insertedUser.CODUTE) !== null && _a !== void 0 ? _a : insertedUser === null || insertedUser === void 0 ? void 0 : insertedUser.codute);
412
+ if (!newCodiceUtente) {
413
+ throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');
383
414
  }
384
- }
385
- const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
386
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
415
+ const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];
416
+ const utentiConfigPlaceholders = ['?', '?', '?'];
417
+ const utentiConfigParams = [newCodiceUtente, registrationData.cognome, registrationData.nome];
418
+ const optionalFields = [
419
+ {
420
+ key: 'cellulare',
421
+ dbField: 'CELLULARE',
422
+ transform: (v) => String(v),
423
+ },
424
+ {
425
+ key: 'avatar',
426
+ dbField: 'AVATAR',
427
+ transform: (v) => String(v),
428
+ },
429
+ {
430
+ key: 'flagDueFattori',
431
+ dbField: 'FLG2FATT',
432
+ transform: (v) => (v ? 1 : 0),
433
+ },
434
+ {
435
+ key: 'paginaDefault',
436
+ dbField: 'PAGDEF',
437
+ transform: (v) => String(v),
438
+ },
439
+ {
440
+ key: 'nummac',
441
+ dbField: 'NUMMAC',
442
+ transform: (v) => Number(v),
443
+ },
444
+ {
445
+ key: 'ragSocCli',
446
+ dbField: 'RAGSOCCLI',
447
+ transform: (v) => String(v),
448
+ },
449
+ ];
450
+ if (allowPrivilegedFields) {
451
+ optionalFields.push({
452
+ key: 'flagSuper',
453
+ dbField: 'FLGSUPER',
454
+ transform: (v) => (v ? 1 : 0),
455
+ }, {
456
+ key: 'flagAdminConfigurator',
457
+ dbField: 'FLGADMINCONFIG',
458
+ transform: (v) => (v ? 1 : 0),
459
+ });
460
+ }
461
+ for (const field of optionalFields) {
462
+ const value = registrationData[field.key];
463
+ if (value !== undefined && value !== null) {
464
+ utentiConfigFields.push(field.dbField);
465
+ utentiConfigPlaceholders.push('?');
466
+ utentiConfigParams.push(field.transform ? field.transform(value) : value);
467
+ }
468
+ }
469
+ const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
470
+ yield Orm_1.Orm.transactionQuery(transaction, queryUtentiConfig, utentiConfigParams);
471
+ return newCodiceUtente;
472
+ }));
387
473
  yield this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);
388
474
  if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {
389
475
  yield this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);