emilsoftware-utilities 2.0.0-dev.7 → 2.0.0-dev.70

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 (838) hide show
  1. package/README.MD +249 -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.d.ts +15 -1
  11. package/dist/EmilsoftwareModule.js +1 -1
  12. package/dist/EmilsoftwareModule.js.map +1 -1
  13. package/dist/ExecutionTimeLogger.d.ts +2 -2
  14. package/dist/ExecutionTimeLogger.js +5 -4
  15. package/dist/ExecutionTimeLogger.js.map +1 -1
  16. package/dist/Logger.d.ts +22 -11
  17. package/dist/Logger.js +132 -119
  18. package/dist/Logger.js.map +1 -1
  19. package/dist/Orm.d.ts +32 -6
  20. package/dist/Orm.js +148 -38
  21. package/dist/Orm.js.map +1 -1
  22. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  23. package/dist/Utilities.d.ts +18 -8
  24. package/dist/Utilities.js +143 -37
  25. package/dist/Utilities.js.map +1 -1
  26. package/dist/accessi/client/index.d.ts +26 -0
  27. package/dist/accessi/client/index.js +49 -0
  28. package/dist/accessi/client/index.js.map +1 -0
  29. package/dist/accessi/console/index.d.ts +15 -0
  30. package/dist/accessi/console/index.js +25 -0
  31. package/dist/accessi/console/index.js.map +1 -0
  32. package/dist/accessi/contracts/dtos.d.ts +8 -0
  33. package/dist/accessi/contracts/dtos.js +25 -0
  34. package/dist/accessi/contracts/dtos.js.map +1 -0
  35. package/dist/accessi/contracts/index.d.ts +25 -0
  36. package/dist/accessi/contracts/index.js +28 -0
  37. package/dist/accessi/contracts/index.js.map +1 -0
  38. package/dist/accessi/openapi/index.d.ts +2 -0
  39. package/dist/accessi/openapi/index.js +19 -0
  40. package/dist/accessi/openapi/index.js.map +1 -0
  41. package/dist/accessi/resource-server/core.d.ts +6 -0
  42. package/dist/accessi/resource-server/core.js +23 -0
  43. package/dist/accessi/resource-server/core.js.map +1 -0
  44. package/dist/accessi/resource-server/errors.d.ts +10 -0
  45. package/dist/accessi/resource-server/errors.js +19 -0
  46. package/dist/accessi/resource-server/errors.js.map +1 -0
  47. package/dist/accessi/resource-server/express.d.ts +17 -0
  48. package/dist/accessi/resource-server/express.js +87 -0
  49. package/dist/accessi/resource-server/express.js.map +1 -0
  50. package/dist/accessi/resource-server/index.d.ts +3 -0
  51. package/dist/accessi/resource-server/index.js +20 -0
  52. package/dist/accessi/resource-server/index.js.map +1 -0
  53. package/dist/accessi/resource-server/introspection.d.ts +16 -0
  54. package/dist/accessi/resource-server/introspection.js +115 -0
  55. package/dist/accessi/resource-server/introspection.js.map +1 -0
  56. package/dist/accessi/resource-server/keys.d.ts +11 -0
  57. package/dist/accessi/resource-server/keys.js +22 -0
  58. package/dist/accessi/resource-server/keys.js.map +1 -0
  59. package/dist/accessi/resource-server/nest.d.ts +9 -0
  60. package/dist/accessi/resource-server/nest.js +75 -0
  61. package/dist/accessi/resource-server/nest.js.map +1 -0
  62. package/dist/accessi/resource-server/runtime.d.ts +27 -0
  63. package/dist/accessi/resource-server/runtime.js +179 -0
  64. package/dist/accessi/resource-server/runtime.js.map +1 -0
  65. package/dist/accessi/resource-server/token.d.ts +23 -0
  66. package/dist/accessi/resource-server/token.js +230 -0
  67. package/dist/accessi/resource-server/token.js.map +1 -0
  68. package/dist/accessi/resource-server/types.d.ts +92 -0
  69. package/dist/accessi/resource-server/types.js +3 -0
  70. package/dist/accessi/resource-server/types.js.map +1 -0
  71. package/dist/accessi/server/index.d.ts +11 -0
  72. package/dist/accessi/server/index.js +30 -0
  73. package/dist/accessi/server/index.js.map +1 -0
  74. package/dist/accessi/server/standalone.d.ts +41 -0
  75. package/dist/accessi/server/standalone.js +265 -0
  76. package/dist/accessi/server/standalone.js.map +1 -0
  77. package/dist/accessi/ui/index.d.ts +13 -0
  78. package/dist/accessi/ui/index.js +19 -0
  79. package/dist/accessi/ui/index.js.map +1 -0
  80. package/dist/accessi-module/AccessiModule.d.ts +199 -0
  81. package/dist/accessi-module/AccessiModule.js +43 -5
  82. package/dist/accessi-module/AccessiModule.js.map +1 -1
  83. package/dist/accessi-module/Console/accessiFetch.d.ts +25 -0
  84. package/dist/accessi-module/Console/accessiFetch.js +104 -0
  85. package/dist/accessi-module/Console/accessiFetch.js.map +1 -0
  86. package/dist/accessi-module/Console/console.css +774 -0
  87. package/dist/accessi-module/Console/console.d.ts +1 -0
  88. package/dist/accessi-module/Console/console.js +4095 -0
  89. package/dist/accessi-module/Console/console.js.map +1 -0
  90. package/dist/accessi-module/Console/generated/emilsoftware-utilities.d.ts +761 -0
  91. package/dist/accessi-module/Console/generated/emilsoftware-utilities.js +712 -0
  92. package/dist/accessi-module/Console/generated/emilsoftware-utilities.js.map +1 -0
  93. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +39 -0
  94. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js +3 -0
  95. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -0
  96. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.d.ts +16 -0
  97. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js +17 -0
  98. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js.map +1 -0
  99. package/dist/accessi-module/Console/generated/model/accessiIntrospectionResultDto.d.ts +16 -0
  100. package/dist/accessi-module/Console/generated/model/accessiIntrospectionResultDto.js +3 -0
  101. package/dist/accessi-module/Console/generated/model/accessiIntrospectionResultDto.js.map +1 -0
  102. package/dist/accessi-module/Console/generated/model/actionResponse.d.ts +12 -0
  103. package/dist/accessi-module/Console/generated/model/actionResponse.js +9 -0
  104. package/dist/accessi-module/Console/generated/model/actionResponse.js.map +1 -0
  105. package/dist/accessi-module/Console/generated/model/adminBootstrapStatusResponse.d.ts +14 -0
  106. package/dist/accessi-module/Console/generated/model/adminBootstrapStatusResponse.js +3 -0
  107. package/dist/accessi-module/Console/generated/model/adminBootstrapStatusResponse.js.map +1 -0
  108. package/dist/accessi-module/Console/generated/model/adminBootstrapStatusResult.d.ts +10 -0
  109. package/dist/accessi-module/Console/generated/model/adminBootstrapStatusResult.js +9 -0
  110. package/dist/accessi-module/Console/generated/model/adminBootstrapStatusResult.js.map +1 -0
  111. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.d.ts +11 -0
  112. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js +3 -0
  113. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js.map +1 -0
  114. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.d.ts +10 -0
  115. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js +9 -0
  116. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js.map +1 -0
  117. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.d.ts +10 -0
  118. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js +3 -0
  119. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js.map +1 -0
  120. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +19 -0
  121. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js +9 -0
  122. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -0
  123. package/dist/accessi-module/Console/generated/model/bootstrapAdminRequest.d.ts +17 -0
  124. package/dist/accessi-module/Console/generated/model/bootstrapAdminRequest.js +9 -0
  125. package/dist/accessi-module/Console/generated/model/bootstrapAdminRequest.js.map +1 -0
  126. package/dist/accessi-module/Console/generated/model/bootstrapAdminResponse.d.ts +14 -0
  127. package/dist/accessi-module/Console/generated/model/bootstrapAdminResponse.js +3 -0
  128. package/dist/accessi-module/Console/generated/model/bootstrapAdminResponse.js.map +1 -0
  129. package/dist/accessi-module/Console/generated/model/bootstrapAdminResultDto.d.ts +13 -0
  130. package/dist/accessi-module/Console/generated/model/bootstrapAdminResultDto.js +9 -0
  131. package/dist/accessi-module/Console/generated/model/bootstrapAdminResultDto.js.map +1 -0
  132. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.d.ts +14 -0
  133. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js +9 -0
  134. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js.map +1 -0
  135. package/dist/accessi-module/Console/generated/model/consoleEntryExchangeRequest.d.ts +10 -0
  136. package/dist/accessi-module/Console/generated/model/consoleEntryExchangeRequest.js +9 -0
  137. package/dist/accessi-module/Console/generated/model/consoleEntryExchangeRequest.js.map +1 -0
  138. package/dist/accessi-module/Console/generated/model/consoleEntrySessionResponse.d.ts +14 -0
  139. package/dist/accessi-module/Console/generated/model/consoleEntrySessionResponse.js +3 -0
  140. package/dist/accessi-module/Console/generated/model/consoleEntrySessionResponse.js.map +1 -0
  141. package/dist/accessi-module/Console/generated/model/consoleEntrySessionResult.d.ts +10 -0
  142. package/dist/accessi-module/Console/generated/model/consoleEntrySessionResult.js +3 -0
  143. package/dist/accessi-module/Console/generated/model/consoleEntrySessionResult.js.map +1 -0
  144. package/dist/accessi-module/Console/generated/model/consoleEntryTicketResponse.d.ts +14 -0
  145. package/dist/accessi-module/Console/generated/model/consoleEntryTicketResponse.js +3 -0
  146. package/dist/accessi-module/Console/generated/model/consoleEntryTicketResponse.js.map +1 -0
  147. package/dist/accessi-module/Console/generated/model/consoleEntryTicketResult.d.ts +12 -0
  148. package/dist/accessi-module/Console/generated/model/consoleEntryTicketResult.js +9 -0
  149. package/dist/accessi-module/Console/generated/model/consoleEntryTicketResult.js.map +1 -0
  150. package/dist/accessi-module/Console/generated/model/consoleEntryTokenResult.d.ts +12 -0
  151. package/dist/accessi-module/Console/generated/model/consoleEntryTokenResult.js +9 -0
  152. package/dist/accessi-module/Console/generated/model/consoleEntryTokenResult.js.map +1 -0
  153. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.d.ts +13 -0
  154. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js +9 -0
  155. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js.map +1 -0
  156. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.d.ts +13 -0
  157. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js +9 -0
  158. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js.map +1 -0
  159. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.d.ts +18 -0
  160. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js +3 -0
  161. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js.map +1 -0
  162. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  163. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  164. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  165. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  166. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  167. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  168. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +22 -0
  169. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  170. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  171. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  172. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  173. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  174. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  175. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  176. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  177. package/dist/accessi-module/Console/generated/model/createScopeRequest.d.ts +18 -0
  178. package/dist/accessi-module/Console/generated/model/createScopeRequest.js +9 -0
  179. package/dist/accessi-module/Console/generated/model/createScopeRequest.js.map +1 -0
  180. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  181. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  182. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  183. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  184. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  185. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  186. package/dist/accessi-module/Console/generated/model/errorResponse.d.ts +18 -0
  187. package/dist/accessi-module/Console/generated/model/errorResponse.js +9 -0
  188. package/dist/accessi-module/Console/generated/model/errorResponse.js.map +1 -0
  189. package/dist/accessi-module/Console/generated/model/exchangeFederatedIdentityRequest.d.ts +12 -0
  190. package/dist/accessi-module/Console/generated/model/exchangeFederatedIdentityRequest.js +9 -0
  191. package/dist/accessi-module/Console/generated/model/exchangeFederatedIdentityRequest.js.map +1 -0
  192. package/dist/accessi-module/Console/generated/model/federatedAuthenticationResultDto.d.ts +15 -0
  193. package/dist/accessi-module/Console/generated/model/federatedAuthenticationResultDto.js +3 -0
  194. package/dist/accessi-module/Console/generated/model/federatedAuthenticationResultDto.js.map +1 -0
  195. package/dist/accessi-module/Console/generated/model/federatedExchangeResponse.d.ts +14 -0
  196. package/dist/accessi-module/Console/generated/model/federatedExchangeResponse.js +3 -0
  197. package/dist/accessi-module/Console/generated/model/federatedExchangeResponse.js.map +1 -0
  198. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.d.ts +14 -0
  199. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js +3 -0
  200. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js.map +1 -0
  201. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.d.ts +14 -0
  202. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js +3 -0
  203. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js.map +1 -0
  204. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.d.ts +23 -0
  205. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js +9 -0
  206. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js.map +1 -0
  207. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.d.ts +14 -0
  208. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js +3 -0
  209. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js.map +1 -0
  210. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.d.ts +14 -0
  211. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js +3 -0
  212. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js.map +1 -0
  213. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.d.ts +13 -0
  214. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js +9 -0
  215. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js.map +1 -0
  216. package/dist/accessi-module/Console/generated/model/filtriUtente.d.ts +32 -0
  217. package/dist/accessi-module/Console/generated/model/filtriUtente.js +9 -0
  218. package/dist/accessi-module/Console/generated/model/filtriUtente.js.map +1 -0
  219. package/dist/accessi-module/Console/generated/model/getFiltriResponse.d.ts +14 -0
  220. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js +3 -0
  221. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js.map +1 -0
  222. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.d.ts +12 -0
  223. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js +9 -0
  224. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js.map +1 -0
  225. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.d.ts +14 -0
  226. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js +3 -0
  227. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js.map +1 -0
  228. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +16 -0
  229. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js +9 -0
  230. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -0
  231. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.d.ts +14 -0
  232. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js +3 -0
  233. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js.map +1 -0
  234. package/dist/accessi-module/Console/generated/model/getMenuScopesResponse.d.ts +14 -0
  235. package/dist/accessi-module/Console/generated/model/getMenuScopesResponse.js +3 -0
  236. package/dist/accessi-module/Console/generated/model/getMenuScopesResponse.js.map +1 -0
  237. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  238. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  239. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  240. package/dist/accessi-module/Console/generated/model/getMenusParams.d.ts +12 -0
  241. package/dist/accessi-module/Console/generated/model/getMenusParams.js +9 -0
  242. package/dist/accessi-module/Console/generated/model/getMenusParams.js.map +1 -0
  243. package/dist/accessi-module/Console/generated/model/getMenusResponse.d.ts +14 -0
  244. package/dist/accessi-module/Console/generated/model/getMenusResponse.js +3 -0
  245. package/dist/accessi-module/Console/generated/model/getMenusResponse.js.map +1 -0
  246. package/dist/accessi-module/Console/generated/model/getRolesResponse.d.ts +14 -0
  247. package/dist/accessi-module/Console/generated/model/getRolesResponse.js +3 -0
  248. package/dist/accessi-module/Console/generated/model/getRolesResponse.js.map +1 -0
  249. package/dist/accessi-module/Console/generated/model/getSchemaResponse.d.ts +14 -0
  250. package/dist/accessi-module/Console/generated/model/getSchemaResponse.js +3 -0
  251. package/dist/accessi-module/Console/generated/model/getSchemaResponse.js.map +1 -0
  252. package/dist/accessi-module/Console/generated/model/getScopesResponse.d.ts +14 -0
  253. package/dist/accessi-module/Console/generated/model/getScopesResponse.js +3 -0
  254. package/dist/accessi-module/Console/generated/model/getScopesResponse.js.map +1 -0
  255. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  256. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  257. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  258. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  259. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  260. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  261. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.d.ts +10 -0
  262. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js +9 -0
  263. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js.map +1 -0
  264. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.d.ts +14 -0
  265. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js +3 -0
  266. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js.map +1 -0
  267. package/dist/accessi-module/Console/generated/model/getUserRolesAndGrantsParams.d.ts +12 -0
  268. package/dist/accessi-module/Console/generated/model/getUserRolesAndGrantsParams.js +9 -0
  269. package/dist/accessi-module/Console/generated/model/getUserRolesAndGrantsParams.js.map +1 -0
  270. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +32 -0
  271. package/dist/accessi-module/Console/generated/model/getUsersParams.js +9 -0
  272. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -0
  273. package/dist/accessi-module/Console/generated/model/getUsersResponse.d.ts +14 -0
  274. package/dist/accessi-module/Console/generated/model/getUsersResponse.js +3 -0
  275. package/dist/accessi-module/Console/generated/model/getUsersResponse.js.map +1 -0
  276. package/dist/accessi-module/Console/generated/model/getUsersResult.d.ts +17 -0
  277. package/dist/accessi-module/Console/generated/model/getUsersResult.js +3 -0
  278. package/dist/accessi-module/Console/generated/model/getUsersResult.js.map +1 -0
  279. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.d.ts +12 -0
  280. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js +9 -0
  281. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js.map +1 -0
  282. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +19 -0
  283. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js +3 -0
  284. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -0
  285. package/dist/accessi-module/Console/generated/model/index.d.ts +130 -0
  286. package/dist/accessi-module/Console/generated/model/index.js +147 -0
  287. package/dist/accessi-module/Console/generated/model/index.js.map +1 -0
  288. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenRequest.d.ts +10 -0
  289. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenRequest.js +9 -0
  290. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenRequest.js.map +1 -0
  291. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenResponse.d.ts +14 -0
  292. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenResponse.js +3 -0
  293. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenResponse.js.map +1 -0
  294. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  295. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  296. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  297. package/dist/accessi-module/Console/generated/model/loginAsRequest.d.ts +10 -0
  298. package/dist/accessi-module/Console/generated/model/loginAsRequest.js +9 -0
  299. package/dist/accessi-module/Console/generated/model/loginAsRequest.js.map +1 -0
  300. package/dist/accessi-module/Console/generated/model/loginAsResponse.d.ts +14 -0
  301. package/dist/accessi-module/Console/generated/model/loginAsResponse.js +3 -0
  302. package/dist/accessi-module/Console/generated/model/loginAsResponse.js.map +1 -0
  303. package/dist/accessi-module/Console/generated/model/loginAsResult.d.ts +16 -0
  304. package/dist/accessi-module/Console/generated/model/loginAsResult.js +9 -0
  305. package/dist/accessi-module/Console/generated/model/loginAsResult.js.map +1 -0
  306. package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +14 -0
  307. package/dist/accessi-module/Console/generated/model/loginRequest.js +9 -0
  308. package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -0
  309. package/dist/accessi-module/Console/generated/model/loginResponse.d.ts +14 -0
  310. package/dist/accessi-module/Console/generated/model/loginResponse.js +3 -0
  311. package/dist/accessi-module/Console/generated/model/loginResponse.js.map +1 -0
  312. package/dist/accessi-module/Console/generated/model/loginResult.d.ts +34 -0
  313. package/dist/accessi-module/Console/generated/model/loginResult.js +3 -0
  314. package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -0
  315. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.d.ts +12 -0
  316. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js +9 -0
  317. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js.map +1 -0
  318. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.d.ts +13 -0
  319. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js +14 -0
  320. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js.map +1 -0
  321. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +32 -0
  322. package/dist/accessi-module/Console/generated/model/menuEntity.js +9 -0
  323. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -0
  324. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  325. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  326. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  327. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.d.ts +12 -0
  328. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js +9 -0
  329. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js.map +1 -0
  330. package/dist/accessi-module/Console/generated/model/permission.d.ts +12 -0
  331. package/dist/accessi-module/Console/generated/model/permission.js +9 -0
  332. package/dist/accessi-module/Console/generated/model/permission.js.map +1 -0
  333. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +51 -0
  334. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js +9 -0
  335. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -0
  336. package/dist/accessi-module/Console/generated/model/refreshTokenRequest.d.ts +10 -0
  337. package/dist/accessi-module/Console/generated/model/refreshTokenRequest.js +9 -0
  338. package/dist/accessi-module/Console/generated/model/refreshTokenRequest.js.map +1 -0
  339. package/dist/accessi-module/Console/generated/model/refreshTokenResponse.d.ts +14 -0
  340. package/dist/accessi-module/Console/generated/model/refreshTokenResponse.js +3 -0
  341. package/dist/accessi-module/Console/generated/model/refreshTokenResponse.js.map +1 -0
  342. package/dist/accessi-module/Console/generated/model/refreshTokenResult.d.ts +13 -0
  343. package/dist/accessi-module/Console/generated/model/refreshTokenResult.js +3 -0
  344. package/dist/accessi-module/Console/generated/model/refreshTokenResult.js.map +1 -0
  345. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +62 -0
  346. package/dist/accessi-module/Console/generated/model/registerRequest.js +3 -0
  347. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -0
  348. package/dist/accessi-module/Console/generated/model/registerResponse.d.ts +14 -0
  349. package/dist/accessi-module/Console/generated/model/registerResponse.js +3 -0
  350. package/dist/accessi-module/Console/generated/model/registerResponse.js.map +1 -0
  351. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.d.ts +13 -0
  352. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js +9 -0
  353. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js.map +1 -0
  354. package/dist/accessi-module/Console/generated/model/revokeTokenRequest.d.ts +10 -0
  355. package/dist/accessi-module/Console/generated/model/revokeTokenRequest.js +9 -0
  356. package/dist/accessi-module/Console/generated/model/revokeTokenRequest.js.map +1 -0
  357. package/dist/accessi-module/Console/generated/model/role.d.ts +15 -0
  358. package/dist/accessi-module/Console/generated/model/role.js +3 -0
  359. package/dist/accessi-module/Console/generated/model/role.js.map +1 -0
  360. package/dist/accessi-module/Console/generated/model/ruoliMenu.d.ts +15 -0
  361. package/dist/accessi-module/Console/generated/model/ruoliMenu.js +3 -0
  362. package/dist/accessi-module/Console/generated/model/ruoliMenu.js.map +1 -0
  363. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.d.ts +16 -0
  364. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js +17 -0
  365. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js.map +1 -0
  366. package/dist/accessi-module/Console/generated/model/schemaDdlResult.d.ts +20 -0
  367. package/dist/accessi-module/Console/generated/model/schemaDdlResult.js +3 -0
  368. package/dist/accessi-module/Console/generated/model/schemaDdlResult.js.map +1 -0
  369. package/dist/accessi-module/Console/generated/model/schemaDdlSection.d.ts +12 -0
  370. package/dist/accessi-module/Console/generated/model/schemaDdlSection.js +9 -0
  371. package/dist/accessi-module/Console/generated/model/schemaDdlSection.js.map +1 -0
  372. package/dist/accessi-module/Console/generated/model/scopeEntity.d.ts +12 -0
  373. package/dist/accessi-module/Console/generated/model/scopeEntity.js +9 -0
  374. package/dist/accessi-module/Console/generated/model/scopeEntity.js.map +1 -0
  375. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.d.ts +12 -0
  376. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js +9 -0
  377. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js.map +1 -0
  378. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.d.ts +12 -0
  379. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js +9 -0
  380. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js.map +1 -0
  381. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  382. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  383. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  384. package/dist/accessi-module/Console/generated/model/setMenuScopesRequest.d.ts +10 -0
  385. package/dist/accessi-module/Console/generated/model/setMenuScopesRequest.js +9 -0
  386. package/dist/accessi-module/Console/generated/model/setMenuScopesRequest.js.map +1 -0
  387. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.d.ts +10 -0
  388. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js +9 -0
  389. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js.map +1 -0
  390. package/dist/accessi-module/Console/generated/model/setScopeMenusRequest.d.ts +10 -0
  391. package/dist/accessi-module/Console/generated/model/setScopeMenusRequest.js +9 -0
  392. package/dist/accessi-module/Console/generated/model/setScopeMenusRequest.js.map +1 -0
  393. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.d.ts +13 -0
  394. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js +3 -0
  395. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js.map +1 -0
  396. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.d.ts +18 -0
  397. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js +19 -0
  398. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js.map +1 -0
  399. package/dist/accessi-module/Console/generated/model/setUserPasswordRequest.d.ts +14 -0
  400. package/dist/accessi-module/Console/generated/model/setUserPasswordRequest.js +9 -0
  401. package/dist/accessi-module/Console/generated/model/setUserPasswordRequest.js.map +1 -0
  402. package/dist/accessi-module/Console/generated/model/status.d.ts +12 -0
  403. package/dist/accessi-module/Console/generated/model/status.js +9 -0
  404. package/dist/accessi-module/Console/generated/model/status.js.map +1 -0
  405. package/dist/accessi-module/Console/generated/model/tipoFiltro.d.ts +23 -0
  406. package/dist/accessi-module/Console/generated/model/tipoFiltro.js +3 -0
  407. package/dist/accessi-module/Console/generated/model/tipoFiltro.js.map +1 -0
  408. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.d.ts +14 -0
  409. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js +15 -0
  410. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js.map +1 -0
  411. package/dist/accessi-module/Console/generated/model/tokenResult.d.ts +15 -0
  412. package/dist/accessi-module/Console/generated/model/tokenResult.js +3 -0
  413. package/dist/accessi-module/Console/generated/model/tokenResult.js.map +1 -0
  414. package/dist/accessi-module/Console/generated/model/tokenResultType.d.ts +14 -0
  415. package/dist/accessi-module/Console/generated/model/tokenResultType.js +15 -0
  416. package/dist/accessi-module/Console/generated/model/tokenResultType.js.map +1 -0
  417. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.d.ts +18 -0
  418. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js +3 -0
  419. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js.map +1 -0
  420. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.d.ts +10 -0
  421. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js +14 -0
  422. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js.map +1 -0
  423. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.d.ts +13 -0
  424. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js +14 -0
  425. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js.map +1 -0
  426. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.d.ts +10 -0
  427. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js +9 -0
  428. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js.map +1 -0
  429. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.d.ts +11 -0
  430. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js +9 -0
  431. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js.map +1 -0
  432. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.d.ts +12 -0
  433. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js +9 -0
  434. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js.map +1 -0
  435. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  436. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  437. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  438. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  439. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  440. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  441. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +17 -0
  442. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  443. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  444. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  445. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  446. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  447. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  448. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  449. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  450. package/dist/accessi-module/Console/generated/model/updateScopeRequest.d.ts +13 -0
  451. package/dist/accessi-module/Console/generated/model/updateScopeRequest.js +9 -0
  452. package/dist/accessi-module/Console/generated/model/updateScopeRequest.js.map +1 -0
  453. package/dist/accessi-module/Console/generated/model/userDto.d.ts +88 -0
  454. package/dist/accessi-module/Console/generated/model/userDto.js +3 -0
  455. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -0
  456. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.d.ts +18 -0
  457. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js +19 -0
  458. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js.map +1 -0
  459. package/dist/accessi-module/Console/generated/model/userGrantsDto.d.ts +16 -0
  460. package/dist/accessi-module/Console/generated/model/userGrantsDto.js +3 -0
  461. package/dist/accessi-module/Console/generated/model/userGrantsDto.js.map +1 -0
  462. package/dist/accessi-module/Console/generated/model/userGrantsResponse.d.ts +14 -0
  463. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js +3 -0
  464. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js.map +1 -0
  465. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.d.ts +20 -0
  466. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js +9 -0
  467. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js.map +1 -0
  468. package/dist/accessi-module/Console/help.d.ts +13 -0
  469. package/dist/accessi-module/Console/help.js +417 -0
  470. package/dist/accessi-module/Console/help.js.map +1 -0
  471. package/dist/accessi-module/Console/index.html +141 -0
  472. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  473. package/dist/accessi-module/Console/wiki.js +850 -0
  474. package/dist/accessi-module/Console/wiki.js.map +1 -0
  475. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +23 -0
  476. package/dist/accessi-module/Controllers/AccessiConsoleController.js +134 -0
  477. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -0
  478. package/dist/accessi-module/Controllers/AccessiIntrospectionController.d.ts +17 -0
  479. package/dist/accessi-module/Controllers/AccessiIntrospectionController.js +93 -0
  480. package/dist/accessi-module/Controllers/AccessiIntrospectionController.js.map +1 -0
  481. package/dist/accessi-module/Controllers/AuthController.d.ts +16 -6
  482. package/dist/accessi-module/Controllers/AuthController.js +333 -85
  483. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  484. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -5
  485. package/dist/accessi-module/Controllers/ConfiguratorController.js +26 -44
  486. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  487. package/dist/accessi-module/Controllers/ConsoleEntryController.d.ts +16 -0
  488. package/dist/accessi-module/Controllers/ConsoleEntryController.js +136 -0
  489. package/dist/accessi-module/Controllers/ConsoleEntryController.js.map +1 -0
  490. package/dist/accessi-module/Controllers/EmailController.d.ts +4 -6
  491. package/dist/accessi-module/Controllers/EmailController.js +13 -15
  492. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  493. package/dist/accessi-module/Controllers/FiltriController.d.ts +12 -4
  494. package/dist/accessi-module/Controllers/FiltriController.js +153 -6
  495. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  496. package/dist/accessi-module/Controllers/PermissionController.d.ts +31 -5
  497. package/dist/accessi-module/Controllers/PermissionController.js +559 -66
  498. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  499. package/dist/accessi-module/Controllers/SchemaController.d.ts +9 -0
  500. package/dist/accessi-module/Controllers/SchemaController.js +79 -0
  501. package/dist/accessi-module/Controllers/SchemaController.js.map +1 -0
  502. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  503. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  504. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  505. package/dist/accessi-module/Controllers/UserController.d.ts +22 -5
  506. package/dist/accessi-module/Controllers/UserController.js +385 -33
  507. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  508. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  509. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  510. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  511. package/dist/accessi-module/Dtos/AdminBootstrapDtos.d.ts +26 -0
  512. package/dist/accessi-module/Dtos/AdminBootstrapDtos.js +100 -0
  513. package/dist/accessi-module/Dtos/AdminBootstrapDtos.js.map +1 -0
  514. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +0 -1
  515. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  516. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +1 -2
  517. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  518. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +13 -0
  519. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +70 -0
  520. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -0
  521. package/dist/accessi-module/Dtos/BaseResponse.d.ts +22 -0
  522. package/dist/accessi-module/Dtos/BaseResponse.js +106 -1
  523. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  524. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +64 -0
  525. package/dist/accessi-module/Dtos/CatalogDtos.js +322 -0
  526. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  527. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.d.ts +3 -0
  528. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js +31 -0
  529. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -0
  530. package/dist/accessi-module/Dtos/ConsoleEntryDtos.d.ts +24 -0
  531. package/dist/accessi-module/Dtos/ConsoleEntryDtos.js +77 -0
  532. package/dist/accessi-module/Dtos/ConsoleEntryDtos.js.map +1 -0
  533. package/dist/accessi-module/Dtos/FederatedExchangeDtos.d.ts +21 -0
  534. package/dist/accessi-module/Dtos/FederatedExchangeDtos.js +74 -0
  535. package/dist/accessi-module/Dtos/FederatedExchangeDtos.js.map +1 -0
  536. package/dist/accessi-module/Dtos/FederatedIdentityDtos.d.ts +69 -0
  537. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js +236 -0
  538. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js.map +1 -0
  539. package/dist/accessi-module/Dtos/FiltriUtente.js +5 -1
  540. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  541. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  542. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  543. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  544. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  545. package/dist/accessi-module/Dtos/GetUserByTokenRequest.d.ts +3 -0
  546. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js +26 -0
  547. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -0
  548. package/dist/accessi-module/Dtos/GetUserByTokenResponse.d.ts +5 -0
  549. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js +27 -0
  550. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -0
  551. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  552. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  553. package/dist/accessi-module/Dtos/IntrospectionDtos.d.ts +16 -0
  554. package/dist/accessi-module/Dtos/IntrospectionDtos.js +59 -0
  555. package/dist/accessi-module/Dtos/IntrospectionDtos.js.map +1 -0
  556. package/dist/accessi-module/Dtos/LoginAsDtos.d.ts +15 -0
  557. package/dist/accessi-module/Dtos/LoginAsDtos.js +68 -0
  558. package/dist/accessi-module/Dtos/LoginAsDtos.js.map +1 -0
  559. package/dist/accessi-module/Dtos/LoginRequest.d.ts +3 -1
  560. package/dist/accessi-module/Dtos/LoginRequest.js +13 -2
  561. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  562. package/dist/accessi-module/Dtos/LoginResponse.d.ts +7 -2
  563. package/dist/accessi-module/Dtos/LoginResponse.js +26 -7
  564. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  565. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  566. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  567. package/dist/accessi-module/Dtos/Permission.js +1 -0
  568. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  569. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +5 -0
  570. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +15 -0
  571. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -0
  572. package/dist/accessi-module/Dtos/RefreshTokenDtos.d.ts +12 -0
  573. package/dist/accessi-module/Dtos/RefreshTokenDtos.js +50 -0
  574. package/dist/accessi-module/Dtos/RefreshTokenDtos.js.map +1 -0
  575. package/dist/accessi-module/Dtos/RegisterRequest.d.ts +2 -4
  576. package/dist/accessi-module/Dtos/RegisterRequest.js +17 -27
  577. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  578. package/dist/accessi-module/Dtos/RegisterResponse.d.ts +1 -1
  579. package/dist/accessi-module/Dtos/RegisterResponse.js +3 -3
  580. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  581. package/dist/accessi-module/Dtos/RevokeTokenRequest.d.ts +3 -0
  582. package/dist/accessi-module/Dtos/RevokeTokenRequest.js +27 -0
  583. package/dist/accessi-module/Dtos/RevokeTokenRequest.js.map +1 -0
  584. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  585. package/dist/accessi-module/Dtos/Role.js +4 -0
  586. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  587. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  588. package/dist/accessi-module/Dtos/SchemaDtos.d.ts +19 -0
  589. package/dist/accessi-module/Dtos/SchemaDtos.js +84 -0
  590. package/dist/accessi-module/Dtos/SchemaDtos.js.map +1 -0
  591. package/dist/accessi-module/Dtos/ScopeDtos.d.ts +28 -0
  592. package/dist/accessi-module/Dtos/ScopeDtos.js +103 -0
  593. package/dist/accessi-module/Dtos/ScopeDtos.js.map +1 -0
  594. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.d.ts +4 -0
  595. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js +36 -0
  596. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -0
  597. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  598. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  599. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  600. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  601. package/dist/accessi-module/Dtos/SetUserPasswordRequest.d.ts +4 -0
  602. package/dist/accessi-module/Dtos/SetUserPasswordRequest.js +32 -0
  603. package/dist/accessi-module/Dtos/SetUserPasswordRequest.js.map +1 -0
  604. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  605. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  606. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  607. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  608. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  609. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  610. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +14 -0
  611. package/dist/accessi-module/Dtos/TwoFactorDtos.js +71 -0
  612. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  613. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  614. package/dist/accessi-module/Dtos/UserDto.d.ts +9 -4
  615. package/dist/accessi-module/Dtos/UserDto.js +37 -22
  616. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  617. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  618. package/dist/accessi-module/Dtos/UserGrantsResponse.d.ts +5 -0
  619. package/dist/accessi-module/Dtos/UserGrantsResponse.js +27 -0
  620. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -0
  621. package/dist/accessi-module/Dtos/index.d.ts +19 -0
  622. package/dist/accessi-module/Dtos/index.js +19 -0
  623. package/dist/accessi-module/Dtos/index.js.map +1 -1
  624. package/dist/accessi-module/Services/AdminBootstrapService/AdminBootstrapService.d.ts +33 -0
  625. package/dist/accessi-module/Services/AdminBootstrapService/AdminBootstrapService.js +106 -0
  626. package/dist/accessi-module/Services/AdminBootstrapService/AdminBootstrapService.js.map +1 -0
  627. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +108 -5
  628. package/dist/accessi-module/Services/AuthService/AuthService.js +452 -54
  629. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  630. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  631. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  632. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  633. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +9 -2
  634. package/dist/accessi-module/Services/EmailService/EmailService.js +47 -22
  635. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  636. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +18 -3
  637. package/dist/accessi-module/Services/FiltriService/FiltriService.js +92 -16
  638. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  639. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +107 -5
  640. package/dist/accessi-module/Services/PermissionService/PermissionService.js +788 -215
  641. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  642. package/dist/accessi-module/Services/SchemaExportService/SchemaExportService.d.ts +36 -0
  643. package/dist/accessi-module/Services/SchemaExportService/SchemaExportService.js +125 -0
  644. package/dist/accessi-module/Services/SchemaExportService/SchemaExportService.js.map +1 -0
  645. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  646. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  647. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  648. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  649. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +175 -0
  650. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  651. package/dist/accessi-module/Services/UserService/UserService.d.ts +73 -5
  652. package/dist/accessi-module/Services/UserService/UserService.js +578 -337
  653. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  654. package/dist/accessi-module/Views/reset-password.html +229 -213
  655. package/dist/accessi-module/accessiRuntime.d.ts +45 -0
  656. package/dist/accessi-module/accessiRuntime.js +39 -0
  657. package/dist/accessi-module/accessiRuntime.js.map +1 -0
  658. package/dist/accessi-module/database-updates/AccessiCatalogMigrator.d.ts +83 -0
  659. package/dist/accessi-module/database-updates/AccessiCatalogMigrator.js +360 -0
  660. package/dist/accessi-module/database-updates/AccessiCatalogMigrator.js.map +1 -0
  661. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +58 -10
  662. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +508 -179
  663. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  664. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.d.ts +5 -0
  665. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js +78 -0
  666. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js.map +1 -0
  667. package/dist/accessi-module/database-updates/accessiSchema.d.ts +67 -0
  668. package/dist/accessi-module/database-updates/accessiSchema.js +135 -0
  669. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  670. package/dist/accessi-module/database-updates/menuScopeSeed.d.ts +15 -0
  671. package/dist/accessi-module/database-updates/menuScopeSeed.js +386 -0
  672. package/dist/accessi-module/database-updates/menuScopeSeed.js.map +1 -0
  673. package/dist/accessi-module/database-updates/menuScopeSeeder.d.ts +8 -0
  674. package/dist/accessi-module/database-updates/menuScopeSeeder.js +131 -0
  675. package/dist/accessi-module/database-updates/menuScopeSeeder.js.map +1 -0
  676. package/dist/accessi-module/database-updates/optionalColumns.d.ts +7 -0
  677. package/dist/accessi-module/database-updates/optionalColumns.js +58 -0
  678. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  679. package/dist/accessi-module/database-updates/runAccessiCatalogMigrations.d.ts +1 -0
  680. package/dist/accessi-module/database-updates/runAccessiCatalogMigrations.js +69 -0
  681. package/dist/accessi-module/database-updates/runAccessiCatalogMigrations.js.map +1 -0
  682. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +18 -53
  683. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  684. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +33 -0
  685. package/dist/accessi-module/federated-auth/FederatedAuthController.js +373 -0
  686. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  687. package/dist/accessi-module/federated-auth/FederatedAuthExchangeController.d.ts +15 -0
  688. package/dist/accessi-module/federated-auth/FederatedAuthExchangeController.js +85 -0
  689. package/dist/accessi-module/federated-auth/FederatedAuthExchangeController.js.map +1 -0
  690. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +102 -0
  691. package/dist/accessi-module/federated-auth/FederatedAuthService.js +472 -0
  692. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  693. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  694. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  695. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  696. package/dist/accessi-module/index.d.ts +61 -1
  697. package/dist/accessi-module/index.js +168 -22
  698. package/dist/accessi-module/index.js.map +1 -1
  699. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  700. package/dist/accessi-module/jwt/jwt.strategy.js +21 -8
  701. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  702. package/dist/accessi-module/middleware/accessiRequirements.d.ts +23 -1
  703. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  704. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  705. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  706. package/dist/accessi-module/middleware/authenticateGen.js +68 -26
  707. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  708. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  709. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +77 -0
  710. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  711. package/dist/accessi-module/security/accessControl.d.ts +48 -2
  712. package/dist/accessi-module/security/accessControl.js +84 -8
  713. package/dist/accessi-module/security/accessControl.js.map +1 -1
  714. package/dist/accessi-module/security/accessTokenRevocation.d.ts +47 -0
  715. package/dist/accessi-module/security/accessTokenRevocation.js +143 -0
  716. package/dist/accessi-module/security/accessTokenRevocation.js.map +1 -0
  717. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  718. package/dist/accessi-module/security/accessiValidation.js +41 -0
  719. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  720. package/dist/accessi-module/security/adminBootstrap.d.ts +8 -0
  721. package/dist/accessi-module/security/adminBootstrap.js +41 -0
  722. package/dist/accessi-module/security/adminBootstrap.js.map +1 -0
  723. package/dist/accessi-module/security/audit.d.ts +7 -0
  724. package/dist/accessi-module/security/audit.js +14 -0
  725. package/dist/accessi-module/security/audit.js.map +1 -0
  726. package/dist/accessi-module/security/authenticatedToken.d.ts +23 -3
  727. package/dist/accessi-module/security/authenticatedToken.js +45 -5
  728. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  729. package/dist/accessi-module/security/consoleEntry.d.ts +63 -0
  730. package/dist/accessi-module/security/consoleEntry.js +200 -0
  731. package/dist/accessi-module/security/consoleEntry.js.map +1 -0
  732. package/dist/accessi-module/security/edgeRateLimit.d.ts +33 -0
  733. package/dist/accessi-module/security/edgeRateLimit.js +81 -0
  734. package/dist/accessi-module/security/edgeRateLimit.js.map +1 -0
  735. package/dist/accessi-module/security/emailConfiguration.d.ts +20 -0
  736. package/dist/accessi-module/security/emailConfiguration.js +41 -0
  737. package/dist/accessi-module/security/emailConfiguration.js.map +1 -0
  738. package/dist/accessi-module/security/jwks.d.ts +33 -0
  739. package/dist/accessi-module/security/jwks.js +83 -0
  740. package/dist/accessi-module/security/jwks.js.map +1 -0
  741. package/dist/accessi-module/security/jwksBootstrap.d.ts +15 -0
  742. package/dist/accessi-module/security/jwksBootstrap.js +44 -0
  743. package/dist/accessi-module/security/jwksBootstrap.js.map +1 -0
  744. package/dist/accessi-module/security/jwtTokenOptions.d.ts +22 -0
  745. package/dist/accessi-module/security/jwtTokenOptions.js +58 -0
  746. package/dist/accessi-module/security/jwtTokenOptions.js.map +1 -0
  747. package/dist/accessi-module/security/loginAs.d.ts +8 -0
  748. package/dist/accessi-module/security/loginAs.js +45 -0
  749. package/dist/accessi-module/security/loginAs.js.map +1 -0
  750. package/dist/accessi-module/security/passwordPolicy.d.ts +21 -0
  751. package/dist/accessi-module/security/passwordPolicy.js +71 -0
  752. package/dist/accessi-module/security/passwordPolicy.js.map +1 -0
  753. package/dist/accessi-module/security/passwordResetToken.d.ts +13 -3
  754. package/dist/accessi-module/security/passwordResetToken.js +13 -5
  755. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  756. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +10 -8
  757. package/dist/accessi-module/security/publicAuthRateLimit.js +61 -60
  758. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  759. package/dist/accessi-module/security/rateLimitStore.d.ts +34 -0
  760. package/dist/accessi-module/security/rateLimitStore.js +145 -0
  761. package/dist/accessi-module/security/rateLimitStore.js.map +1 -0
  762. package/dist/accessi-module/security/refreshTokenRotation.d.ts +80 -0
  763. package/dist/accessi-module/security/refreshTokenRotation.js +204 -0
  764. package/dist/accessi-module/security/refreshTokenRotation.js.map +1 -0
  765. package/dist/accessi-module/security/serviceTokenGuard.d.ts +27 -0
  766. package/dist/accessi-module/security/serviceTokenGuard.js +90 -0
  767. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  768. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +9 -0
  769. package/dist/accessi-module/security/serviceTokenRateLimit.js +53 -0
  770. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  771. package/dist/accessi-module/security/sessionRevocation.d.ts +67 -0
  772. package/dist/accessi-module/security/sessionRevocation.js +170 -0
  773. package/dist/accessi-module/security/sessionRevocation.js.map +1 -0
  774. package/dist/accessi-module/security/validateOptions.d.ts +19 -0
  775. package/dist/accessi-module/security/validateOptions.js +115 -0
  776. package/dist/accessi-module/security/validateOptions.js.map +1 -0
  777. package/dist/accessi-module/startupLog.d.ts +7 -0
  778. package/dist/accessi-module/startupLog.js +29 -0
  779. package/dist/accessi-module/startupLog.js.map +1 -0
  780. package/dist/allegati-module/AllegatiModule.d.ts +11 -0
  781. package/dist/allegati-module/AllegatiModule.js +11 -1
  782. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  783. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  784. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  785. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  786. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  787. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  788. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  789. package/dist/allegati-module/Dtos/index.js.map +1 -1
  790. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  791. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  792. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  793. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  794. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  795. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  796. package/dist/allegati-module/index.js +2 -2
  797. package/dist/allegati-module/index.js.map +1 -1
  798. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  799. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  800. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  801. package/dist/angular-components/aree-disponibili/aree-disponibili.js +1336 -0
  802. package/dist/angular-components/aree-disponibili/demo.html +232 -0
  803. package/dist/autobind.d.ts +10 -3
  804. package/dist/autobind.js +24 -9
  805. package/dist/autobind.js.map +1 -1
  806. package/dist/emilsoftware-utilities-2.0.0-dev.70.tgz +0 -0
  807. package/dist/firebird-compat.d.ts +41 -0
  808. package/dist/firebird-compat.js +54 -3
  809. package/dist/firebird-compat.js.map +1 -1
  810. package/dist/index.d.ts +2 -1
  811. package/dist/index.js +2 -1
  812. package/dist/index.js.map +1 -1
  813. package/dist/initEmilsoftwareModule.d.ts +11 -1
  814. package/dist/initEmilsoftwareModule.js +64 -14
  815. package/dist/initEmilsoftwareModule.js.map +1 -1
  816. package/dist/openapi/OpenApiConfig.d.ts +68 -0
  817. package/dist/openapi/OpenApiConfig.js +157 -0
  818. package/dist/openapi/OpenApiConfig.js.map +1 -0
  819. package/dist/openapi/OpenApiMerge.d.ts +15 -0
  820. package/dist/openapi/OpenApiMerge.js +119 -0
  821. package/dist/openapi/OpenApiMerge.js.map +1 -0
  822. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  823. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  824. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  825. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  826. package/dist/scripts/generateAccessiWiki.js +131 -0
  827. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  828. package/dist/scripts/startAccessiService.d.ts +1 -0
  829. package/dist/scripts/startAccessiService.js +11 -0
  830. package/dist/scripts/startAccessiService.js.map +1 -0
  831. package/docs/accessi-openapi-fingerprint.json +192 -0
  832. package/docs/gateway-rate-limit.md +98 -0
  833. package/docs/standalone-service.md +176 -0
  834. package/integration-prompt.md +772 -0
  835. package/package.json +198 -82
  836. package/dist/swagger/SwaggerConfig.d.ts +0 -2
  837. package/dist/swagger/SwaggerConfig.js +0 -26
  838. package/dist/swagger/SwaggerConfig.js.map +0 -1
@@ -59,6 +59,8 @@ const common_1 = require("@nestjs/common");
59
59
  const jwt = __importStar(require("jsonwebtoken"));
60
60
  const UserService_1 = require("../Services/UserService/UserService");
61
61
  const authenticatedToken_1 = require("../security/authenticatedToken");
62
+ const jwtTokenOptions_1 = require("../security/jwtTokenOptions");
63
+ const sessionRevocation_1 = require("../security/sessionRevocation");
62
64
  let JwtSimpleGuard = class JwtSimpleGuard {
63
65
  constructor(accessiOptions, userService) {
64
66
  this.accessiOptions = accessiOptions;
@@ -66,26 +68,37 @@ let JwtSimpleGuard = class JwtSimpleGuard {
66
68
  }
67
69
  canActivate(context) {
68
70
  return __awaiter(this, void 0, void 0, function* () {
69
- var _a, _b;
70
71
  const request = context.switchToHttp().getRequest();
71
72
  const authHeader = request.headers['authorization'];
72
73
  if (!authHeader)
73
74
  throw new common_1.UnauthorizedException('Token mancante.');
74
- const token = authHeader.split(' ')[1];
75
+ const token = (0, authenticatedToken_1.extractAccessiBearerToken)(authHeader);
75
76
  if (!token)
76
77
  throw new common_1.UnauthorizedException('Formato token non valido.');
77
78
  try {
78
- const secret = ((_b = (_a = this.accessiOptions) === null || _a === void 0 ? void 0 : _a.jwtOptions) === null || _b === void 0 ? void 0 : _b.secret) || process.env.ACC_JWT_SECRET;
79
- if (!secret) {
80
- throw new common_1.InternalServerErrorException('JWT secret non configurato.');
79
+ let verification;
80
+ try {
81
+ verification = (0, jwtTokenOptions_1.getAccessiAccessTokenVerificationConfig)(this.accessiOptions);
82
+ }
83
+ catch (_a) {
84
+ throw new common_1.InternalServerErrorException('Chiave JWT non configurata.');
85
+ }
86
+ let payload;
87
+ try {
88
+ payload = jwt.verify(token, verification.key, verification.verifyOptions);
89
+ }
90
+ catch (_b) {
91
+ throw new common_1.UnauthorizedException('Token non valido o scaduto.');
81
92
  }
82
- const payload = jwt.verify(token, secret);
83
93
  const codiceUtente = (0, authenticatedToken_1.resolveCodiceUtenteFromTokenPayload)(payload);
84
94
  if (!codiceUtente) {
85
95
  throw new common_1.UnauthorizedException('Token privo di un utente valido.');
86
96
  }
97
+ if (yield (0, sessionRevocation_1.isAccessiTokenRevoked)(this.accessiOptions, payload, codiceUtente)) {
98
+ throw new common_1.UnauthorizedException('Sessione revocata.');
99
+ }
87
100
  const currentUser = yield this.userService.getAuthenticatedUserSnapshot(codiceUtente);
88
- if (!(0, authenticatedToken_1.isAuthenticatedUserEnabledForJwt)(currentUser)) {
101
+ if (!(0, authenticatedToken_1.isAuthenticatedUserEnabledForJwt)(currentUser) || !(0, authenticatedToken_1.isAccessiTokenAllowedForUser)(payload, currentUser)) {
89
102
  throw new common_1.UnauthorizedException('Utente non piu autorizzato.');
90
103
  }
91
104
  request.user = (0, authenticatedToken_1.buildAuthenticatedTokenPayload)(payload, currentUser);
@@ -95,7 +108,7 @@ let JwtSimpleGuard = class JwtSimpleGuard {
95
108
  if (error instanceof common_1.InternalServerErrorException || error instanceof common_1.UnauthorizedException) {
96
109
  throw error;
97
110
  }
98
- throw new common_1.UnauthorizedException('Token non valido o scaduto.');
111
+ throw new common_1.InternalServerErrorException('Errore durante la verifica dell utente.');
99
112
  }
100
113
  });
101
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../../src/accessi-module/jwt/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,kDAAoC;AAEpC,qEAAkE;AAClE,uEAIwC;AAGjC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAC8C,cAA8B,EACzD,WAAwB;QADG,mBAAc,GAAd,cAAc,CAAgB;QACzD,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEE,WAAW,CAAC,OAAyB;;;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAEpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,8BAAqB,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;YAEzE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,cAAc,0CAAE,UAAU,0CAAE,MAAM,KAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;gBACrF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,qCAA4B,CAAC,6BAA6B,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,YAAY,GAAG,IAAA,wDAAmC,EAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,8BAAqB,CAAC,kCAAkC,CAAC,CAAC;gBACtE,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAA,qDAAgC,EAAC,WAAW,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;gBACjE,CAAC;gBAED,OAAO,CAAC,IAAI,GAAG,IAAA,mDAA8B,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,qCAA4B,IAAI,KAAK,YAAY,8BAAqB,EAAE,CAAC;oBAC5F,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AAxCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;6CACI,yBAAW;GAHhC,cAAc,CAwC1B","sourcesContent":["import {\r\n CanActivate,\r\n ExecutionContext,\r\n Inject,\r\n Injectable,\r\n InternalServerErrorException,\r\n UnauthorizedException,\r\n} from '@nestjs/common';\r\nimport * as jwt from 'jsonwebtoken';\r\nimport { AccessiOptions } from '../AccessiModule';\r\nimport { UserService } from '../Services/UserService/UserService';\r\nimport {\r\n buildAuthenticatedTokenPayload,\r\n isAuthenticatedUserEnabledForJwt,\r\n resolveCodiceUtenteFromTokenPayload,\r\n} from '../security/authenticatedToken';\r\n\r\n@Injectable()\r\nexport class JwtSimpleGuard implements CanActivate {\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n private readonly userService: UserService,\r\n ) {}\r\n\r\n async canActivate(context: ExecutionContext): Promise<boolean> {\r\n const request = context.switchToHttp().getRequest();\r\n\r\n const authHeader = request.headers['authorization'];\r\n if (!authHeader) throw new UnauthorizedException('Token mancante.');\r\n\r\n const token = authHeader.split(' ')[1];\r\n if (!token) throw new UnauthorizedException('Formato token non valido.');\r\n\r\n try {\r\n const secret = this.accessiOptions?.jwtOptions?.secret || process.env.ACC_JWT_SECRET;\r\n if (!secret) {\r\n throw new InternalServerErrorException('JWT secret non configurato.');\r\n }\r\n const payload = jwt.verify(token, secret);\r\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(payload);\r\n if (!codiceUtente) {\r\n throw new UnauthorizedException('Token privo di un utente valido.');\r\n }\r\n\r\n const currentUser = await this.userService.getAuthenticatedUserSnapshot(codiceUtente);\r\n if (!isAuthenticatedUserEnabledForJwt(currentUser)) {\r\n throw new UnauthorizedException('Utente non piu autorizzato.');\r\n }\r\n\r\n request.user = buildAuthenticatedTokenPayload(payload, currentUser);\r\n return true;\r\n } catch (error) {\r\n if (error instanceof InternalServerErrorException || error instanceof UnauthorizedException) {\r\n throw error;\r\n }\r\n throw new UnauthorizedException('Token non valido o scaduto.');\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../../src/accessi-module/jwt/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,kDAAoC;AAEpC,qEAAkE;AAClE,uEAMwC;AACxC,iEAAsF;AACtF,qEAAsE;AAG/D,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAC8C,cAA8B,EACzD,WAAwB;QADG,mBAAc,GAAd,cAAc,CAAgB;QACzD,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEE,WAAW,CAAC,OAAyB;;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAEpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,8BAAqB,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,KAAK,GAAG,IAAA,8CAAyB,EAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;YAEzE,IAAI,CAAC;gBACH,IAAI,YAAwE,CAAC;gBAC7E,IAAI,CAAC;oBACH,YAAY,GAAG,IAAA,yDAAuC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC9E,CAAC;gBAAC,WAAM,CAAC;oBACP,MAAM,IAAI,qCAA4B,CAAC,6BAA6B,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,OAAgC,CAAC;gBACrC,IAAI,CAAC;oBACH,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5E,CAAC;gBAAC,WAAM,CAAC;oBACP,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM,YAAY,GAAG,IAAA,wDAAmC,EAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,8BAAqB,CAAC,kCAAkC,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,MAAM,IAAA,yCAAqB,EAAC,IAAI,CAAC,cAAc,EAAE,OAAkC,EAAE,YAAY,CAAC,EAAE,CAAC;oBACvG,MAAM,IAAI,8BAAqB,CAAC,oBAAoB,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAA,qDAAgC,EAAC,WAAW,CAAC,IAAI,CAAC,IAAA,iDAA4B,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;oBAC1G,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;gBACjE,CAAC;gBAED,OAAO,CAAC,IAAI,GAAG,IAAA,mDAA8B,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,qCAA4B,IAAI,KAAK,YAAY,8BAAqB,EAAE,CAAC;oBAC5F,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,qCAA4B,CAAC,yCAAyC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AAlDY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;6CACI,yBAAW;GAHhC,cAAc,CAkD1B","sourcesContent":["import {\n CanActivate,\n ExecutionContext,\n Inject,\n Injectable,\n InternalServerErrorException,\n UnauthorizedException,\n} from '@nestjs/common';\nimport * as jwt from 'jsonwebtoken';\nimport type { AccessiOptions } from '../AccessiModule';\nimport { UserService } from '../Services/UserService/UserService';\nimport {\n buildAuthenticatedTokenPayload,\n extractAccessiBearerToken,\n isAuthenticatedUserEnabledForJwt,\n isAccessiTokenAllowedForUser,\n resolveCodiceUtenteFromTokenPayload,\n} from '../security/authenticatedToken';\nimport { getAccessiAccessTokenVerificationConfig } from '../security/jwtTokenOptions';\nimport { isAccessiTokenRevoked } from '../security/sessionRevocation';\n\n@Injectable()\nexport class JwtSimpleGuard implements CanActivate {\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly userService: UserService,\n ) {}\n\n async canActivate(context: ExecutionContext): Promise<boolean> {\n const request = context.switchToHttp().getRequest();\n\n const authHeader = request.headers['authorization'];\n if (!authHeader) throw new UnauthorizedException('Token mancante.');\n\n const token = extractAccessiBearerToken(authHeader);\n if (!token) throw new UnauthorizedException('Formato token non valido.');\n\n try {\n let verification: ReturnType<typeof getAccessiAccessTokenVerificationConfig>;\n try {\n verification = getAccessiAccessTokenVerificationConfig(this.accessiOptions);\n } catch {\n throw new InternalServerErrorException('Chiave JWT non configurata.');\n }\n let payload: jwt.JwtPayload | string;\n try {\n payload = jwt.verify(token, verification.key, verification.verifyOptions);\n } catch {\n throw new UnauthorizedException('Token non valido o scaduto.');\n }\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(payload);\n if (!codiceUtente) {\n throw new UnauthorizedException('Token privo di un utente valido.');\n }\n if (await isAccessiTokenRevoked(this.accessiOptions, payload as Record<string, unknown>, codiceUtente)) {\n throw new UnauthorizedException('Sessione revocata.');\n }\n\n const currentUser = await this.userService.getAuthenticatedUserSnapshot(codiceUtente);\n if (!isAuthenticatedUserEnabledForJwt(currentUser) || !isAccessiTokenAllowedForUser(payload, currentUser)) {\n throw new UnauthorizedException('Utente non piu autorizzato.');\n }\n\n request.user = buildAuthenticatedTokenPayload(payload, currentUser);\n return true;\n } catch (error) {\n if (error instanceof InternalServerErrorException || error instanceof UnauthorizedException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante la verifica dell utente.');\n }\n }\n}\n"]}
@@ -1,42 +1,57 @@
1
1
  import { Request } from "express";
2
+ /** Grant effettivo letto da Accessi. Il confronto usa `tipoAbilitazione >= minPermissionLevel`. */
2
3
  export type AccessiGrant = {
3
4
  codiceMenu: string;
4
5
  tipoAbilitazione?: number;
5
6
  };
7
+ /** Risultato memoizzato durante una singola autorizzazione. Non modificarlo nel custom handler. */
6
8
  export type GrantsResult = {
7
9
  grants?: AccessiGrant[];
8
10
  [key: string]: unknown;
9
11
  };
12
+ /** Richiede l'accesso a un menu con almeno il livello indicato. Valori convenzionali: 10 lettura, 20 scrittura. */
10
13
  export type AccessiPermissionRequirement = {
11
14
  type: "permission";
12
15
  menuCode: string;
13
16
  minPermissionLevel: number;
14
17
  };
18
+ /** Tutti i requisiti figli devono essere soddisfatti. Una lista vuota e una configurazione non valida. */
15
19
  export type AccessiAllRequirement = {
16
20
  type: "and";
17
21
  requirements: AccessiRequirementNode[];
18
22
  };
23
+ /** Almeno un requisito figlio deve essere soddisfatto. Una lista vuota e una configurazione non valida. */
19
24
  export type AccessiAnyRequirement = {
20
25
  type: "or";
21
26
  requirements: AccessiRequirementNode[];
22
27
  };
28
+ /** Nega il risultato del requisito figlio. Usarlo con cautela per non creare policy difficili da verificare. */
23
29
  export type AccessiNotRequirement = {
24
30
  type: "not";
25
31
  requirement: AccessiRequirementNode;
26
32
  };
33
+ /** Delega una condizione applicativa a un handler registrato dal backend. */
27
34
  export type AccessiCustomRequirement = {
28
35
  type: "custom";
29
36
  key: string;
30
37
  payload?: unknown;
31
38
  };
39
+ /** Nodo composabile dell'albero di autorizzazione valutato da `authorizeAccessi`. */
32
40
  export type AccessiRequirementNode = AccessiPermissionRequirement | AccessiAllRequirement | AccessiAnyRequirement | AccessiNotRequirement | AccessiCustomRequirement;
41
+ /** Contesto in sola lettura consegnato a un requisito personalizzato. */
33
42
  export type AccessiCustomRequirementContext = {
34
43
  req: Request;
35
- decodedToken: any;
44
+ decodedToken: Record<string, unknown>;
36
45
  userCode: number;
37
46
  getGrantsResult: () => Promise<GrantsResult>;
38
47
  };
48
+ /** Handler applicativo per `accessiRequirement.custom`; `false` nega la richiesta, un errore produce 500. */
39
49
  export type AccessiCustomRequirementHandler = (context: AccessiCustomRequirementContext, payload?: unknown) => boolean | Promise<boolean>;
50
+ /**
51
+ * Policy passata a `authorizeAccessi`.
52
+ * `requirements` e la forma compatibile storica ed equivale a un AND; `requirementTree`
53
+ * permette policy annidate e ha precedenza quando entrambi sono presenti.
54
+ */
40
55
  export type AccessiAuthorizationOptions = {
41
56
  requirements?: {
42
57
  menuCode: string;
@@ -45,10 +60,12 @@ export type AccessiAuthorizationOptions = {
45
60
  requirementTree?: AccessiRequirementNode;
46
61
  customRequirementHandlers?: Record<string, AccessiCustomRequirementHandler>;
47
62
  };
63
+ /** Errore di configurazione di una policy, distinto dal normale diniego 403. */
48
64
  export declare class RequirementEvaluationError extends Error {
49
65
  readonly code: string;
50
66
  constructor(code: string, message: string);
51
67
  }
68
+ /** Factory tipizzata per costruire policy leggibili senza dipendere dalla struttura interna dei nodi. */
52
69
  export declare const accessiRequirement: {
53
70
  permission: (menuCode: string, minPermissionLevel: number) => AccessiPermissionRequirement;
54
71
  and: (...requirements: AccessiRequirementNode[]) => AccessiAllRequirement;
@@ -56,5 +73,10 @@ export declare const accessiRequirement: {
56
73
  not: (requirement: AccessiRequirementNode) => AccessiNotRequirement;
57
74
  custom: (key: string, payload?: unknown) => AccessiCustomRequirement;
58
75
  };
76
+ /** Normalizza la forma compatibile `requirements` nell'albero interno. */
59
77
  export declare function buildRequirementTree(options?: AccessiAuthorizationOptions): AccessiRequirementNode | undefined;
78
+ /**
79
+ * Valuta ricorsivamente una policy. I grant sono caricati solo se necessari tramite `getGrantsResult`.
80
+ * Questa funzione e pubblica per test e integrazioni avanzate; normalmente usare `authorizeAccessi`.
81
+ */
60
82
  export declare function evaluateRequirement(requirement: AccessiRequirementNode, context: AccessiCustomRequirementContext, options?: AccessiAuthorizationOptions): Promise<boolean>;
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.accessiRequirement = exports.RequirementEvaluationError = void 0;
13
13
  exports.buildRequirementTree = buildRequirementTree;
14
14
  exports.evaluateRequirement = evaluateRequirement;
15
+ /** Errore di configurazione di una policy, distinto dal normale diniego 403. */
15
16
  class RequirementEvaluationError extends Error {
16
17
  constructor(code, message) {
17
18
  super(message);
@@ -23,6 +24,7 @@ exports.RequirementEvaluationError = RequirementEvaluationError;
23
24
  function requirementError(code, message) {
24
25
  return new RequirementEvaluationError(code, message);
25
26
  }
27
+ /** Factory tipizzata per costruire policy leggibili senza dipendere dalla struttura interna dei nodi. */
26
28
  exports.accessiRequirement = {
27
29
  permission: (menuCode, minPermissionLevel) => ({
28
30
  type: "permission",
@@ -47,6 +49,7 @@ exports.accessiRequirement = {
47
49
  payload,
48
50
  }),
49
51
  };
52
+ /** Normalizza la forma compatibile `requirements` nell'albero interno. */
50
53
  function buildRequirementTree(options) {
51
54
  var _a;
52
55
  if (options === null || options === void 0 ? void 0 : options.requirementTree)
@@ -57,6 +60,10 @@ function buildRequirementTree(options) {
57
60
  const nodes = requirements.map((requirement) => exports.accessiRequirement.permission(requirement.menuCode, requirement.minPermissionLevel));
58
61
  return exports.accessiRequirement.and(...nodes);
59
62
  }
63
+ /**
64
+ * Valuta ricorsivamente una policy. I grant sono caricati solo se necessari tramite `getGrantsResult`.
65
+ * Questa funzione e pubblica per test e integrazioni avanzate; normalmente usare `authorizeAccessi`.
66
+ */
60
67
  function evaluateRequirement(requirement, context, options) {
61
68
  return __awaiter(this, void 0, void 0, function* () {
62
69
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"accessiRequirements.js","sourceRoot":"","sources":["../../../src/accessi-module/middleware/accessiRequirements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\r\n\r\nexport type AccessiGrant = {\r\n codiceMenu: string;\r\n tipoAbilitazione?: number;\r\n};\r\n\r\nexport type GrantsResult = {\r\n grants?: AccessiGrant[];\r\n [key: string]: unknown;\r\n};\r\n\r\nexport type AccessiPermissionRequirement = {\r\n type: \"permission\";\r\n menuCode: string;\r\n minPermissionLevel: number;\r\n};\r\n\r\nexport type AccessiAllRequirement = {\r\n type: \"and\";\r\n requirements: AccessiRequirementNode[];\r\n};\r\n\r\nexport type AccessiAnyRequirement = {\r\n type: \"or\";\r\n requirements: AccessiRequirementNode[];\r\n};\r\n\r\nexport type AccessiNotRequirement = {\r\n type: \"not\";\r\n requirement: AccessiRequirementNode;\r\n};\r\n\r\nexport type AccessiCustomRequirement = {\r\n type: \"custom\";\r\n key: string;\r\n payload?: unknown;\r\n};\r\n\r\nexport type AccessiRequirementNode =\r\n | AccessiPermissionRequirement\r\n | AccessiAllRequirement\r\n | AccessiAnyRequirement\r\n | AccessiNotRequirement\r\n | AccessiCustomRequirement;\r\n\r\nexport type AccessiCustomRequirementContext = {\r\n req: Request;\r\n decodedToken: any;\r\n userCode: number;\r\n getGrantsResult: () => Promise<GrantsResult>;\r\n};\r\n\r\nexport type AccessiCustomRequirementHandler = (\r\n context: AccessiCustomRequirementContext,\r\n payload?: unknown\r\n) => boolean | Promise<boolean>;\r\n\r\nexport type AccessiAuthorizationOptions = {\r\n requirements?: { menuCode: string; minPermissionLevel: number }[];\r\n requirementTree?: AccessiRequirementNode;\r\n customRequirementHandlers?: Record<string, AccessiCustomRequirementHandler>;\r\n};\r\n\r\nexport class RequirementEvaluationError extends Error {\r\n constructor(public readonly code: string, message: string) {\r\n super(message);\r\n this.name = \"RequirementEvaluationError\";\r\n }\r\n}\r\n\r\nfunction requirementError(code: string, message: string): RequirementEvaluationError {\r\n return new RequirementEvaluationError(code, message);\r\n}\r\n\r\nexport const accessiRequirement = {\r\n permission: (\r\n menuCode: string,\r\n minPermissionLevel: number\r\n ): AccessiPermissionRequirement => ({\r\n type: \"permission\",\r\n menuCode,\r\n minPermissionLevel,\r\n }),\r\n and: (...requirements: AccessiRequirementNode[]): AccessiAllRequirement => ({\r\n type: \"and\",\r\n requirements,\r\n }),\r\n or: (...requirements: AccessiRequirementNode[]): AccessiAnyRequirement => ({\r\n type: \"or\",\r\n requirements,\r\n }),\r\n not: (requirement: AccessiRequirementNode): AccessiNotRequirement => ({\r\n type: \"not\",\r\n requirement,\r\n }),\r\n custom: (key: string, payload?: unknown): AccessiCustomRequirement => ({\r\n type: \"custom\",\r\n key,\r\n payload,\r\n }),\r\n};\r\n\r\nexport function buildRequirementTree(\r\n options?: AccessiAuthorizationOptions\r\n): AccessiRequirementNode | undefined {\r\n if (options?.requirementTree) return options.requirementTree;\r\n\r\n const requirements = options?.requirements ?? [];\r\n if (requirements.length === 0) return undefined;\r\n\r\n const nodes: AccessiRequirementNode[] = requirements.map((requirement) =>\r\n accessiRequirement.permission(\r\n requirement.menuCode,\r\n requirement.minPermissionLevel\r\n )\r\n );\r\n\r\n return accessiRequirement.and(...nodes);\r\n}\r\n\r\nexport async function evaluateRequirement(\r\n requirement: AccessiRequirementNode,\r\n context: AccessiCustomRequirementContext,\r\n options?: AccessiAuthorizationOptions\r\n): Promise<boolean> {\r\n switch (requirement.type) {\r\n case \"permission\": {\r\n const grantsResult = await context.getGrantsResult();\r\n const grants = grantsResult.grants ?? [];\r\n return grants.some(\r\n (grant) =>\r\n grant.codiceMenu == requirement.menuCode &&\r\n Number(grant.tipoAbilitazione ?? 0) >= requirement.minPermissionLevel\r\n );\r\n }\r\n case \"and\":\r\n if (!requirement.requirements || requirement.requirements.length === 0) {\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n \"AND requirement must contain at least one child requirement\"\r\n );\r\n }\r\n for (const child of requirement.requirements) {\r\n if (!(await evaluateRequirement(child, context, options))) return false;\r\n }\r\n return true;\r\n case \"or\":\r\n if (!requirement.requirements || requirement.requirements.length === 0) {\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n \"OR requirement must contain at least one child requirement\"\r\n );\r\n }\r\n for (const child of requirement.requirements) {\r\n if (await evaluateRequirement(child, context, options)) return true;\r\n }\r\n return false;\r\n case \"not\":\r\n return !(await evaluateRequirement(requirement.requirement, context, options));\r\n case \"custom\": {\r\n const handlers = options?.customRequirementHandlers ?? {};\r\n const handler = handlers[requirement.key];\r\n if (!handler) {\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n `Custom requirement handler \"${requirement.key}\" not found`\r\n );\r\n }\r\n return Boolean(await handler(context, requirement.payload));\r\n }\r\n default:\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n \"Unknown requirement node type\"\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"accessiRequirements.js","sourceRoot":"","sources":["../../../src/accessi-module/middleware/accessiRequirements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\n\n/** Grant effettivo letto da Accessi. Il confronto usa `tipoAbilitazione >= minPermissionLevel`. */\nexport type AccessiGrant = {\n codiceMenu: string;\n tipoAbilitazione?: number;\n};\n\n/** Risultato memoizzato durante una singola autorizzazione. Non modificarlo nel custom handler. */\nexport type GrantsResult = {\n grants?: AccessiGrant[];\n [key: string]: unknown;\n};\n\n/** Richiede l'accesso a un menu con almeno il livello indicato. Valori convenzionali: 10 lettura, 20 scrittura. */\nexport type AccessiPermissionRequirement = {\n type: \"permission\";\n menuCode: string;\n minPermissionLevel: number;\n};\n\n/** Tutti i requisiti figli devono essere soddisfatti. Una lista vuota e una configurazione non valida. */\nexport type AccessiAllRequirement = {\n type: \"and\";\n requirements: AccessiRequirementNode[];\n};\n\n/** Almeno un requisito figlio deve essere soddisfatto. Una lista vuota e una configurazione non valida. */\nexport type AccessiAnyRequirement = {\n type: \"or\";\n requirements: AccessiRequirementNode[];\n};\n\n/** Nega il risultato del requisito figlio. Usarlo con cautela per non creare policy difficili da verificare. */\nexport type AccessiNotRequirement = {\n type: \"not\";\n requirement: AccessiRequirementNode;\n};\n\n/** Delega una condizione applicativa a un handler registrato dal backend. */\nexport type AccessiCustomRequirement = {\n type: \"custom\";\n key: string;\n payload?: unknown;\n};\n\n/** Nodo composabile dell'albero di autorizzazione valutato da `authorizeAccessi`. */\nexport type AccessiRequirementNode =\n | AccessiPermissionRequirement\n | AccessiAllRequirement\n | AccessiAnyRequirement\n | AccessiNotRequirement\n | AccessiCustomRequirement;\n\n/** Contesto in sola lettura consegnato a un requisito personalizzato. */\nexport type AccessiCustomRequirementContext = {\n req: Request;\n decodedToken: Record<string, unknown>;\n userCode: number;\n getGrantsResult: () => Promise<GrantsResult>;\n};\n\n/** Handler applicativo per `accessiRequirement.custom`; `false` nega la richiesta, un errore produce 500. */\nexport type AccessiCustomRequirementHandler = (\n context: AccessiCustomRequirementContext,\n payload?: unknown\n) => boolean | Promise<boolean>;\n\n/**\n * Policy passata a `authorizeAccessi`.\n * `requirements` e la forma compatibile storica ed equivale a un AND; `requirementTree`\n * permette policy annidate e ha precedenza quando entrambi sono presenti.\n */\nexport type AccessiAuthorizationOptions = {\n requirements?: { menuCode: string; minPermissionLevel: number }[];\n requirementTree?: AccessiRequirementNode;\n customRequirementHandlers?: Record<string, AccessiCustomRequirementHandler>;\n};\n\n/** Errore di configurazione di una policy, distinto dal normale diniego 403. */\nexport class RequirementEvaluationError extends Error {\n constructor(public readonly code: string, message: string) {\n super(message);\n this.name = \"RequirementEvaluationError\";\n }\n}\n\nfunction requirementError(code: string, message: string): RequirementEvaluationError {\n return new RequirementEvaluationError(code, message);\n}\n\n/** Factory tipizzata per costruire policy leggibili senza dipendere dalla struttura interna dei nodi. */\nexport const accessiRequirement = {\n permission: (\n menuCode: string,\n minPermissionLevel: number\n ): AccessiPermissionRequirement => ({\n type: \"permission\",\n menuCode,\n minPermissionLevel,\n }),\n and: (...requirements: AccessiRequirementNode[]): AccessiAllRequirement => ({\n type: \"and\",\n requirements,\n }),\n or: (...requirements: AccessiRequirementNode[]): AccessiAnyRequirement => ({\n type: \"or\",\n requirements,\n }),\n not: (requirement: AccessiRequirementNode): AccessiNotRequirement => ({\n type: \"not\",\n requirement,\n }),\n custom: (key: string, payload?: unknown): AccessiCustomRequirement => ({\n type: \"custom\",\n key,\n payload,\n }),\n};\n\n/** Normalizza la forma compatibile `requirements` nell'albero interno. */\nexport function buildRequirementTree(\n options?: AccessiAuthorizationOptions\n): AccessiRequirementNode | undefined {\n if (options?.requirementTree) return options.requirementTree;\n\n const requirements = options?.requirements ?? [];\n if (requirements.length === 0) return undefined;\n\n const nodes: AccessiRequirementNode[] = requirements.map((requirement) =>\n accessiRequirement.permission(\n requirement.menuCode,\n requirement.minPermissionLevel\n )\n );\n\n return accessiRequirement.and(...nodes);\n}\n\n/**\n * Valuta ricorsivamente una policy. I grant sono caricati solo se necessari tramite `getGrantsResult`.\n * Questa funzione e pubblica per test e integrazioni avanzate; normalmente usare `authorizeAccessi`.\n */\nexport async function evaluateRequirement(\n requirement: AccessiRequirementNode,\n context: AccessiCustomRequirementContext,\n options?: AccessiAuthorizationOptions\n): Promise<boolean> {\n switch (requirement.type) {\n case \"permission\": {\n const grantsResult = await context.getGrantsResult();\n const grants = grantsResult.grants ?? [];\n return grants.some(\n (grant) =>\n grant.codiceMenu == requirement.menuCode &&\n Number(grant.tipoAbilitazione ?? 0) >= requirement.minPermissionLevel\n );\n }\n case \"and\":\n if (!requirement.requirements || requirement.requirements.length === 0) {\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n \"AND requirement must contain at least one child requirement\"\n );\n }\n for (const child of requirement.requirements) {\n if (!(await evaluateRequirement(child, context, options))) return false;\n }\n return true;\n case \"or\":\n if (!requirement.requirements || requirement.requirements.length === 0) {\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n \"OR requirement must contain at least one child requirement\"\n );\n }\n for (const child of requirement.requirements) {\n if (await evaluateRequirement(child, context, options)) return true;\n }\n return false;\n case \"not\":\n return !(await evaluateRequirement(requirement.requirement, context, options));\n case \"custom\": {\n const handlers = options?.customRequirementHandlers ?? {};\n const handler = handlers[requirement.key];\n if (!handler) {\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n `Custom requirement handler \"${requirement.key}\" not found`\n );\n }\n return Boolean(await handler(context, requirement.payload));\n }\n default:\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n \"Unknown requirement node type\"\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { NextFunction, Request, Response } from "express";
2
- import { AccessiOptions } from "../AccessiModule";
2
+ import type { AccessiOptions } from "../AccessiModule";
3
3
  import { PermissionService } from "../Services/PermissionService/PermissionService";
4
4
  import { UserService } from "../Services/UserService/UserService";
5
5
  import { AccessiAuthorizationOptions } from "./accessiRequirements";
@@ -8,10 +8,25 @@ export declare class AuthenticateGenService {
8
8
  private readonly permissionService;
9
9
  private readonly userService;
10
10
  constructor(accessiOptions: AccessiOptions, permissionService: PermissionService, userService: UserService);
11
+ /**
12
+ * Verifica JWT, stato corrente dell'utente e policy opzionale, poi popola `req.user` e `req.data`.
13
+ * Se una policy richiede grant, popola anche `req.userGrants`; non chiamarlo direttamente fuori da test o adapter.
14
+ */
11
15
  authorize(req: Request, res: Response, next: NextFunction, options?: AccessiAuthorizationOptions): Promise<void | Response<any, Record<string, any>>>;
12
16
  }
17
+ /** Segnala al middleware che il bootstrap e in corso, consentendo una risposta 503 temporanea invece di un 500. */
13
18
  export declare function beginAccessiAuthInitialization(): void;
19
+ /** Registra il servizio costruito da Nest nel bridge usato dalle rotte Express dell'app ospitante. */
14
20
  export declare function setAccessiAuthService(service: AuthenticateGenService): void;
21
+ /** Propaga il fallimento del bootstrap alle richieste che stavano attendendo il bridge di autorizzazione. */
15
22
  export declare function failAccessiAuthInitialization(error: unknown): void;
23
+ /**
24
+ * Middleware Express pubblico di Accessi.
25
+ *
26
+ * Applicarlo dopo `initializeAccessiModule`: legge `Authorization: Bearer <jwt>`, verifica l'utente corrente
27
+ * e applica eventuali requisiti. Su successo valorizza `req.user` e continua; su errore risponde direttamente
28
+ * con il contratto Accessi, quindi il chiamante non deve aggiungere un proprio `next(error)`.
29
+ */
16
30
  export declare function authorizeAccessi(req: Request, res: Response, next: NextFunction, options?: AccessiAuthorizationOptions): Promise<void | Response<any, Record<string, any>>>;
31
+ /** Alias storico di `authorizeAccessi`, mantenuto per retrocompatibilita. Preferire il nome esplicito nelle nuove integrazioni. */
17
32
  export declare const authenticateGen: typeof authorizeAccessi;
@@ -66,6 +66,8 @@ const UserService_1 = require("../Services/UserService/UserService");
66
66
  const Logger_1 = require("../../Logger");
67
67
  const accessiRequirements_1 = require("./accessiRequirements");
68
68
  const authenticatedToken_1 = require("../security/authenticatedToken");
69
+ const jwtTokenOptions_1 = require("../security/jwtTokenOptions");
70
+ const sessionRevocation_1 = require("../security/sessionRevocation");
69
71
  const logger = new Logger_1.Logger("AuthenticateGen");
70
72
  const ACCESSI_AUTH_SERVICE_LOCALS_KEY = "accessiAuthService";
71
73
  const ACCESSI_AUTH_SERVICE_GLOBAL_KEY = Symbol.for("emilsoftware.accessiAuthService");
@@ -112,35 +114,58 @@ function logAuthFailure(req, authErr) {
112
114
  else
113
115
  logger.warning(message);
114
116
  }
117
+ /** Sends the documented Accessi error contract from Express middleware. */
118
+ function sendAuthenticationError(res, authErr) {
119
+ const message = authErr.status === 403
120
+ ? 'Operazione non autorizzata.'
121
+ : authErr.status >= 500
122
+ ? 'Errore interno del modulo Accessi.'
123
+ : 'Autenticazione non valida o scaduta.';
124
+ return res.status(authErr.status).json({
125
+ severity: 'error',
126
+ status: authErr.status,
127
+ statusCode: 2,
128
+ code: authErr.code,
129
+ // Kept for callers of older versions which already inspected `error`.
130
+ error: authErr.code,
131
+ message,
132
+ });
133
+ }
115
134
  function authorizeWithDependencies(req, res, next, options, accessiOptions, permissionService, userService) {
116
135
  return __awaiter(this, void 0, void 0, function* () {
117
- var _a, _b;
136
+ const authenticatedRequest = req;
118
137
  try {
119
138
  const authHeader = req.headers.authorization;
120
139
  if (!authHeader) {
121
140
  throw authError(401, "AUTH_HEADER_MISSING", "Authorization header not found");
122
141
  }
123
- const token = authHeader.split(" ")[1];
142
+ const token = (0, authenticatedToken_1.extractAccessiBearerToken)(authHeader);
124
143
  if (!token) {
125
144
  throw authError(401, "AUTH_TOKEN_MISSING", "Token not found in Authorization header");
126
145
  }
127
- const secret = (_b = (_a = accessiOptions === null || accessiOptions === void 0 ? void 0 : accessiOptions.jwtOptions) === null || _a === void 0 ? void 0 : _a.secret) !== null && _b !== void 0 ? _b : process.env.ACC_JWT_SECRET;
128
- if (!secret) {
129
- throw authError(500, "AUTH_JWT_SECRET_MISSING", "JWT secret not configured");
146
+ let verification;
147
+ try {
148
+ verification = (0, jwtTokenOptions_1.getAccessiAccessTokenVerificationConfig)(accessiOptions);
149
+ }
150
+ catch (_a) {
151
+ throw authError(500, "AUTH_JWT_SECRET_MISSING", "JWT signing key not configured");
130
152
  }
131
153
  let decoded;
132
154
  try {
133
- decoded = jwt.verify(token, secret);
155
+ decoded = jwt.verify(token, verification.key, verification.verifyOptions);
134
156
  }
135
- catch (_c) {
157
+ catch (_b) {
136
158
  throw authError(401, "AUTH_TOKEN_INVALID", "Invalid JWT token");
137
159
  }
138
160
  const codiceUtente = (0, authenticatedToken_1.resolveCodiceUtenteFromTokenPayload)(decoded);
139
161
  if (!codiceUtente) {
140
162
  throw authError(401, "AUTH_USER_CODE_MISSING", "codiceUtente not found in token payload");
141
163
  }
164
+ if (yield (0, sessionRevocation_1.isAccessiTokenRevoked)(accessiOptions, decoded, codiceUtente)) {
165
+ throw authError(401, "AUTH_TOKEN_REVOKED", "Session revoked");
166
+ }
142
167
  const currentUser = yield userService.getAuthenticatedUserSnapshot(codiceUtente);
143
- if (!(0, authenticatedToken_1.isAuthenticatedUserEnabledForJwt)(currentUser)) {
168
+ if (!(0, authenticatedToken_1.isAuthenticatedUserEnabledForJwt)(currentUser) || !(0, authenticatedToken_1.isAccessiTokenAllowedForUser)(decoded, currentUser)) {
144
169
  throw authError(401, "AUTH_USER_DISABLED", "User is no longer authorized");
145
170
  }
146
171
  const authenticatedPayload = (0, authenticatedToken_1.buildAuthenticatedTokenPayload)(decoded, currentUser);
@@ -166,23 +191,16 @@ function authorizeWithDependencies(req, res, next, options, accessiOptions, perm
166
191
  if (!hasPermissions) {
167
192
  throw authError(403, "AUTH_INSUFFICIENT_PERMISSIONS", "User does not have required permissions");
168
193
  }
169
- req.userGrants = yield getGrantsResult();
194
+ authenticatedRequest.userGrants = yield getGrantsResult();
170
195
  }
171
- req.user = authenticatedPayload;
172
- req.data = authenticatedPayload;
196
+ authenticatedRequest.user = authenticatedPayload;
197
+ authenticatedRequest.data = authenticatedPayload;
173
198
  return next();
174
199
  }
175
200
  catch (error) {
176
201
  const authErr = normalizeAuthError(error);
177
202
  logAuthFailure(req, authErr);
178
- const publicMessage = authErr.status === 403
179
- ? "Forbidden"
180
- : authErr.status >= 500
181
- ? "Internal server error"
182
- : "Unauthorized";
183
- return res
184
- .status(authErr.status)
185
- .json({ message: publicMessage, error: authErr.message, code: authErr.code });
203
+ return sendAuthenticationError(res, authErr);
186
204
  }
187
205
  });
188
206
  }
@@ -192,6 +210,10 @@ let AuthenticateGenService = class AuthenticateGenService {
192
210
  this.permissionService = permissionService;
193
211
  this.userService = userService;
194
212
  }
213
+ /**
214
+ * Verifica JWT, stato corrente dell'utente e policy opzionale, poi popola `req.user` e `req.data`.
215
+ * Se una policy richiede grant, popola anche `req.userGrants`; non chiamarlo direttamente fuori da test o adapter.
216
+ */
195
217
  authorize(req, res, next, options) {
196
218
  return __awaiter(this, void 0, void 0, function* () {
197
219
  return authorizeWithDependencies(req, res, next, options, this.accessiOptions, this.permissionService, this.userService);
@@ -200,7 +222,9 @@ let AuthenticateGenService = class AuthenticateGenService {
200
222
  };
201
223
  exports.AuthenticateGenService = AuthenticateGenService;
202
224
  exports.AuthenticateGenService = AuthenticateGenService = __decorate([
203
- (0, common_1.Injectable)(),
225
+ (0, common_1.Injectable)()
226
+ /** Nest service behind the Express-compatible `authorizeAccessi` middleware. */
227
+ ,
204
228
  __param(0, (0, common_1.Inject)("ACCESSI_OPTIONS")),
205
229
  __metadata("design:paramtypes", [Object, PermissionService_1.PermissionService,
206
230
  UserService_1.UserService])
@@ -220,11 +244,13 @@ function isAuthenticateGenService(value) {
220
244
  return Boolean(value &&
221
245
  typeof value.authorize === "function");
222
246
  }
247
+ /** Segnala al middleware che il bootstrap e in corso, consentendo una risposta 503 temporanea invece di un 500. */
223
248
  function beginAccessiAuthInitialization() {
224
249
  if (!authServiceBootstrapDeferred) {
225
250
  authServiceBootstrapDeferred = createDeferred();
226
251
  }
227
252
  }
253
+ /** Registra il servizio costruito da Nest nel bridge usato dalle rotte Express dell'app ospitante. */
228
254
  function setAccessiAuthService(service) {
229
255
  authenticateGenServiceRef = service;
230
256
  globalThis[ACCESSI_AUTH_SERVICE_GLOBAL_KEY] = service;
@@ -233,6 +259,7 @@ function setAccessiAuthService(service) {
233
259
  authServiceBootstrapDeferred = null;
234
260
  }
235
261
  }
262
+ /** Propaga il fallimento del bootstrap alle richieste che stavano attendendo il bridge di autorizzazione. */
236
263
  function failAccessiAuthInitialization(error) {
237
264
  if (authServiceBootstrapDeferred) {
238
265
  authServiceBootstrapDeferred.reject(error);
@@ -282,26 +309,41 @@ function resolveAccessiAuthService(req) {
282
309
  return getAccessiAuthServiceFromRequest(req);
283
310
  });
284
311
  }
312
+ /**
313
+ * Middleware Express pubblico di Accessi.
314
+ *
315
+ * Applicarlo dopo `initializeAccessiModule`: legge `Authorization: Bearer <jwt>`, verifica l'utente corrente
316
+ * e applica eventuali requisiti. Su successo valorizza `req.user` e continua; su errore risponde direttamente
317
+ * con il contratto Accessi, quindi il chiamante non deve aggiungere un proprio `next(error)`.
318
+ */
285
319
  function authorizeAccessi(req, res, next, options) {
286
320
  return __awaiter(this, void 0, void 0, function* () {
287
321
  var _a;
288
322
  const authService = yield resolveAccessiAuthService(req);
289
323
  if (!authService) {
290
324
  const status = authServiceBootstrapDeferred ? 503 : 500;
291
- const message = authServiceBootstrapDeferred
292
- ? "Accessi authentication service is still initializing"
293
- : "Accessi authentication service not initialized";
325
+ const code = authServiceBootstrapDeferred
326
+ ? 'ACCESSI_AUTH_INITIALIZING'
327
+ : 'ACCESSI_AUTH_NOT_INITIALIZED';
294
328
  logger.error(`Authentication service not initialized ${JSON.stringify({
295
329
  method: req.method,
296
330
  path: (_a = req.originalUrl) !== null && _a !== void 0 ? _a : req.url,
297
331
  status,
298
332
  })}`);
299
- return res
300
- .status(status)
301
- .json({ message });
333
+ return res.status(status).json({
334
+ severity: 'error',
335
+ status,
336
+ statusCode: 2,
337
+ code,
338
+ error: code,
339
+ message: status === 503
340
+ ? 'Il modulo Accessi e in inizializzazione. Riprova tra poco.'
341
+ : 'Il modulo Accessi non e disponibile.',
342
+ });
302
343
  }
303
344
  return authService.authorize(req, res, next, options);
304
345
  });
305
346
  }
347
+ /** Alias storico di `authorizeAccessi`, mantenuto per retrocompatibilita. Preferire il nome esplicito nelle nuove integrazioni. */
306
348
  exports.authenticateGen = authorizeAccessi;
307
349
  //# sourceMappingURL=authenticateGen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authenticateGen.js","sourceRoot":"","sources":["../../../src/accessi-module/middleware/authenticateGen.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\r\nimport * as jwt from \"jsonwebtoken\";\r\nimport { Inject, Injectable } from \"@nestjs/common\";\r\nimport { AccessiOptions } from \"../AccessiModule\";\r\nimport { PermissionService } from \"../Services/PermissionService/PermissionService\";\r\nimport { UserService } from \"../Services/UserService/UserService\";\r\nimport { Logger } from \"../../Logger\";\r\nimport {\r\n AccessiAuthorizationOptions,\r\n AccessiCustomRequirementContext,\r\n GrantsResult,\r\n RequirementEvaluationError,\r\n buildRequirementTree,\r\n evaluateRequirement,\r\n} from \"./accessiRequirements\";\r\nimport {\r\n buildAuthenticatedTokenPayload,\r\n isAuthenticatedUserEnabledForJwt,\r\n resolveCodiceUtenteFromTokenPayload,\r\n} from \"../security/authenticatedToken\";\r\n\r\nconst logger = new Logger(\"AuthenticateGen\");\r\nconst ACCESSI_AUTH_SERVICE_LOCALS_KEY = \"accessiAuthService\";\r\nconst ACCESSI_AUTH_SERVICE_GLOBAL_KEY = Symbol.for(\"emilsoftware.accessiAuthService\");\r\nconst ACCESSI_AUTH_SERVICE_WAIT_MS = 15000;\r\n\r\ntype Deferred<T> = {\r\n promise: Promise<T>;\r\n resolve: (value: T) => void;\r\n reject: (reason?: unknown) => void;\r\n};\r\n\r\nclass AuthMiddlewareError extends Error {\r\n constructor(\r\n public readonly status: number,\r\n public readonly code: string,\r\n message: string,\r\n public readonly details?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"AuthMiddlewareError\";\r\n }\r\n}\r\n\r\nfunction authError(\r\n status: number,\r\n code: string,\r\n message: string,\r\n details?: Record<string, unknown>\r\n) {\r\n return new AuthMiddlewareError(status, code, message, details);\r\n}\r\n\r\nfunction normalizeAuthError(error: unknown): AuthMiddlewareError {\r\n if (error instanceof AuthMiddlewareError) return error;\r\n if (error instanceof RequirementEvaluationError) {\r\n return authError(500, error.code, error.message);\r\n }\r\n if (error instanceof Error) {\r\n return authError(500, \"AUTH_INTERNAL_ERROR\", error.message, {\r\n originalError: error.name,\r\n });\r\n }\r\n return authError(500, \"AUTH_INTERNAL_ERROR\", \"Unexpected authentication error\");\r\n}\r\n\r\nfunction logAuthFailure(req: Request, authErr: AuthMiddlewareError) {\r\n const payload = {\r\n code: authErr.code,\r\n status: authErr.status,\r\n message: authErr.message,\r\n details: authErr.details,\r\n method: req.method,\r\n path: req.originalUrl ?? req.url,\r\n ip: req.ip,\r\n };\r\n\r\n const message = `${authErr.status >= 500 ? \"Authentication failure\" : \"Authentication denied\"} ${JSON.stringify(payload)}`;\r\n if (authErr.status >= 500) logger.error(message);\r\n else logger.warning(message);\r\n}\r\n\r\nasync function authorizeWithDependencies(\r\n req: Request,\r\n res: Response,\r\n next: NextFunction,\r\n options: AccessiAuthorizationOptions | undefined,\r\n accessiOptions: AccessiOptions,\r\n permissionService: PermissionService,\r\n userService: UserService\r\n) {\r\n try {\r\n const authHeader = req.headers.authorization;\r\n if (!authHeader) {\r\n throw authError(401, \"AUTH_HEADER_MISSING\", \"Authorization header not found\");\r\n }\r\n\r\n const token = authHeader.split(\" \")[1];\r\n if (!token) {\r\n throw authError(\r\n 401,\r\n \"AUTH_TOKEN_MISSING\",\r\n \"Token not found in Authorization header\"\r\n );\r\n }\r\n\r\n const secret = accessiOptions?.jwtOptions?.secret ?? process.env.ACC_JWT_SECRET;\r\n if (!secret) {\r\n throw authError(500, \"AUTH_JWT_SECRET_MISSING\", \"JWT secret not configured\");\r\n }\r\n\r\n let decoded: any;\r\n try {\r\n decoded = jwt.verify(token, secret);\r\n } catch {\r\n throw authError(401, \"AUTH_TOKEN_INVALID\", \"Invalid JWT token\");\r\n }\r\n\r\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(decoded);\r\n if (!codiceUtente) {\r\n throw authError(\r\n 401,\r\n \"AUTH_USER_CODE_MISSING\",\r\n \"codiceUtente not found in token payload\"\r\n );\r\n }\r\n\r\n const currentUser = await userService.getAuthenticatedUserSnapshot(codiceUtente);\r\n if (!isAuthenticatedUserEnabledForJwt(currentUser)) {\r\n throw authError(\r\n 401,\r\n \"AUTH_USER_DISABLED\",\r\n \"User is no longer authorized\"\r\n );\r\n }\r\n\r\n const authenticatedPayload = buildAuthenticatedTokenPayload(decoded, currentUser);\r\n\r\n const requirementTree = buildRequirementTree(options);\r\n if (requirementTree) {\r\n if (!accessiOptions?.databaseOptions) {\r\n throw authError(\r\n 500,\r\n \"AUTH_DATABASE_OPTIONS_MISSING\",\r\n \"Database options not configured\"\r\n );\r\n }\r\n\r\n let grantsResultCache: GrantsResult | null = null;\r\n const getGrantsResult = async () => {\r\n if (!grantsResultCache) {\r\n grantsResultCache = await permissionService.getUserRolesAndGrants(\r\n codiceUtente\r\n );\r\n }\r\n return grantsResultCache;\r\n };\r\n\r\n const requirementContext: AccessiCustomRequirementContext = {\r\n req,\r\n decodedToken: authenticatedPayload,\r\n userCode: codiceUtente,\r\n getGrantsResult,\r\n };\r\n\r\n const hasPermissions = await evaluateRequirement(\r\n requirementTree,\r\n requirementContext,\r\n options\r\n );\r\n\r\n if (!hasPermissions) {\r\n throw authError(\r\n 403,\r\n \"AUTH_INSUFFICIENT_PERMISSIONS\",\r\n \"User does not have required permissions\"\r\n );\r\n }\r\n\r\n (req as any).userGrants = await getGrantsResult();\r\n }\r\n\r\n (req as any).user = authenticatedPayload;\r\n (req as any).data = authenticatedPayload;\r\n return next();\r\n } catch (error: unknown) {\r\n const authErr = normalizeAuthError(error);\r\n logAuthFailure(req, authErr);\r\n const publicMessage =\r\n authErr.status === 403\r\n ? \"Forbidden\"\r\n : authErr.status >= 500\r\n ? \"Internal server error\"\r\n : \"Unauthorized\";\r\n return res\r\n .status(authErr.status)\r\n .json({ message: publicMessage, error: authErr.message, code: authErr.code });\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class AuthenticateGenService {\r\n constructor(\r\n @Inject(\"ACCESSI_OPTIONS\")\r\n private readonly accessiOptions: AccessiOptions,\r\n private readonly permissionService: PermissionService,\r\n private readonly userService: UserService\r\n ) { }\r\n\r\n async authorize(\r\n req: Request,\r\n res: Response,\r\n next: NextFunction,\r\n options?: AccessiAuthorizationOptions\r\n ) {\r\n return authorizeWithDependencies(\r\n req,\r\n res,\r\n next,\r\n options,\r\n this.accessiOptions,\r\n this.permissionService,\r\n this.userService\r\n );\r\n }\r\n}\r\n\r\nlet authenticateGenServiceRef: AuthenticateGenService | null = null;\r\nlet authServiceBootstrapDeferred: Deferred<AuthenticateGenService> | null = null;\r\n\r\nfunction createDeferred<T>(): Deferred<T> {\r\n let resolve!: (value: T) => void;\r\n let reject!: (reason?: unknown) => void;\r\n const promise = new Promise<T>((res, rej) => {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n return { promise, resolve, reject };\r\n}\r\n\r\nfunction isAuthenticateGenService(value: unknown): value is AuthenticateGenService {\r\n return Boolean(\r\n value &&\r\n typeof (value as { authorize?: unknown }).authorize === \"function\"\r\n );\r\n}\r\n\r\nexport function beginAccessiAuthInitialization() {\r\n if (!authServiceBootstrapDeferred) {\r\n authServiceBootstrapDeferred = createDeferred<AuthenticateGenService>();\r\n }\r\n}\r\n\r\nexport function setAccessiAuthService(service: AuthenticateGenService) {\r\n authenticateGenServiceRef = service;\r\n (globalThis as Record<symbol, unknown>)[ACCESSI_AUTH_SERVICE_GLOBAL_KEY] = service;\r\n if (authServiceBootstrapDeferred) {\r\n authServiceBootstrapDeferred.resolve(service);\r\n authServiceBootstrapDeferred = null;\r\n }\r\n}\r\n\r\nexport function failAccessiAuthInitialization(error: unknown) {\r\n if (authServiceBootstrapDeferred) {\r\n authServiceBootstrapDeferred.reject(error);\r\n authServiceBootstrapDeferred = null;\r\n }\r\n}\r\n\r\nfunction getAccessiAuthServiceFromRequest(req: Request): AuthenticateGenService | null {\r\n const appLocalsService = (req.app?.locals as Record<string, unknown> | undefined)?.[\r\n ACCESSI_AUTH_SERVICE_LOCALS_KEY\r\n ];\r\n\r\n if (isAuthenticateGenService(appLocalsService)) {\r\n return appLocalsService as AuthenticateGenService;\r\n }\r\n\r\n const globalService = (globalThis as Record<symbol, unknown>)[\r\n ACCESSI_AUTH_SERVICE_GLOBAL_KEY\r\n ];\r\n if (isAuthenticateGenService(globalService)) {\r\n return globalService as AuthenticateGenService;\r\n }\r\n\r\n return authenticateGenServiceRef;\r\n}\r\n\r\nasync function waitForBootstrappedService(): Promise<AuthenticateGenService | null> {\r\n if (!authServiceBootstrapDeferred) {\r\n return null;\r\n }\r\n\r\n const bootstrapPromise = authServiceBootstrapDeferred.promise;\r\n const timeoutPromise = new Promise<null>((resolve) => {\r\n setTimeout(() => resolve(null), ACCESSI_AUTH_SERVICE_WAIT_MS);\r\n });\r\n\r\n try {\r\n const resolved = await Promise.race([bootstrapPromise, timeoutPromise]);\r\n return isAuthenticateGenService(resolved) ? resolved : null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nasync function resolveAccessiAuthService(req: Request): Promise<AuthenticateGenService | null> {\r\n const immediateService = getAccessiAuthServiceFromRequest(req);\r\n if (immediateService) {\r\n return immediateService;\r\n }\r\n\r\n const bootstrappedService = await waitForBootstrappedService();\r\n if (bootstrappedService) {\r\n return bootstrappedService;\r\n }\r\n\r\n return getAccessiAuthServiceFromRequest(req);\r\n}\r\n\r\nexport async function authorizeAccessi(\r\n req: Request,\r\n res: Response,\r\n next: NextFunction,\r\n options?: AccessiAuthorizationOptions\r\n) {\r\n const authService = await resolveAccessiAuthService(req);\r\n\r\n if (!authService) {\r\n const status = authServiceBootstrapDeferred ? 503 : 500;\r\n const message = authServiceBootstrapDeferred\r\n ? \"Accessi authentication service is still initializing\"\r\n : \"Accessi authentication service not initialized\";\r\n logger.error(\r\n `Authentication service not initialized ${JSON.stringify({\r\n method: req.method,\r\n path: req.originalUrl ?? req.url,\r\n status,\r\n })}`\r\n );\r\n return res\r\n .status(status)\r\n .json({ message });\r\n }\r\n\r\n return authService.authorize(req, res, next, options);\r\n}\r\n\r\nexport const authenticateGen = authorizeAccessi;\r\n"]}
1
+ {"version":3,"file":"authenticateGen.js","sourceRoot":"","sources":["../../../src/accessi-module/middleware/authenticateGen.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport * as jwt from \"jsonwebtoken\";\nimport { Inject, Injectable } from \"@nestjs/common\";\nimport type { AccessiOptions } from \"../AccessiModule\";\nimport { PermissionService } from \"../Services/PermissionService/PermissionService\";\nimport { UserService } from \"../Services/UserService/UserService\";\nimport { Logger } from \"../../Logger\";\nimport {\n AccessiAuthorizationOptions,\n AccessiCustomRequirementContext,\n GrantsResult,\n RequirementEvaluationError,\n buildRequirementTree,\n evaluateRequirement,\n} from \"./accessiRequirements\";\nimport {\n buildAuthenticatedTokenPayload,\n extractAccessiBearerToken,\n isAuthenticatedUserEnabledForJwt,\n isAccessiTokenAllowedForUser,\n resolveCodiceUtenteFromTokenPayload,\n} from \"../security/authenticatedToken\";\nimport { getAccessiAccessTokenVerificationConfig } from \"../security/jwtTokenOptions\";\nimport { isAccessiTokenRevoked } from \"../security/sessionRevocation\";\n\nconst logger = new Logger(\"AuthenticateGen\");\nconst ACCESSI_AUTH_SERVICE_LOCALS_KEY = \"accessiAuthService\";\nconst ACCESSI_AUTH_SERVICE_GLOBAL_KEY = Symbol.for(\"emilsoftware.accessiAuthService\");\nconst ACCESSI_AUTH_SERVICE_WAIT_MS = 15000;\n\ntype Deferred<T> = {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n};\n\nclass AuthMiddlewareError extends Error {\n constructor(\n public readonly status: number,\n public readonly code: string,\n message: string,\n public readonly details?: Record<string, unknown>\n ) {\n super(message);\n this.name = \"AuthMiddlewareError\";\n }\n}\n\nfunction authError(\n status: number,\n code: string,\n message: string,\n details?: Record<string, unknown>\n) {\n return new AuthMiddlewareError(status, code, message, details);\n}\n\nfunction normalizeAuthError(error: unknown): AuthMiddlewareError {\n if (error instanceof AuthMiddlewareError) return error;\n if (error instanceof RequirementEvaluationError) {\n return authError(500, error.code, error.message);\n }\n if (error instanceof Error) {\n return authError(500, \"AUTH_INTERNAL_ERROR\", error.message, {\n originalError: error.name,\n });\n }\n return authError(500, \"AUTH_INTERNAL_ERROR\", \"Unexpected authentication error\");\n}\n\nfunction logAuthFailure(req: Request, authErr: AuthMiddlewareError) {\n const payload = {\n code: authErr.code,\n status: authErr.status,\n message: authErr.message,\n details: authErr.details,\n method: req.method,\n path: req.originalUrl ?? req.url,\n ip: req.ip,\n };\n\n const message = `${authErr.status >= 500 ? \"Authentication failure\" : \"Authentication denied\"} ${JSON.stringify(payload)}`;\n if (authErr.status >= 500) logger.error(message);\n else logger.warning(message);\n}\n\n/** Sends the documented Accessi error contract from Express middleware. */\nfunction sendAuthenticationError(res: Response, authErr: AuthMiddlewareError): Response {\n const message =\n authErr.status === 403\n ? 'Operazione non autorizzata.'\n : authErr.status >= 500\n ? 'Errore interno del modulo Accessi.'\n : 'Autenticazione non valida o scaduta.';\n\n return res.status(authErr.status).json({\n severity: 'error',\n status: authErr.status,\n statusCode: 2,\n code: authErr.code,\n // Kept for callers of older versions which already inspected `error`.\n error: authErr.code,\n message,\n });\n}\n\nasync function authorizeWithDependencies(\n req: Request,\n res: Response,\n next: NextFunction,\n options: AccessiAuthorizationOptions | undefined,\n accessiOptions: AccessiOptions,\n permissionService: PermissionService,\n userService: UserService\n) {\n type AuthenticatedRequest = Request & {\n userGrants?: unknown;\n user?: unknown;\n data?: unknown;\n };\n const authenticatedRequest = req as AuthenticatedRequest;\n\n try {\n const authHeader = req.headers.authorization;\n if (!authHeader) {\n throw authError(401, \"AUTH_HEADER_MISSING\", \"Authorization header not found\");\n }\n\n const token = extractAccessiBearerToken(authHeader);\n if (!token) {\n throw authError(\n 401,\n \"AUTH_TOKEN_MISSING\",\n \"Token not found in Authorization header\"\n );\n }\n\n let verification: ReturnType<typeof getAccessiAccessTokenVerificationConfig>;\n try {\n verification = getAccessiAccessTokenVerificationConfig(accessiOptions);\n } catch {\n throw authError(500, \"AUTH_JWT_SECRET_MISSING\", \"JWT signing key not configured\");\n }\n\n let decoded: unknown;\n try {\n decoded = jwt.verify(token, verification.key, verification.verifyOptions);\n } catch {\n throw authError(401, \"AUTH_TOKEN_INVALID\", \"Invalid JWT token\");\n }\n\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(decoded);\n if (!codiceUtente) {\n throw authError(\n 401,\n \"AUTH_USER_CODE_MISSING\",\n \"codiceUtente not found in token payload\"\n );\n }\n if (await isAccessiTokenRevoked(accessiOptions, decoded as Record<string, unknown>, codiceUtente)) {\n throw authError(401, \"AUTH_TOKEN_REVOKED\", \"Session revoked\");\n }\n\n const currentUser = await userService.getAuthenticatedUserSnapshot(codiceUtente);\n if (!isAuthenticatedUserEnabledForJwt(currentUser) || !isAccessiTokenAllowedForUser(decoded, currentUser)) {\n throw authError(\n 401,\n \"AUTH_USER_DISABLED\",\n \"User is no longer authorized\"\n );\n }\n\n const authenticatedPayload = buildAuthenticatedTokenPayload(decoded, currentUser);\n\n const requirementTree = buildRequirementTree(options);\n if (requirementTree) {\n if (!accessiOptions?.databaseOptions) {\n throw authError(\n 500,\n \"AUTH_DATABASE_OPTIONS_MISSING\",\n \"Database options not configured\"\n );\n }\n\n let grantsResultCache: GrantsResult | null = null;\n const getGrantsResult = async () => {\n if (!grantsResultCache) {\n grantsResultCache = await permissionService.getUserRolesAndGrants(\n codiceUtente\n );\n }\n return grantsResultCache;\n };\n\n const requirementContext: AccessiCustomRequirementContext = {\n req,\n decodedToken: authenticatedPayload,\n userCode: codiceUtente,\n getGrantsResult,\n };\n\n const hasPermissions = await evaluateRequirement(\n requirementTree,\n requirementContext,\n options\n );\n\n if (!hasPermissions) {\n throw authError(\n 403,\n \"AUTH_INSUFFICIENT_PERMISSIONS\",\n \"User does not have required permissions\"\n );\n }\n\n authenticatedRequest.userGrants = await getGrantsResult();\n }\n\n authenticatedRequest.user = authenticatedPayload;\n authenticatedRequest.data = authenticatedPayload;\n return next();\n } catch (error: unknown) {\n const authErr = normalizeAuthError(error);\n logAuthFailure(req, authErr);\n return sendAuthenticationError(res, authErr);\n }\n}\n\n@Injectable()\n/** Nest service behind the Express-compatible `authorizeAccessi` middleware. */\nexport class AuthenticateGenService {\n constructor(\n @Inject(\"ACCESSI_OPTIONS\")\n private readonly accessiOptions: AccessiOptions,\n private readonly permissionService: PermissionService,\n private readonly userService: UserService\n ) { }\n\n /**\n * Verifica JWT, stato corrente dell'utente e policy opzionale, poi popola `req.user` e `req.data`.\n * Se una policy richiede grant, popola anche `req.userGrants`; non chiamarlo direttamente fuori da test o adapter.\n */\n async authorize(\n req: Request,\n res: Response,\n next: NextFunction,\n options?: AccessiAuthorizationOptions\n ) {\n return authorizeWithDependencies(\n req,\n res,\n next,\n options,\n this.accessiOptions,\n this.permissionService,\n this.userService\n );\n }\n}\n\nlet authenticateGenServiceRef: AuthenticateGenService | null = null;\nlet authServiceBootstrapDeferred: Deferred<AuthenticateGenService> | null = null;\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (reason?: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nfunction isAuthenticateGenService(value: unknown): value is AuthenticateGenService {\n return Boolean(\n value &&\n typeof (value as { authorize?: unknown }).authorize === \"function\"\n );\n}\n\n/** Segnala al middleware che il bootstrap e in corso, consentendo una risposta 503 temporanea invece di un 500. */\nexport function beginAccessiAuthInitialization() {\n if (!authServiceBootstrapDeferred) {\n authServiceBootstrapDeferred = createDeferred<AuthenticateGenService>();\n }\n}\n\n/** Registra il servizio costruito da Nest nel bridge usato dalle rotte Express dell'app ospitante. */\nexport function setAccessiAuthService(service: AuthenticateGenService) {\n authenticateGenServiceRef = service;\n (globalThis as Record<symbol, unknown>)[ACCESSI_AUTH_SERVICE_GLOBAL_KEY] = service;\n if (authServiceBootstrapDeferred) {\n authServiceBootstrapDeferred.resolve(service);\n authServiceBootstrapDeferred = null;\n }\n}\n\n/** Propaga il fallimento del bootstrap alle richieste che stavano attendendo il bridge di autorizzazione. */\nexport function failAccessiAuthInitialization(error: unknown) {\n if (authServiceBootstrapDeferred) {\n authServiceBootstrapDeferred.reject(error);\n authServiceBootstrapDeferred = null;\n }\n}\n\nfunction getAccessiAuthServiceFromRequest(req: Request): AuthenticateGenService | null {\n const appLocalsService = (req.app?.locals as Record<string, unknown> | undefined)?.[\n ACCESSI_AUTH_SERVICE_LOCALS_KEY\n ];\n\n if (isAuthenticateGenService(appLocalsService)) {\n return appLocalsService as AuthenticateGenService;\n }\n\n const globalService = (globalThis as Record<symbol, unknown>)[\n ACCESSI_AUTH_SERVICE_GLOBAL_KEY\n ];\n if (isAuthenticateGenService(globalService)) {\n return globalService as AuthenticateGenService;\n }\n\n return authenticateGenServiceRef;\n}\n\nasync function waitForBootstrappedService(): Promise<AuthenticateGenService | null> {\n if (!authServiceBootstrapDeferred) {\n return null;\n }\n\n const bootstrapPromise = authServiceBootstrapDeferred.promise;\n const timeoutPromise = new Promise<null>((resolve) => {\n setTimeout(() => resolve(null), ACCESSI_AUTH_SERVICE_WAIT_MS);\n });\n\n try {\n const resolved = await Promise.race([bootstrapPromise, timeoutPromise]);\n return isAuthenticateGenService(resolved) ? resolved : null;\n } catch {\n return null;\n }\n}\n\nasync function resolveAccessiAuthService(req: Request): Promise<AuthenticateGenService | null> {\n const immediateService = getAccessiAuthServiceFromRequest(req);\n if (immediateService) {\n return immediateService;\n }\n\n const bootstrappedService = await waitForBootstrappedService();\n if (bootstrappedService) {\n return bootstrappedService;\n }\n\n return getAccessiAuthServiceFromRequest(req);\n}\n\n/**\n * Middleware Express pubblico di Accessi.\n *\n * Applicarlo dopo `initializeAccessiModule`: legge `Authorization: Bearer <jwt>`, verifica l'utente corrente\n * e applica eventuali requisiti. Su successo valorizza `req.user` e continua; su errore risponde direttamente\n * con il contratto Accessi, quindi il chiamante non deve aggiungere un proprio `next(error)`.\n */\nexport async function authorizeAccessi(\n req: Request,\n res: Response,\n next: NextFunction,\n options?: AccessiAuthorizationOptions\n) {\n const authService = await resolveAccessiAuthService(req);\n\n if (!authService) {\n const status = authServiceBootstrapDeferred ? 503 : 500;\n const code = authServiceBootstrapDeferred\n ? 'ACCESSI_AUTH_INITIALIZING'\n : 'ACCESSI_AUTH_NOT_INITIALIZED';\n logger.error(\n `Authentication service not initialized ${JSON.stringify({\n method: req.method,\n path: req.originalUrl ?? req.url,\n status,\n })}`\n );\n return res.status(status).json({\n severity: 'error',\n status,\n statusCode: 2,\n code,\n error: code,\n message: status === 503\n ? 'Il modulo Accessi e in inizializzazione. Riprova tra poco.'\n : 'Il modulo Accessi non e disponibile.',\n });\n }\n\n return authService.authorize(req, res, next, options);\n}\n\n/** Alias storico di `authorizeAccessi`, mantenuto per retrocompatibilita. Preferire il nome esplicito nelle nuove integrazioni. */\nexport const authenticateGen = authorizeAccessi;\n"]}
@@ -0,0 +1,12 @@
1
+ import { ArgumentsHost, ExceptionFilter } from '@nestjs/common';
2
+ /**
3
+ * Finalizes every exception raised before an Accessi controller can reply.
4
+ *
5
+ * This includes invalid JSON, validation-pipe errors and guard failures. The
6
+ * filter deliberately never return SQL, stack traces or provider diagnostics.
7
+ */
8
+ export declare class AccessiHttpExceptionFilter implements ExceptionFilter {
9
+ catch(exception: unknown, host: ArgumentsHost): void;
10
+ private getPayload;
11
+ private isInvalidJson;
12
+ }