emilsoftware-utilities 2.0.0-dev.22 → 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 (550) 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 +21 -0
  6. package/dist/DailyFileTransport.js +74 -0
  7. package/dist/DailyFileTransport.js.map +1 -0
  8. package/dist/DatabaseUpdater.js +32 -29
  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 +5 -4
  13. package/dist/ExecutionTimeLogger.js.map +1 -1
  14. package/dist/Logger.d.ts +22 -11
  15. package/dist/Logger.js +132 -119
  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 +18 -8
  22. package/dist/Utilities.js +115 -35
  23. package/dist/Utilities.js.map +1 -1
  24. package/dist/accessi-module/AccessiModule.d.ts +69 -0
  25. package/dist/accessi-module/AccessiModule.js +29 -5
  26. package/dist/accessi-module/AccessiModule.js.map +1 -1
  27. package/dist/accessi-module/Console/accessiFetch.d.ts +7 -0
  28. package/dist/accessi-module/Console/accessiFetch.js +59 -0
  29. package/dist/accessi-module/Console/accessiFetch.js.map +1 -0
  30. package/dist/accessi-module/Console/console.css +618 -0
  31. package/dist/accessi-module/Console/console.d.ts +1 -0
  32. package/dist/accessi-module/Console/console.js +3101 -0
  33. package/dist/accessi-module/Console/console.js.map +1 -0
  34. package/dist/accessi-module/Console/generated/accessiApi.d.ts +542 -0
  35. package/dist/accessi-module/Console/generated/accessiApi.js +517 -0
  36. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -0
  37. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +39 -0
  38. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js +3 -0
  39. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -0
  40. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +12 -0
  41. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +9 -0
  42. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +1 -0
  43. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +12 -0
  44. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +9 -0
  45. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +1 -0
  46. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +12 -0
  47. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +9 -0
  48. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +1 -0
  49. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +12 -0
  50. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +9 -0
  51. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +1 -0
  52. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.d.ts +16 -0
  53. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js +17 -0
  54. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js.map +1 -0
  55. package/dist/accessi-module/Console/generated/model/actionResponse.d.ts +12 -0
  56. package/dist/accessi-module/Console/generated/model/actionResponse.js +9 -0
  57. package/dist/accessi-module/Console/generated/model/actionResponse.js.map +1 -0
  58. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.d.ts +11 -0
  59. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js +3 -0
  60. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js.map +1 -0
  61. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.d.ts +10 -0
  62. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js +9 -0
  63. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js.map +1 -0
  64. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.d.ts +10 -0
  65. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js +3 -0
  66. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js.map +1 -0
  67. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +19 -0
  68. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js +9 -0
  69. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -0
  70. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.d.ts +14 -0
  71. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js +9 -0
  72. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js.map +1 -0
  73. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.d.ts +13 -0
  74. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js +9 -0
  75. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js.map +1 -0
  76. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.d.ts +13 -0
  77. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js +9 -0
  78. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js.map +1 -0
  79. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.d.ts +18 -0
  80. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js +3 -0
  81. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js.map +1 -0
  82. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  83. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  84. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  85. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  86. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  87. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  88. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
  89. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  90. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  91. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  92. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  93. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  94. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  95. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  96. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  97. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  98. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  99. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  100. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  101. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  102. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  103. package/dist/accessi-module/Console/generated/model/errorResponse.d.ts +18 -0
  104. package/dist/accessi-module/Console/generated/model/errorResponse.js +9 -0
  105. package/dist/accessi-module/Console/generated/model/errorResponse.js.map +1 -0
  106. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.d.ts +14 -0
  107. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js +3 -0
  108. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js.map +1 -0
  109. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.d.ts +14 -0
  110. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js +3 -0
  111. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js.map +1 -0
  112. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.d.ts +23 -0
  113. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js +9 -0
  114. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js.map +1 -0
  115. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.d.ts +14 -0
  116. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js +3 -0
  117. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js.map +1 -0
  118. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.d.ts +14 -0
  119. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js +3 -0
  120. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js.map +1 -0
  121. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.d.ts +13 -0
  122. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js +9 -0
  123. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js.map +1 -0
  124. package/dist/accessi-module/Console/generated/model/filtriUtente.d.ts +32 -0
  125. package/dist/accessi-module/Console/generated/model/filtriUtente.js +9 -0
  126. package/dist/accessi-module/Console/generated/model/filtriUtente.js.map +1 -0
  127. package/dist/accessi-module/Console/generated/model/getFiltriResponse.d.ts +14 -0
  128. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js +3 -0
  129. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js.map +1 -0
  130. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.d.ts +12 -0
  131. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js +9 -0
  132. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js.map +1 -0
  133. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.d.ts +14 -0
  134. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js +3 -0
  135. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js.map +1 -0
  136. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +12 -0
  137. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js +9 -0
  138. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -0
  139. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.d.ts +14 -0
  140. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js +3 -0
  141. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js.map +1 -0
  142. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  143. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  144. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  145. package/dist/accessi-module/Console/generated/model/getMenusResponse.d.ts +14 -0
  146. package/dist/accessi-module/Console/generated/model/getMenusResponse.js +3 -0
  147. package/dist/accessi-module/Console/generated/model/getMenusResponse.js.map +1 -0
  148. package/dist/accessi-module/Console/generated/model/getRolesResponse.d.ts +14 -0
  149. package/dist/accessi-module/Console/generated/model/getRolesResponse.js +3 -0
  150. package/dist/accessi-module/Console/generated/model/getRolesResponse.js.map +1 -0
  151. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  152. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  153. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  154. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  155. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  156. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  157. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.d.ts +10 -0
  158. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js +9 -0
  159. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js.map +1 -0
  160. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.d.ts +14 -0
  161. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js +3 -0
  162. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js.map +1 -0
  163. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +32 -0
  164. package/dist/accessi-module/Console/generated/model/getUsersParams.js +9 -0
  165. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -0
  166. package/dist/accessi-module/Console/generated/model/getUsersResponse.d.ts +14 -0
  167. package/dist/accessi-module/Console/generated/model/getUsersResponse.js +3 -0
  168. package/dist/accessi-module/Console/generated/model/getUsersResponse.js.map +1 -0
  169. package/dist/accessi-module/Console/generated/model/getUsersResult.d.ts +17 -0
  170. package/dist/accessi-module/Console/generated/model/getUsersResult.js +3 -0
  171. package/dist/accessi-module/Console/generated/model/getUsersResult.js.map +1 -0
  172. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.d.ts +12 -0
  173. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js +9 -0
  174. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js.map +1 -0
  175. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +19 -0
  176. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js +3 -0
  177. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -0
  178. package/dist/accessi-module/Console/generated/model/index.d.ts +93 -0
  179. package/dist/accessi-module/Console/generated/model/index.js +110 -0
  180. package/dist/accessi-module/Console/generated/model/index.js.map +1 -0
  181. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  182. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  183. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  184. package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +12 -0
  185. package/dist/accessi-module/Console/generated/model/loginRequest.js +9 -0
  186. package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -0
  187. package/dist/accessi-module/Console/generated/model/loginResponse.d.ts +14 -0
  188. package/dist/accessi-module/Console/generated/model/loginResponse.js +3 -0
  189. package/dist/accessi-module/Console/generated/model/loginResponse.js.map +1 -0
  190. package/dist/accessi-module/Console/generated/model/loginResult.d.ts +32 -0
  191. package/dist/accessi-module/Console/generated/model/loginResult.js +3 -0
  192. package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -0
  193. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.d.ts +12 -0
  194. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js +9 -0
  195. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js.map +1 -0
  196. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.d.ts +13 -0
  197. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js +14 -0
  198. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js.map +1 -0
  199. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +32 -0
  200. package/dist/accessi-module/Console/generated/model/menuEntity.js +9 -0
  201. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -0
  202. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  203. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  204. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  205. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.d.ts +12 -0
  206. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js +9 -0
  207. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js.map +1 -0
  208. package/dist/accessi-module/Console/generated/model/permission.d.ts +12 -0
  209. package/dist/accessi-module/Console/generated/model/permission.js +9 -0
  210. package/dist/accessi-module/Console/generated/model/permission.js.map +1 -0
  211. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +51 -0
  212. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js +9 -0
  213. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -0
  214. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +13 -0
  215. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +9 -0
  216. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +1 -0
  217. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +62 -0
  218. package/dist/accessi-module/Console/generated/model/registerRequest.js +3 -0
  219. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -0
  220. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +13 -0
  221. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +9 -0
  222. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +1 -0
  223. package/dist/accessi-module/Console/generated/model/registerResponse.d.ts +14 -0
  224. package/dist/accessi-module/Console/generated/model/registerResponse.js +3 -0
  225. package/dist/accessi-module/Console/generated/model/registerResponse.js.map +1 -0
  226. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.d.ts +13 -0
  227. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js +9 -0
  228. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js.map +1 -0
  229. package/dist/accessi-module/Console/generated/model/role.d.ts +15 -0
  230. package/dist/accessi-module/Console/generated/model/role.js +3 -0
  231. package/dist/accessi-module/Console/generated/model/role.js.map +1 -0
  232. package/dist/accessi-module/Console/generated/model/ruoliMenu.d.ts +15 -0
  233. package/dist/accessi-module/Console/generated/model/ruoliMenu.js +3 -0
  234. package/dist/accessi-module/Console/generated/model/ruoliMenu.js.map +1 -0
  235. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.d.ts +16 -0
  236. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js +17 -0
  237. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js.map +1 -0
  238. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.d.ts +12 -0
  239. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js +9 -0
  240. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js.map +1 -0
  241. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.d.ts +12 -0
  242. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js +9 -0
  243. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js.map +1 -0
  244. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  245. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  246. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  247. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.d.ts +10 -0
  248. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js +9 -0
  249. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js.map +1 -0
  250. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.d.ts +13 -0
  251. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js +3 -0
  252. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js.map +1 -0
  253. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.d.ts +18 -0
  254. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js +19 -0
  255. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js.map +1 -0
  256. package/dist/accessi-module/Console/generated/model/status.d.ts +12 -0
  257. package/dist/accessi-module/Console/generated/model/status.js +9 -0
  258. package/dist/accessi-module/Console/generated/model/status.js.map +1 -0
  259. package/dist/accessi-module/Console/generated/model/tipoFiltro.d.ts +23 -0
  260. package/dist/accessi-module/Console/generated/model/tipoFiltro.js +3 -0
  261. package/dist/accessi-module/Console/generated/model/tipoFiltro.js.map +1 -0
  262. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.d.ts +14 -0
  263. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js +15 -0
  264. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js.map +1 -0
  265. package/dist/accessi-module/Console/generated/model/tokenResult.d.ts +15 -0
  266. package/dist/accessi-module/Console/generated/model/tokenResult.js +3 -0
  267. package/dist/accessi-module/Console/generated/model/tokenResult.js.map +1 -0
  268. package/dist/accessi-module/Console/generated/model/tokenResultType.d.ts +14 -0
  269. package/dist/accessi-module/Console/generated/model/tokenResultType.js +15 -0
  270. package/dist/accessi-module/Console/generated/model/tokenResultType.js.map +1 -0
  271. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.d.ts +18 -0
  272. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js +3 -0
  273. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js.map +1 -0
  274. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.d.ts +10 -0
  275. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js +14 -0
  276. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js.map +1 -0
  277. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.d.ts +13 -0
  278. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js +14 -0
  279. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js.map +1 -0
  280. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.d.ts +10 -0
  281. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js +9 -0
  282. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js.map +1 -0
  283. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.d.ts +11 -0
  284. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js +9 -0
  285. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js.map +1 -0
  286. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.d.ts +12 -0
  287. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js +9 -0
  288. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js.map +1 -0
  289. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  290. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  291. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  292. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  293. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  294. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  295. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
  296. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  297. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  298. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  299. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  300. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  301. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  302. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  303. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  304. package/dist/accessi-module/Console/generated/model/userDto.d.ts +88 -0
  305. package/dist/accessi-module/Console/generated/model/userDto.js +3 -0
  306. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -0
  307. package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +13 -0
  308. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +9 -0
  309. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +1 -0
  310. package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +13 -0
  311. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +9 -0
  312. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +1 -0
  313. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.d.ts +18 -0
  314. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js +19 -0
  315. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js.map +1 -0
  316. package/dist/accessi-module/Console/generated/model/userGrantsDto.d.ts +16 -0
  317. package/dist/accessi-module/Console/generated/model/userGrantsDto.js +3 -0
  318. package/dist/accessi-module/Console/generated/model/userGrantsDto.js.map +1 -0
  319. package/dist/accessi-module/Console/generated/model/userGrantsResponse.d.ts +14 -0
  320. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js +3 -0
  321. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js.map +1 -0
  322. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.d.ts +18 -0
  323. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js +9 -0
  324. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js.map +1 -0
  325. package/dist/accessi-module/Console/help.d.ts +13 -0
  326. package/dist/accessi-module/Console/help.js +348 -0
  327. package/dist/accessi-module/Console/help.js.map +1 -0
  328. package/dist/accessi-module/Console/index.html +127 -0
  329. package/dist/accessi-module/Console/openApiClient.d.ts +34 -0
  330. package/dist/accessi-module/Console/openApiClient.js +111 -0
  331. package/dist/accessi-module/Console/openApiClient.js.map +1 -0
  332. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  333. package/dist/accessi-module/Console/wiki.js +689 -0
  334. package/dist/accessi-module/Console/wiki.js.map +1 -0
  335. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +18 -0
  336. package/dist/accessi-module/Controllers/AccessiConsoleController.js +111 -0
  337. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -0
  338. package/dist/accessi-module/Controllers/AuthController.d.ts +4 -1
  339. package/dist/accessi-module/Controllers/AuthController.js +86 -47
  340. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  341. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
  342. package/dist/accessi-module/Controllers/ConfiguratorController.js +9 -9
  343. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  344. package/dist/accessi-module/Controllers/EmailController.d.ts +2 -2
  345. package/dist/accessi-module/Controllers/EmailController.js +4 -2
  346. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  347. package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
  348. package/dist/accessi-module/Controllers/FiltriController.js +95 -5
  349. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  350. package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -1
  351. package/dist/accessi-module/Controllers/PermissionController.js +282 -13
  352. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  353. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  354. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  355. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  356. package/dist/accessi-module/Controllers/UserController.d.ts +5 -3
  357. package/dist/accessi-module/Controllers/UserController.js +65 -11
  358. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  359. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  360. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  361. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  362. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  363. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +1 -1
  364. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  365. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +3 -0
  366. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +18 -0
  367. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
  368. package/dist/accessi-module/Dtos/BaseResponse.d.ts +2 -0
  369. package/dist/accessi-module/Dtos/BaseResponse.js +21 -2
  370. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  371. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
  372. package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
  373. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  374. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
  375. package/dist/accessi-module/Dtos/FederatedIdentityDtos.d.ts +69 -0
  376. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js +236 -0
  377. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js.map +1 -0
  378. package/dist/accessi-module/Dtos/FiltriUtente.js +4 -1
  379. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  380. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  381. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  382. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  383. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  384. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
  385. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
  386. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  387. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  388. package/dist/accessi-module/Dtos/LoginRequest.d.ts +1 -1
  389. package/dist/accessi-module/Dtos/LoginRequest.js +3 -2
  390. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  391. package/dist/accessi-module/Dtos/LoginResponse.d.ts +6 -2
  392. package/dist/accessi-module/Dtos/LoginResponse.js +20 -7
  393. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  394. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  395. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  396. package/dist/accessi-module/Dtos/Permission.js +1 -0
  397. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  398. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +1 -1
  399. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +1 -0
  400. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -1
  401. package/dist/accessi-module/Dtos/RegisterRequest.js +3 -1
  402. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  403. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  404. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  405. package/dist/accessi-module/Dtos/Role.js +4 -0
  406. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  407. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  408. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
  409. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  410. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  411. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  412. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  413. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  414. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  415. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  416. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  417. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  418. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  419. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +13 -0
  420. package/dist/accessi-module/Dtos/TwoFactorDtos.js +60 -0
  421. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  422. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  423. package/dist/accessi-module/Dtos/UserDto.d.ts +7 -0
  424. package/dist/accessi-module/Dtos/UserDto.js +26 -2
  425. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  426. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  427. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
  428. package/dist/accessi-module/Dtos/index.d.ts +4 -0
  429. package/dist/accessi-module/Dtos/index.js +4 -0
  430. package/dist/accessi-module/Dtos/index.js.map +1 -1
  431. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +40 -5
  432. package/dist/accessi-module/Services/AuthService/AuthService.js +192 -40
  433. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  434. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  435. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  436. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  437. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +9 -2
  438. package/dist/accessi-module/Services/EmailService/EmailService.js +43 -22
  439. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  440. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +18 -3
  441. package/dist/accessi-module/Services/FiltriService/FiltriService.js +92 -9
  442. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  443. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +73 -2
  444. package/dist/accessi-module/Services/PermissionService/PermissionService.js +537 -198
  445. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  446. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  447. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  448. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  449. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  450. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +175 -0
  451. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  452. package/dist/accessi-module/Services/UserService/UserService.d.ts +36 -5
  453. package/dist/accessi-module/Services/UserService/UserService.js +341 -161
  454. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  455. package/dist/accessi-module/Views/reset-password.html +213 -213
  456. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +46 -10
  457. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +399 -181
  458. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  459. package/dist/accessi-module/database-updates/accessiSchema.d.ts +45 -0
  460. package/dist/accessi-module/database-updates/accessiSchema.js +87 -0
  461. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  462. package/dist/accessi-module/database-updates/optionalColumns.d.ts +7 -0
  463. package/dist/accessi-module/database-updates/optionalColumns.js +58 -0
  464. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  465. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +18 -8
  466. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  467. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +24 -0
  468. package/dist/accessi-module/federated-auth/FederatedAuthController.js +333 -0
  469. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  470. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +100 -0
  471. package/dist/accessi-module/federated-auth/FederatedAuthService.js +451 -0
  472. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  473. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  474. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  475. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  476. package/dist/accessi-module/index.d.ts +17 -0
  477. package/dist/accessi-module/index.js +25 -11
  478. package/dist/accessi-module/index.js.map +1 -1
  479. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  480. package/dist/accessi-module/jwt/jwt.strategy.js +16 -7
  481. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  482. package/dist/accessi-module/middleware/accessiRequirements.d.ts +23 -1
  483. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  484. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  485. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  486. package/dist/accessi-module/middleware/authenticateGen.js +63 -25
  487. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  488. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  489. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +74 -0
  490. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  491. package/dist/accessi-module/security/accessControl.d.ts +11 -0
  492. package/dist/accessi-module/security/accessControl.js +19 -4
  493. package/dist/accessi-module/security/accessControl.js.map +1 -1
  494. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  495. package/dist/accessi-module/security/accessiValidation.js +41 -0
  496. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  497. package/dist/accessi-module/security/authenticatedToken.d.ts +15 -1
  498. package/dist/accessi-module/security/authenticatedToken.js +31 -4
  499. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  500. package/dist/accessi-module/security/passwordResetToken.d.ts +13 -3
  501. package/dist/accessi-module/security/passwordResetToken.js +13 -5
  502. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  503. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +3 -3
  504. package/dist/accessi-module/security/publicAuthRateLimit.js +30 -8
  505. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  506. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  507. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  508. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  509. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  510. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  511. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  512. package/dist/allegati-module/AllegatiModule.d.ts +11 -0
  513. package/dist/allegati-module/AllegatiModule.js +11 -1
  514. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  515. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  516. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  517. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  518. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  519. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  520. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  521. package/dist/allegati-module/Dtos/index.js.map +1 -1
  522. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  523. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  524. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  525. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  526. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  527. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  528. package/dist/allegati-module/index.js.map +1 -1
  529. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  530. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  531. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  532. package/dist/autobind.d.ts +10 -3
  533. package/dist/autobind.js +24 -9
  534. package/dist/autobind.js.map +1 -1
  535. package/dist/firebird-compat.d.ts +13 -0
  536. package/dist/firebird-compat.js +3 -2
  537. package/dist/firebird-compat.js.map +1 -1
  538. package/dist/index.js.map +1 -1
  539. package/dist/initEmilsoftwareModule.js +7 -0
  540. package/dist/initEmilsoftwareModule.js.map +1 -1
  541. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  542. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  543. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  544. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  545. package/dist/scripts/generateAccessiWiki.js +131 -0
  546. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  547. package/dist/swagger/SwaggerConfig.js +6 -3
  548. package/dist/swagger/SwaggerConfig.js.map +1 -1
  549. package/package.json +103 -83
  550. package/dist/emilsoftware-utilities-2.0.0-dev.22.tgz +0 -0
@@ -23,27 +23,46 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
23
23
  var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  return (mod && mod.__esModule) ? mod : { "default": mod };
25
25
  };
26
+ var EmailService_1;
26
27
  Object.defineProperty(exports, "__esModule", { value: true });
27
28
  exports.EmailService = void 0;
28
29
  const nodemailer_1 = __importDefault(require("nodemailer"));
29
30
  const uuid_1 = require("uuid");
30
31
  const Orm_1 = require("../../../Orm");
31
32
  const common_1 = require("@nestjs/common");
33
+ const Logger_1 = require("../../../Logger");
32
34
  const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
33
35
  const passwordResetToken_1 = require("../../security/passwordResetToken");
34
- let EmailService = class EmailService {
36
+ let EmailService = EmailService_1 = class EmailService {
35
37
  constructor(accessiOptions) {
36
38
  this.accessiOptions = accessiOptions;
39
+ this.logger = new Logger_1.Logger(EmailService_1.name);
37
40
  this.transporter = nodemailer_1.default.createTransport(this.accessiOptions.emailOptions);
38
41
  }
39
- sendAccountUpdateEmail(email, message) {
42
+ sendAccountUpdateEmail(_email, _message) {
40
43
  throw new Error('Method not implemented.');
41
44
  }
45
+ /** Sends the one-time login code without including it in application logs. */
46
+ sendTwoFactorCode(email, code, validityMinutes) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ yield this.transporter.sendMail({
49
+ from: this.accessiOptions.emailOptions.from,
50
+ to: email,
51
+ subject: 'Codice di accesso',
52
+ text: `Il tuo codice di accesso e: ${code}\n\nScade entro ${validityMinutes} minuti e puo essere usato una sola volta. Se non hai richiesto l accesso, ignora questa email.`,
53
+ });
54
+ });
55
+ }
56
+ /**
57
+ * Creates a short-lived, one-use reset token and sends it by email. Invalid, missing, blocked or deleted users
58
+ * return without error to prevent account enumeration. On delivery failure the stored reset nonce is cleared.
59
+ */
42
60
  sendPasswordResetEmail(email, htmlMail) {
43
61
  return __awaiter(this, void 0, void 0, function* () {
44
62
  var _a;
45
63
  let codiceUtente = null;
46
64
  let resetToken = null;
65
+ let nonce = null;
47
66
  try {
48
67
  if (typeof email !== 'string' || email.trim() === '') {
49
68
  return;
@@ -63,10 +82,10 @@ let EmailService = class EmailService {
63
82
  return;
64
83
  }
65
84
  codiceUtente = user.codiceUtente;
66
- const nonce = (0, uuid_1.v4)();
67
- const secret = (0, passwordResetToken_1.getAccessiJwtSecret)(this.accessiOptions);
68
- resetToken = (0, passwordResetToken_1.createPasswordResetToken)(codiceUtente, nonce, secret);
69
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ', [nonce, codiceUtente]);
85
+ nonce = (0, uuid_1.v4)();
86
+ const secret = (0, passwordResetToken_1.getAccessiJwtSecret)(this.accessiOptions, 'reset');
87
+ resetToken = (0, passwordResetToken_1.createPasswordResetToken)(user.codiceUtente, nonce, secret);
88
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ', [nonce, codiceUtente], false);
70
89
  //costruizione dei queryparams
71
90
  const returnUrlQueryParams = '?returnUrl=' +
72
91
  encodeURIComponent(this.accessiOptions.confirmationEmailReturnUrl) +
@@ -84,17 +103,17 @@ let EmailService = class EmailService {
84
103
  sPhrase = htmlMail.replace('#link_conferma_password_url', resetUrl);
85
104
  }
86
105
  else {
87
- sPhrase = ` Gentile utente,<br>
88
- abbiamo ricevuto la tua richiesta.<br><br>
89
-
90
- Per completare l'operazione, clicca sul link qui sotto:<br>
91
- <a href="${resetUrl}">completa la procedura</a><br><br>
92
-
93
- Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>
94
- Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>
95
-
96
- Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>
97
-
106
+ sPhrase = ` Gentile utente,<br>
107
+ abbiamo ricevuto la tua richiesta.<br><br>
108
+
109
+ Per completare l'operazione, clicca sul link qui sotto:<br>
110
+ <a href="${resetUrl}">completa la procedura</a><br><br>
111
+
112
+ Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>
113
+ Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>
114
+
115
+ Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>
116
+
98
117
  Grazie.<br>`;
99
118
  }
100
119
  const html = this.GetHtmlMail(sPhrase);
@@ -108,10 +127,10 @@ let EmailService = class EmailService {
108
127
  yield this.transporter.sendMail(mailOptions);
109
128
  }
110
129
  catch (error) {
111
- if (codiceUtente) {
112
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ?', [codiceUtente]).catch(() => undefined);
130
+ if (codiceUtente && nonce) {
131
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ? AND KEYREG = ?', [codiceUtente, nonce], false).catch(() => undefined);
113
132
  }
114
- console.error("Errore nell'invio dell'email di reset password:", error);
133
+ this.logger.error("Errore nell'invio dell'email di reset password:", error);
115
134
  throw new Error("Errore durante l'invio dell'email di reset password.");
116
135
  }
117
136
  });
@@ -406,8 +425,10 @@ let EmailService = class EmailService {
406
425
  }
407
426
  };
408
427
  exports.EmailService = EmailService;
409
- exports.EmailService = EmailService = __decorate([
410
- (0, common_1.Injectable)(),
428
+ exports.EmailService = EmailService = EmailService_1 = __decorate([
429
+ (0, common_1.Injectable)()
430
+ /** Sends password lifecycle email. It deliberately does not expose whether an email exists to public callers. */
431
+ ,
411
432
  __param(0, (0, common_1.Inject)('ACCESSI_OPTIONS')),
412
433
  __metadata("design:paramtypes", [Object])
413
434
  ], EmailService);
@@ -1 +1 @@
1
- {"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/EmailService/EmailService.ts"],"names":[],"mappings":"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","sourcesContent":["import nodemailer from 'nodemailer';\nimport { v4 as uuidv4 } from 'uuid';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { Orm } from '../../../Orm';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport {\n createPasswordResetToken,\n getAccessiJwtSecret,\n} from '../../security/passwordResetToken';\n\n@Injectable()\nexport class EmailService {\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\n sendAccountUpdateEmail(email: string, message: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n private transporter = nodemailer.createTransport(this.accessiOptions.emailOptions);\n\n public async sendPasswordResetEmail(email: string, htmlMail?: string): Promise<void> {\n let codiceUtente: number | null = null;\n let resetToken: string | null = null;\n\n try {\n if (typeof email !== 'string' || email.trim() === '') {\n return;\n }\n\n const normalizedEmail = email.trim().toLowerCase();\n const userResult = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE as codice_utente, STAREG as stato_registrazione FROM UTENTI WHERE LOWER(USRNAME) = ?',\n [normalizedEmail],\n );\n const user = userResult.map((row) => ({\n codiceUtente: Number(row.CODICE_UTENTE ?? row.codice_utente ?? row.CODUTE ?? row.codute),\n statoRegistrazione: Number(\n row.STATO_REGISTRAZIONE ?? row.stato_registrazione ?? row.STAREG ?? row.stareg,\n ),\n }))[0];\n\n if (\n !user?.codiceUtente ||\n user.statoRegistrazione === StatoRegistrazione.BLOCC ||\n user.statoRegistrazione === StatoRegistrazione.DELETE\n ) {\n return;\n }\n\n codiceUtente = user.codiceUtente;\n const nonce = uuidv4();\n const secret = getAccessiJwtSecret(this.accessiOptions);\n resetToken = createPasswordResetToken(codiceUtente, nonce, secret);\n\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ',\n [nonce, codiceUtente],\n );\n\n //costruizione dei queryparams\n const returnUrlQueryParams =\n '?returnUrl=' +\n encodeURIComponent(this.accessiOptions.confirmationEmailReturnUrl) +\n '&prefix=' +\n encodeURIComponent(this.accessiOptions.confirmationEmailPrefix ?? '');\n const { confirmationEmailUrl, customResetPage } = this.accessiOptions;\n\n // costruisco l'url di base\n let resetUrl = `${confirmationEmailUrl}/api/accessi/email/reset-password-page/${encodeURIComponent(\n resetToken,\n )}${returnUrlQueryParams}`;\n\n //solo se gli do la customResetPage\n if (customResetPage) {\n resetUrl = `${customResetPage}?token=${encodeURIComponent(resetToken)}`;\n }\n\n let sPhrase: string;\n\n if (htmlMail) {\n sPhrase = htmlMail.replace('#link_conferma_password_url', resetUrl);\n } else {\n sPhrase = ` Gentile utente,<br>\n abbiamo ricevuto la tua richiesta.<br><br>\n\n Per completare l'operazione, clicca sul link qui sotto:<br>\n <a href=\"${resetUrl}\">completa la procedura</a><br><br>\n\n Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>\n Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>\n\n Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>\n\n Grazie.<br>`;\n }\n\n const html = this.GetHtmlMail(sPhrase);\n const mailOptions = {\n from: this.accessiOptions.emailOptions.from,\n to: email,\n subject: 'Scelta nuova password',\n text: sPhrase,\n html: html,\n };\n\n await this.transporter.sendMail(mailOptions);\n } catch (error) {\n if (codiceUtente) {\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ?',\n [codiceUtente],\n ).catch(() => undefined);\n }\n console.error(\"Errore nell'invio dell'email di reset password:\", error);\n throw new Error(\"Errore durante l'invio dell'email di reset password.\");\n }\n }\n\n private GetHtmlMail(sPhrase: string): string {\n let sTxt = '';\n sTxt += '<html xmlns=\"http://www.w3.org/1999/xhtml\">';\n sTxt += '<head>';\n sTxt += ' <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">';\n sTxt += ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">';\n sTxt += ' <title></title>';\n sTxt += ' <style type=\"text/css\">';\n sTxt += ' @media only screen and (max-width:480px) {';\n sTxt += ' body,';\n sTxt += ' table,';\n sTxt += ' td,';\n sTxt += ' p,';\n sTxt += ' a,';\n sTxt += ' li,';\n sTxt += ' blockquote {';\n sTxt += ' -webkit-text-size-adjust: none !important';\n sTxt += ' }';\n sTxt += ' body {';\n sTxt += ' width: 100% !important;';\n sTxt += ' min-width: 100% !important';\n sTxt += ' }';\n sTxt += ' #bodyCell {';\n sTxt += ' padding: 10px !important';\n sTxt += ' }';\n sTxt += ' table.kmMobileHide {';\n sTxt += ' display: none !important';\n sTxt += ' }';\n sTxt += ' table.kmDesktopOnly,';\n sTxt += ' td.kmDesktopOnly,';\n sTxt += ' th.kmDesktopOnly,';\n sTxt += ' tr.kmDesktopOnly,';\n sTxt += ' td.kmDesktopWrapHeaderMobileNone {';\n sTxt += ' display: none !important';\n sTxt += ' }';\n sTxt += ' table.kmMobileOnly {';\n sTxt += ' display: table !important';\n sTxt += ' }';\n sTxt += ' tr.kmMobileOnly {';\n sTxt += ' display: table-row !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileOnly,';\n sTxt += ' td.kmDesktopWrapHeader,';\n sTxt += ' th.kmMobileOnly {';\n sTxt += ' display: table-cell !important';\n sTxt += ' }';\n sTxt += ' tr.kmMobileNoAlign,';\n sTxt += ' table.kmMobileNoAlign {';\n sTxt += ' float: none !important;';\n sTxt += ' text-align: initial !important;';\n sTxt += ' vertical-align: middle !important;';\n sTxt += ' table-layout: fixed !important';\n sTxt += ' }';\n sTxt += ' tr.kmMobileCenterAlign {';\n sTxt += ' float: none !important;';\n sTxt += ' text-align: center !important;';\n sTxt += ' vertical-align: middle !important;';\n sTxt += ' table-layout: fixed !important';\n sTxt += ' }';\n sTxt += ' td.kmButtonCollection {';\n sTxt += ' padding-left: 9px !important;';\n sTxt += ' padding-right: 9px !important;';\n sTxt += ' padding-top: 9px !important;';\n sTxt += ' padding-bottom: 9px !importan';\n sTxt += ' }';\n sTxt += ' td.kmMobileHeaderStackDesktopNone,';\n sTxt += ' img.kmMobileHeaderStackDesktopNone,';\n sTxt += ' td.kmMobileHeaderStack {';\n sTxt += ' display: block !important;';\n sTxt += ' margin-left: auto !important;';\n sTxt += ' margin-right: auto !important;';\n sTxt += ' padding-bottom: 9px !important;';\n sTxt += ' padding-right: 0 !important;';\n sTxt += ' padding-left: 0 !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileWrapHeader,';\n sTxt += ' td.kmMobileWrapHeaderDesktopNone {';\n sTxt += ' display: inline-block !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileHeaderSpacing {';\n sTxt += ' padding-right: 10px !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileHeaderNoSpacing {';\n sTxt += ' padding-right: 0 !important';\n sTxt += ' }';\n sTxt += ' table.kmDesktopAutoWidth {';\n sTxt += ' width: inherit !important';\n sTxt += ' }';\n sTxt += ' table.kmMobileAutoWidth {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' table.kmTextContentContainer {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' table.kmBoxedTextContentContainer {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' td.kmImageContent {';\n sTxt += ' padding-left: 0 !important;';\n sTxt += ' padding-right: 0 !important';\n sTxt += ' }';\n sTxt += ' img.kmImage {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileStretch {';\n sTxt += ' padding-left: 0 !important;';\n sTxt += ' padding-right: 0 !important';\n sTxt += ' }';\n sTxt += ' table.kmSplitContentLeftContentContainer,';\n sTxt += ' table.kmSplitContentRightContentContainer,';\n sTxt += ' table.kmColumnContainer,';\n sTxt += ' td.kmVerticalButtonBarContentOuter table.kmButtonBarContent,';\n sTxt +=\n ' td.kmVerticalButtonCollectionContentOuter table.kmButtonCollectionContent,';\n sTxt += ' table.kmVerticalButton,';\n sTxt += ' table.kmVerticalButtonContent {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' td.kmButtonCollectionInner {';\n sTxt += ' padding-left: 9px !important;';\n sTxt += ' padding-right: 9px !important;';\n sTxt += ' padding-top: 9px !important;';\n sTxt += ' padding-bottom: 9px !important';\n sTxt += ' }';\n sTxt += ' td.kmVerticalButtonIconContent,';\n sTxt += ' td.kmVerticalButtonTextContent,';\n sTxt += ' td.kmVerticalButtonContentOuter {';\n sTxt += ' padding-left: 0 !important;';\n sTxt += ' padding-right: 0 !important;';\n sTxt += ' padding-bottom: 9px !important';\n sTxt += ' }';\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmTextContent,';\n sTxt += ' table.kmSplitContentRightContentContainer td.kmTextContent,';\n sTxt += ' table.kmColumnContainer td.kmTextContent,';\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmImageContent,';\n sTxt += ' table.kmSplitContentRightContentContainer td.kmImageContent {';\n sTxt += ' padding-top: 9px !important';\n sTxt += ' }';\n sTxt += ' td.rowContainer.kmFloatLeft,';\n sTxt += ' td.rowContainer.kmFloatLeft,';\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn,';\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn {';\n sTxt += ' float: left;';\n sTxt += ' clear: both;';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' table.templateContainer,';\n sTxt += ' table.templateContainer.brandingContainer,';\n sTxt += ' div.templateContainer,';\n sTxt += ' div.templateContainer.brandingContainer,';\n sTxt += ' table.templateRow {';\n sTxt += ' max-width: 600px !important;';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' h1 {';\n sTxt += ' font-size: 30px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' h2 {';\n sTxt += ' font-size: 22px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' h3 {';\n sTxt += ' font-size: 22px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' h4 {';\n sTxt += ' font-size: 16px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' td.kmTextContent {';\n sTxt += ' font-size: 14px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' td.kmTextBlockInner td.kmTextContent {';\n sTxt += ' padding-right: 18px !important;';\n sTxt += ' padding-left: 18px !important';\n sTxt += ' }';\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner {';\n sTxt += ' padding-left: 9px !important;';\n sTxt += ' padding-right: 9px !important';\n sTxt += ' }';\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner .kmTextContent {';\n sTxt += ' font-size: 14px !important;';\n sTxt += ' line-height: 130% !important;';\n sTxt += ' padding-left: 4px !important;';\n sTxt += ' padding-right: 4px !important';\n sTxt += ' }';\n sTxt += ' }';\n sTxt += ' </style>';\n sTxt += '</head>';\n sTxt +=\n '<body style=\"margin:0;padding:0;font-family:\"Raleway\", Helvetica, sans-serif;font-weight:400;letter-spacing:0.75px;line-height:180%;background-color:#F2F2F2\">';\n sTxt += ' <center>';\n sTxt +=\n ' <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"bodyTable\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding:0;background-color:#F2F2F2;height:100%;margin:0;width:100%\">';\n sTxt += ' <tbody>';\n sTxt += ' <tr>';\n sTxt +=\n ' <td align=\"center\" id=\"bodyCell\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding-top:10px;padding-left:10px;padding-bottom:20px;padding-right:10px;border-top:0;height:100%;margin:0;width:100%\">';\n sTxt += ' <!--[if !mso]>';\n sTxt += '\t\t\t\t\t<!-->';\n sTxt +=\n ' <div class=\"templateContainer\" style=\"border:0 none #aaa;background-color:#F2F2F2;border-radius:0;display: table; width:90%\">';\n sTxt += ' <div class=\"templateContainerInner\" style=\"padding:0\">';\n sTxt += ' <!--';\n sTxt += '\t\t\t\t\t\t\t<![endif]-->';\n sTxt += ' <!--[if mso]>';\n sTxt +=\n '\t\t\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateContainer\" width=\"90%\" ';\n sTxt +=\n ' style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\n sTxt += '\t\t\t\t\t\t\t\t<tbody>';\n sTxt += '\t\t\t\t\t\t\t\t\t<tr>';\n sTxt +=\n '\t\t\t\t\t\t\t\t\t\t<td class=\"templateContainerInner\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\n sTxt +=\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt += ' <tr>';\n sTxt +=\n ' <td align=\"center\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateRow\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt += ' <tbody>';\n sTxt += ' <tr>';\n sTxt +=\n ' <td class=\"rowContainer kmFloatLeft\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextBlock\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <tbody class=\"kmTextBlockOuter\">';\n sTxt += ' <tr>';\n sTxt +=\n ' <td class=\"kmTextBlockInner\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;background-color:#FFFFFF;\">';\n sTxt +=\n ' <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextContentContainer\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <tbody>';\n sTxt +=\n ' <tr>';\n sTxt +=\n ' <td class=\"kmTextContent\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;color:#272727;font-family:Helvetica, Arial;font-size:13px;line-height:200%;letter-spacing:normal;text-align:left;padding-top:40px;padding-bottom:40px;padding-left:40px;padding-right:40px;\">';\n sTxt +=\n ' <p>' +\n sPhrase +\n '<p>';\n sTxt +=\n ' </td>';\n sTxt +=\n ' </tr>';\n sTxt +=\n ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </table>';\n sTxt += ' <!--[if !mso]>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-->';\n sTxt += ' </div>';\n sTxt += ' </div>';\n sTxt += ' <!--';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\n sTxt += ' <!--[if mso]>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t</td>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t</tr>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t</tbody>';\n sTxt += '\t\t\t\t\t\t\t\t\t</table>';\n sTxt += '\t\t\t\t\t\t\t\t\t<![endif]-->';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </center>';\n sTxt += '</body>';\n sTxt += '</html> ';\n\n return sTxt;\n }\n}\n"]}
1
+ {"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/EmailService/EmailService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+BAAoC;AAEpC,sCAAmC;AACnC,2CAAoD;AACpD,4CAAyC;AACzC,sEAAmE;AACnE,0EAG2C;AAIpC,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGvB,YAAuC,cAA+C;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAFrE,WAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;QAQhD,gBAAW,GAAG,oBAAU,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IANM,CAAC;IAE1F,sBAAsB,CAAC,MAAc,EAAE,QAAgB;QACrD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAID,8EAA8E;IACjE,iBAAiB,CAAC,KAAa,EAAE,IAAY,EAAE,eAAuB;;YACjF,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;gBAC3C,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,+BAA+B,IAAI,mBAAmB,eAAe,iGAAiG;aAC7K,CAAC,CAAC;QACL,CAAC;KAAA;IAED;;;OAGG;IACU,sBAAsB,CAAC,KAAa,EAAE,QAAiB;;;YAClE,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,UAAU,GAAkB,IAAI,CAAC;YACrC,IAAI,KAAK,GAAkB,IAAI,CAAC;YAEhC,IAAI,CAAC;gBACH,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBACrD,OAAO;gBACT,CAAC;gBAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,MAAM,SAAG,CAAC,KAAK,CAChC,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,4GAA4G,EAC5G,CAAC,eAAe,CAAC,CAClB,CAAC;gBACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAA4B,EAAE,EAAE;;oBAAC,OAAA,CAAC;wBAC7D,YAAY,EAAE,MAAM,CAAC,MAAA,MAAA,MAAA,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,MAAM,mCAAI,GAAG,CAAC,MAAM,CAAC;wBACxF,kBAAkB,EAAE,MAAM,CACxB,MAAA,MAAA,MAAA,GAAG,CAAC,mBAAmB,mCAAI,GAAG,CAAC,mBAAmB,mCAAI,GAAG,CAAC,MAAM,mCAAI,GAAG,CAAC,MAAM,CAC/E;qBACF,CAAC,CAAA;iBAAA,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEP,IACE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA;oBACnB,IAAI,CAAC,kBAAkB,KAAK,uCAAkB,CAAC,KAAK;oBACpD,IAAI,CAAC,kBAAkB,KAAK,uCAAkB,CAAC,MAAM,EACrD,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBACjC,KAAK,GAAG,IAAA,SAAM,GAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,IAAA,wCAAmB,EAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACjE,UAAU,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAExE,MAAM,SAAG,CAAC,OAAO,CACf,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,gDAAgD,EAChD,CAAC,KAAK,EAAE,YAAY,CAAC,EACrB,KAAK,CACN,CAAC;gBAEF,8BAA8B;gBAC9B,MAAM,oBAAoB,GACxB,aAAa;oBACb,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC;oBAClE,UAAU;oBACV,kBAAkB,CAAC,MAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,mCAAI,EAAE,CAAC,CAAC;gBACxE,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;gBAEtE,2BAA2B;gBAC3B,IAAI,QAAQ,GAAG,GAAG,oBAAoB,0CAA0C,kBAAkB,CAChG,UAAU,CACX,GAAG,oBAAoB,EAAE,CAAC;gBAE3B,mCAAmC;gBACnC,IAAI,eAAe,EAAE,CAAC;oBACpB,QAAQ,GAAG,GAAG,eAAe,UAAU,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1E,CAAC;gBAED,IAAI,OAAe,CAAC;gBAEpB,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG;;;;mCAIiB,QAAQ;;;;;;;oCAOP,CAAC;gBAC/B,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,WAAW,GAAG;oBAClB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;oBAC3C,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,uBAAuB;oBAChC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI;iBACX,CAAC;gBAEF,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;oBAC1B,MAAM,SAAG,CAAC,OAAO,CACf,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,iEAAiE,EACjE,CAAC,YAAY,EAAE,KAAK,CAAC,EACrB,KAAK,CACN,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;KAAA;IAEO,WAAW,CAAC,OAAe;QACjC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,QAAQ,CAAC;QACjB,IAAI,IAAI,yEAAyE,CAAC;QAClF,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI,IAAI,qBAAqB,CAAC;QAC9B,IAAI,IAAI,6BAA6B,CAAC;QACtC,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,mBAAmB,CAAC;QAC5B,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,IAAI,iBAAiB,CAAC;QAC1B,IAAI,IAAI,gBAAgB,CAAC;QACzB,IAAI,IAAI,gBAAgB,CAAC;QACzB,IAAI,IAAI,iBAAiB,CAAC;QAC1B,IAAI,IAAI,0BAA0B,CAAC;QACnC,IAAI,IAAI,2DAA2D,CAAC;QACpE,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,IAAI,yCAAyC,CAAC;QAClD,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,yBAAyB,CAAC;QAClC,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,2CAA2C,CAAC;QACpD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,yCAAyC,CAAC;QAClD,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,yCAAyC,CAAC;QAClD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oCAAoC,CAAC;QAC7C,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,kDAAkD,CAAC;QAC3D,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,2CAA2C,CAAC;QACpD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,uCAAuC,CAAC;QAChD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,uDAAuD,CAAC;QAChE,IAAI,IAAI,wDAAwD,CAAC;QACjE,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI;YACF,wFAAwF,CAAC;QAC3F,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,wEAAwE,CAAC;QACjF,IAAI,IAAI,yEAAyE,CAAC;QAClF,IAAI,IAAI,uDAAuD,CAAC;QAChE,IAAI,IAAI,yEAAyE,CAAC;QAClF,IAAI,IAAI,2EAA2E,CAAC;QACpF,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,qDAAqD,CAAC;QAC9D,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,wDAAwD,CAAC;QACjE,IAAI,IAAI,oCAAoC,CAAC;QAC7C,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,gCAAgC,CAAC;QACzC,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,qEAAqE,CAAC;QAC9E,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oFAAoF,CAAC;QAC7F,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,WAAW,CAAC;QACpB,IAAI,IAAI,cAAc,CAAC;QACvB,IAAI,IAAI,SAAS,CAAC;QAClB,IAAI;YACF,gKAAgK,CAAC;QACnK,IAAI,IAAI,cAAc,CAAC;QACvB,IAAI;YACF,iPAAiP,CAAC;QACpP,IAAI,IAAI,qBAAqB,CAAC;QAC9B,IAAI,IAAI,sBAAsB,CAAC;QAC/B,IAAI;YACF,kQAAkQ,CAAC;QACrQ,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,YAAY,CAAC;QACrB,IAAI;YACF,uJAAuJ,CAAC;QAC1J,IAAI,IAAI,oFAAoF,CAAC;QAC7F,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,qBAAqB,CAAC;QAC9B,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI;YACF,iGAAiG,CAAC;QACpG,IAAI;YACF,0FAA0F,CAAC;QAC7F,IAAI,IAAI,iBAAiB,CAAC;QAC1B,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI;YACF,uHAAuH,CAAC;QAC1H,IAAI,IAAI,yBAAyB,CAAC;QAClC,IAAI;YACF,wKAAwK,CAAC;QAC3K,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI;YACF,iJAAiJ,CAAC;QACpJ,IAAI;YACF,wMAAwM,CAAC;QAC3M,IAAI,IAAI,yDAAyD,CAAC;QAClE,IAAI,IAAI,0DAA0D,CAAC;QACnE,IAAI;YACF,mLAAmL,CAAC;QACtL,IAAI;YACF,wNAAwN,CAAC;QAC3N,IAAI;YACF,kGAAkG,CAAC;QACrG,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI;YACF,qNAAqN,CAAC;QACxN,IAAI;YACF,gQAAgQ,CAAC;QACnQ,IAAI;YACF,yFAAyF,CAAC;QAC5F,IAAI;YACF,0FAA0F,CAAC;QAC7F,IAAI;YACF,oYAAoY,CAAC;QACvY,IAAI;YACF,gGAAgG;gBAChG,OAAO;gBACP,KAAK,CAAC;QACR,IAAI;YACF,+FAA+F,CAAC;QAClG,IAAI;YACF,2FAA2F,CAAC;QAC9F,IAAI;YACF,0FAA0F,CAAC;QAC7F,IAAI,IAAI,sFAAsF,CAAC;QAC/F,IAAI,IAAI,+EAA+E,CAAC;QACxF,IAAI,IAAI,2EAA2E,CAAC;QACpF,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI,IAAI,sEAAsE,CAAC;QAC/E,IAAI,IAAI,+DAA+D,CAAC;QACxE,IAAI,IAAI,2DAA2D,CAAC;QACpE,IAAI,IAAI,0DAA0D,CAAC;QACnE,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,2CAA2C,CAAC;QACpD,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,sBAAsB,CAAC;QAC/B,IAAI,IAAI,oCAAoC,CAAC;QAC7C,IAAI,IAAI,gCAAgC,CAAC;QACzC,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,uCAAuC,CAAC;QAChD,IAAI,IAAI,mBAAmB,CAAC;QAC5B,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,IAAI,mBAAmB,CAAC;QAC5B,IAAI,IAAI,uBAAuB,CAAC;QAChC,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,uBAAuB,CAAC;QAChC,IAAI,IAAI,sBAAsB,CAAC;QAC/B,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,SAAS,CAAC;QAClB,IAAI,IAAI,UAAU,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAlaY,oCAAY;uBAAZ,YAAY;IAFxB,IAAA,mBAAU,GAAE;IACb,iHAAiH;;IAIlG,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;;GAH3B,YAAY,CAkaxB","sourcesContent":["import nodemailer from 'nodemailer';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport type { AccessiOptions } from '../../AccessiModule';\r\nimport { Orm } from '../../../Orm';\r\nimport { Inject, Injectable } from '@nestjs/common';\r\nimport { Logger } from '../../../Logger';\r\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\r\nimport {\r\n createPasswordResetToken,\r\n getAccessiJwtSecret,\r\n} from '../../security/passwordResetToken';\r\n\r\n@Injectable()\n/** Sends password lifecycle email. It deliberately does not expose whether an email exists to public callers. */\nexport class EmailService {\r\n private readonly logger = new Logger(EmailService.name);\r\n\r\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\r\n sendAccountUpdateEmail(_email: string, _message: string): Promise<void> {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n private transporter = nodemailer.createTransport(this.accessiOptions.emailOptions);\n\n /** Sends the one-time login code without including it in application logs. */\n public async sendTwoFactorCode(email: string, code: string, validityMinutes: number): Promise<void> {\n await this.transporter.sendMail({\n from: this.accessiOptions.emailOptions.from,\n to: email,\n subject: 'Codice di accesso',\n text: `Il tuo codice di accesso e: ${code}\\n\\nScade entro ${validityMinutes} minuti e puo essere usato una sola volta. Se non hai richiesto l accesso, ignora questa email.`,\n });\n }\n\r\n /**\n * Creates a short-lived, one-use reset token and sends it by email. Invalid, missing, blocked or deleted users\n * return without error to prevent account enumeration. On delivery failure the stored reset nonce is cleared.\n */\n public async sendPasswordResetEmail(email: string, htmlMail?: string): Promise<void> {\n let codiceUtente: number | null = null;\r\n let resetToken: string | null = null;\n let nonce: string | null = null;\n\r\n try {\r\n if (typeof email !== 'string' || email.trim() === '') {\r\n return;\r\n }\r\n\r\n const normalizedEmail = email.trim().toLowerCase();\r\n const userResult = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE as codice_utente, STAREG as stato_registrazione FROM UTENTI WHERE LOWER(USRNAME) = ?',\r\n [normalizedEmail],\r\n );\r\n const user = userResult.map((row: Record<string, unknown>) => ({\r\n codiceUtente: Number(row.CODICE_UTENTE ?? row.codice_utente ?? row.CODUTE ?? row.codute),\r\n statoRegistrazione: Number(\r\n row.STATO_REGISTRAZIONE ?? row.stato_registrazione ?? row.STAREG ?? row.stareg,\r\n ),\r\n }))[0];\r\n\r\n if (\r\n !user?.codiceUtente ||\r\n user.statoRegistrazione === StatoRegistrazione.BLOCC ||\r\n user.statoRegistrazione === StatoRegistrazione.DELETE\r\n ) {\r\n return;\r\n }\r\n\r\n codiceUtente = user.codiceUtente;\r\n nonce = uuidv4();\r\n const secret = getAccessiJwtSecret(this.accessiOptions, 'reset');\r\n resetToken = createPasswordResetToken(user.codiceUtente, nonce, secret);\n\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ',\r\n [nonce, codiceUtente],\n false,\n );\r\n\r\n //costruizione dei queryparams\r\n const returnUrlQueryParams =\r\n '?returnUrl=' +\r\n encodeURIComponent(this.accessiOptions.confirmationEmailReturnUrl) +\r\n '&prefix=' +\r\n encodeURIComponent(this.accessiOptions.confirmationEmailPrefix ?? '');\r\n const { confirmationEmailUrl, customResetPage } = this.accessiOptions;\r\n\r\n // costruisco l'url di base\r\n let resetUrl = `${confirmationEmailUrl}/api/accessi/email/reset-password-page/${encodeURIComponent(\r\n resetToken,\r\n )}${returnUrlQueryParams}`;\r\n\r\n //solo se gli do la customResetPage\r\n if (customResetPage) {\r\n resetUrl = `${customResetPage}?token=${encodeURIComponent(resetToken)}`;\r\n }\r\n\r\n let sPhrase: string;\r\n\r\n if (htmlMail) {\r\n sPhrase = htmlMail.replace('#link_conferma_password_url', resetUrl);\r\n } else {\r\n sPhrase = ` Gentile utente,<br>\r\n abbiamo ricevuto la tua richiesta.<br><br>\r\n\r\n Per completare l'operazione, clicca sul link qui sotto:<br>\r\n <a href=\"${resetUrl}\">completa la procedura</a><br><br>\r\n\r\n Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>\r\n Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>\r\n\r\n Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>\r\n\r\n Grazie.<br>`;\r\n }\r\n\r\n const html = this.GetHtmlMail(sPhrase);\r\n const mailOptions = {\r\n from: this.accessiOptions.emailOptions.from,\r\n to: email,\r\n subject: 'Scelta nuova password',\r\n text: sPhrase,\r\n html: html,\r\n };\r\n\r\n await this.transporter.sendMail(mailOptions);\r\n } catch (error) {\r\n if (codiceUtente && nonce) {\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ? AND KEYREG = ?',\n [codiceUtente, nonce],\n false,\n ).catch(() => undefined);\r\n }\r\n this.logger.error(\"Errore nell'invio dell'email di reset password:\", error);\r\n throw new Error(\"Errore durante l'invio dell'email di reset password.\");\r\n }\r\n }\r\n\r\n private GetHtmlMail(sPhrase: string): string {\r\n let sTxt = '';\r\n sTxt += '<html xmlns=\"http://www.w3.org/1999/xhtml\">';\r\n sTxt += '<head>';\r\n sTxt += ' <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">';\r\n sTxt += ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">';\r\n sTxt += ' <title></title>';\r\n sTxt += ' <style type=\"text/css\">';\r\n sTxt += ' @media only screen and (max-width:480px) {';\r\n sTxt += ' body,';\r\n sTxt += ' table,';\r\n sTxt += ' td,';\r\n sTxt += ' p,';\r\n sTxt += ' a,';\r\n sTxt += ' li,';\r\n sTxt += ' blockquote {';\r\n sTxt += ' -webkit-text-size-adjust: none !important';\r\n sTxt += ' }';\r\n sTxt += ' body {';\r\n sTxt += ' width: 100% !important;';\r\n sTxt += ' min-width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' #bodyCell {';\r\n sTxt += ' padding: 10px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmMobileHide {';\r\n sTxt += ' display: none !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmDesktopOnly,';\r\n sTxt += ' td.kmDesktopOnly,';\r\n sTxt += ' th.kmDesktopOnly,';\r\n sTxt += ' tr.kmDesktopOnly,';\r\n sTxt += ' td.kmDesktopWrapHeaderMobileNone {';\r\n sTxt += ' display: none !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmMobileOnly {';\r\n sTxt += ' display: table !important';\r\n sTxt += ' }';\r\n sTxt += ' tr.kmMobileOnly {';\r\n sTxt += ' display: table-row !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileOnly,';\r\n sTxt += ' td.kmDesktopWrapHeader,';\r\n sTxt += ' th.kmMobileOnly {';\r\n sTxt += ' display: table-cell !important';\r\n sTxt += ' }';\r\n sTxt += ' tr.kmMobileNoAlign,';\r\n sTxt += ' table.kmMobileNoAlign {';\r\n sTxt += ' float: none !important;';\r\n sTxt += ' text-align: initial !important;';\r\n sTxt += ' vertical-align: middle !important;';\r\n sTxt += ' table-layout: fixed !important';\r\n sTxt += ' }';\r\n sTxt += ' tr.kmMobileCenterAlign {';\r\n sTxt += ' float: none !important;';\r\n sTxt += ' text-align: center !important;';\r\n sTxt += ' vertical-align: middle !important;';\r\n sTxt += ' table-layout: fixed !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmButtonCollection {';\r\n sTxt += ' padding-left: 9px !important;';\r\n sTxt += ' padding-right: 9px !important;';\r\n sTxt += ' padding-top: 9px !important;';\r\n sTxt += ' padding-bottom: 9px !importan';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileHeaderStackDesktopNone,';\r\n sTxt += ' img.kmMobileHeaderStackDesktopNone,';\r\n sTxt += ' td.kmMobileHeaderStack {';\r\n sTxt += ' display: block !important;';\r\n sTxt += ' margin-left: auto !important;';\r\n sTxt += ' margin-right: auto !important;';\r\n sTxt += ' padding-bottom: 9px !important;';\r\n sTxt += ' padding-right: 0 !important;';\r\n sTxt += ' padding-left: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileWrapHeader,';\r\n sTxt += ' td.kmMobileWrapHeaderDesktopNone {';\r\n sTxt += ' display: inline-block !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileHeaderSpacing {';\r\n sTxt += ' padding-right: 10px !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileHeaderNoSpacing {';\r\n sTxt += ' padding-right: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmDesktopAutoWidth {';\r\n sTxt += ' width: inherit !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmMobileAutoWidth {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmTextContentContainer {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmBoxedTextContentContainer {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmImageContent {';\r\n sTxt += ' padding-left: 0 !important;';\r\n sTxt += ' padding-right: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' img.kmImage {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileStretch {';\r\n sTxt += ' padding-left: 0 !important;';\r\n sTxt += ' padding-right: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmSplitContentLeftContentContainer,';\r\n sTxt += ' table.kmSplitContentRightContentContainer,';\r\n sTxt += ' table.kmColumnContainer,';\r\n sTxt += ' td.kmVerticalButtonBarContentOuter table.kmButtonBarContent,';\r\n sTxt +=\r\n ' td.kmVerticalButtonCollectionContentOuter table.kmButtonCollectionContent,';\r\n sTxt += ' table.kmVerticalButton,';\r\n sTxt += ' table.kmVerticalButtonContent {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmButtonCollectionInner {';\r\n sTxt += ' padding-left: 9px !important;';\r\n sTxt += ' padding-right: 9px !important;';\r\n sTxt += ' padding-top: 9px !important;';\r\n sTxt += ' padding-bottom: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmVerticalButtonIconContent,';\r\n sTxt += ' td.kmVerticalButtonTextContent,';\r\n sTxt += ' td.kmVerticalButtonContentOuter {';\r\n sTxt += ' padding-left: 0 !important;';\r\n sTxt += ' padding-right: 0 !important;';\r\n sTxt += ' padding-bottom: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmTextContent,';\r\n sTxt += ' table.kmSplitContentRightContentContainer td.kmTextContent,';\r\n sTxt += ' table.kmColumnContainer td.kmTextContent,';\r\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmImageContent,';\r\n sTxt += ' table.kmSplitContentRightContentContainer td.kmImageContent {';\r\n sTxt += ' padding-top: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' td.rowContainer.kmFloatLeft,';\r\n sTxt += ' td.rowContainer.kmFloatLeft,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn {';\r\n sTxt += ' float: left;';\r\n sTxt += ' clear: both;';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' table.templateContainer,';\r\n sTxt += ' table.templateContainer.brandingContainer,';\r\n sTxt += ' div.templateContainer,';\r\n sTxt += ' div.templateContainer.brandingContainer,';\r\n sTxt += ' table.templateRow {';\r\n sTxt += ' max-width: 600px !important;';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' h1 {';\r\n sTxt += ' font-size: 30px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' h2 {';\r\n sTxt += ' font-size: 22px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' h3 {';\r\n sTxt += ' font-size: 22px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' h4 {';\r\n sTxt += ' font-size: 16px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmTextContent {';\r\n sTxt += ' font-size: 14px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmTextBlockInner td.kmTextContent {';\r\n sTxt += ' padding-right: 18px !important;';\r\n sTxt += ' padding-left: 18px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner {';\r\n sTxt += ' padding-left: 9px !important;';\r\n sTxt += ' padding-right: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner .kmTextContent {';\r\n sTxt += ' font-size: 14px !important;';\r\n sTxt += ' line-height: 130% !important;';\r\n sTxt += ' padding-left: 4px !important;';\r\n sTxt += ' padding-right: 4px !important';\r\n sTxt += ' }';\r\n sTxt += ' }';\r\n sTxt += ' </style>';\r\n sTxt += '</head>';\r\n sTxt +=\r\n '<body style=\"margin:0;padding:0;font-family:\"Raleway\", Helvetica, sans-serif;font-weight:400;letter-spacing:0.75px;line-height:180%;background-color:#F2F2F2\">';\r\n sTxt += ' <center>';\r\n sTxt +=\r\n ' <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"bodyTable\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding:0;background-color:#F2F2F2;height:100%;margin:0;width:100%\">';\r\n sTxt += ' <tbody>';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td align=\"center\" id=\"bodyCell\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding-top:10px;padding-left:10px;padding-bottom:20px;padding-right:10px;border-top:0;height:100%;margin:0;width:100%\">';\r\n sTxt += ' <!--[if !mso]>';\r\n sTxt += '\t\t\t\t\t<!-->';\r\n sTxt +=\r\n ' <div class=\"templateContainer\" style=\"border:0 none #aaa;background-color:#F2F2F2;border-radius:0;display: table; width:90%\">';\r\n sTxt += ' <div class=\"templateContainerInner\" style=\"padding:0\">';\r\n sTxt += ' <!--';\r\n sTxt += '\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt += ' <!--[if mso]>';\r\n sTxt +=\r\n '\t\t\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateContainer\" width=\"90%\" ';\r\n sTxt +=\r\n ' style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\r\n sTxt += '\t\t\t\t\t\t\t\t<tbody>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t<tr>';\r\n sTxt +=\r\n '\t\t\t\t\t\t\t\t\t\t<td class=\"templateContainerInner\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt +=\r\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td align=\"center\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateRow\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt += ' <tbody>';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td class=\"rowContainer kmFloatLeft\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextBlock\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <tbody class=\"kmTextBlockOuter\">';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td class=\"kmTextBlockInner\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;background-color:#FFFFFF;\">';\r\n sTxt +=\r\n ' <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextContentContainer\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <tbody>';\r\n sTxt +=\r\n ' <tr>';\r\n sTxt +=\r\n ' <td class=\"kmTextContent\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;color:#272727;font-family:Helvetica, Arial;font-size:13px;line-height:200%;letter-spacing:normal;text-align:left;padding-top:40px;padding-bottom:40px;padding-left:40px;padding-right:40px;\">';\r\n sTxt +=\r\n ' <p>' +\r\n sPhrase +\r\n '<p>';\r\n sTxt +=\r\n ' </td>';\r\n sTxt +=\r\n ' </tr>';\r\n sTxt +=\r\n ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </table>';\r\n sTxt += ' <!--[if !mso]>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-->';\r\n sTxt += ' </div>';\r\n sTxt += ' </div>';\r\n sTxt += ' <!--';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt += ' <!--[if mso]>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t</td>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t</tr>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t</tbody>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t</table>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </center>';\r\n sTxt += '</body>';\r\n sTxt += '</html> ';\r\n\r\n return sTxt;\r\n }\r\n}\r\n"]}
@@ -1,11 +1,26 @@
1
- import { AccessiOptions } from '../../AccessiModule';
1
+ import type { AccessiOptions } from '../../AccessiModule';
2
2
  import { TipoFiltro } from '../../Dtos/TipoFiltro';
3
- import { FiltriUtente } from '../../Dtos';
3
+ import { CreateFilterTypeRequest, FiltriUtente, UpdateFilterTypeRequest } from '../../Dtos';
4
4
  export declare class FiltriService {
5
5
  private readonly accessiOptions;
6
6
  private readonly logger;
7
7
  constructor(accessiOptions: AccessiOptions);
8
+ /** Returns the enabled filter-type catalog used by legacy and configurator clients. */
8
9
  getTipoFiltri(): Promise<TipoFiltro[]>;
9
- getFiltriUser(codUte: number): Promise<FiltriUtente[]>;
10
+ private countWhere;
11
+ /** Creates a filter-type catalog entry. `TIPFIL` is the immutable primary key. */
12
+ createTipoFiltro(input: CreateFilterTypeRequest): Promise<void>;
13
+ /** Updates only the supplied fields of a filter-type entry. */
14
+ updateTipoFiltro(tipFil: number, input: UpdateFilterTypeRequest): Promise<void>;
15
+ /** Deletes a filter type only when no saved user filter references it. */
16
+ deleteTipoFiltro(tipFil: number): Promise<void>;
17
+ /** Returns filters for one user; omit the code only for trusted administrative reporting. */
18
+ getFiltriUser(codUte: number | undefined): Promise<FiltriUtente[]>;
19
+ /** Validate before a caller creates or updates user data. */
20
+ validateSupportedFields(dto: Partial<FiltriUtente>, columns?: Set<string>): Promise<Set<string>>;
21
+ /**
22
+ * Upserts only supplied mapped fields. `undefined` leaves a field unchanged; `null` or an empty string clears it.
23
+ * The mapping is centralized in `FILTRI_UTENTE_DB_MAPPING` to keep DTO and database names decoupled.
24
+ */
10
25
  upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void>;
11
26
  }
@@ -24,6 +24,7 @@ var FiltriService_1;
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.FiltriService = void 0;
26
26
  const common_1 = require("@nestjs/common");
27
+ const optionalColumns_1 = require("../../database-updates/optionalColumns");
27
28
  const Orm_1 = require("../../../Orm");
28
29
  const Utilities_1 = require("../../../Utilities");
29
30
  const Logger_1 = require("../../../Logger");
@@ -33,12 +34,13 @@ let FiltriService = FiltriService_1 = class FiltriService {
33
34
  this.accessiOptions = accessiOptions;
34
35
  this.logger = new Logger_1.Logger(FiltriService_1.name);
35
36
  }
37
+ /** Returns the enabled filter-type catalog used by legacy and configurator clients. */
36
38
  getTipoFiltri() {
37
39
  return __awaiter(this, void 0, void 0, function* () {
38
40
  try {
39
- let getQuery = 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';
41
+ const getQuery = 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';
40
42
  const params = [];
41
- let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, getQuery, params);
43
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, getQuery, params);
42
44
  return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
43
45
  }
44
46
  catch (error) {
@@ -47,12 +49,72 @@ let FiltriService = FiltriService_1 = class FiltriService {
47
49
  }
48
50
  });
49
51
  }
52
+ countWhere(table, column, value) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ var _a, _b, _c;
55
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT COUNT(*) FROM ${table} WHERE ${column} = ?`, [value]);
56
+ const raw = (_b = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a.COUNT) !== null && _b !== void 0 ? _b : (_c = result === null || result === void 0 ? void 0 : result[0]) === null || _c === void 0 ? void 0 : _c.count;
57
+ return typeof raw === 'number' ? raw : Number.parseInt(`${raw !== null && raw !== void 0 ? raw : '0'}`, 10);
58
+ });
59
+ }
60
+ /** Creates a filter-type catalog entry. `TIPFIL` is the immutable primary key. */
61
+ createTipoFiltro(input) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ var _a, _b, _c;
64
+ if ((yield this.countWhere('FILTRI_TIPO', 'TIPFIL', input.tipFil)) > 0) {
65
+ throw new common_1.BadRequestException(`Il tipo filtro ${input.tipFil} esiste gia.`);
66
+ }
67
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, `INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)`, [input.tipFil, (_a = input.desFil) !== null && _a !== void 0 ? _a : null, (_b = input.fldFil) !== null && _b !== void 0 ? _b : null, (_c = input.flgEnabled) !== null && _c !== void 0 ? _c : 1]);
68
+ });
69
+ }
70
+ /** Updates only the supplied fields of a filter-type entry. */
71
+ updateTipoFiltro(tipFil, input) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ if ((yield this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {
74
+ throw new common_1.BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);
75
+ }
76
+ const sets = [];
77
+ const params = [];
78
+ if (input.desFil !== undefined) {
79
+ sets.push('DESFIL = ?');
80
+ params.push(input.desFil);
81
+ }
82
+ if (input.fldFil !== undefined) {
83
+ sets.push('FLDFIL = ?');
84
+ params.push(input.fldFil);
85
+ }
86
+ if (input.flgEnabled !== undefined) {
87
+ sets.push('FLGENABLED = ?');
88
+ params.push(input.flgEnabled);
89
+ }
90
+ if (sets.length === 0)
91
+ return;
92
+ params.push(tipFil);
93
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, `UPDATE FILTRI_TIPO SET ${sets.join(', ')} WHERE TIPFIL = ?`, params);
94
+ });
95
+ }
96
+ /** Deletes a filter type only when no saved user filter references it. */
97
+ deleteTipoFiltro(tipFil) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ if ((yield this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {
100
+ throw new common_1.BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);
101
+ }
102
+ const used = yield this.countWhere('FILTRI', 'TIPFIL', tipFil);
103
+ if (used > 0) {
104
+ throw new common_1.BadRequestException(`Impossibile eliminare il tipo filtro ${tipFil}: ${used} filtri lo utilizzano.`);
105
+ }
106
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, `DELETE FROM FILTRI_TIPO WHERE TIPFIL = ?`, [tipFil]);
107
+ });
108
+ }
109
+ /** Returns filters for one user; omit the code only for trusted administrative reporting. */
50
110
  getFiltriUser(codUte) {
51
111
  return __awaiter(this, void 0, void 0, function* () {
52
112
  try {
53
- let params = [];
54
- let getQuery = `SELECT CODUTE AS COD_UTE, PROG AS PROGRESSIVO, NUMREP AS NUM_REP, IDXPERS AS IDX_PERS, CODCLISUPER AS COD_CLI_SUPER, CODAGE AS COD_AGE, CODCLICOL AS COD_CLI_COL,
55
- CODCLIENTI AS COD_CLIENTI, TIPFIL AS TIP_FIL, CODDIP AS COD_DIP, IDXPOS AS IDX_POS, CODVET AS COD_VET FROM FILTRI `;
113
+ const params = [];
114
+ const columns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI');
115
+ const aliases = { PROG: 'PROGRESSIVO', NUMREP: 'NUM_REP', IDXPERS: 'IDX_PERS', CODCLISUPER: 'COD_CLI_SUPER', CODAGE: 'COD_AGE', CODCLICOL: 'COD_CLI_COL', CODCLIENTI: 'COD_CLIENTI', TIPFIL: 'TIP_FIL', CODDIP: 'COD_DIP', IDXPOS: 'IDX_POS', CODVET: 'COD_VET' };
116
+ const selections = Object.values(Dtos_1.FILTRI_UTENTE_DB_MAPPING).map(cfg => (0, optionalColumns_1.optionalColumn)(columns, cfg.dbField, 'F', aliases[cfg.dbField], cfg.numeric));
117
+ let getQuery = `SELECT F.CODUTE AS COD_UTE, ${selections.join(', ')} FROM FILTRI F `;
56
118
  if (codUte === undefined) {
57
119
  this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');
58
120
  }
@@ -61,7 +123,7 @@ let FiltriService = FiltriService_1 = class FiltriService {
61
123
  getQuery += ' WHERE CODUTE = ?';
62
124
  params.push(codUte);
63
125
  }
64
- let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, getQuery, params);
126
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, getQuery, params);
65
127
  return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
66
128
  }
67
129
  catch (error) {
@@ -69,18 +131,36 @@ let FiltriService = FiltriService_1 = class FiltriService {
69
131
  }
70
132
  });
71
133
  }
134
+ /** Validate before a caller creates or updates user data. */
135
+ validateSupportedFields(dto, columns) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ columns !== null && columns !== void 0 ? columns : (columns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI'));
138
+ for (const [key, cfg] of Object.entries(Dtos_1.FILTRI_UTENTE_DB_MAPPING)) {
139
+ const value = dto[key];
140
+ if (value !== undefined && value !== null && value !== '' && !columns.has(cfg.dbField)) {
141
+ throw new common_1.BadRequestException(`Filtro applicativo non configurato: FILTRI.${cfg.dbField}`);
142
+ }
143
+ }
144
+ return columns;
145
+ });
146
+ }
147
+ /**
148
+ * Upserts only supplied mapped fields. `undefined` leaves a field unchanged; `null` or an empty string clears it.
149
+ * The mapping is centralized in `FILTRI_UTENTE_DB_MAPPING` to keep DTO and database names decoupled.
150
+ */
72
151
  upsertFiltriUtente(codUte, dto) {
73
152
  return __awaiter(this, void 0, void 0, function* () {
74
153
  try {
75
154
  if (!codUte || codUte <= 0)
76
155
  throw new Error('Codice utente non valido');
156
+ const columns = yield this.validateSupportedFields(dto);
77
157
  const dbFields = ['CODUTE'];
78
158
  const values = [codUte];
79
159
  //aggiungo solo campi valorizzati
80
160
  for (const [key, cfg] of Object.entries(Dtos_1.FILTRI_UTENTE_DB_MAPPING)) {
81
161
  const value = dto[key];
82
162
  //gestione campi vuoti, null o undefined
83
- if (value === undefined) {
163
+ if (value === undefined || !columns.has(cfg.dbField)) {
84
164
  continue;
85
165
  }
86
166
  if (value === null || value === '') {
@@ -106,14 +186,17 @@ let FiltriService = FiltriService_1 = class FiltriService {
106
186
  this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte);
107
187
  }
108
188
  catch (error) {
109
- throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${error.message}`);
189
+ const message = error instanceof Error ? error.message : String(error);
190
+ throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${message}`);
110
191
  }
111
192
  });
112
193
  }
113
194
  };
114
195
  exports.FiltriService = FiltriService;
115
196
  exports.FiltriService = FiltriService = FiltriService_1 = __decorate([
116
- (0, common_1.Injectable)(),
197
+ (0, common_1.Injectable)()
198
+ /** Persists application-specific filter dimensions associated with an Accessi user. */
199
+ ,
117
200
  __param(0, (0, common_1.Inject)('ACCESSI_OPTIONS')),
118
201
  __metadata("design:paramtypes", [Object])
119
202
  ], FiltriService);
@@ -1 +1 @@
1
- {"version":3,"file":"FiltriService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/FiltriService/FiltriService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { TipoFiltro } from '../../Dtos/TipoFiltro';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport { Logger } from '../../../Logger';\nimport { FiltriUtente, FILTRI_UTENTE_DB_MAPPING } from '../../Dtos';\n\n@Injectable()\nexport class FiltriService {\n private readonly logger = new Logger(FiltriService.name);\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\n public async getTipoFiltri(): Promise<TipoFiltro[]> {\n try {\n let getQuery =\n 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';\n const params = [];\n\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase);\n } catch (error) {\n this.logger.error('Errore durante il recupero dei tipi di filtri', error);\n throw error;\n }\n }\n\n public async getFiltriUser(codUte: number): Promise<FiltriUtente[]> {\n try {\n let params = [];\n\n let getQuery = `SELECT CODUTE AS COD_UTE, PROG AS PROGRESSIVO, NUMREP AS NUM_REP, IDXPERS AS IDX_PERS, CODCLISUPER AS COD_CLI_SUPER, CODAGE AS COD_AGE, CODCLICOL AS COD_CLI_COL,\n CODCLIENTI AS COD_CLIENTI, TIPFIL AS TIP_FIL, CODDIP AS COD_DIP, IDXPOS AS IDX_POS, CODVET AS COD_VET FROM FILTRI `;\n\n if (codUte === undefined) {\n this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');\n } else {\n this.logger.log('codUte passato, recupero i filtri dell utente ' + codUte);\n getQuery += ' WHERE CODUTE = ?';\n params.push(codUte);\n }\n\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase);\n } catch (error) {\n throw error;\n }\n }\n\n public async upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void> {\n try {\n if (!codUte || codUte <= 0) throw new Error('Codice utente non valido');\n\n const dbFields: string[] = ['CODUTE'];\n const values: any[] = [codUte];\n\n //aggiungo solo campi valorizzati\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\n const value = (dto as any)[key];\n\n //gestione campi vuoti, null o undefined\n if (value === undefined) {\n continue\n }\n\n if (value === null || value === '') {\n dbFields.push(cfg.dbField);\n values.push(null);\n continue\n }\n if (cfg.numeric && typeof value !== 'number') {\n throw new Error(`Il campo ${key} deve essere un numero`);\n }\n if (!cfg.numeric && typeof value !== 'string') {\n throw new Error(`Il campo ${key} deve essere una stringa`);\n }\n dbFields.push(cfg.dbField);\n values.push(value);\n }\n\n if (dbFields.length === 1) {\n this.logger.log(`Nessun campo valido da inserire per l'utente ${codUte}`)\n return\n }\n\n let sSql = `UPDATE OR INSERT INTO FILTRI (${dbFields.join(',')}) VALUES (${values.map(() => '?').join(', ')}) MATCHING (CODUTE)`\n await Orm.execute(this.accessiOptions.databaseOptions, sSql, values)\n\n this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte)\n\n } catch (error) {\n throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${error.message}`);\n\n }\n }\n}\n"]}
1
+ {"version":3,"file":"FiltriService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/FiltriService/FiltriService.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Inject, Injectable } from '@nestjs/common';\r\nimport { getTableColumns, optionalColumn } from '../../database-updates/optionalColumns';\r\nimport type { AccessiOptions } from '../../AccessiModule';\r\nimport { TipoFiltro } from '../../Dtos/TipoFiltro';\r\nimport { Orm } from '../../../Orm';\r\nimport { RestUtilities } from '../../../Utilities';\r\nimport { Logger } from '../../../Logger';\r\nimport {\r\n CreateFilterTypeRequest,\r\n FiltriUtente,\r\n FILTRI_UTENTE_DB_MAPPING,\r\n UpdateFilterTypeRequest,\r\n} from '../../Dtos';\r\n\r\n@Injectable()\r\n/** Persists application-specific filter dimensions associated with an Accessi user. */\r\nexport class FiltriService {\r\n private readonly logger = new Logger(FiltriService.name);\r\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\r\n\r\n /** Returns the enabled filter-type catalog used by legacy and configurator clients. */\r\n public async getTipoFiltri(): Promise<TipoFiltro[]> {\r\n try {\r\n const getQuery =\r\n 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';\r\n const params: unknown[] = [];\r\n\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\r\n return result.map(RestUtilities.convertKeysToCamelCase) as unknown as TipoFiltro[];\r\n } catch (error) {\r\n this.logger.error('Errore durante il recupero dei tipi di filtri', error);\r\n throw error;\r\n }\r\n }\r\n\r\n private async countWhere(table: string, column: string, value: unknown): Promise<number> {\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n `SELECT COUNT(*) FROM ${table} WHERE ${column} = ?`,\r\n [value],\r\n );\r\n const raw = (result?.[0] as Record<string, unknown> | undefined)?.COUNT\r\n ?? (result?.[0] as Record<string, unknown> | undefined)?.count;\r\n return typeof raw === 'number' ? raw : Number.parseInt(`${raw ?? '0'}`, 10);\r\n }\r\n\r\n /** Creates a filter-type catalog entry. `TIPFIL` is the immutable primary key. */\r\n public async createTipoFiltro(input: CreateFilterTypeRequest): Promise<void> {\r\n if ((await this.countWhere('FILTRI_TIPO', 'TIPFIL', input.tipFil)) > 0) {\r\n throw new BadRequestException(`Il tipo filtro ${input.tipFil} esiste gia.`);\r\n }\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n `INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)`,\r\n [input.tipFil, input.desFil ?? null, input.fldFil ?? null, input.flgEnabled ?? 1],\r\n );\r\n }\r\n\r\n /** Updates only the supplied fields of a filter-type entry. */\r\n public async updateTipoFiltro(tipFil: number, input: UpdateFilterTypeRequest): Promise<void> {\r\n if ((await this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {\r\n throw new BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);\r\n }\r\n\r\n const sets: string[] = [];\r\n const params: unknown[] = [];\r\n if (input.desFil !== undefined) {\r\n sets.push('DESFIL = ?');\r\n params.push(input.desFil);\r\n }\r\n if (input.fldFil !== undefined) {\r\n sets.push('FLDFIL = ?');\r\n params.push(input.fldFil);\r\n }\r\n if (input.flgEnabled !== undefined) {\r\n sets.push('FLGENABLED = ?');\r\n params.push(input.flgEnabled);\r\n }\r\n if (sets.length === 0) return;\r\n\r\n params.push(tipFil);\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n `UPDATE FILTRI_TIPO SET ${sets.join(', ')} WHERE TIPFIL = ?`,\r\n params,\r\n );\r\n }\r\n\r\n /** Deletes a filter type only when no saved user filter references it. */\r\n public async deleteTipoFiltro(tipFil: number): Promise<void> {\r\n if ((await this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {\r\n throw new BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);\r\n }\r\n const used = await this.countWhere('FILTRI', 'TIPFIL', tipFil);\r\n if (used > 0) {\r\n throw new BadRequestException(\r\n `Impossibile eliminare il tipo filtro ${tipFil}: ${used} filtri lo utilizzano.`,\r\n );\r\n }\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n `DELETE FROM FILTRI_TIPO WHERE TIPFIL = ?`,\r\n [tipFil],\r\n );\r\n }\r\n\r\n /** Returns filters for one user; omit the code only for trusted administrative reporting. */\r\n public async getFiltriUser(codUte: number | undefined): Promise<FiltriUtente[]> {\r\n try {\r\n const params: unknown[] = [];\r\n\r\n const columns = await getTableColumns(this.accessiOptions, 'FILTRI');\r\n const aliases = { PROG: 'PROGRESSIVO', NUMREP: 'NUM_REP', IDXPERS: 'IDX_PERS', CODCLISUPER: 'COD_CLI_SUPER', CODAGE: 'COD_AGE', CODCLICOL: 'COD_CLI_COL', CODCLIENTI: 'COD_CLIENTI', TIPFIL: 'TIP_FIL', CODDIP: 'COD_DIP', IDXPOS: 'IDX_POS', CODVET: 'COD_VET' };\r\n const selections = Object.values(FILTRI_UTENTE_DB_MAPPING).map(cfg => optionalColumn(columns, cfg.dbField, 'F', aliases[cfg.dbField], cfg.numeric));\r\n let getQuery = `SELECT F.CODUTE AS COD_UTE, ${selections.join(', ')} FROM FILTRI F `;\r\n\r\n if (codUte === undefined) {\r\n this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');\r\n } else {\r\n this.logger.log('codUte passato, recupero i filtri dell utente ' + codUte);\r\n getQuery += ' WHERE CODUTE = ?';\r\n params.push(codUte);\r\n }\r\n\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\r\n return result.map(RestUtilities.convertKeysToCamelCase) as unknown as FiltriUtente[];\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /** Validate before a caller creates or updates user data. */\r\n public async validateSupportedFields(dto: Partial<FiltriUtente>, columns?: Set<string>): Promise<Set<string>> {\r\n columns ??= await getTableColumns(this.accessiOptions, 'FILTRI');\r\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\r\n const value = (dto as Record<string, unknown>)[key];\r\n if (value !== undefined && value !== null && value !== '' && !columns.has(cfg.dbField)) {\r\n throw new BadRequestException(`Filtro applicativo non configurato: FILTRI.${cfg.dbField}`);\r\n }\r\n }\r\n return columns;\r\n }\r\n\r\n /**\r\n * Upserts only supplied mapped fields. `undefined` leaves a field unchanged; `null` or an empty string clears it.\r\n * The mapping is centralized in `FILTRI_UTENTE_DB_MAPPING` to keep DTO and database names decoupled.\r\n */\r\n public async upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void> {\r\n try {\r\n if (!codUte || codUte <= 0) throw new Error('Codice utente non valido');\r\n\r\n const columns = await this.validateSupportedFields(dto);\r\n const dbFields: string[] = ['CODUTE'];\r\n const values: unknown[] = [codUte];\r\n\r\n //aggiungo solo campi valorizzati\r\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\r\n const value = (dto as Record<string, unknown>)[key];\r\n\r\n //gestione campi vuoti, null o undefined\r\n if (value === undefined || !columns.has(cfg.dbField)) {\r\n continue\r\n }\r\n\r\n if (value === null || value === '') {\r\n dbFields.push(cfg.dbField);\r\n values.push(null);\r\n continue\r\n }\r\n if (cfg.numeric && typeof value !== 'number') {\r\n throw new Error(`Il campo ${key} deve essere un numero`);\r\n }\r\n if (!cfg.numeric && typeof value !== 'string') {\r\n throw new Error(`Il campo ${key} deve essere una stringa`);\r\n }\r\n dbFields.push(cfg.dbField);\r\n values.push(value);\r\n }\r\n\r\n if (dbFields.length === 1) {\r\n this.logger.log(`Nessun campo valido da inserire per l'utente ${codUte}`)\r\n return\r\n }\r\n\r\n let sSql = `UPDATE OR INSERT INTO FILTRI (${dbFields.join(',')}) VALUES (${values.map(() => '?').join(', ')}) MATCHING (CODUTE)`\r\n await Orm.execute(this.accessiOptions.databaseOptions, sSql, values)\r\n\r\n this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte)\r\n\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${message}`);\r\n }\r\n }\r\n}\r\n"]}