emilsoftware-utilities 2.0.0-dev.65 → 2.0.0-dev.67

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 (143) hide show
  1. package/README.MD +28 -1
  2. package/dist/EmilsoftwareModule.d.ts +11 -3
  3. package/dist/EmilsoftwareModule.js +1 -1
  4. package/dist/EmilsoftwareModule.js.map +1 -1
  5. package/dist/Orm.d.ts +1 -1
  6. package/dist/Orm.js +4 -23
  7. package/dist/Orm.js.map +1 -1
  8. package/dist/Utilities.js +1 -0
  9. package/dist/Utilities.js.map +1 -1
  10. package/dist/accessi/client/index.d.ts +26 -0
  11. package/dist/accessi/client/index.js +49 -0
  12. package/dist/accessi/client/index.js.map +1 -0
  13. package/dist/accessi/console/index.d.ts +15 -0
  14. package/dist/accessi/console/index.js +25 -0
  15. package/dist/accessi/console/index.js.map +1 -0
  16. package/dist/accessi/contracts/dtos.d.ts +8 -0
  17. package/dist/accessi/contracts/dtos.js +25 -0
  18. package/dist/accessi/contracts/dtos.js.map +1 -0
  19. package/dist/accessi/contracts/index.d.ts +25 -0
  20. package/dist/accessi/contracts/index.js +28 -0
  21. package/dist/accessi/contracts/index.js.map +1 -0
  22. package/dist/accessi/openapi/index.d.ts +2 -0
  23. package/dist/accessi/openapi/index.js +19 -0
  24. package/dist/accessi/openapi/index.js.map +1 -0
  25. package/dist/accessi/resource-server/core.d.ts +6 -0
  26. package/dist/accessi/resource-server/core.js +23 -0
  27. package/dist/accessi/resource-server/core.js.map +1 -0
  28. package/dist/accessi/resource-server/errors.d.ts +10 -0
  29. package/dist/accessi/resource-server/errors.js +19 -0
  30. package/dist/accessi/resource-server/errors.js.map +1 -0
  31. package/dist/accessi/resource-server/express.d.ts +17 -0
  32. package/dist/accessi/resource-server/express.js +66 -0
  33. package/dist/accessi/resource-server/express.js.map +1 -0
  34. package/dist/accessi/resource-server/index.d.ts +3 -0
  35. package/dist/accessi/resource-server/index.js +20 -0
  36. package/dist/accessi/resource-server/index.js.map +1 -0
  37. package/dist/accessi/resource-server/introspection.d.ts +16 -0
  38. package/dist/accessi/resource-server/introspection.js +115 -0
  39. package/dist/accessi/resource-server/introspection.js.map +1 -0
  40. package/dist/accessi/resource-server/keys.d.ts +11 -0
  41. package/dist/accessi/resource-server/keys.js +22 -0
  42. package/dist/accessi/resource-server/keys.js.map +1 -0
  43. package/dist/accessi/resource-server/nest.d.ts +9 -0
  44. package/dist/accessi/resource-server/nest.js +62 -0
  45. package/dist/accessi/resource-server/nest.js.map +1 -0
  46. package/dist/accessi/resource-server/runtime.d.ts +27 -0
  47. package/dist/accessi/resource-server/runtime.js +128 -0
  48. package/dist/accessi/resource-server/runtime.js.map +1 -0
  49. package/dist/accessi/resource-server/token.d.ts +23 -0
  50. package/dist/accessi/resource-server/token.js +230 -0
  51. package/dist/accessi/resource-server/token.js.map +1 -0
  52. package/dist/accessi/resource-server/types.d.ts +78 -0
  53. package/dist/accessi/resource-server/types.js +3 -0
  54. package/dist/accessi/resource-server/types.js.map +1 -0
  55. package/dist/accessi/server/index.d.ts +10 -0
  56. package/dist/accessi/server/index.js +29 -0
  57. package/dist/accessi/server/index.js.map +1 -0
  58. package/dist/accessi/ui/index.d.ts +13 -0
  59. package/dist/accessi/ui/index.js +19 -0
  60. package/dist/accessi/ui/index.js.map +1 -0
  61. package/dist/accessi-module/AccessiModule.d.ts +25 -1
  62. package/dist/accessi-module/AccessiModule.js +2 -0
  63. package/dist/accessi-module/AccessiModule.js.map +1 -1
  64. package/dist/accessi-module/Console/accessiFetch.d.ts +4 -0
  65. package/dist/accessi-module/Console/accessiFetch.js +18 -4
  66. package/dist/accessi-module/Console/accessiFetch.js.map +1 -1
  67. package/dist/accessi-module/Console/console.js +114 -9
  68. package/dist/accessi-module/Console/console.js.map +1 -1
  69. package/dist/accessi-module/Console/generated/{accessiApi.d.ts → emilsoftware-utilities.d.ts} +11 -1
  70. package/dist/accessi-module/Console/generated/{accessiApi.js → emilsoftware-utilities.js} +10 -2
  71. package/dist/accessi-module/Console/generated/emilsoftware-utilities.js.map +1 -0
  72. package/dist/accessi-module/Console/generated/model/accessiIntrospectionResultDto.d.ts +16 -0
  73. package/dist/accessi-module/Console/generated/model/accessiIntrospectionResultDto.js +3 -0
  74. package/dist/accessi-module/Console/generated/model/accessiIntrospectionResultDto.js.map +1 -0
  75. package/dist/accessi-module/Console/generated/model/index.d.ts +3 -0
  76. package/dist/accessi-module/Console/generated/model/index.js +3 -0
  77. package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
  78. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenRequest.d.ts +10 -0
  79. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenRequest.js +9 -0
  80. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenRequest.js.map +1 -0
  81. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenResponse.d.ts +14 -0
  82. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenResponse.js +3 -0
  83. package/dist/accessi-module/Console/generated/model/introspectAccessiTokenResponse.js.map +1 -0
  84. package/dist/accessi-module/Console/wiki.js +98 -3
  85. package/dist/accessi-module/Console/wiki.js.map +1 -1
  86. package/dist/accessi-module/Controllers/AccessiIntrospectionController.d.ts +17 -0
  87. package/dist/accessi-module/Controllers/AccessiIntrospectionController.js +93 -0
  88. package/dist/accessi-module/Controllers/AccessiIntrospectionController.js.map +1 -0
  89. package/dist/accessi-module/Dtos/IntrospectionDtos.d.ts +16 -0
  90. package/dist/accessi-module/Dtos/IntrospectionDtos.js +59 -0
  91. package/dist/accessi-module/Dtos/IntrospectionDtos.js.map +1 -0
  92. package/dist/accessi-module/Dtos/index.d.ts +1 -0
  93. package/dist/accessi-module/Dtos/index.js +1 -0
  94. package/dist/accessi-module/Dtos/index.js.map +1 -1
  95. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +13 -0
  96. package/dist/accessi-module/Services/AuthService/AuthService.js +42 -10
  97. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  98. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js +11 -4
  99. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js.map +1 -1
  100. package/dist/accessi-module/database-updates/menuScopeSeed.d.ts +2 -2
  101. package/dist/accessi-module/database-updates/menuScopeSeed.js +101 -53
  102. package/dist/accessi-module/database-updates/menuScopeSeed.js.map +1 -1
  103. package/dist/accessi-module/database-updates/menuScopeSeeder.js +1 -1
  104. package/dist/accessi-module/database-updates/menuScopeSeeder.js.map +1 -1
  105. package/dist/accessi-module/index.d.ts +16 -3
  106. package/dist/accessi-module/index.js +15 -19
  107. package/dist/accessi-module/index.js.map +1 -1
  108. package/dist/accessi-module/jwt/jwt.strategy.js +5 -5
  109. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  110. package/dist/accessi-module/middleware/authenticateGen.js +5 -5
  111. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  112. package/dist/accessi-module/security/jwtTokenOptions.d.ts +15 -0
  113. package/dist/accessi-module/security/jwtTokenOptions.js +44 -0
  114. package/dist/accessi-module/security/jwtTokenOptions.js.map +1 -0
  115. package/dist/accessi-module/startupLog.d.ts +3 -2
  116. package/dist/accessi-module/startupLog.js +8 -4
  117. package/dist/accessi-module/startupLog.js.map +1 -1
  118. package/dist/allegati-module/index.js +2 -2
  119. package/dist/allegati-module/index.js.map +1 -1
  120. package/dist/angular-components/aree-disponibili/demo.html +4 -4
  121. package/dist/emilsoftware-utilities-2.0.0-dev.67.tgz +0 -0
  122. package/dist/firebird-compat.d.ts +27 -0
  123. package/dist/firebird-compat.js +52 -2
  124. package/dist/firebird-compat.js.map +1 -1
  125. package/dist/index.d.ts +2 -1
  126. package/dist/index.js +2 -1
  127. package/dist/index.js.map +1 -1
  128. package/dist/initEmilsoftwareModule.d.ts +11 -1
  129. package/dist/initEmilsoftwareModule.js +11 -23
  130. package/dist/initEmilsoftwareModule.js.map +1 -1
  131. package/dist/openapi/OpenApiConfig.d.ts +68 -0
  132. package/dist/openapi/OpenApiConfig.js +157 -0
  133. package/dist/openapi/OpenApiConfig.js.map +1 -0
  134. package/dist/openapi/OpenApiMerge.d.ts +15 -0
  135. package/dist/openapi/OpenApiMerge.js +119 -0
  136. package/dist/openapi/OpenApiMerge.js.map +1 -0
  137. package/integration-prompt.md +481 -0
  138. package/package.json +89 -6
  139. package/dist/accessi-module/Console/generated/accessiApi.js.map +0 -1
  140. package/dist/emilsoftware-utilities-2.0.0-dev.65.tgz +0 -0
  141. package/dist/swagger/SwaggerConfig.d.ts +0 -8
  142. package/dist/swagger/SwaggerConfig.js +0 -41
  143. package/dist/swagger/SwaggerConfig.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ /** Path standard della console amministrativa Accessi. */
2
+ export declare const ACCESSI_CONSOLE_PATH = "/api/accessi/console";
3
+ export interface AccessiConsoleUrlOptions {
4
+ /** Ticket monouso ottenuto da `POST /api/accessi/console/entry`. */
5
+ entryTicket?: string;
6
+ /** Challenge 2FA da completare sulla console. */
7
+ twoFactorChallengeId?: string;
8
+ }
9
+ /**
10
+ * Costruisce l'URL della console centrale.
11
+ *
12
+ * Il base URL e quello di Accessi Service (es. `https://accessi.example.com`).
13
+ * Il JWT non passa mai nell'URL: usare `entryTicket` o il flusso 2FA.
14
+ */
15
+ export declare function buildAccessiConsoleUrl(baseUrl: string, options?: AccessiConsoleUrlOptions): string;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ACCESSI_CONSOLE_PATH = void 0;
4
+ exports.buildAccessiConsoleUrl = buildAccessiConsoleUrl;
5
+ /** Path standard della console amministrativa Accessi. */
6
+ exports.ACCESSI_CONSOLE_PATH = "/api/accessi/console";
7
+ /**
8
+ * Costruisce l'URL della console centrale.
9
+ *
10
+ * Il base URL e quello di Accessi Service (es. `https://accessi.example.com`).
11
+ * Il JWT non passa mai nell'URL: usare `entryTicket` o il flusso 2FA.
12
+ */
13
+ function buildAccessiConsoleUrl(baseUrl, options = {}) {
14
+ const base = baseUrl.replace(/\/+$/, "");
15
+ const url = new URL(`${base}${exports.ACCESSI_CONSOLE_PATH}`);
16
+ const fragment = options.entryTicket
17
+ ? `entry=${encodeURIComponent(options.entryTicket)}`
18
+ : options.twoFactorChallengeId
19
+ ? `two-factor=${encodeURIComponent(options.twoFactorChallengeId)}`
20
+ : "";
21
+ if (fragment)
22
+ url.hash = fragment;
23
+ return url.toString();
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/accessi/console/index.ts"],"names":[],"mappings":";;;AAgBA,wDAaC;AA7BD,0DAA0D;AAC7C,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAS3D;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,OAAe,EACf,UAAoC,EAAE;IAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,4BAAoB,EAAE,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW;QAClC,CAAC,CAAC,SAAS,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QACpD,CAAC,CAAC,OAAO,CAAC,oBAAoB;YAC5B,CAAC,CAAC,cAAc,kBAAkB,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,QAAQ;QAAE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;IAClC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC","sourcesContent":["/** Path standard della console amministrativa Accessi. */\nexport const ACCESSI_CONSOLE_PATH = \"/api/accessi/console\";\n\nexport interface AccessiConsoleUrlOptions {\n /** Ticket monouso ottenuto da `POST /api/accessi/console/entry`. */\n entryTicket?: string;\n /** Challenge 2FA da completare sulla console. */\n twoFactorChallengeId?: string;\n}\n\n/**\n * Costruisce l'URL della console centrale.\n *\n * Il base URL e quello di Accessi Service (es. `https://accessi.example.com`).\n * Il JWT non passa mai nell'URL: usare `entryTicket` o il flusso 2FA.\n */\nexport function buildAccessiConsoleUrl(\n baseUrl: string,\n options: AccessiConsoleUrlOptions = {},\n): string {\n const base = baseUrl.replace(/\\/+$/, \"\");\n const url = new URL(`${base}${ACCESSI_CONSOLE_PATH}`);\n const fragment = options.entryTicket\n ? `entry=${encodeURIComponent(options.entryTicket)}`\n : options.twoFactorChallengeId\n ? `two-factor=${encodeURIComponent(options.twoFactorChallengeId)}`\n : \"\";\n if (fragment) url.hash = fragment;\n return url.toString();\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * DTO server-side Accessi.
3
+ *
4
+ * Questi modelli usano `class-validator`, `class-transformer` e i decoratori
5
+ * OpenAPI di Nest. Sono adatti a backend e test, non a bundle frontend leggeri:
6
+ * per i frontend usare i tipi generati dal client OpenAPI.
7
+ */
8
+ export * from "../../accessi-module/Dtos";
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * DTO server-side Accessi.
19
+ *
20
+ * Questi modelli usano `class-validator`, `class-transformer` e i decoratori
21
+ * OpenAPI di Nest. Sono adatti a backend e test, non a bundle frontend leggeri:
22
+ * per i frontend usare i tipi generati dal client OpenAPI.
23
+ */
24
+ __exportStar(require("../../accessi-module/Dtos"), exports);
25
+ //# sourceMappingURL=dtos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dtos.js","sourceRoot":"","sources":["../../../src/accessi/contracts/dtos.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,4DAA0C","sourcesContent":["/**\n * DTO server-side Accessi.\n *\n * Questi modelli usano `class-validator`, `class-transformer` e i decoratori\n * OpenAPI di Nest. Sono adatti a backend e test, non a bundle frontend leggeri:\n * per i frontend usare i tipi generati dal client OpenAPI.\n */\nexport * from \"../../accessi-module/Dtos\";\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Contratti Accessi browser-safe.
3
+ *
4
+ * Questo entry point non importa NestJS, il database, SMTP o servizi server.
5
+ * Contiene solo tipi, enum e helper puri condivisibili da backend, frontend e
6
+ * resource server.
7
+ */
8
+ export { StatoRegistrazione, StatoRegistrazioneValues } from "../../accessi-module/Dtos/StatoRegistrazione";
9
+ export { TipoAbilitazione } from "../../accessi-module/Dtos/TipoAbilitazione";
10
+ export { accessiRequirement, buildRequirementTree, evaluateRequirement, RequirementEvaluationError, } from "../../accessi-module/middleware/accessiRequirements";
11
+ export type { AccessiGrant, GrantsResult, AccessiPermissionRequirement, AccessiAllRequirement, AccessiAnyRequirement, AccessiNotRequirement, AccessiCustomRequirement, AccessiRequirementNode, AccessiAuthorizationOptions, AccessiCustomRequirementContext, AccessiCustomRequirementHandler, } from "../../accessi-module/middleware/accessiRequirements";
12
+ export { extractAccessiBearerToken, resolveCodiceUtenteFromTokenPayload, buildAuthenticatedTokenPayload, isLoginAsTokenPayload, isAccessiTokenAllowedForUser, isAuthenticatedUserEnabledForJwt, } from "../../accessi-module/security/authenticatedToken";
13
+ export type { AccessiAuthenticatedUserSnapshot, } from "../../accessi-module/security/authenticatedToken";
14
+ /** Payload di un access token Accessi verificato. Le claim extra restano disponibili. */
15
+ export interface AccessiAccessTokenPayload extends Record<string, unknown> {
16
+ /** Obbligatorio: distingue un access token da reset token e token 2FA. */
17
+ typ: "access";
18
+ /** Metodi di autenticazione usati (es. `password`, `otp`, `login_as`). */
19
+ amr?: string[];
20
+ codiceUtente?: number;
21
+ utente?: Record<string, unknown>;
22
+ userData?: {
23
+ utente?: Record<string, unknown>;
24
+ };
25
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAuthenticatedUserEnabledForJwt = exports.isAccessiTokenAllowedForUser = exports.isLoginAsTokenPayload = exports.buildAuthenticatedTokenPayload = exports.resolveCodiceUtenteFromTokenPayload = exports.extractAccessiBearerToken = exports.RequirementEvaluationError = exports.evaluateRequirement = exports.buildRequirementTree = exports.accessiRequirement = exports.TipoAbilitazione = exports.StatoRegistrazioneValues = exports.StatoRegistrazione = void 0;
4
+ /**
5
+ * Contratti Accessi browser-safe.
6
+ *
7
+ * Questo entry point non importa NestJS, il database, SMTP o servizi server.
8
+ * Contiene solo tipi, enum e helper puri condivisibili da backend, frontend e
9
+ * resource server.
10
+ */
11
+ var StatoRegistrazione_1 = require("../../accessi-module/Dtos/StatoRegistrazione");
12
+ Object.defineProperty(exports, "StatoRegistrazione", { enumerable: true, get: function () { return StatoRegistrazione_1.StatoRegistrazione; } });
13
+ Object.defineProperty(exports, "StatoRegistrazioneValues", { enumerable: true, get: function () { return StatoRegistrazione_1.StatoRegistrazioneValues; } });
14
+ var TipoAbilitazione_1 = require("../../accessi-module/Dtos/TipoAbilitazione");
15
+ Object.defineProperty(exports, "TipoAbilitazione", { enumerable: true, get: function () { return TipoAbilitazione_1.TipoAbilitazione; } });
16
+ var accessiRequirements_1 = require("../../accessi-module/middleware/accessiRequirements");
17
+ Object.defineProperty(exports, "accessiRequirement", { enumerable: true, get: function () { return accessiRequirements_1.accessiRequirement; } });
18
+ Object.defineProperty(exports, "buildRequirementTree", { enumerable: true, get: function () { return accessiRequirements_1.buildRequirementTree; } });
19
+ Object.defineProperty(exports, "evaluateRequirement", { enumerable: true, get: function () { return accessiRequirements_1.evaluateRequirement; } });
20
+ Object.defineProperty(exports, "RequirementEvaluationError", { enumerable: true, get: function () { return accessiRequirements_1.RequirementEvaluationError; } });
21
+ var authenticatedToken_1 = require("../../accessi-module/security/authenticatedToken");
22
+ Object.defineProperty(exports, "extractAccessiBearerToken", { enumerable: true, get: function () { return authenticatedToken_1.extractAccessiBearerToken; } });
23
+ Object.defineProperty(exports, "resolveCodiceUtenteFromTokenPayload", { enumerable: true, get: function () { return authenticatedToken_1.resolveCodiceUtenteFromTokenPayload; } });
24
+ Object.defineProperty(exports, "buildAuthenticatedTokenPayload", { enumerable: true, get: function () { return authenticatedToken_1.buildAuthenticatedTokenPayload; } });
25
+ Object.defineProperty(exports, "isLoginAsTokenPayload", { enumerable: true, get: function () { return authenticatedToken_1.isLoginAsTokenPayload; } });
26
+ Object.defineProperty(exports, "isAccessiTokenAllowedForUser", { enumerable: true, get: function () { return authenticatedToken_1.isAccessiTokenAllowedForUser; } });
27
+ Object.defineProperty(exports, "isAuthenticatedUserEnabledForJwt", { enumerable: true, get: function () { return authenticatedToken_1.isAuthenticatedUserEnabledForJwt; } });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/accessi/contracts/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,mFAA4G;AAAnG,wHAAA,kBAAkB,OAAA;AAAE,8HAAA,wBAAwB,OAAA;AACrD,+EAA8E;AAArE,oHAAA,gBAAgB,OAAA;AAEzB,2FAK6D;AAJ3D,yHAAA,kBAAkB,OAAA;AAClB,2HAAA,oBAAoB,OAAA;AACpB,0HAAA,mBAAmB,OAAA;AACnB,iIAAA,0BAA0B,OAAA;AAiB5B,uFAO0D;AANxD,+HAAA,yBAAyB,OAAA;AACzB,yIAAA,mCAAmC,OAAA;AACnC,oIAAA,8BAA8B,OAAA;AAC9B,2HAAA,qBAAqB,OAAA;AACrB,kIAAA,4BAA4B,OAAA;AAC5B,sIAAA,gCAAgC,OAAA","sourcesContent":["/**\n * Contratti Accessi browser-safe.\n *\n * Questo entry point non importa NestJS, il database, SMTP o servizi server.\n * Contiene solo tipi, enum e helper puri condivisibili da backend, frontend e\n * resource server.\n */\nexport { StatoRegistrazione, StatoRegistrazioneValues } from \"../../accessi-module/Dtos/StatoRegistrazione\";\nexport { TipoAbilitazione } from \"../../accessi-module/Dtos/TipoAbilitazione\";\n\nexport {\n accessiRequirement,\n buildRequirementTree,\n evaluateRequirement,\n RequirementEvaluationError,\n} from \"../../accessi-module/middleware/accessiRequirements\";\n\nexport type {\n AccessiGrant,\n GrantsResult,\n AccessiPermissionRequirement,\n AccessiAllRequirement,\n AccessiAnyRequirement,\n AccessiNotRequirement,\n AccessiCustomRequirement,\n AccessiRequirementNode,\n AccessiAuthorizationOptions,\n AccessiCustomRequirementContext,\n AccessiCustomRequirementHandler,\n} from \"../../accessi-module/middleware/accessiRequirements\";\n\nexport {\n extractAccessiBearerToken,\n resolveCodiceUtenteFromTokenPayload,\n buildAuthenticatedTokenPayload,\n isLoginAsTokenPayload,\n isAccessiTokenAllowedForUser,\n isAuthenticatedUserEnabledForJwt,\n} from \"../../accessi-module/security/authenticatedToken\";\n\nexport type {\n AccessiAuthenticatedUserSnapshot,\n} from \"../../accessi-module/security/authenticatedToken\";\n\n/** Payload di un access token Accessi verificato. Le claim extra restano disponibili. */\nexport interface AccessiAccessTokenPayload extends Record<string, unknown> {\n /** Obbligatorio: distingue un access token da reset token e token 2FA. */\n typ: \"access\";\n /** Metodi di autenticazione usati (es. `password`, `otp`, `login_as`). */\n amr?: string[];\n codiceUtente?: number;\n utente?: Record<string, unknown>;\n userData?: { utente?: Record<string, unknown> };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "../../openapi/OpenApiConfig";
2
+ export * from "../../openapi/OpenApiMerge";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../../openapi/OpenApiConfig"), exports);
18
+ __exportStar(require("../../openapi/OpenApiMerge"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/accessi/openapi/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C;AAC5C,6DAA2C","sourcesContent":["export * from \"../../openapi/OpenApiConfig\";\nexport * from \"../../openapi/OpenApiMerge\";\n"]}
@@ -0,0 +1,6 @@
1
+ export * from "./types";
2
+ export * from "./keys";
3
+ export * from "./errors";
4
+ export * from "./token";
5
+ export * from "./introspection";
6
+ export * from "./runtime";
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./keys"), exports);
19
+ __exportStar(require("./errors"), exports);
20
+ __exportStar(require("./token"), exports);
21
+ __exportStar(require("./introspection"), exports);
22
+ __exportStar(require("./runtime"), exports);
23
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/accessi/resource-server/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCAAuB;AACvB,2CAAyB;AACzB,0CAAwB;AACxB,kDAAgC;AAChC,4CAA0B","sourcesContent":["export * from \"./types\";\nexport * from \"./keys\";\nexport * from \"./errors\";\nexport * from \"./token\";\nexport * from \"./introspection\";\nexport * from \"./runtime\";\n"]}
@@ -0,0 +1,10 @@
1
+ /** Codici stabili del resource server, allineati al contratto HTTP Accessi. */
2
+ export type AccessiResourceServerErrorCode = "AUTH_HEADER_MISSING" | "AUTH_TOKEN_MISSING" | "AUTH_TOKEN_INVALID" | "AUTH_USER_CODE_MISSING" | "AUTH_USER_DISABLED" | "AUTH_INSUFFICIENT_PERMISSIONS" | "AUTH_CONFIG_INVALID" | "AUTH_GRANTS_SOURCE_MISSING" | "AUTH_INTROSPECTION_UNAVAILABLE" | "AUTH_INTROSPECTION_UNAUTHORIZED" | "AUTH_JWKS_UNAVAILABLE" | "AUTH_INTERNAL_ERROR";
3
+ /** Errore tipizzato del resource server, convertibile in risposta HTTP o eccezione Nest. */
4
+ export declare class AccessiResourceServerError extends Error {
5
+ readonly status: number;
6
+ readonly code: AccessiResourceServerErrorCode;
7
+ readonly details?: Record<string, unknown> | undefined;
8
+ constructor(status: number, code: AccessiResourceServerErrorCode, message: string, details?: Record<string, unknown> | undefined);
9
+ }
10
+ export declare function accessiAuthError(status: number, code: AccessiResourceServerErrorCode, message: string, details?: Record<string, unknown>): AccessiResourceServerError;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccessiResourceServerError = void 0;
4
+ exports.accessiAuthError = accessiAuthError;
5
+ /** Errore tipizzato del resource server, convertibile in risposta HTTP o eccezione Nest. */
6
+ class AccessiResourceServerError extends Error {
7
+ constructor(status, code, message, details) {
8
+ super(message);
9
+ this.status = status;
10
+ this.code = code;
11
+ this.details = details;
12
+ this.name = "AccessiResourceServerError";
13
+ }
14
+ }
15
+ exports.AccessiResourceServerError = AccessiResourceServerError;
16
+ function accessiAuthError(status, code, message, details) {
17
+ return new AccessiResourceServerError(status, code, message, details);
18
+ }
19
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/accessi/resource-server/errors.ts"],"names":[],"mappings":";;;AA4BA,4CAOC;AApBD,4FAA4F;AAC5F,MAAa,0BAA2B,SAAQ,KAAK;IACnD,YACkB,MAAc,EACd,IAAoC,EACpD,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QALC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAgC;QAEpC,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAVD,gEAUC;AAED,SAAgB,gBAAgB,CAC9B,MAAc,EACd,IAAoC,EACpC,OAAe,EACf,OAAiC;IAEjC,OAAO,IAAI,0BAA0B,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC","sourcesContent":["/** Codici stabili del resource server, allineati al contratto HTTP Accessi. */\nexport type AccessiResourceServerErrorCode =\n | \"AUTH_HEADER_MISSING\"\n | \"AUTH_TOKEN_MISSING\"\n | \"AUTH_TOKEN_INVALID\"\n | \"AUTH_USER_CODE_MISSING\"\n | \"AUTH_USER_DISABLED\"\n | \"AUTH_INSUFFICIENT_PERMISSIONS\"\n | \"AUTH_CONFIG_INVALID\"\n | \"AUTH_GRANTS_SOURCE_MISSING\"\n | \"AUTH_INTROSPECTION_UNAVAILABLE\"\n | \"AUTH_INTROSPECTION_UNAUTHORIZED\"\n | \"AUTH_JWKS_UNAVAILABLE\"\n | \"AUTH_INTERNAL_ERROR\";\n\n/** Errore tipizzato del resource server, convertibile in risposta HTTP o eccezione Nest. */\nexport class AccessiResourceServerError extends Error {\n constructor(\n public readonly status: number,\n public readonly code: AccessiResourceServerErrorCode,\n message: string,\n public readonly details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"AccessiResourceServerError\";\n }\n}\n\nexport function accessiAuthError(\n status: number,\n code: AccessiResourceServerErrorCode,\n message: string,\n details?: Record<string, unknown>,\n): AccessiResourceServerError {\n return new AccessiResourceServerError(status, code, message, details);\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { NextFunction, Request, Response } from "express";
2
+ import { AccessiResourceServerError } from "./errors";
3
+ import type { AccessiResourceServerRuntime } from "./runtime";
4
+ import type { AccessiResourceServerOptions } from "./types";
5
+ /** Normalizza un errore sconosciuto nel contratto di errore Accessi. */
6
+ export declare function toAccessiResourceServerError(error: unknown): AccessiResourceServerError;
7
+ /** Invia la risposta di errore Accessi senza esporre stack trace o dettagli interni. */
8
+ export declare function sendAccessiResourceServerError(res: Response, error: unknown): Response;
9
+ /**
10
+ * Middleware Express per backend che non possiedono il database Accessi.
11
+ *
12
+ * Popola `req.user`, `req.data` e `req.accessi`; con una policy di autorizzazione
13
+ * popola anche `req.userGrants`.
14
+ */
15
+ export declare function createAccessiAuthMiddleware(options: AccessiResourceServerOptions): (req: Request, res: Response, next: NextFunction) => Promise<void>;
16
+ /** Variante con runtime gia creato, utile per test o bootstrap manuale. */
17
+ export declare function createAccessiAuthMiddlewareFromRuntime(runtime: AccessiResourceServerRuntime): (req: Request, res: Response, next: NextFunction) => Promise<void>;
@@ -0,0 +1,66 @@
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.toAccessiResourceServerError = toAccessiResourceServerError;
13
+ exports.sendAccessiResourceServerError = sendAccessiResourceServerError;
14
+ exports.createAccessiAuthMiddleware = createAccessiAuthMiddleware;
15
+ exports.createAccessiAuthMiddlewareFromRuntime = createAccessiAuthMiddlewareFromRuntime;
16
+ const errors_1 = require("./errors");
17
+ const runtime_1 = require("./runtime");
18
+ /** Normalizza un errore sconosciuto nel contratto di errore Accessi. */
19
+ function toAccessiResourceServerError(error) {
20
+ if (error instanceof errors_1.AccessiResourceServerError)
21
+ return error;
22
+ return (0, errors_1.accessiAuthError)(500, "AUTH_INTERNAL_ERROR", "Errore interno durante l'autenticazione.");
23
+ }
24
+ /** Invia la risposta di errore Accessi senza esporre stack trace o dettagli interni. */
25
+ function sendAccessiResourceServerError(res, error) {
26
+ const normalized = toAccessiResourceServerError(error);
27
+ return res.status(normalized.status).json({
28
+ severity: "error",
29
+ status: normalized.status,
30
+ statusCode: 2,
31
+ code: normalized.code,
32
+ error: normalized.code,
33
+ message: normalized.message,
34
+ });
35
+ }
36
+ /**
37
+ * Middleware Express per backend che non possiedono il database Accessi.
38
+ *
39
+ * Popola `req.user`, `req.data` e `req.accessi`; con una policy di autorizzazione
40
+ * popola anche `req.userGrants`.
41
+ */
42
+ function createAccessiAuthMiddleware(options) {
43
+ const runtime = (0, runtime_1.createAccessiResourceServer)(options);
44
+ return (req, res, next) => __awaiter(this, void 0, void 0, function* () {
45
+ try {
46
+ yield (0, runtime_1.authenticateAccessiRequest)(req, runtime);
47
+ next();
48
+ }
49
+ catch (error) {
50
+ sendAccessiResourceServerError(res, error);
51
+ }
52
+ });
53
+ }
54
+ /** Variante con runtime gia creato, utile per test o bootstrap manuale. */
55
+ function createAccessiAuthMiddlewareFromRuntime(runtime) {
56
+ return (req, res, next) => __awaiter(this, void 0, void 0, function* () {
57
+ try {
58
+ yield (0, runtime_1.authenticateAccessiRequest)(req, runtime);
59
+ next();
60
+ }
61
+ catch (error) {
62
+ sendAccessiResourceServerError(res, error);
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/accessi/resource-server/express.ts"],"names":[],"mappings":";;;;;;;;;;;AAOA,oEAGC;AAGD,wEAUC;AAQD,kEAaC;AAGD,wFAWC;AAzDD,qCAAwE;AACxE,uCAAoF;AAIpF,wEAAwE;AACxE,SAAgB,4BAA4B,CAAC,KAAc;IACzD,IAAI,KAAK,YAAY,mCAA0B;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,IAAA,yBAAgB,EAAC,GAAG,EAAE,qBAAqB,EAAE,0CAA0C,CAAC,CAAC;AAClG,CAAC;AAED,wFAAwF;AACxF,SAAgB,8BAA8B,CAAC,GAAa,EAAE,KAAc;IAC1E,MAAM,UAAU,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACxC,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,2BAA2B,CACzC,OAAqC;IAErC,MAAM,OAAO,GAAG,IAAA,qCAA2B,EAAC,OAAO,CAAC,CAAC;IAErD,OAAO,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,IAAA,oCAA0B,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8BAA8B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAgB,sCAAsC,CACpD,OAAqC;IAErC,OAAO,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,IAAA,oCAA0B,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8BAA8B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC","sourcesContent":["import type { NextFunction, Request, Response } from \"express\";\nimport { AccessiResourceServerError, accessiAuthError } from \"./errors\";\nimport { authenticateAccessiRequest, createAccessiResourceServer } from \"./runtime\";\nimport type { AccessiResourceServerRuntime } from \"./runtime\";\nimport type { AccessiResourceServerOptions } from \"./types\";\n\n/** Normalizza un errore sconosciuto nel contratto di errore Accessi. */\nexport function toAccessiResourceServerError(error: unknown): AccessiResourceServerError {\n if (error instanceof AccessiResourceServerError) return error;\n return accessiAuthError(500, \"AUTH_INTERNAL_ERROR\", \"Errore interno durante l'autenticazione.\");\n}\n\n/** Invia la risposta di errore Accessi senza esporre stack trace o dettagli interni. */\nexport function sendAccessiResourceServerError(res: Response, error: unknown): Response {\n const normalized = toAccessiResourceServerError(error);\n return res.status(normalized.status).json({\n severity: \"error\",\n status: normalized.status,\n statusCode: 2,\n code: normalized.code,\n error: normalized.code,\n message: normalized.message,\n });\n}\n\n/**\n * Middleware Express per backend che non possiedono il database Accessi.\n *\n * Popola `req.user`, `req.data` e `req.accessi`; con una policy di autorizzazione\n * popola anche `req.userGrants`.\n */\nexport function createAccessiAuthMiddleware(\n options: AccessiResourceServerOptions,\n): (req: Request, res: Response, next: NextFunction) => Promise<void> {\n const runtime = createAccessiResourceServer(options);\n\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n await authenticateAccessiRequest(req, runtime);\n next();\n } catch (error) {\n sendAccessiResourceServerError(res, error);\n }\n };\n}\n\n/** Variante con runtime gia creato, utile per test o bootstrap manuale. */\nexport function createAccessiAuthMiddlewareFromRuntime(\n runtime: AccessiResourceServerRuntime,\n): (req: Request, res: Response, next: NextFunction) => Promise<void> {\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n await authenticateAccessiRequest(req, runtime);\n next();\n } catch (error) {\n sendAccessiResourceServerError(res, error);\n }\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from "./core";
2
+ export * from "./express";
3
+ export * from "./nest";
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./core"), exports);
18
+ __exportStar(require("./express"), exports);
19
+ __exportStar(require("./nest"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/accessi/resource-server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,4CAA0B;AAC1B,yCAAuB","sourcesContent":["export * from \"./core\";\nexport * from \"./express\";\nexport * from \"./nest\";\n"]}
@@ -0,0 +1,16 @@
1
+ import type { AccessiIntrospectionOptions, AccessiIntrospectionResult } from "./types";
2
+ /** Client di introspection verso Accessi Service, con cache locale dei risultati attivi. */
3
+ export interface AccessiIntrospectionClient {
4
+ introspect(token: string, options?: {
5
+ forceRefresh?: boolean;
6
+ }): Promise<AccessiIntrospectionResult>;
7
+ clearCache(): void;
8
+ }
9
+ /**
10
+ * Crea il client di introspection.
11
+ *
12
+ * Il service token deve avere scope `accessi:introspect`. I risultati attivi
13
+ * sono memorizzati per `cacheTtlMs` (default 30s); i risultati inattivi non
14
+ * vengono cachati per permettere un retry immediato dopo un login.
15
+ */
16
+ export declare function createAccessiIntrospectionClient(options: AccessiIntrospectionOptions): AccessiIntrospectionClient;
@@ -0,0 +1,115 @@
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.createAccessiIntrospectionClient = createAccessiIntrospectionClient;
13
+ const crypto_1 = require("crypto");
14
+ const errors_1 = require("./errors");
15
+ function isRecord(value) {
16
+ return typeof value === "object" && value !== null;
17
+ }
18
+ function unwrapResult(payload) {
19
+ if (isRecord(payload) && isRecord(payload.Result))
20
+ return payload.Result;
21
+ if (isRecord(payload))
22
+ return payload;
23
+ return {};
24
+ }
25
+ function parseResult(payload) {
26
+ var _a;
27
+ const result = unwrapResult(payload);
28
+ const active = result.active === true;
29
+ const user = isRecord(result.user) ? result.user : undefined;
30
+ const grants = isRecord(result.grants) ? result.grants : undefined;
31
+ const rawCode = (_a = user === null || user === void 0 ? void 0 : user.codiceUtente) !== null && _a !== void 0 ? _a : result.codiceUtente;
32
+ const codiceUtente = Number(rawCode);
33
+ return Object.assign(Object.assign(Object.assign({ active }, (user ? { user } : {})), (Number.isSafeInteger(codiceUtente) && codiceUtente > 0 ? { codiceUtente } : {})), (grants ? { grants } : {}));
34
+ }
35
+ /**
36
+ * Crea il client di introspection.
37
+ *
38
+ * Il service token deve avere scope `accessi:introspect`. I risultati attivi
39
+ * sono memorizzati per `cacheTtlMs` (default 30s); i risultati inattivi non
40
+ * vengono cachati per permettere un retry immediato dopo un login.
41
+ */
42
+ function createAccessiIntrospectionClient(options) {
43
+ var _a, _b, _c;
44
+ if (!(options === null || options === void 0 ? void 0 : options.url) || !(options === null || options === void 0 ? void 0 : options.serviceToken)) {
45
+ throw (0, errors_1.accessiAuthError)(500, "AUTH_CONFIG_INVALID", "introspection.url e introspection.serviceToken sono obbligatori.");
46
+ }
47
+ const fetchImpl = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch;
48
+ if (typeof fetchImpl !== "function") {
49
+ throw (0, errors_1.accessiAuthError)(500, "AUTH_CONFIG_INVALID", "fetch non disponibile per l'introspection.");
50
+ }
51
+ const cacheTtlMs = Math.max(1000, (_b = options.cacheTtlMs) !== null && _b !== void 0 ? _b : 30000);
52
+ const timeoutMs = Math.max(500, (_c = options.timeoutMs) !== null && _c !== void 0 ? _c : 3000);
53
+ const cache = new Map();
54
+ const clearCache = () => {
55
+ cache.clear();
56
+ };
57
+ const introspect = (token_1, ...args_1) => __awaiter(this, [token_1, ...args_1], void 0, function* (token, callOptions = {}) {
58
+ if (typeof token !== "string" || token.trim() === "") {
59
+ return { active: false };
60
+ }
61
+ const cacheKey = (0, crypto_1.createHash)("sha256").update(token).digest("hex");
62
+ const cached = cache.get(cacheKey);
63
+ if (!callOptions.forceRefresh && cached && cached.expiresAt > Date.now()) {
64
+ return cached.result;
65
+ }
66
+ const controller = new AbortController();
67
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
68
+ let response;
69
+ try {
70
+ response = yield fetchImpl(options.url, {
71
+ method: "POST",
72
+ headers: {
73
+ Accept: "application/json",
74
+ "Content-Type": "application/json",
75
+ Authorization: `Bearer ${options.serviceToken}`,
76
+ },
77
+ body: JSON.stringify({ token }),
78
+ signal: controller.signal,
79
+ });
80
+ }
81
+ catch (_a) {
82
+ cache.delete(cacheKey);
83
+ throw (0, errors_1.accessiAuthError)(503, "AUTH_INTROSPECTION_UNAVAILABLE", "Accessi Service non raggiungibile per l'introspection.");
84
+ }
85
+ finally {
86
+ clearTimeout(timeout);
87
+ }
88
+ if (response.status === 401 || response.status === 403) {
89
+ throw (0, errors_1.accessiAuthError)(503, "AUTH_INTROSPECTION_UNAUTHORIZED", "Service token non valido o privo dello scope accessi:introspect.");
90
+ }
91
+ if (response.status >= 500) {
92
+ throw (0, errors_1.accessiAuthError)(503, "AUTH_INTROSPECTION_UNAVAILABLE", `Accessi Service ha risposto ${response.status} all'introspection.`);
93
+ }
94
+ if (response.status === 400 || response.status === 404) {
95
+ return { active: false };
96
+ }
97
+ let payload;
98
+ try {
99
+ payload = yield response.json();
100
+ }
101
+ catch (_b) {
102
+ throw (0, errors_1.accessiAuthError)(503, "AUTH_INTROSPECTION_UNAVAILABLE", "Risposta introspection non JSON.");
103
+ }
104
+ const result = parseResult(payload);
105
+ if (result.active) {
106
+ cache.set(cacheKey, { result, expiresAt: Date.now() + cacheTtlMs });
107
+ }
108
+ else {
109
+ cache.delete(cacheKey);
110
+ }
111
+ return result;
112
+ });
113
+ return { introspect, clearCache };
114
+ }
115
+ //# sourceMappingURL=introspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspection.js","sourceRoot":"","sources":["../../../src/accessi/resource-server/introspection.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"crypto\";\nimport { accessiAuthError } from \"./errors\";\nimport type { AccessiIntrospectionOptions, AccessiIntrospectionResult } from \"./types\";\n\ninterface CacheEntry {\n result: AccessiIntrospectionResult;\n expiresAt: number;\n}\n\n/** Client di introspection verso Accessi Service, con cache locale dei risultati attivi. */\nexport interface AccessiIntrospectionClient {\n introspect(token: string, options?: { forceRefresh?: boolean }): Promise<AccessiIntrospectionResult>;\n clearCache(): void;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapResult(payload: unknown): Record<string, unknown> {\n if (isRecord(payload) && isRecord(payload.Result)) return payload.Result;\n if (isRecord(payload)) return payload;\n return {};\n}\n\nfunction parseResult(payload: unknown): AccessiIntrospectionResult {\n const result = unwrapResult(payload);\n const active = result.active === true;\n const user = isRecord(result.user) ? result.user : undefined;\n const grants = isRecord(result.grants) ? result.grants : undefined;\n const rawCode = user?.codiceUtente ?? result.codiceUtente;\n const codiceUtente = Number(rawCode);\n\n return {\n active,\n ...(user ? { user } : {}),\n ...(Number.isSafeInteger(codiceUtente) && codiceUtente > 0 ? { codiceUtente } : {}),\n ...(grants ? { grants } : {}),\n };\n}\n\n/**\n * Crea il client di introspection.\n *\n * Il service token deve avere scope `accessi:introspect`. I risultati attivi\n * sono memorizzati per `cacheTtlMs` (default 30s); i risultati inattivi non\n * vengono cachati per permettere un retry immediato dopo un login.\n */\nexport function createAccessiIntrospectionClient(\n options: AccessiIntrospectionOptions,\n): AccessiIntrospectionClient {\n if (!options?.url || !options?.serviceToken) {\n throw accessiAuthError(\n 500,\n \"AUTH_CONFIG_INVALID\",\n \"introspection.url e introspection.serviceToken sono obbligatori.\",\n );\n }\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw accessiAuthError(500, \"AUTH_CONFIG_INVALID\", \"fetch non disponibile per l'introspection.\");\n }\n\n const cacheTtlMs = Math.max(1_000, options.cacheTtlMs ?? 30_000);\n const timeoutMs = Math.max(500, options.timeoutMs ?? 3_000);\n const cache = new Map<string, CacheEntry>();\n\n const clearCache = (): void => {\n cache.clear();\n };\n\n const introspect = async (\n token: string,\n callOptions: { forceRefresh?: boolean } = {},\n ): Promise<AccessiIntrospectionResult> => {\n if (typeof token !== \"string\" || token.trim() === \"\") {\n return { active: false };\n }\n\n const cacheKey = createHash(\"sha256\").update(token).digest(\"hex\");\n const cached = cache.get(cacheKey);\n if (!callOptions.forceRefresh && cached && cached.expiresAt > Date.now()) {\n return cached.result;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n let response: Response;\n try {\n response = await fetchImpl(options.url, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${options.serviceToken}`,\n },\n body: JSON.stringify({ token }),\n signal: controller.signal,\n });\n } catch {\n cache.delete(cacheKey);\n throw accessiAuthError(\n 503,\n \"AUTH_INTROSPECTION_UNAVAILABLE\",\n \"Accessi Service non raggiungibile per l'introspection.\",\n );\n } finally {\n clearTimeout(timeout);\n }\n\n if (response.status === 401 || response.status === 403) {\n throw accessiAuthError(\n 503,\n \"AUTH_INTROSPECTION_UNAUTHORIZED\",\n \"Service token non valido o privo dello scope accessi:introspect.\",\n );\n }\n if (response.status >= 500) {\n throw accessiAuthError(\n 503,\n \"AUTH_INTROSPECTION_UNAVAILABLE\",\n `Accessi Service ha risposto ${response.status} all'introspection.`,\n );\n }\n if (response.status === 400 || response.status === 404) {\n return { active: false };\n }\n\n let payload: unknown;\n try {\n payload = await response.json();\n } catch {\n throw accessiAuthError(\n 503,\n \"AUTH_INTROSPECTION_UNAVAILABLE\",\n \"Risposta introspection non JSON.\",\n );\n }\n\n const result = parseResult(payload);\n if (result.active) {\n cache.set(cacheKey, { result, expiresAt: Date.now() + cacheTtlMs });\n } else {\n cache.delete(cacheKey);\n }\n return result;\n };\n\n return { introspect, clearCache };\n}\n"]}
@@ -0,0 +1,11 @@
1
+ /** Derivazione usata dal server Accessi per separare le chiavi JWT per scopo. */
2
+ export declare const ACCESSI_JWT_ACCESS_PURPOSE = "accessi:jwt:access:v1";
3
+ /**
4
+ * Deriva la chiave HMAC degli access token dal segreto configurato in
5
+ * `ACCESSI_JWT_SECRET`.
6
+ *
7
+ * Serve ai resource server che condividono il segreto grezzo con Accessi ma non
8
+ * vogliono replicare la KDF: passare il risultato come `jwt.secret`, oppure
9
+ * usare direttamente `jwt.serverSecret`.
10
+ */
11
+ export declare function deriveAccessiAccessSecret(serverSecret: string): string;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ACCESSI_JWT_ACCESS_PURPOSE = void 0;
4
+ exports.deriveAccessiAccessSecret = deriveAccessiAccessSecret;
5
+ const crypto_1 = require("crypto");
6
+ /** Derivazione usata dal server Accessi per separare le chiavi JWT per scopo. */
7
+ exports.ACCESSI_JWT_ACCESS_PURPOSE = "accessi:jwt:access:v1";
8
+ /**
9
+ * Deriva la chiave HMAC degli access token dal segreto configurato in
10
+ * `ACCESSI_JWT_SECRET`.
11
+ *
12
+ * Serve ai resource server che condividono il segreto grezzo con Accessi ma non
13
+ * vogliono replicare la KDF: passare il risultato come `jwt.secret`, oppure
14
+ * usare direttamente `jwt.serverSecret`.
15
+ */
16
+ function deriveAccessiAccessSecret(serverSecret) {
17
+ if (typeof serverSecret !== "string" || serverSecret.length === 0) {
18
+ throw new Error("serverSecret Accessi non configurato.");
19
+ }
20
+ return (0, crypto_1.createHmac)("sha256", serverSecret).update(exports.ACCESSI_JWT_ACCESS_PURPOSE).digest("hex");
21
+ }
22
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/accessi/resource-server/keys.ts"],"names":[],"mappings":";;;AAaA,8DAKC;AAlBD,mCAAoC;AAEpC,iFAAiF;AACpE,QAAA,0BAA0B,GAAG,uBAAuB,CAAC;AAElE;;;;;;;GAOG;AACH,SAAgB,yBAAyB,CAAC,YAAoB;IAC5D,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAA,mBAAU,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,kCAA0B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["import { createHmac } from \"crypto\";\n\n/** Derivazione usata dal server Accessi per separare le chiavi JWT per scopo. */\nexport const ACCESSI_JWT_ACCESS_PURPOSE = \"accessi:jwt:access:v1\";\n\n/**\n * Deriva la chiave HMAC degli access token dal segreto configurato in\n * `ACCESSI_JWT_SECRET`.\n *\n * Serve ai resource server che condividono il segreto grezzo con Accessi ma non\n * vogliono replicare la KDF: passare il risultato come `jwt.secret`, oppure\n * usare direttamente `jwt.serverSecret`.\n */\nexport function deriveAccessiAccessSecret(serverSecret: string): string {\n if (typeof serverSecret !== \"string\" || serverSecret.length === 0) {\n throw new Error(\"serverSecret Accessi non configurato.\");\n }\n return createHmac(\"sha256\", serverSecret).update(ACCESSI_JWT_ACCESS_PURPOSE).digest(\"hex\");\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { CanActivate, Type } from "@nestjs/common";
2
+ import type { AccessiResourceServerOptions } from "./types";
3
+ /**
4
+ * Crea un guard Nest configurato con le opzioni del resource server.
5
+ *
6
+ * Uso:
7
+ * `@UseGuards(createAccessiAuthGuard(options))`
8
+ */
9
+ export declare function createAccessiAuthGuard(options: AccessiResourceServerOptions): Type<CanActivate>;