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

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 (379) hide show
  1. package/dist/DailyFileTransport.d.ts +15 -0
  2. package/dist/DailyFileTransport.js +67 -0
  3. package/dist/DailyFileTransport.js.map +1 -0
  4. package/dist/DatabaseUpdater.js +0 -2
  5. package/dist/DatabaseUpdater.js.map +1 -1
  6. package/dist/ExecutionTimeLogger.js +2 -2
  7. package/dist/ExecutionTimeLogger.js.map +1 -1
  8. package/dist/Logger.d.ts +0 -2
  9. package/dist/Logger.js +6 -70
  10. package/dist/Logger.js.map +1 -1
  11. package/dist/Utilities.d.ts +8 -3
  12. package/dist/Utilities.js +61 -16
  13. package/dist/Utilities.js.map +1 -1
  14. package/dist/accessi-module/AccessiModule.d.ts +60 -0
  15. package/dist/accessi-module/AccessiModule.js +21 -5
  16. package/dist/accessi-module/AccessiModule.js.map +1 -1
  17. package/dist/accessi-module/Console/accessiFetch.d.ts +7 -0
  18. package/dist/accessi-module/Console/accessiFetch.js +59 -0
  19. package/dist/accessi-module/Console/accessiFetch.js.map +1 -0
  20. package/dist/accessi-module/Console/console.css +370 -0
  21. package/dist/accessi-module/Console/console.d.ts +1 -0
  22. package/dist/accessi-module/Console/console.js +1105 -0
  23. package/dist/accessi-module/Console/console.js.map +1 -0
  24. package/dist/accessi-module/Console/generated/accessiApi.d.ts +376 -0
  25. package/dist/accessi-module/Console/generated/accessiApi.js +363 -0
  26. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -0
  27. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +27 -0
  28. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js +3 -0
  29. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -0
  30. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.d.ts +16 -0
  31. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js +17 -0
  32. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js.map +1 -0
  33. package/dist/accessi-module/Console/generated/model/actionResponse.d.ts +12 -0
  34. package/dist/accessi-module/Console/generated/model/actionResponse.js +9 -0
  35. package/dist/accessi-module/Console/generated/model/actionResponse.js.map +1 -0
  36. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.d.ts +11 -0
  37. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js +3 -0
  38. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js.map +1 -0
  39. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.d.ts +10 -0
  40. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js +9 -0
  41. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js.map +1 -0
  42. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.d.ts +10 -0
  43. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js +3 -0
  44. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js.map +1 -0
  45. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +19 -0
  46. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js +9 -0
  47. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -0
  48. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.d.ts +14 -0
  49. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js +9 -0
  50. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js.map +1 -0
  51. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.d.ts +13 -0
  52. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js +9 -0
  53. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js.map +1 -0
  54. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.d.ts +13 -0
  55. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js +9 -0
  56. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js.map +1 -0
  57. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.d.ts +18 -0
  58. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js +3 -0
  59. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js.map +1 -0
  60. package/dist/accessi-module/Console/generated/model/errorResponse.d.ts +18 -0
  61. package/dist/accessi-module/Console/generated/model/errorResponse.js +9 -0
  62. package/dist/accessi-module/Console/generated/model/errorResponse.js.map +1 -0
  63. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.d.ts +14 -0
  64. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js +3 -0
  65. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js.map +1 -0
  66. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.d.ts +14 -0
  67. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js +3 -0
  68. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js.map +1 -0
  69. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.d.ts +23 -0
  70. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js +9 -0
  71. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js.map +1 -0
  72. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.d.ts +14 -0
  73. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js +3 -0
  74. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js.map +1 -0
  75. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.d.ts +14 -0
  76. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js +3 -0
  77. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js.map +1 -0
  78. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.d.ts +13 -0
  79. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js +9 -0
  80. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js.map +1 -0
  81. package/dist/accessi-module/Console/generated/model/filtriUtente.d.ts +32 -0
  82. package/dist/accessi-module/Console/generated/model/filtriUtente.js +9 -0
  83. package/dist/accessi-module/Console/generated/model/filtriUtente.js.map +1 -0
  84. package/dist/accessi-module/Console/generated/model/getFiltriResponse.d.ts +14 -0
  85. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js +3 -0
  86. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js.map +1 -0
  87. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.d.ts +12 -0
  88. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js +9 -0
  89. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js.map +1 -0
  90. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.d.ts +14 -0
  91. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js +3 -0
  92. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js.map +1 -0
  93. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +12 -0
  94. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js +9 -0
  95. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -0
  96. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.d.ts +14 -0
  97. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js +3 -0
  98. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js.map +1 -0
  99. package/dist/accessi-module/Console/generated/model/getMenusResponse.d.ts +14 -0
  100. package/dist/accessi-module/Console/generated/model/getMenusResponse.js +3 -0
  101. package/dist/accessi-module/Console/generated/model/getMenusResponse.js.map +1 -0
  102. package/dist/accessi-module/Console/generated/model/getRolesResponse.d.ts +14 -0
  103. package/dist/accessi-module/Console/generated/model/getRolesResponse.js +3 -0
  104. package/dist/accessi-module/Console/generated/model/getRolesResponse.js.map +1 -0
  105. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.d.ts +10 -0
  106. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js +9 -0
  107. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js.map +1 -0
  108. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.d.ts +14 -0
  109. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js +3 -0
  110. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js.map +1 -0
  111. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +24 -0
  112. package/dist/accessi-module/Console/generated/model/getUsersParams.js +9 -0
  113. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -0
  114. package/dist/accessi-module/Console/generated/model/getUsersResponse.d.ts +14 -0
  115. package/dist/accessi-module/Console/generated/model/getUsersResponse.js +3 -0
  116. package/dist/accessi-module/Console/generated/model/getUsersResponse.js.map +1 -0
  117. package/dist/accessi-module/Console/generated/model/getUsersResult.d.ts +17 -0
  118. package/dist/accessi-module/Console/generated/model/getUsersResult.js +3 -0
  119. package/dist/accessi-module/Console/generated/model/getUsersResult.js.map +1 -0
  120. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.d.ts +12 -0
  121. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js +9 -0
  122. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js.map +1 -0
  123. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +19 -0
  124. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js +3 -0
  125. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -0
  126. package/dist/accessi-module/Console/generated/model/index.d.ts +75 -0
  127. package/dist/accessi-module/Console/generated/model/index.js +92 -0
  128. package/dist/accessi-module/Console/generated/model/index.js.map +1 -0
  129. package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +12 -0
  130. package/dist/accessi-module/Console/generated/model/loginRequest.js +9 -0
  131. package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -0
  132. package/dist/accessi-module/Console/generated/model/loginResponse.d.ts +14 -0
  133. package/dist/accessi-module/Console/generated/model/loginResponse.js +3 -0
  134. package/dist/accessi-module/Console/generated/model/loginResponse.js.map +1 -0
  135. package/dist/accessi-module/Console/generated/model/loginResult.d.ts +32 -0
  136. package/dist/accessi-module/Console/generated/model/loginResult.js +3 -0
  137. package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -0
  138. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.d.ts +12 -0
  139. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js +9 -0
  140. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js.map +1 -0
  141. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.d.ts +13 -0
  142. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js +14 -0
  143. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js.map +1 -0
  144. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +32 -0
  145. package/dist/accessi-module/Console/generated/model/menuEntity.js +9 -0
  146. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -0
  147. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.d.ts +12 -0
  148. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js +9 -0
  149. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js.map +1 -0
  150. package/dist/accessi-module/Console/generated/model/permission.d.ts +12 -0
  151. package/dist/accessi-module/Console/generated/model/permission.js +9 -0
  152. package/dist/accessi-module/Console/generated/model/permission.js.map +1 -0
  153. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +51 -0
  154. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js +9 -0
  155. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -0
  156. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +62 -0
  157. package/dist/accessi-module/Console/generated/model/registerRequest.js +3 -0
  158. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -0
  159. package/dist/accessi-module/Console/generated/model/registerResponse.d.ts +14 -0
  160. package/dist/accessi-module/Console/generated/model/registerResponse.js +3 -0
  161. package/dist/accessi-module/Console/generated/model/registerResponse.js.map +1 -0
  162. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.d.ts +13 -0
  163. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js +9 -0
  164. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js.map +1 -0
  165. package/dist/accessi-module/Console/generated/model/role.d.ts +15 -0
  166. package/dist/accessi-module/Console/generated/model/role.js +3 -0
  167. package/dist/accessi-module/Console/generated/model/role.js.map +1 -0
  168. package/dist/accessi-module/Console/generated/model/ruoliMenu.d.ts +15 -0
  169. package/dist/accessi-module/Console/generated/model/ruoliMenu.js +3 -0
  170. package/dist/accessi-module/Console/generated/model/ruoliMenu.js.map +1 -0
  171. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.d.ts +16 -0
  172. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js +17 -0
  173. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js.map +1 -0
  174. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.d.ts +12 -0
  175. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js +9 -0
  176. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js.map +1 -0
  177. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.d.ts +12 -0
  178. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js +9 -0
  179. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js.map +1 -0
  180. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.d.ts +10 -0
  181. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js +9 -0
  182. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js.map +1 -0
  183. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.d.ts +13 -0
  184. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js +3 -0
  185. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js.map +1 -0
  186. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.d.ts +18 -0
  187. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js +19 -0
  188. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js.map +1 -0
  189. package/dist/accessi-module/Console/generated/model/status.d.ts +12 -0
  190. package/dist/accessi-module/Console/generated/model/status.js +9 -0
  191. package/dist/accessi-module/Console/generated/model/status.js.map +1 -0
  192. package/dist/accessi-module/Console/generated/model/tipoFiltro.d.ts +23 -0
  193. package/dist/accessi-module/Console/generated/model/tipoFiltro.js +3 -0
  194. package/dist/accessi-module/Console/generated/model/tipoFiltro.js.map +1 -0
  195. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.d.ts +14 -0
  196. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js +15 -0
  197. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js.map +1 -0
  198. package/dist/accessi-module/Console/generated/model/tokenResult.d.ts +15 -0
  199. package/dist/accessi-module/Console/generated/model/tokenResult.js +3 -0
  200. package/dist/accessi-module/Console/generated/model/tokenResult.js.map +1 -0
  201. package/dist/accessi-module/Console/generated/model/tokenResultType.d.ts +14 -0
  202. package/dist/accessi-module/Console/generated/model/tokenResultType.js +15 -0
  203. package/dist/accessi-module/Console/generated/model/tokenResultType.js.map +1 -0
  204. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.d.ts +18 -0
  205. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js +3 -0
  206. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js.map +1 -0
  207. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.d.ts +10 -0
  208. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js +14 -0
  209. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js.map +1 -0
  210. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.d.ts +13 -0
  211. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js +14 -0
  212. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js.map +1 -0
  213. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.d.ts +10 -0
  214. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js +9 -0
  215. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js.map +1 -0
  216. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.d.ts +11 -0
  217. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js +9 -0
  218. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js.map +1 -0
  219. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.d.ts +12 -0
  220. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js +9 -0
  221. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js.map +1 -0
  222. package/dist/accessi-module/Console/generated/model/userDto.d.ts +88 -0
  223. package/dist/accessi-module/Console/generated/model/userDto.js +3 -0
  224. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -0
  225. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.d.ts +18 -0
  226. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js +19 -0
  227. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js.map +1 -0
  228. package/dist/accessi-module/Console/generated/model/userGrantsDto.d.ts +16 -0
  229. package/dist/accessi-module/Console/generated/model/userGrantsDto.js +3 -0
  230. package/dist/accessi-module/Console/generated/model/userGrantsDto.js.map +1 -0
  231. package/dist/accessi-module/Console/generated/model/userGrantsResponse.d.ts +14 -0
  232. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js +3 -0
  233. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js.map +1 -0
  234. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.d.ts +18 -0
  235. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js +9 -0
  236. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js.map +1 -0
  237. package/dist/accessi-module/Console/index.html +59 -0
  238. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +11 -0
  239. package/dist/accessi-module/Controllers/AccessiConsoleController.js +74 -0
  240. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -0
  241. package/dist/accessi-module/Controllers/AuthController.d.ts +4 -1
  242. package/dist/accessi-module/Controllers/AuthController.js +86 -47
  243. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  244. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -1
  245. package/dist/accessi-module/Controllers/ConfiguratorController.js +3 -1
  246. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  247. package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
  248. package/dist/accessi-module/Controllers/EmailController.js +3 -1
  249. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  250. package/dist/accessi-module/Controllers/FiltriController.d.ts +1 -1
  251. package/dist/accessi-module/Controllers/FiltriController.js +3 -1
  252. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  253. package/dist/accessi-module/Controllers/PermissionController.d.ts +1 -1
  254. package/dist/accessi-module/Controllers/PermissionController.js +9 -5
  255. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  256. package/dist/accessi-module/Controllers/UserController.d.ts +3 -1
  257. package/dist/accessi-module/Controllers/UserController.js +40 -2
  258. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  259. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +1 -1
  260. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  261. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +3 -0
  262. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +18 -0
  263. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
  264. package/dist/accessi-module/Dtos/BaseResponse.d.ts +2 -0
  265. package/dist/accessi-module/Dtos/BaseResponse.js +21 -2
  266. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  267. package/dist/accessi-module/Dtos/FederatedIdentityDtos.d.ts +69 -0
  268. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js +236 -0
  269. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js.map +1 -0
  270. package/dist/accessi-module/Dtos/FiltriUtente.js +4 -1
  271. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  272. package/dist/accessi-module/Dtos/LoginRequest.d.ts +1 -1
  273. package/dist/accessi-module/Dtos/LoginRequest.js +3 -2
  274. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  275. package/dist/accessi-module/Dtos/LoginResponse.d.ts +5 -1
  276. package/dist/accessi-module/Dtos/LoginResponse.js +19 -6
  277. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  278. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  279. package/dist/accessi-module/Dtos/Permission.js +1 -0
  280. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  281. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +1 -1
  282. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +1 -0
  283. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -1
  284. package/dist/accessi-module/Dtos/RegisterRequest.js +1 -0
  285. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  286. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  287. package/dist/accessi-module/Dtos/Role.js +4 -0
  288. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  289. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  290. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  291. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  292. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +13 -0
  293. package/dist/accessi-module/Dtos/TwoFactorDtos.js +60 -0
  294. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  295. package/dist/accessi-module/Dtos/UserDto.d.ts +7 -0
  296. package/dist/accessi-module/Dtos/UserDto.js +22 -0
  297. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  298. package/dist/accessi-module/Dtos/index.d.ts +2 -0
  299. package/dist/accessi-module/Dtos/index.js +2 -0
  300. package/dist/accessi-module/Dtos/index.js.map +1 -1
  301. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +39 -4
  302. package/dist/accessi-module/Services/AuthService/AuthService.js +184 -32
  303. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  304. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  305. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  306. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  307. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +7 -1
  308. package/dist/accessi-module/Services/EmailService/EmailService.js +23 -5
  309. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  310. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +9 -1
  311. package/dist/accessi-module/Services/FiltriService/FiltriService.js +29 -4
  312. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  313. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +29 -1
  314. package/dist/accessi-module/Services/PermissionService/PermissionService.js +38 -7
  315. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  316. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  317. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +179 -0
  318. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  319. package/dist/accessi-module/Services/UserService/UserService.d.ts +26 -2
  320. package/dist/accessi-module/Services/UserService/UserService.js +124 -30
  321. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  322. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +38 -10
  323. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +368 -184
  324. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  325. package/dist/accessi-module/database-updates/accessiSchema.d.ts +45 -0
  326. package/dist/accessi-module/database-updates/accessiSchema.js +79 -0
  327. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  328. package/dist/accessi-module/database-updates/optionalColumns.d.ts +5 -0
  329. package/dist/accessi-module/database-updates/optionalColumns.js +26 -0
  330. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  331. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +11 -6
  332. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  333. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +23 -0
  334. package/dist/accessi-module/federated-auth/FederatedAuthController.js +307 -0
  335. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  336. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +94 -0
  337. package/dist/accessi-module/federated-auth/FederatedAuthService.js +424 -0
  338. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  339. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  340. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  341. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  342. package/dist/accessi-module/index.d.ts +14 -0
  343. package/dist/accessi-module/index.js +18 -10
  344. package/dist/accessi-module/index.js.map +1 -1
  345. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  346. package/dist/accessi-module/jwt/jwt.strategy.js +10 -4
  347. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  348. package/dist/accessi-module/middleware/accessiRequirements.d.ts +22 -0
  349. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  350. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  351. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  352. package/dist/accessi-module/middleware/authenticateGen.js +54 -20
  353. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  354. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  355. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +74 -0
  356. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  357. package/dist/accessi-module/security/accessControl.d.ts +11 -0
  358. package/dist/accessi-module/security/accessControl.js +11 -1
  359. package/dist/accessi-module/security/accessControl.js.map +1 -1
  360. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  361. package/dist/accessi-module/security/accessiValidation.js +41 -0
  362. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  363. package/dist/accessi-module/security/authenticatedToken.d.ts +14 -0
  364. package/dist/accessi-module/security/authenticatedToken.js +30 -4
  365. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  366. package/dist/accessi-module/security/passwordResetToken.d.ts +5 -1
  367. package/dist/accessi-module/security/passwordResetToken.js +5 -1
  368. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  369. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +2 -2
  370. package/dist/accessi-module/security/publicAuthRateLimit.js +2 -0
  371. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  372. package/dist/emilsoftware-utilities-2.0.0-dev.23.tgz +0 -0
  373. package/dist/initEmilsoftwareModule.js +7 -0
  374. package/dist/initEmilsoftwareModule.js.map +1 -1
  375. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  376. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  377. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  378. package/package.json +13 -4
  379. package/dist/emilsoftware-utilities-2.0.0-dev.22.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"publicAuthRateLimit.js","sourceRoot":"","sources":["../../../src/accessi-module/security/publicAuthRateLimit.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpStatus } from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport { AccessiOptions, PublicAuthRateLimitRuleOptions } from '../AccessiModule';\n\nexport type PublicAuthRateLimitScope =\n | 'login'\n | 'register'\n | 'passwordResetEmail'\n | 'passwordResetConfirm'\n | 'getUserByToken';\n\ntype RateLimitBucket = {\n count: number;\n resetAt: number;\n lastSeenAt: number;\n};\n\ntype RateLimitDecision = {\n allowed: boolean;\n retryAfterSeconds?: number;\n};\n\nconst DEFAULT_PUBLIC_AUTH_RATE_LIMITS: Record<\n PublicAuthRateLimitScope,\n PublicAuthRateLimitRuleOptions\n> = {\n login: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n register: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\n passwordResetEmail: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\n passwordResetConfirm: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n getUserByToken: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },\n};\n\nconst RATE_LIMIT_BUCKETS = new Map<string, RateLimitBucket>();\nconst MAX_TRACKED_BUCKETS = 20000;\nconst MAX_WINDOW_MS = Math.max(\n ...Object.values(DEFAULT_PUBLIC_AUTH_RATE_LIMITS).map((rule) => rule.windowMs),\n);\n\nfunction getRule(\n options: AccessiOptions,\n scope: PublicAuthRateLimitScope,\n): PublicAuthRateLimitRuleOptions {\n const configuredRule = options.publicAuthRateLimit?.[scope];\n\n if (\n configuredRule &&\n Number.isFinite(configuredRule.windowMs) &&\n configuredRule.windowMs > 0 &&\n Number.isFinite(configuredRule.maxAttempts) &&\n configuredRule.maxAttempts > 0\n ) {\n return {\n windowMs: Math.trunc(configuredRule.windowMs),\n maxAttempts: Math.trunc(configuredRule.maxAttempts),\n };\n }\n\n return DEFAULT_PUBLIC_AUTH_RATE_LIMITS[scope];\n}\n\nfunction normalizeIdentifier(identifier: string): string | null {\n if (typeof identifier !== 'string') {\n return null;\n }\n\n const normalized = identifier.trim().toLowerCase();\n return normalized === '' ? null : normalized;\n}\n\nfunction pruneRateLimitBuckets(now: number): void {\n if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {\n return;\n }\n\n for (const [key, bucket] of RATE_LIMIT_BUCKETS.entries()) {\n if (bucket.resetAt <= now || bucket.lastSeenAt <= now - MAX_WINDOW_MS * 2) {\n RATE_LIMIT_BUCKETS.delete(key);\n }\n\n if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {\n return;\n }\n }\n}\n\nfunction consumeBucket(\n bucketKey: string,\n rule: PublicAuthRateLimitRuleOptions,\n now: number,\n): number | null {\n const existingBucket = RATE_LIMIT_BUCKETS.get(bucketKey);\n if (!existingBucket || existingBucket.resetAt <= now) {\n RATE_LIMIT_BUCKETS.set(bucketKey, {\n count: 1,\n resetAt: now + rule.windowMs,\n lastSeenAt: now,\n });\n return null;\n }\n\n existingBucket.lastSeenAt = now;\n if (existingBucket.count >= rule.maxAttempts) {\n return Math.max(1, Math.ceil((existingBucket.resetAt - now) / 1000));\n }\n\n existingBucket.count += 1;\n return null;\n}\n\nexport function checkPublicAuthRateLimit(\n options: AccessiOptions,\n scope: PublicAuthRateLimitScope,\n req: Request,\n identifiers: string[] = [],\n): RateLimitDecision {\n if (options.publicAuthRateLimit?.enabled === false) {\n return { allowed: true };\n }\n\n const rule = getRule(options, scope);\n const now = Date.now();\n pruneRateLimitBuckets(now);\n\n const ipAddress =\n normalizeIdentifier(req.ip ?? req.socket?.remoteAddress ?? 'unknown') ?? 'unknown';\n const bucketKeys = new Set<string>([`${scope}|ip|${ipAddress}`]);\n\n for (const identifier of identifiers) {\n const normalizedIdentifier = normalizeIdentifier(identifier);\n if (!normalizedIdentifier) {\n continue;\n }\n\n bucketKeys.add(`${scope}|ip-subject|${ipAddress}|${normalizedIdentifier}`);\n }\n\n let retryAfterSeconds = 0;\n for (const bucketKey of bucketKeys) {\n const bucketRetryAfterSeconds = consumeBucket(bucketKey, rule, now);\n if (bucketRetryAfterSeconds) {\n retryAfterSeconds = Math.max(retryAfterSeconds, bucketRetryAfterSeconds);\n }\n }\n\n if (retryAfterSeconds > 0) {\n return {\n allowed: false,\n retryAfterSeconds,\n };\n }\n\n return { allowed: true };\n}\n\nexport function sendPublicAuthRateLimitExceeded(\n res: Response,\n retryAfterSeconds: number,\n): Response {\n res.setHeader('Retry-After', String(retryAfterSeconds));\n return RestUtilities.sendErrorMessage(\n res,\n 'Troppi tentativi. Riprova piu tardi.',\n 'PublicAuthRateLimit',\n HttpStatus.TOO_MANY_REQUESTS,\n );\n}\n"]}
1
+ {"version":3,"file":"publicAuthRateLimit.js","sourceRoot":"","sources":["../../../src/accessi-module/security/publicAuthRateLimit.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpStatus } from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions, PublicAuthRateLimitRuleOptions } from '../AccessiModule';\n\nexport type PublicAuthRateLimitScope =\n | 'login'\n | 'twoFactorVerify'\n | 'twoFactorResend'\n | 'register'\n | 'passwordResetEmail'\n | 'passwordResetConfirm'\n | 'getUserByToken';\n\ntype RateLimitBucket = {\n count: number;\n resetAt: number;\n lastSeenAt: number;\n};\n\ntype RateLimitDecision = {\n allowed: boolean;\n retryAfterSeconds?: number;\n};\n\nconst DEFAULT_PUBLIC_AUTH_RATE_LIMITS: Record<\n PublicAuthRateLimitScope,\n PublicAuthRateLimitRuleOptions\n> = {\n login: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n twoFactorVerify: { windowMs: 15 * 60 * 1000, maxAttempts: 20 },\n twoFactorResend: { windowMs: 15 * 60 * 1000, maxAttempts: 5 },\n register: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\n passwordResetEmail: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\n passwordResetConfirm: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n getUserByToken: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },\n};\n\nconst RATE_LIMIT_BUCKETS = new Map<string, RateLimitBucket>();\nconst MAX_TRACKED_BUCKETS = 20000;\nconst MAX_WINDOW_MS = Math.max(\n ...Object.values(DEFAULT_PUBLIC_AUTH_RATE_LIMITS).map((rule) => rule.windowMs),\n);\n\nfunction getRule(\n options: AccessiOptions,\n scope: PublicAuthRateLimitScope,\n): PublicAuthRateLimitRuleOptions {\n const configuredRule = options.publicAuthRateLimit?.[scope];\n\n if (\n configuredRule &&\n Number.isFinite(configuredRule.windowMs) &&\n configuredRule.windowMs > 0 &&\n Number.isFinite(configuredRule.maxAttempts) &&\n configuredRule.maxAttempts > 0\n ) {\n return {\n windowMs: Math.trunc(configuredRule.windowMs),\n maxAttempts: Math.trunc(configuredRule.maxAttempts),\n };\n }\n\n return DEFAULT_PUBLIC_AUTH_RATE_LIMITS[scope];\n}\n\nfunction normalizeIdentifier(identifier: string): string | null {\n if (typeof identifier !== 'string') {\n return null;\n }\n\n const normalized = identifier.trim().toLowerCase();\n return normalized === '' ? null : normalized;\n}\n\nfunction pruneRateLimitBuckets(now: number): void {\n if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {\n return;\n }\n\n for (const [key, bucket] of RATE_LIMIT_BUCKETS.entries()) {\n if (bucket.resetAt <= now || bucket.lastSeenAt <= now - MAX_WINDOW_MS * 2) {\n RATE_LIMIT_BUCKETS.delete(key);\n }\n\n if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {\n return;\n }\n }\n}\n\nfunction consumeBucket(\n bucketKey: string,\n rule: PublicAuthRateLimitRuleOptions,\n now: number,\n): number | null {\n const existingBucket = RATE_LIMIT_BUCKETS.get(bucketKey);\n if (!existingBucket || existingBucket.resetAt <= now) {\n RATE_LIMIT_BUCKETS.set(bucketKey, {\n count: 1,\n resetAt: now + rule.windowMs,\n lastSeenAt: now,\n });\n return null;\n }\n\n existingBucket.lastSeenAt = now;\n if (existingBucket.count >= rule.maxAttempts) {\n return Math.max(1, Math.ceil((existingBucket.resetAt - now) / 1000));\n }\n\n existingBucket.count += 1;\n return null;\n}\n\nexport function checkPublicAuthRateLimit(\n options: AccessiOptions,\n scope: PublicAuthRateLimitScope,\n req: Request,\n identifiers: string[] = [],\n): RateLimitDecision {\n if (options.publicAuthRateLimit?.enabled === false) {\n return { allowed: true };\n }\n\n const rule = getRule(options, scope);\n const now = Date.now();\n pruneRateLimitBuckets(now);\n\n const ipAddress =\n normalizeIdentifier(req.ip ?? req.socket?.remoteAddress ?? 'unknown') ?? 'unknown';\n const bucketKeys = new Set<string>([`${scope}|ip|${ipAddress}`]);\n\n for (const identifier of identifiers) {\n const normalizedIdentifier = normalizeIdentifier(identifier);\n if (!normalizedIdentifier) {\n continue;\n }\n\n bucketKeys.add(`${scope}|ip-subject|${ipAddress}|${normalizedIdentifier}`);\n }\n\n let retryAfterSeconds = 0;\n for (const bucketKey of bucketKeys) {\n const bucketRetryAfterSeconds = consumeBucket(bucketKey, rule, now);\n if (bucketRetryAfterSeconds) {\n retryAfterSeconds = Math.max(retryAfterSeconds, bucketRetryAfterSeconds);\n }\n }\n\n if (retryAfterSeconds > 0) {\n return {\n allowed: false,\n retryAfterSeconds,\n };\n }\n\n return { allowed: true };\n}\n\nexport function sendPublicAuthRateLimitExceeded(\n res: Response,\n retryAfterSeconds: number,\n): Response {\n res.setHeader('Retry-After', String(retryAfterSeconds));\n return RestUtilities.sendErrorMessage(\n res,\n 'Troppi tentativi. Riprova piu tardi.',\n 'PublicAuthRateLimit',\n HttpStatus.TOO_MANY_REQUESTS,\n );\n}\n"]}
@@ -20,6 +20,8 @@ const SwaggerConfig_1 = require("./swagger/SwaggerConfig");
20
20
  const Logger_1 = require("./Logger");
21
21
  const EmilsoftwareModule_1 = require("./EmilsoftwareModule");
22
22
  const authenticateGen_1 = require("./accessi-module/middleware/authenticateGen");
23
+ const accessiValidation_1 = require("./accessi-module/security/accessiValidation");
24
+ const AccessiHttpExceptionFilter_1 = require("./accessi-module/security/AccessiHttpExceptionFilter");
23
25
  /**
24
26
  * Initializes the unified module that combines Accessi and Allegati functionality
25
27
  * @param app Express application instance
@@ -51,6 +53,11 @@ function initEmilsoftwareModule(app, options) {
51
53
  bufferLogs: true
52
54
  });
53
55
  nestApp.enableCors();
56
+ if (options === null || options === void 0 ? void 0 : options.accessiOptions) {
57
+ // Keep the Accessi API contract identical for standalone and unified bootstraps.
58
+ nestApp.useGlobalPipes((0, accessiValidation_1.createAccessiValidationPipe)());
59
+ nestApp.useGlobalFilters(new AccessiHttpExceptionFilter_1.AccessiHttpExceptionFilter());
60
+ }
54
61
  nestApp.setGlobalPrefix('api', {
55
62
  exclude: ['/swagger', '/swagger/(.*)']
56
63
  });
@@ -1 +1 @@
1
- {"version":3,"file":"initEmilsoftwareModule.js","sourceRoot":"","sources":["../src/initEmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAkBA,wDAsDC;AAxED,sDAAwD;AACxD,uCAA2C;AAC3C,+DAA0D;AAC1D,2DAAuD;AACvD,qCAAkC;AAClC,6DAA+E;AAC/E,iFAKqD;AAErD;;;;GAIG;AACH,SAAsB,sBAAsB,CAAC,GAAgB,EAAE,OAA4B;;QACvF,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;YAC1B,IAAA,gDAA8B,GAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACD,gFAAgF;YAChF,wEAAwE;YACxE,MAAM,WAAW,GAAG,IAAA,iBAAO,GAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,IAAI,KAAK,MAAM;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxB,IAAI,KAAK,UAAU;gBACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC5B,IAAI,KAAK,eAAe,CAAC;YAE7B,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,IAAI,iCAAc,CAAC,WAAW,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,uCAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE;gBAC/F,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,EAAE,CAAC;YAErB,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACzC,CAAC,CAAC;YAEH,sDAAsD;YACtD,IAAA,4BAAY,EAAC,OAAO,CAAC,CAAC;YAEtB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wCAAsB,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBAC5C,IAAA,uCAAqB,EAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAEhE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,IAAA,+CAA6B,EAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CAAA","sourcesContent":["import express, { Application, Request } from \"express\";\nimport { NestFactory } from \"@nestjs/core\";\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\nimport { setupSwagger } from \"./swagger/SwaggerConfig\";\nimport { Logger } from \"./Logger\";\nimport { EmilsoftwareModule, EmilsoftwareOptions } from \"./EmilsoftwareModule\";\nimport {\n beginAccessiAuthInitialization,\n failAccessiAuthInitialization,\n AuthenticateGenService,\n setAccessiAuthService\n} from \"./accessi-module/middleware/authenticateGen\";\n\n/**\n * Initializes the unified module that combines Accessi and Allegati functionality\n * @param app Express application instance\n * @param options Configuration options for both modules\n */\nexport async function initEmilsoftwareModule(app: Application, options: EmilsoftwareOptions) {\n const logger: Logger = new Logger(initEmilsoftwareModule.name);\n if (options?.accessiOptions) {\n beginAccessiAuthInitialization();\n }\n\n try {\n // Isolate Nest on a dedicated Express instance and dispatch only module routes.\n // This keeps pre-existing routes/middlewares on the host app untouched.\n const nestHostApp = express();\n const isNestRoute = (path: string) =>\n path === \"/api\" ||\n path.startsWith(\"/api/\") ||\n path === \"/swagger\" ||\n path.startsWith(\"/swagger/\") ||\n path === \"/swagger-json\";\n\n app.use((req: Request, res, next) => {\n if (!isNestRoute(req.path)) {\n return next();\n }\n return nestHostApp(req, res, next);\n });\n\n const nestExpressInstance = new ExpressAdapter(nestHostApp);\n const nestApp = await NestFactory.create(EmilsoftwareModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n\n nestApp.enableCors();\n\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n // Setup unified Swagger documentation for all modules\n setupSwagger(nestApp);\n\n await nestApp.init();\n if (options?.accessiOptions) {\n const authService = nestApp.get(AuthenticateGenService);\n app.locals.accessiAuthService = authService;\n setAccessiAuthService(authService);\n }\n\n logger.info(\"Emilsoftware module initialized successfully\");\n\n } catch (error) {\n if (options?.accessiOptions) {\n failAccessiAuthInitialization(error);\n }\n logger.error(\"Error initializing Emilsoftware Module:\", error);\n throw error;\n }\n}\n"]}
1
+ {"version":3,"file":"initEmilsoftwareModule.js","sourceRoot":"","sources":["../src/initEmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAoBA,wDA2DC;AA/ED,sDAAwD;AACxD,uCAA2C;AAC3C,+DAA0D;AAC1D,2DAAuD;AACvD,qCAAkC;AAClC,6DAA+E;AAC/E,iFAKqD;AACrD,mFAA0F;AAC1F,qGAAkG;AAElG;;;;GAIG;AACH,SAAsB,sBAAsB,CAAC,GAAgB,EAAE,OAA4B;;QACvF,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;YAC1B,IAAA,gDAA8B,GAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACD,gFAAgF;YAChF,wEAAwE;YACxE,MAAM,WAAW,GAAG,IAAA,iBAAO,GAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,IAAI,KAAK,MAAM;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxB,IAAI,KAAK,UAAU;gBACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC5B,IAAI,KAAK,eAAe,CAAC;YAE7B,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,IAAI,iCAAc,CAAC,WAAW,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,uCAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE;gBAC/F,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,iFAAiF;gBACjF,OAAO,CAAC,cAAc,CAAC,IAAA,+CAA2B,GAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,gBAAgB,CAAC,IAAI,uDAA0B,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACzC,CAAC,CAAC;YAEH,sDAAsD;YACtD,IAAA,4BAAY,EAAC,OAAO,CAAC,CAAC;YAEtB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wCAAsB,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBAC5C,IAAA,uCAAqB,EAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAEhE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EAAE,CAAC;gBAC1B,IAAA,+CAA6B,EAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CAAA","sourcesContent":["import express, { Application, Request } from \"express\";\nimport { NestFactory } from \"@nestjs/core\";\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\nimport { setupSwagger } from \"./swagger/SwaggerConfig\";\nimport { Logger } from \"./Logger\";\nimport { EmilsoftwareModule, EmilsoftwareOptions } from \"./EmilsoftwareModule\";\nimport {\n beginAccessiAuthInitialization,\n failAccessiAuthInitialization,\n AuthenticateGenService,\n setAccessiAuthService\n} from \"./accessi-module/middleware/authenticateGen\";\nimport { createAccessiValidationPipe } from './accessi-module/security/accessiValidation';\nimport { AccessiHttpExceptionFilter } from './accessi-module/security/AccessiHttpExceptionFilter';\n\n/**\n * Initializes the unified module that combines Accessi and Allegati functionality\n * @param app Express application instance\n * @param options Configuration options for both modules\n */\nexport async function initEmilsoftwareModule(app: Application, options: EmilsoftwareOptions) {\n const logger: Logger = new Logger(initEmilsoftwareModule.name);\n if (options?.accessiOptions) {\n beginAccessiAuthInitialization();\n }\n\n try {\n // Isolate Nest on a dedicated Express instance and dispatch only module routes.\n // This keeps pre-existing routes/middlewares on the host app untouched.\n const nestHostApp = express();\n const isNestRoute = (path: string) =>\n path === \"/api\" ||\n path.startsWith(\"/api/\") ||\n path === \"/swagger\" ||\n path.startsWith(\"/swagger/\") ||\n path === \"/swagger-json\";\n\n app.use((req: Request, res, next) => {\n if (!isNestRoute(req.path)) {\n return next();\n }\n return nestHostApp(req, res, next);\n });\n\n const nestExpressInstance = new ExpressAdapter(nestHostApp);\n const nestApp = await NestFactory.create(EmilsoftwareModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n\n nestApp.enableCors();\n if (options?.accessiOptions) {\n // Keep the Accessi API contract identical for standalone and unified bootstraps.\n nestApp.useGlobalPipes(createAccessiValidationPipe());\n nestApp.useGlobalFilters(new AccessiHttpExceptionFilter());\n }\n\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n // Setup unified Swagger documentation for all modules\n setupSwagger(nestApp);\n\n await nestApp.init();\n if (options?.accessiOptions) {\n const authService = nestApp.get(AuthenticateGenService);\n app.locals.accessiAuthService = authService;\n setAccessiAuthService(authService);\n }\n\n logger.info(\"Emilsoftware module initialized successfully\");\n\n } catch (error) {\n if (options?.accessiOptions) {\n failAccessiAuthInitialization(error);\n }\n logger.error(\"Error initializing Emilsoftware Module:\", error);\n throw error;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const swagger_1 = require("@nestjs/swagger");
16
+ const core_1 = require("@nestjs/core");
17
+ const platform_express_1 = require("@nestjs/platform-express");
18
+ const express_1 = __importDefault(require("express"));
19
+ const promises_1 = require("fs/promises");
20
+ const path_1 = require("path");
21
+ const AccessiModule_1 = require("../accessi-module/AccessiModule");
22
+ /**
23
+ * Esporta il contratto OpenAPI dai decorator Nest senza avviare il database.
24
+ * Il file risultante e l'unica sorgente per il client Orval della console.
25
+ */
26
+ function generateAccessiOpenApi() {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ const options = {
29
+ databaseOptions: { host: 'openapi-generation', database: 'not-used', user: 'not-used' },
30
+ confirmationEmailUrl: 'https://invalid.local',
31
+ confirmationEmailReturnUrl: 'https://invalid.local',
32
+ encryptionKey: 'openapi-generation-only',
33
+ mockDemoUser: false,
34
+ autoUpdateDatabase: false,
35
+ legacyPasswordMigrationOnStartup: false,
36
+ jwtOptions: { secret: 'openapi-generation-only', expiresIn: '1h' },
37
+ emailOptions: {
38
+ host: 'localhost', port: 25, secure: false, requireTLS: false,
39
+ tls: { rejectUnauthorized: true }, from: 'openapi@invalid.local', auth: { user: '', pass: '' },
40
+ },
41
+ federatedAuthentication: { enabled: false },
42
+ };
43
+ const app = yield core_1.NestFactory.create(AccessiModule_1.AccessiModule.forRoot(options), new platform_express_1.ExpressAdapter((0, express_1.default)()), { logger: false });
44
+ app.setGlobalPrefix('api');
45
+ // Decorator inspection requires no lifecycle hooks or database connection.
46
+ const document = swagger_1.SwaggerModule.createDocument(app, new swagger_1.DocumentBuilder().setTitle('Accessi API').setVersion('1.0').addBearerAuth().build());
47
+ const outputDirectory = (0, path_1.join)(process.cwd(), 'src', 'accessi-module', 'openapi');
48
+ yield (0, promises_1.mkdir)(outputDirectory, { recursive: true });
49
+ yield (0, promises_1.writeFile)((0, path_1.join)(outputDirectory, 'accessi.openapi.json'), `${JSON.stringify(document, null, 2)}\n`);
50
+ yield app.close();
51
+ });
52
+ }
53
+ generateAccessiOpenApi().catch((error) => {
54
+ console.error(error);
55
+ process.exitCode = 1;
56
+ });
57
+ //# sourceMappingURL=generateAccessiOpenApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAccessiOpenApi.js","sourceRoot":"","sources":["../../src/scripts/generateAccessiOpenApi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,6CAAiE;AACjE,uCAA2C;AAC3C,+DAA0D;AAC1D,sDAA8B;AAC9B,0CAA+C;AAC/C,+BAA4B;AAC5B,mEAAgF;AAEhF;;;GAGG;AACH,SAAe,sBAAsB;;QACnC,MAAM,OAAO,GAAmB;YAC9B,eAAe,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;YACvF,oBAAoB,EAAE,uBAAuB;YAC7C,0BAA0B,EAAE,uBAAuB;YACnD,aAAa,EAAE,yBAAyB;YACxC,YAAY,EAAE,KAAK;YACnB,kBAAkB,EAAE,KAAK;YACzB,gCAAgC,EAAE,KAAK;YACvC,UAAU,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,IAAI,EAAE;YAClE,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK;gBAC7D,GAAG,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;aAC/F;YACD,uBAAuB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;SAC5C,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAClC,6BAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAC9B,IAAI,iCAAc,CAAC,IAAA,iBAAO,GAAE,CAAC,EAC7B,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QACF,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3B,2EAA2E;QAE3E,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAC3C,GAAG,EACH,IAAI,yBAAe,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CACxF,CAAC;QACF,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAChF,MAAM,IAAA,gBAAK,EAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,eAAe,EAAE,sBAAsB,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;CAAA;AAED,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';\nimport { NestFactory } from '@nestjs/core';\nimport { ExpressAdapter } from '@nestjs/platform-express';\nimport express from 'express';\nimport { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport { AccessiModule, AccessiOptions } from '../accessi-module/AccessiModule';\n\n/**\n * Esporta il contratto OpenAPI dai decorator Nest senza avviare il database.\n * Il file risultante e l'unica sorgente per il client Orval della console.\n */\nasync function generateAccessiOpenApi(): Promise<void> {\n const options: AccessiOptions = {\n databaseOptions: { host: 'openapi-generation', database: 'not-used', user: 'not-used' },\n confirmationEmailUrl: 'https://invalid.local',\n confirmationEmailReturnUrl: 'https://invalid.local',\n encryptionKey: 'openapi-generation-only',\n mockDemoUser: false,\n autoUpdateDatabase: false,\n legacyPasswordMigrationOnStartup: false,\n jwtOptions: { secret: 'openapi-generation-only', expiresIn: '1h' },\n emailOptions: {\n host: 'localhost', port: 25, secure: false, requireTLS: false,\n tls: { rejectUnauthorized: true }, from: 'openapi@invalid.local', auth: { user: '', pass: '' },\n },\n federatedAuthentication: { enabled: false },\n };\n\n const app = await NestFactory.create(\n AccessiModule.forRoot(options),\n new ExpressAdapter(express()),\n { logger: false },\n );\n app.setGlobalPrefix('api');\n // Decorator inspection requires no lifecycle hooks or database connection.\n\n const document = SwaggerModule.createDocument(\n app,\n new DocumentBuilder().setTitle('Accessi API').setVersion('1.0').addBearerAuth().build(),\n );\n const outputDirectory = join(process.cwd(), 'src', 'accessi-module', 'openapi');\n await mkdir(outputDirectory, { recursive: true });\n await writeFile(join(outputDirectory, 'accessi.openapi.json'), `${JSON.stringify(document, null, 2)}\\n`);\n await app.close();\n}\n\ngenerateAccessiOpenApi().catch((error) => {\n console.error(error);\n process.exitCode = 1;\n});\n"]}
package/package.json CHANGED
@@ -1,19 +1,25 @@
1
1
  {
2
2
  "name": "emilsoftware-utilities",
3
- "version": "2.0.0-dev.22",
3
+ "version": "2.0.0-dev.23",
4
4
  "description": "Utilities for EmilSoftware",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "scripts": {
9
9
  "release": "semantic-release",
10
- "build": "tsc && npm run copy-views",
10
+ "build": "tsc && npm run generate:accessi-openapi && npm run generate:accessi-client && tsc && tsc -p tsconfig.console.json --noEmit && npm run build:accessi-console && npm run copy-views",
11
+ "generate:accessi-openapi": "node dist/scripts/generateAccessiOpenApi.js",
12
+ "generate:accessi-client": "orval --config orval.config.ts",
13
+ "build:accessi-console": "esbuild src/accessi-module/Console/console.ts --bundle --platform=browser --format=esm --target=es2020 --outfile=dist/accessi-module/Console/console.js",
11
14
  "copy-views": "node copy-views.js",
12
15
  "db:update:accessi": "ts-node src/accessi-module/database-updates/runAccessiDbUpdate.ts",
13
16
  "db:update:accessi:dist": "npm run build && node dist/accessi-module/database-updates/runAccessiDbUpdate.js",
14
17
  "prepublishOnly": "npm run build",
15
18
  "test:allegati": "ts-node src/tests/allegati/allegati.ts",
16
- "test:accessi": "npm run build && ts-node test/index.js"
19
+ "test:accessi": "npm run build && node --test test/accessi-regressions.cjs test/password-reset-regressions.cjs test/two-factor.cjs",
20
+ "test:accessi-console": "npm run build && node test/console-two-factor.cjs",
21
+ "test:accessi-schema": "node --test test/accessi-schema.cjs",
22
+ "db:check:accessi": "ts-node src/accessi-module/database-updates/runAccessiDbUpdate.ts --check"
17
23
  },
18
24
  "publishConfig": {
19
25
  "access": "public"
@@ -48,7 +54,8 @@
48
54
  "swagger-jsdoc": "^6.2.8",
49
55
  "swagger-ui-express": "^5.0.1",
50
56
  "uuid": "^11.0.5",
51
- "winston": "^3.11.0"
57
+ "winston": "^3.11.0",
58
+ "winston-transport": "^4.9.0"
52
59
  },
53
60
  "devDependencies": {
54
61
  "@semantic-release/changelog": "^6.0.3",
@@ -67,7 +74,9 @@
67
74
  "@types/swagger-ui-express": "^4.1.7",
68
75
  "commitizen": "^4.3.1",
69
76
  "cz-conventional-changelog": "^3.3.0",
77
+ "esbuild": "^0.28.2",
70
78
  "fs-extra": "^11.3.0",
79
+ "orval": "^6.31.0",
71
80
  "semantic-release": "^24.2.7",
72
81
  "ts-node": "^10.9.2",
73
82
  "typescript": "^5.8.3"