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
@@ -1 +1 @@
1
- {"version":3,"file":"passwordResetToken.js","sourceRoot":"","sources":["../../../src/accessi-module/security/passwordResetToken.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,kDAOC;AAED,4DAqBC;AAED,4DAeC;AAzDD,kDAAoC;AAGvB,QAAA,iCAAiC,GAAG,IAAI,CAAC;AAOtD,SAAgB,mBAAmB,CAAC,OAAuB;;IACzD,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,0CAAE,MAAM,KAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACzE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CACtC,YAAoB,EACpB,KAAa,EACb,MAAc,EACd,YAAoB,yCAAiC;IAErD,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CACb;QACE,KAAK;QACL,GAAG,EAAE,gBAAgB;KACtB,EACD,MAAM,EACN;QACE,OAAO,EAAE,GAAG,YAAY,EAAE;QAC1B,SAAS,EAAE,SAAgB;KAC5B,CACF,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CACtC,KAAa,EACb,MAAc;IAEd,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAA8B,CAAC;IACvE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,CAAC;IAE1C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,MAAK,gBAAgB,IAAI,CAAC,YAAY,IAAI,OAAO,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,KAAK,QAAQ,EAAE,CAAC;QAC7F,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import * as jwt from 'jsonwebtoken';\r\nimport { AccessiOptions } from '../AccessiModule';\r\n\r\nexport const DEFAULT_PASSWORD_RESET_EXPIRES_IN = '1h';\r\n\r\ninterface PasswordResetTokenPayload extends jwt.JwtPayload {\r\n nonce: string;\r\n typ: 'password-reset';\r\n}\r\n\r\nexport function getAccessiJwtSecret(options: AccessiOptions): string {\r\n const secret = options?.jwtOptions?.secret || process.env.ACC_JWT_SECRET;\r\n if (!secret) {\r\n throw new Error('JWT secret non configurato.');\r\n }\r\n\r\n return secret;\r\n}\r\n\r\nexport function createPasswordResetToken(\r\n codiceUtente: number,\r\n nonce: string,\r\n secret: string,\r\n expiresIn: string = DEFAULT_PASSWORD_RESET_EXPIRES_IN,\r\n): string {\r\n if (!codiceUtente || !nonce) {\r\n throw new Error('Dati insufficienti per generare il reset token.');\r\n }\r\n\r\n return jwt.sign(\r\n {\r\n nonce,\r\n typ: 'password-reset',\r\n },\r\n secret,\r\n {\r\n subject: `${codiceUtente}`,\r\n expiresIn: expiresIn as any,\r\n },\r\n );\r\n}\r\n\r\nexport function verifyPasswordResetToken(\r\n token: string,\r\n secret: string,\r\n): { codiceUtente: number; nonce: string } {\r\n const decoded = jwt.verify(token, secret) as PasswordResetTokenPayload;\r\n const codiceUtente = Number(decoded?.sub);\r\n\r\n if (decoded?.typ !== 'password-reset' || !codiceUtente || typeof decoded?.nonce !== 'string') {\r\n throw new Error('Token di reset non valido.');\r\n }\r\n\r\n return {\r\n codiceUtente,\r\n nonce: decoded.nonce,\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"passwordResetToken.js","sourceRoot":"","sources":["../../../src/accessi-module/security/passwordResetToken.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,kDAOC;AAGD,4DAqBC;AAGD,4DAeC;AApED,kDAAoC;AACpC,mCAAoC;AAGpC,mHAAmH;AACtG,QAAA,iCAAiC,GAAG,IAAI,CAAC;AAUtD;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,OAAuB,EAAE,UAA6B,QAAQ;;IAChG,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,0CAAE,MAAM,KAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACzE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,IAAA,mBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,oHAAoH;AACpH,SAAgB,wBAAwB,CACtC,YAAoB,EACpB,KAAa,EACb,MAAc,EACd,YAA0C,yCAAiC;IAE3E,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CACb;QACE,KAAK;QACL,GAAG,EAAE,gBAAgB;KACtB,EACD,MAAM,EACN;QACE,OAAO,EAAE,GAAG,YAAY,EAAE;QAC1B,SAAS;KACV,CACF,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,SAAgB,wBAAwB,CACtC,KAAa,EACb,MAAc;IAEd,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAA8B,CAAC;IAClG,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,CAAC;IAE1C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,MAAK,gBAAgB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,OAAO,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1J,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import * as jwt from 'jsonwebtoken';\nimport { createHmac } from 'crypto';\nimport type { AccessiOptions } from '../AccessiModule';\n\n/** Durata predefinita del token di reset. La monouso e garantita anche dal nonce persistito in `UTENTI.KEYREG`. */\nexport const DEFAULT_PASSWORD_RESET_EXPIRES_IN = '1h';\n\ninterface PasswordResetTokenPayload extends jwt.JwtPayload {\n nonce: string;\n typ: 'password-reset';\n}\n\n/** Scopo della chiave derivata: separa le chiavi di access token, reset password e 2FA. */\nexport type AccessiJwtPurpose = 'access' | 'refresh' | 'reset' | '2fa';\n\n/**\n * Deriva una chiave JWT per scopo dal segreto configurato (key separation senza nuova configurazione).\n * Un leak della chiave di reset non compromette gli access token e viceversa.\n */\nexport function getAccessiJwtSecret(options: AccessiOptions, purpose: AccessiJwtPurpose = 'access'): string {\n const secret = options?.jwtOptions?.secret || process.env.ACC_JWT_SECRET;\n if (!secret) {\n throw new Error('JWT secret non configurato.');\n }\n\n return createHmac('sha256', secret).update(`accessi:jwt:${purpose}:v1`).digest('hex');\n}\n\n/** Crea un token firmato contenente solo codice utente e nonce; non inserire email o dati personali nelle claim. */\nexport function createPasswordResetToken(\n codiceUtente: number,\n nonce: string,\n secret: string,\n expiresIn: jwt.SignOptions['expiresIn'] = DEFAULT_PASSWORD_RESET_EXPIRES_IN,\n): string {\n if (!codiceUtente || !nonce) {\n throw new Error('Dati insufficienti per generare il reset token.');\n }\n\n return jwt.sign(\n {\n nonce,\n typ: 'password-reset',\n },\n secret,\n {\n subject: `${codiceUtente}`,\n expiresIn,\n },\n );\n}\n\n/** Verifica firma e scadenza, quindi restituisce i dati minimi necessari al reset. */\nexport function verifyPasswordResetToken(\n token: string,\n secret: string,\n): { codiceUtente: number; nonce: string } {\n const decoded = jwt.verify(token, secret, { algorithms: ['HS256'] }) as PasswordResetTokenPayload;\n const codiceUtente = Number(decoded?.sub);\n\n if (decoded?.typ !== 'password-reset' || !Number.isSafeInteger(codiceUtente) || codiceUtente <= 0 || typeof decoded?.nonce !== 'string' || !decoded.nonce) {\n throw new Error('Token di reset non valido.');\n }\n\n return {\n codiceUtente,\n nonce: decoded.nonce,\n };\n}\n"]}
@@ -1,10 +1,12 @@
1
1
  import { Request, Response } from 'express';
2
- import { AccessiOptions } from '../AccessiModule';
3
- export type PublicAuthRateLimitScope = 'login' | 'register' | 'passwordResetEmail' | 'passwordResetConfirm' | 'getUserByToken';
4
- type RateLimitDecision = {
5
- allowed: boolean;
6
- retryAfterSeconds?: number;
7
- };
8
- export declare function checkPublicAuthRateLimit(options: AccessiOptions, scope: PublicAuthRateLimitScope, req: Request, identifiers?: string[]): RateLimitDecision;
2
+ import type { AccessiOptions } from '../AccessiModule';
3
+ import type { RateLimitDecision } from './rateLimitStore';
4
+ export type PublicAuthRateLimitScope = 'login' | 'twoFactorVerify' | 'twoFactorResend' | 'register' | 'passwordResetEmail' | 'passwordResetConfirm' | 'refresh' | 'getUserByToken' | 'adminBootstrap' | 'consoleEntry';
5
+ /**
6
+ * Applica il rate limit per IP e, opzionalmente, per soggetto.
7
+ *
8
+ * Con `publicAuthRateLimit.store` e possibile usare uno store Redis condiviso;
9
+ * senza store usa la memoria del processo.
10
+ */
11
+ export declare function checkPublicAuthRateLimit(options: AccessiOptions, scope: PublicAuthRateLimitScope, req: Request, identifiers?: string[]): Promise<RateLimitDecision>;
9
12
  export declare function sendPublicAuthRateLimitExceeded(res: Response, retryAfterSeconds: number): Response;
10
- export {};
@@ -1,19 +1,31 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.checkPublicAuthRateLimit = checkPublicAuthRateLimit;
4
13
  exports.sendPublicAuthRateLimitExceeded = sendPublicAuthRateLimitExceeded;
5
14
  const common_1 = require("@nestjs/common");
6
15
  const Utilities_1 = require("../../Utilities");
16
+ const rateLimitStore_1 = require("./rateLimitStore");
7
17
  const DEFAULT_PUBLIC_AUTH_RATE_LIMITS = {
8
18
  login: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },
19
+ twoFactorVerify: { windowMs: 15 * 60 * 1000, maxAttempts: 20 },
20
+ twoFactorResend: { windowMs: 15 * 60 * 1000, maxAttempts: 5 },
9
21
  register: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },
10
22
  passwordResetEmail: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },
11
23
  passwordResetConfirm: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },
24
+ refresh: { windowMs: 5 * 60 * 1000, maxAttempts: 60 },
12
25
  getUserByToken: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },
26
+ adminBootstrap: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },
27
+ consoleEntry: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },
13
28
  };
14
- const RATE_LIMIT_BUCKETS = new Map();
15
- const MAX_TRACKED_BUCKETS = 20000;
16
- const MAX_WINDOW_MS = Math.max(...Object.values(DEFAULT_PUBLIC_AUTH_RATE_LIMITS).map((rule) => rule.windowMs));
17
29
  function getRule(options, scope) {
18
30
  var _a;
19
31
  const configuredRule = (_a = options.publicAuthRateLimit) === null || _a === void 0 ? void 0 : _a[scope];
@@ -29,6 +41,19 @@ function getRule(options, scope) {
29
41
  }
30
42
  return DEFAULT_PUBLIC_AUTH_RATE_LIMITS[scope];
31
43
  }
44
+ function consumeRateLimit(store, key, rule) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ try {
47
+ return yield store.consume(key, rule.windowMs, rule.maxAttempts);
48
+ }
49
+ catch (_a) {
50
+ throw new common_1.HttpException({
51
+ code: 'ACCESSI_RATE_LIMIT_UNAVAILABLE',
52
+ message: 'Rate limit non disponibile. Riprova piu tardi.',
53
+ }, common_1.HttpStatus.SERVICE_UNAVAILABLE);
54
+ }
55
+ });
56
+ }
32
57
  function normalizeIdentifier(identifier) {
33
58
  if (typeof identifier !== 'string') {
34
59
  return null;
@@ -36,67 +61,43 @@ function normalizeIdentifier(identifier) {
36
61
  const normalized = identifier.trim().toLowerCase();
37
62
  return normalized === '' ? null : normalized;
38
63
  }
39
- function pruneRateLimitBuckets(now) {
40
- if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {
41
- return;
42
- }
43
- for (const [key, bucket] of RATE_LIMIT_BUCKETS.entries()) {
44
- if (bucket.resetAt <= now || bucket.lastSeenAt <= now - MAX_WINDOW_MS * 2) {
45
- RATE_LIMIT_BUCKETS.delete(key);
64
+ /**
65
+ * Applica il rate limit per IP e, opzionalmente, per soggetto.
66
+ *
67
+ * Con `publicAuthRateLimit.store` e possibile usare uno store Redis condiviso;
68
+ * senza store usa la memoria del processo.
69
+ */
70
+ function checkPublicAuthRateLimit(options_1, scope_1, req_1) {
71
+ return __awaiter(this, arguments, void 0, function* (options, scope, req, identifiers = []) {
72
+ var _a, _b, _c, _d, _e, _f, _g;
73
+ if (((_a = options.publicAuthRateLimit) === null || _a === void 0 ? void 0 : _a.enabled) === false) {
74
+ return { allowed: true, retryAfterSeconds: 0 };
46
75
  }
47
- if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {
48
- return;
76
+ const rule = getRule(options, scope);
77
+ const store = (_c = (_b = options.publicAuthRateLimit) === null || _b === void 0 ? void 0 : _b.store) !== null && _c !== void 0 ? _c : (0, rateLimitStore_1.getDefaultRateLimitStore)();
78
+ const ipAddress = (_g = normalizeIdentifier((_f = (_d = req.ip) !== null && _d !== void 0 ? _d : (_e = req.socket) === null || _e === void 0 ? void 0 : _e.remoteAddress) !== null && _f !== void 0 ? _f : 'unknown')) !== null && _g !== void 0 ? _g : 'unknown';
79
+ // Consuma prima il bucket per IP: se gia bloccato non crea bucket per soggetto,
80
+ // evitando crescita di memoria con identificatori sempre diversi.
81
+ const ipDecision = yield consumeRateLimit(store, `${scope}|ip|${ipAddress}`, rule);
82
+ if (!ipDecision.allowed) {
83
+ return ipDecision;
49
84
  }
50
- }
51
- }
52
- function consumeBucket(bucketKey, rule, now) {
53
- const existingBucket = RATE_LIMIT_BUCKETS.get(bucketKey);
54
- if (!existingBucket || existingBucket.resetAt <= now) {
55
- RATE_LIMIT_BUCKETS.set(bucketKey, {
56
- count: 1,
57
- resetAt: now + rule.windowMs,
58
- lastSeenAt: now,
59
- });
60
- return null;
61
- }
62
- existingBucket.lastSeenAt = now;
63
- if (existingBucket.count >= rule.maxAttempts) {
64
- return Math.max(1, Math.ceil((existingBucket.resetAt - now) / 1000));
65
- }
66
- existingBucket.count += 1;
67
- return null;
68
- }
69
- function checkPublicAuthRateLimit(options, scope, req, identifiers = []) {
70
- var _a, _b, _c, _d, _e;
71
- if (((_a = options.publicAuthRateLimit) === null || _a === void 0 ? void 0 : _a.enabled) === false) {
72
- return { allowed: true };
73
- }
74
- const rule = getRule(options, scope);
75
- const now = Date.now();
76
- pruneRateLimitBuckets(now);
77
- const ipAddress = (_e = normalizeIdentifier((_d = (_b = req.ip) !== null && _b !== void 0 ? _b : (_c = req.socket) === null || _c === void 0 ? void 0 : _c.remoteAddress) !== null && _d !== void 0 ? _d : 'unknown')) !== null && _e !== void 0 ? _e : 'unknown';
78
- const bucketKeys = new Set([`${scope}|ip|${ipAddress}`]);
79
- for (const identifier of identifiers) {
80
- const normalizedIdentifier = normalizeIdentifier(identifier);
81
- if (!normalizedIdentifier) {
82
- continue;
85
+ let retryAfterSeconds = 0;
86
+ for (const identifier of identifiers) {
87
+ const normalizedIdentifier = normalizeIdentifier(identifier);
88
+ if (!normalizedIdentifier) {
89
+ continue;
90
+ }
91
+ const subjectDecision = yield consumeRateLimit(store, `${scope}|ip-subject|${ipAddress}|${normalizedIdentifier}`, rule);
92
+ if (!subjectDecision.allowed) {
93
+ retryAfterSeconds = Math.max(retryAfterSeconds, subjectDecision.retryAfterSeconds);
94
+ }
83
95
  }
84
- bucketKeys.add(`${scope}|ip-subject|${ipAddress}|${normalizedIdentifier}`);
85
- }
86
- let retryAfterSeconds = 0;
87
- for (const bucketKey of bucketKeys) {
88
- const bucketRetryAfterSeconds = consumeBucket(bucketKey, rule, now);
89
- if (bucketRetryAfterSeconds) {
90
- retryAfterSeconds = Math.max(retryAfterSeconds, bucketRetryAfterSeconds);
96
+ if (retryAfterSeconds > 0) {
97
+ return { allowed: false, retryAfterSeconds };
91
98
  }
92
- }
93
- if (retryAfterSeconds > 0) {
94
- return {
95
- allowed: false,
96
- retryAfterSeconds,
97
- };
98
- }
99
- return { allowed: true };
99
+ return { allowed: true, retryAfterSeconds: 0 };
100
+ });
100
101
  }
101
102
  function sendPublicAuthRateLimitExceeded(res, retryAfterSeconds) {
102
103
  res.setHeader('Retry-After', String(retryAfterSeconds));
@@ -1 +1 @@
1
- {"version":3,"file":"publicAuthRateLimit.js","sourceRoot":"","sources":["../../../src/accessi-module/security/publicAuthRateLimit.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpStatus } from '@nestjs/common';\r\nimport { Request, Response } from 'express';\r\nimport { RestUtilities } from '../../Utilities';\r\nimport { AccessiOptions, PublicAuthRateLimitRuleOptions } from '../AccessiModule';\r\n\r\nexport type PublicAuthRateLimitScope =\r\n | 'login'\r\n | 'register'\r\n | 'passwordResetEmail'\r\n | 'passwordResetConfirm'\r\n | 'getUserByToken';\r\n\r\ntype RateLimitBucket = {\r\n count: number;\r\n resetAt: number;\r\n lastSeenAt: number;\r\n};\r\n\r\ntype RateLimitDecision = {\r\n allowed: boolean;\r\n retryAfterSeconds?: number;\r\n};\r\n\r\nconst DEFAULT_PUBLIC_AUTH_RATE_LIMITS: Record<\r\n PublicAuthRateLimitScope,\r\n PublicAuthRateLimitRuleOptions\r\n> = {\r\n login: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\r\n register: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\r\n passwordResetEmail: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\r\n passwordResetConfirm: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\r\n getUserByToken: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },\r\n};\r\n\r\nconst RATE_LIMIT_BUCKETS = new Map<string, RateLimitBucket>();\r\nconst MAX_TRACKED_BUCKETS = 20000;\r\nconst MAX_WINDOW_MS = Math.max(\r\n ...Object.values(DEFAULT_PUBLIC_AUTH_RATE_LIMITS).map((rule) => rule.windowMs),\r\n);\r\n\r\nfunction getRule(\r\n options: AccessiOptions,\r\n scope: PublicAuthRateLimitScope,\r\n): PublicAuthRateLimitRuleOptions {\r\n const configuredRule = options.publicAuthRateLimit?.[scope];\r\n\r\n if (\r\n configuredRule &&\r\n Number.isFinite(configuredRule.windowMs) &&\r\n configuredRule.windowMs > 0 &&\r\n Number.isFinite(configuredRule.maxAttempts) &&\r\n configuredRule.maxAttempts > 0\r\n ) {\r\n return {\r\n windowMs: Math.trunc(configuredRule.windowMs),\r\n maxAttempts: Math.trunc(configuredRule.maxAttempts),\r\n };\r\n }\r\n\r\n return DEFAULT_PUBLIC_AUTH_RATE_LIMITS[scope];\r\n}\r\n\r\nfunction normalizeIdentifier(identifier: string): string | null {\r\n if (typeof identifier !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalized = identifier.trim().toLowerCase();\r\n return normalized === '' ? null : normalized;\r\n}\r\n\r\nfunction pruneRateLimitBuckets(now: number): void {\r\n if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {\r\n return;\r\n }\r\n\r\n for (const [key, bucket] of RATE_LIMIT_BUCKETS.entries()) {\r\n if (bucket.resetAt <= now || bucket.lastSeenAt <= now - MAX_WINDOW_MS * 2) {\r\n RATE_LIMIT_BUCKETS.delete(key);\r\n }\r\n\r\n if (RATE_LIMIT_BUCKETS.size < MAX_TRACKED_BUCKETS) {\r\n return;\r\n }\r\n }\r\n}\r\n\r\nfunction consumeBucket(\r\n bucketKey: string,\r\n rule: PublicAuthRateLimitRuleOptions,\r\n now: number,\r\n): number | null {\r\n const existingBucket = RATE_LIMIT_BUCKETS.get(bucketKey);\r\n if (!existingBucket || existingBucket.resetAt <= now) {\r\n RATE_LIMIT_BUCKETS.set(bucketKey, {\r\n count: 1,\r\n resetAt: now + rule.windowMs,\r\n lastSeenAt: now,\r\n });\r\n return null;\r\n }\r\n\r\n existingBucket.lastSeenAt = now;\r\n if (existingBucket.count >= rule.maxAttempts) {\r\n return Math.max(1, Math.ceil((existingBucket.resetAt - now) / 1000));\r\n }\r\n\r\n existingBucket.count += 1;\r\n return null;\r\n}\r\n\r\nexport function checkPublicAuthRateLimit(\r\n options: AccessiOptions,\r\n scope: PublicAuthRateLimitScope,\r\n req: Request,\r\n identifiers: string[] = [],\r\n): RateLimitDecision {\r\n if (options.publicAuthRateLimit?.enabled === false) {\r\n return { allowed: true };\r\n }\r\n\r\n const rule = getRule(options, scope);\r\n const now = Date.now();\r\n pruneRateLimitBuckets(now);\r\n\r\n const ipAddress =\r\n normalizeIdentifier(req.ip ?? req.socket?.remoteAddress ?? 'unknown') ?? 'unknown';\r\n const bucketKeys = new Set<string>([`${scope}|ip|${ipAddress}`]);\r\n\r\n for (const identifier of identifiers) {\r\n const normalizedIdentifier = normalizeIdentifier(identifier);\r\n if (!normalizedIdentifier) {\r\n continue;\r\n }\r\n\r\n bucketKeys.add(`${scope}|ip-subject|${ipAddress}|${normalizedIdentifier}`);\r\n }\r\n\r\n let retryAfterSeconds = 0;\r\n for (const bucketKey of bucketKeys) {\r\n const bucketRetryAfterSeconds = consumeBucket(bucketKey, rule, now);\r\n if (bucketRetryAfterSeconds) {\r\n retryAfterSeconds = Math.max(retryAfterSeconds, bucketRetryAfterSeconds);\r\n }\r\n }\r\n\r\n if (retryAfterSeconds > 0) {\r\n return {\r\n allowed: false,\r\n retryAfterSeconds,\r\n };\r\n }\r\n\r\n return { allowed: true };\r\n}\r\n\r\nexport function sendPublicAuthRateLimitExceeded(\r\n res: Response,\r\n retryAfterSeconds: number,\r\n): Response {\r\n res.setHeader('Retry-After', String(retryAfterSeconds));\r\n return RestUtilities.sendErrorMessage(\r\n res,\r\n 'Troppi tentativi. Riprova piu tardi.',\r\n 'PublicAuthRateLimit',\r\n HttpStatus.TOO_MANY_REQUESTS,\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"publicAuthRateLimit.js","sourceRoot":"","sources":["../../../src/accessi-module/security/publicAuthRateLimit.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions, PublicAuthRateLimitRuleOptions } from '../AccessiModule';\nimport { getDefaultRateLimitStore } from './rateLimitStore';\nimport type { RateLimitDecision, RateLimitStore } from './rateLimitStore';\n\nexport type PublicAuthRateLimitScope =\n | 'login'\n | 'twoFactorVerify'\n | 'twoFactorResend'\n | 'register'\n | 'passwordResetEmail'\n | 'passwordResetConfirm'\n | 'refresh'\n | 'getUserByToken'\n | 'adminBootstrap'\n | 'consoleEntry';\n\nconst DEFAULT_PUBLIC_AUTH_RATE_LIMITS: Record<\n PublicAuthRateLimitScope,\n PublicAuthRateLimitRuleOptions\n> = {\n login: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n twoFactorVerify: { windowMs: 15 * 60 * 1000, maxAttempts: 20 },\n twoFactorResend: { windowMs: 15 * 60 * 1000, maxAttempts: 5 },\n register: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\n passwordResetEmail: { windowMs: 60 * 60 * 1000, maxAttempts: 5 },\n passwordResetConfirm: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n refresh: { windowMs: 5 * 60 * 1000, maxAttempts: 60 },\n getUserByToken: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },\n adminBootstrap: { windowMs: 15 * 60 * 1000, maxAttempts: 10 },\n consoleEntry: { windowMs: 5 * 60 * 1000, maxAttempts: 30 },\n};\n\nfunction getRule(\n options: AccessiOptions,\n scope: PublicAuthRateLimitScope,\n): PublicAuthRateLimitRuleOptions {\n const configuredRule = options.publicAuthRateLimit?.[scope];\n\n if (\n configuredRule &&\n Number.isFinite(configuredRule.windowMs) &&\n configuredRule.windowMs > 0 &&\n Number.isFinite(configuredRule.maxAttempts) &&\n configuredRule.maxAttempts > 0\n ) {\n return {\n windowMs: Math.trunc(configuredRule.windowMs),\n maxAttempts: Math.trunc(configuredRule.maxAttempts),\n };\n }\n\n return DEFAULT_PUBLIC_AUTH_RATE_LIMITS[scope];\n}\n\nasync function consumeRateLimit(\n store: RateLimitStore,\n key: string,\n rule: PublicAuthRateLimitRuleOptions,\n): Promise<RateLimitDecision> {\n try {\n return await store.consume(key, rule.windowMs, rule.maxAttempts);\n } catch {\n throw new HttpException(\n {\n code: 'ACCESSI_RATE_LIMIT_UNAVAILABLE',\n message: 'Rate limit non disponibile. Riprova piu tardi.',\n },\n HttpStatus.SERVICE_UNAVAILABLE,\n );\n }\n}\n\nfunction normalizeIdentifier(identifier: string): string | null {\n if (typeof identifier !== 'string') {\n return null;\n }\n\n const normalized = identifier.trim().toLowerCase();\n return normalized === '' ? null : normalized;\n}\n\n/**\n * Applica il rate limit per IP e, opzionalmente, per soggetto.\n *\n * Con `publicAuthRateLimit.store` e possibile usare uno store Redis condiviso;\n * senza store usa la memoria del processo.\n */\nexport async function checkPublicAuthRateLimit(\n options: AccessiOptions,\n scope: PublicAuthRateLimitScope,\n req: Request,\n identifiers: string[] = [],\n): Promise<RateLimitDecision> {\n if (options.publicAuthRateLimit?.enabled === false) {\n return { allowed: true, retryAfterSeconds: 0 };\n }\n\n const rule = getRule(options, scope);\n const store = options.publicAuthRateLimit?.store ?? getDefaultRateLimitStore();\n const ipAddress =\n normalizeIdentifier(req.ip ?? req.socket?.remoteAddress ?? 'unknown') ?? 'unknown';\n\n // Consuma prima il bucket per IP: se gia bloccato non crea bucket per soggetto,\n // evitando crescita di memoria con identificatori sempre diversi.\n const ipDecision = await consumeRateLimit(store, `${scope}|ip|${ipAddress}`, rule);\n if (!ipDecision.allowed) {\n return ipDecision;\n }\n\n let retryAfterSeconds = 0;\n for (const identifier of identifiers) {\n const normalizedIdentifier = normalizeIdentifier(identifier);\n if (!normalizedIdentifier) {\n continue;\n }\n\n const subjectDecision = await consumeRateLimit(\n store,\n `${scope}|ip-subject|${ipAddress}|${normalizedIdentifier}`,\n rule,\n );\n if (!subjectDecision.allowed) {\n retryAfterSeconds = Math.max(retryAfterSeconds, subjectDecision.retryAfterSeconds);\n }\n }\n\n if (retryAfterSeconds > 0) {\n return { allowed: false, retryAfterSeconds };\n }\n\n return { allowed: true, retryAfterSeconds: 0 };\n}\n\nexport function sendPublicAuthRateLimitExceeded(\n res: Response,\n retryAfterSeconds: number,\n): Response {\n res.setHeader('Retry-After', String(retryAfterSeconds));\n return RestUtilities.sendErrorMessage(\n res,\n 'Troppi tentativi. Riprova piu tardi.',\n 'PublicAuthRateLimit',\n HttpStatus.TOO_MANY_REQUESTS,\n );\n}\n"]}
@@ -0,0 +1,34 @@
1
+ /** Esito di un controllo di rate limit. */
2
+ export interface RateLimitDecision {
3
+ allowed: boolean;
4
+ retryAfterSeconds: number;
5
+ }
6
+ /** Store pluggable per rate limit: memoria per singola istanza, Redis per cluster. */
7
+ export interface RateLimitStore {
8
+ consume(key: string, windowMs: number, maxAttempts: number): Promise<RateLimitDecision>;
9
+ /** Health check opzionale per readiness del servizio. */
10
+ healthCheck?(): Promise<boolean>;
11
+ }
12
+ export interface MemoryRateLimitStore extends RateLimitStore {
13
+ reset(): void;
14
+ }
15
+ /** Store in memoria con finestra fissa e limite di bucket. */
16
+ export declare function createMemoryRateLimitStore(maxBuckets?: number): MemoryRateLimitStore;
17
+ /** Store di default in memoria, usato quando non viene configurato uno store condiviso. */
18
+ export declare function getDefaultRateLimitStore(): MemoryRateLimitStore;
19
+ /** Client Redis minimale: compatibile con ioredis (`redis.eval(script, numKeys, ...args)`). */
20
+ export interface RateLimitRedisClient {
21
+ eval(script: string, numKeys: number, ...args: Array<string | number>): Promise<unknown>;
22
+ }
23
+ export interface RedisRateLimitStoreOptions {
24
+ client: RateLimitRedisClient;
25
+ /** Default: `accessi:rate:`. */
26
+ keyPrefix?: string;
27
+ }
28
+ /**
29
+ * Store Redis per rate limit distribuito.
30
+ *
31
+ * Usa `INCR` + `PEXPIRE` atomici. Adatto a login, reset password, 2FA,
32
+ * console entry e service token in deployment multi-istanza.
33
+ */
34
+ export declare function createRedisRateLimitStore(options: RedisRateLimitStoreOptions): RateLimitStore;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createMemoryRateLimitStore = createMemoryRateLimitStore;
13
+ exports.getDefaultRateLimitStore = getDefaultRateLimitStore;
14
+ exports.createRedisRateLimitStore = createRedisRateLimitStore;
15
+ const DEFAULT_MAX_BUCKETS = 20000;
16
+ function normalizeLimits(windowMs, maxAttempts) {
17
+ return {
18
+ windowMs: Math.max(1, Math.trunc(windowMs)),
19
+ maxAttempts: Math.max(1, Math.trunc(maxAttempts)),
20
+ };
21
+ }
22
+ /** Store in memoria con finestra fissa e limite di bucket. */
23
+ function createMemoryRateLimitStore(maxBuckets = DEFAULT_MAX_BUCKETS) {
24
+ const buckets = new Map();
25
+ const safeMaxBuckets = Math.max(1, Math.trunc(maxBuckets));
26
+ const prune = (now) => {
27
+ if (buckets.size < safeMaxBuckets)
28
+ return;
29
+ for (const [key, bucket] of buckets) {
30
+ if (bucket.resetAt <= now)
31
+ buckets.delete(key);
32
+ }
33
+ };
34
+ const enforceCap = () => {
35
+ while (buckets.size >= safeMaxBuckets) {
36
+ let oldestKey;
37
+ let oldestSeen = Number.POSITIVE_INFINITY;
38
+ for (const [key, bucket] of buckets) {
39
+ if (bucket.lastSeenAt < oldestSeen) {
40
+ oldestSeen = bucket.lastSeenAt;
41
+ oldestKey = key;
42
+ }
43
+ }
44
+ if (oldestKey === undefined)
45
+ return;
46
+ buckets.delete(oldestKey);
47
+ }
48
+ };
49
+ return {
50
+ consume(key, windowMs, maxAttempts) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ const limits = normalizeLimits(windowMs, maxAttempts);
53
+ const now = Date.now();
54
+ prune(now);
55
+ const existing = buckets.get(key);
56
+ if (!existing || existing.resetAt <= now) {
57
+ enforceCap();
58
+ buckets.set(key, {
59
+ count: 1,
60
+ resetAt: now + limits.windowMs,
61
+ lastSeenAt: now,
62
+ });
63
+ return { allowed: true, retryAfterSeconds: 0 };
64
+ }
65
+ existing.lastSeenAt = now;
66
+ if (existing.count >= limits.maxAttempts) {
67
+ return {
68
+ allowed: false,
69
+ retryAfterSeconds: Math.max(1, Math.ceil((existing.resetAt - now) / 1000)),
70
+ };
71
+ }
72
+ existing.count += 1;
73
+ return { allowed: true, retryAfterSeconds: 0 };
74
+ });
75
+ },
76
+ reset() {
77
+ buckets.clear();
78
+ },
79
+ healthCheck() {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ return true;
82
+ });
83
+ },
84
+ };
85
+ }
86
+ const defaultStore = createMemoryRateLimitStore();
87
+ /** Store di default in memoria, usato quando non viene configurato uno store condiviso. */
88
+ function getDefaultRateLimitStore() {
89
+ return defaultStore;
90
+ }
91
+ const REDIS_SCRIPT = `
92
+ local current = redis.call('INCR', KEYS[1])
93
+ if current == 1 then
94
+ redis.call('PEXPIRE', KEYS[1], ARGV[1])
95
+ end
96
+ local ttl = redis.call('PTTL', KEYS[1])
97
+ if current > tonumber(ARGV[2]) then
98
+ return {0, ttl}
99
+ end
100
+ return {1, ttl}
101
+ `;
102
+ /**
103
+ * Store Redis per rate limit distribuito.
104
+ *
105
+ * Usa `INCR` + `PEXPIRE` atomici. Adatto a login, reset password, 2FA,
106
+ * console entry e service token in deployment multi-istanza.
107
+ */
108
+ function createRedisRateLimitStore(options) {
109
+ var _a;
110
+ if (!(options === null || options === void 0 ? void 0 : options.client) || typeof options.client.eval !== 'function') {
111
+ throw new Error('Redis rate limit store: client.eval non configurato.');
112
+ }
113
+ const keyPrefix = ((_a = options.keyPrefix) !== null && _a !== void 0 ? _a : 'accessi:rate:').replace(/:+$/, ':');
114
+ return {
115
+ consume(key, windowMs, maxAttempts) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ const limits = normalizeLimits(windowMs, maxAttempts);
118
+ const raw = yield options.client.eval(REDIS_SCRIPT, 1, `${keyPrefix}${key}`, limits.windowMs, limits.maxAttempts);
119
+ if (!Array.isArray(raw) || raw.length < 2) {
120
+ throw new Error('Redis rate limit store: risposta non valida.');
121
+ }
122
+ const allowed = Number(raw[0]) === 1;
123
+ const ttlMs = Number(raw[1]);
124
+ return {
125
+ allowed,
126
+ retryAfterSeconds: allowed
127
+ ? 0
128
+ : Math.max(1, Number.isFinite(ttlMs) && ttlMs > 0 ? Math.ceil(ttlMs / 1000) : 1),
129
+ };
130
+ });
131
+ },
132
+ healthCheck() {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ try {
135
+ const result = yield options.client.eval("return redis.call('PING')", 0);
136
+ return String(result).toUpperCase() === 'PONG';
137
+ }
138
+ catch (_a) {
139
+ return false;
140
+ }
141
+ });
142
+ },
143
+ };
144
+ }
145
+ //# sourceMappingURL=rateLimitStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitStore.js","sourceRoot":"","sources":["../../../src/accessi-module/security/rateLimitStore.ts"],"names":[],"mappings":"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","sourcesContent":["/** Esito di un controllo di rate limit. */\nexport interface RateLimitDecision {\n allowed: boolean;\n retryAfterSeconds: number;\n}\n\n/** Store pluggable per rate limit: memoria per singola istanza, Redis per cluster. */\nexport interface RateLimitStore {\n consume(key: string, windowMs: number, maxAttempts: number): Promise<RateLimitDecision>;\n /** Health check opzionale per readiness del servizio. */\n healthCheck?(): Promise<boolean>;\n}\n\nexport interface MemoryRateLimitStore extends RateLimitStore {\n reset(): void;\n}\n\ninterface RateLimitBucket {\n count: number;\n resetAt: number;\n lastSeenAt: number;\n}\n\nconst DEFAULT_MAX_BUCKETS = 20_000;\n\nfunction normalizeLimits(windowMs: number, maxAttempts: number): { windowMs: number; maxAttempts: number } {\n return {\n windowMs: Math.max(1, Math.trunc(windowMs)),\n maxAttempts: Math.max(1, Math.trunc(maxAttempts)),\n };\n}\n\n/** Store in memoria con finestra fissa e limite di bucket. */\nexport function createMemoryRateLimitStore(\n maxBuckets: number = DEFAULT_MAX_BUCKETS,\n): MemoryRateLimitStore {\n const buckets = new Map<string, RateLimitBucket>();\n const safeMaxBuckets = Math.max(1, Math.trunc(maxBuckets));\n\n const prune = (now: number): void => {\n if (buckets.size < safeMaxBuckets) return;\n for (const [key, bucket] of buckets) {\n if (bucket.resetAt <= now) buckets.delete(key);\n }\n };\n\n const enforceCap = (): void => {\n while (buckets.size >= safeMaxBuckets) {\n let oldestKey: string | undefined;\n let oldestSeen = Number.POSITIVE_INFINITY;\n for (const [key, bucket] of buckets) {\n if (bucket.lastSeenAt < oldestSeen) {\n oldestSeen = bucket.lastSeenAt;\n oldestKey = key;\n }\n }\n if (oldestKey === undefined) return;\n buckets.delete(oldestKey);\n }\n };\n\n return {\n async consume(key: string, windowMs: number, maxAttempts: number): Promise<RateLimitDecision> {\n const limits = normalizeLimits(windowMs, maxAttempts);\n const now = Date.now();\n prune(now);\n\n const existing = buckets.get(key);\n if (!existing || existing.resetAt <= now) {\n enforceCap();\n buckets.set(key, {\n count: 1,\n resetAt: now + limits.windowMs,\n lastSeenAt: now,\n });\n return { allowed: true, retryAfterSeconds: 0 };\n }\n\n existing.lastSeenAt = now;\n if (existing.count >= limits.maxAttempts) {\n return {\n allowed: false,\n retryAfterSeconds: Math.max(1, Math.ceil((existing.resetAt - now) / 1000)),\n };\n }\n\n existing.count += 1;\n return { allowed: true, retryAfterSeconds: 0 };\n },\n reset() {\n buckets.clear();\n },\n async healthCheck() {\n return true;\n },\n };\n}\n\nconst defaultStore = createMemoryRateLimitStore();\n\n/** Store di default in memoria, usato quando non viene configurato uno store condiviso. */\nexport function getDefaultRateLimitStore(): MemoryRateLimitStore {\n return defaultStore;\n}\n\n/** Client Redis minimale: compatibile con ioredis (`redis.eval(script, numKeys, ...args)`). */\nexport interface RateLimitRedisClient {\n eval(script: string, numKeys: number, ...args: Array<string | number>): Promise<unknown>;\n}\n\nexport interface RedisRateLimitStoreOptions {\n client: RateLimitRedisClient;\n /** Default: `accessi:rate:`. */\n keyPrefix?: string;\n}\n\nconst REDIS_SCRIPT = `\nlocal current = redis.call('INCR', KEYS[1])\nif current == 1 then\n redis.call('PEXPIRE', KEYS[1], ARGV[1])\nend\nlocal ttl = redis.call('PTTL', KEYS[1])\nif current > tonumber(ARGV[2]) then\n return {0, ttl}\nend\nreturn {1, ttl}\n`;\n\n/**\n * Store Redis per rate limit distribuito.\n *\n * Usa `INCR` + `PEXPIRE` atomici. Adatto a login, reset password, 2FA,\n * console entry e service token in deployment multi-istanza.\n */\nexport function createRedisRateLimitStore(\n options: RedisRateLimitStoreOptions,\n): RateLimitStore {\n if (!options?.client || typeof options.client.eval !== 'function') {\n throw new Error('Redis rate limit store: client.eval non configurato.');\n }\n\n const keyPrefix = (options.keyPrefix ?? 'accessi:rate:').replace(/:+$/, ':');\n\n return {\n async consume(key, windowMs, maxAttempts) {\n const limits = normalizeLimits(windowMs, maxAttempts);\n const raw = await options.client.eval(\n REDIS_SCRIPT,\n 1,\n `${keyPrefix}${key}`,\n limits.windowMs,\n limits.maxAttempts,\n );\n\n if (!Array.isArray(raw) || raw.length < 2) {\n throw new Error('Redis rate limit store: risposta non valida.');\n }\n\n const allowed = Number(raw[0]) === 1;\n const ttlMs = Number(raw[1]);\n return {\n allowed,\n retryAfterSeconds: allowed\n ? 0\n : Math.max(1, Number.isFinite(ttlMs) && ttlMs > 0 ? Math.ceil(ttlMs / 1000) : 1),\n };\n },\n async healthCheck() {\n try {\n const result = await options.client.eval(\"return redis.call('PING')\", 0);\n return String(result).toUpperCase() === 'PONG';\n } catch {\n return false;\n }\n },\n };\n}\n"]}
@@ -0,0 +1,80 @@
1
+ import type { AccessiOptions } from '../AccessiModule';
2
+ /**
3
+ * Store di rotazione refresh token.
4
+ *
5
+ * `consume` e atomico: restituisce true una sola volta per `jti`, poi il token
6
+ * e considerato usato fino alla sua scadenza. In multi-istanza usare Redis.
7
+ */
8
+ export interface RefreshTokenRotationStore {
9
+ consume(jti: string, expiresAtMs: number): Promise<boolean>;
10
+ /**
11
+ * Come `consume`, ma restituisce anche quando il token era gia stato
12
+ * consumato: serve a distinguere un retry concorrente da un possibile furto.
13
+ */
14
+ consumeWithMetadata?(jti: string, expiresAtMs: number): Promise<RefreshTokenConsumeResult>;
15
+ /** Revoca l'intera famiglia di refresh token (stesso login). */
16
+ revokeFamily?(familyId: string, expiresAtMs: number): Promise<void>;
17
+ /** True se la famiglia e stata revocata per riuso sospetto. */
18
+ isFamilyRevoked?(familyId: string): Promise<boolean>;
19
+ /** Health check opzionale per readiness del servizio. */
20
+ healthCheck?(): Promise<boolean>;
21
+ }
22
+ /** Esito del consumo atomico di un refresh token. */
23
+ export interface RefreshTokenConsumeResult {
24
+ consumed: boolean;
25
+ /** Quando il token era gia stato consumato, il timestamp del primo consumo. */
26
+ consumedAtMs?: number;
27
+ }
28
+ export interface RefreshTokenRotationOptions {
29
+ /** Default: disabilitata se non viene fornito uno store. */
30
+ enabled?: boolean;
31
+ /** Store condiviso (es. Redis) per il monouso tra istanze. */
32
+ store?: RefreshTokenRotationStore;
33
+ /**
34
+ * Finestra entro cui il riuso di un token appena consumato e trattato come
35
+ * retry concorrente (nessuna revoca famiglia). Default: 10000 ms.
36
+ */
37
+ reuseGraceMs?: number;
38
+ /**
39
+ * Se true, dopo un riuso rilevato revoca anche tutte le sessioni utente.
40
+ * Default: false, per non disconnettere dispositivi legittimi.
41
+ */
42
+ revokeUserSessionsOnReuse?: boolean;
43
+ }
44
+ export interface MemoryRefreshTokenRotationStore extends RefreshTokenRotationStore {
45
+ clear(): void;
46
+ }
47
+ export declare function createMemoryRefreshTokenRotationStore(): MemoryRefreshTokenRotationStore;
48
+ export interface RefreshTokenRotationRedisClient {
49
+ eval(script: string, numKeys: number, ...args: Array<string | number>): Promise<unknown>;
50
+ }
51
+ export interface RedisRefreshTokenRotationStoreOptions {
52
+ client: RefreshTokenRotationRedisClient;
53
+ /** Default: `accessi:refresh-used:`. */
54
+ keyPrefix?: string;
55
+ /** Default: `accessi:refresh-family-revoked:`. */
56
+ familyKeyPrefix?: string;
57
+ }
58
+ /**
59
+ * Store Redis per refresh token monouso.
60
+ *
61
+ * Il consumo e atomico: due refresh concorrenti dello stesso token producono
62
+ * un solo successo. La famiglia viene revocata con una chiave separata che
63
+ * scade insieme ai token che ne fanno parte.
64
+ */
65
+ export declare function createRedisRefreshTokenRotationStore(options: RedisRefreshTokenRotationStoreOptions): RefreshTokenRotationStore;
66
+ export declare function getRefreshTokenRotationStore(options: AccessiOptions): RefreshTokenRotationStore | undefined;
67
+ /**
68
+ * True se la famiglia di refresh token e stata revocata. Ritorna false se lo
69
+ * store non supporta le famiglie (implementazioni legacy).
70
+ */
71
+ export declare function isRefreshTokenFamilyRevoked(options: AccessiOptions, familyId: unknown): Promise<boolean>;
72
+ /**
73
+ * Revoca la famiglia di refresh token fino alla scadenza indicata. Ritorna
74
+ * false se lo store non supporta le famiglie.
75
+ */
76
+ export declare function revokeRefreshTokenFamily(options: AccessiOptions, familyId: string, expiresAtMs: number): Promise<boolean>;
77
+ /** Consumo atomico con metadati, se lo store li supporta. */
78
+ export declare function consumeRefreshToken(options: AccessiOptions, jti: string, expiresAtMs: number): Promise<RefreshTokenConsumeResult | undefined>;
79
+ /** Solo per test: azzera lo store in memoria di default. */
80
+ export declare function clearDefaultRefreshTokenRotations(): void;