@acorex-platform/framework-server 0.0.33 → 0.0.38

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 (207) hide show
  1. package/background-job/src/lib/schedule/background-job-schedule-scanner.service.d.ts.map +1 -1
  2. package/background-job/src/lib/schedule/background-job-schedule-scanner.service.js +29 -2
  3. package/background-job/src/lib/schedule/background-job-schedule-scanner.service.js.map +1 -1
  4. package/core/src/lib/runtime/runtime-authz.guard.d.ts +3 -2
  5. package/core/src/lib/runtime/runtime-authz.guard.d.ts.map +1 -1
  6. package/core/src/lib/runtime/runtime-authz.guard.js +7 -6
  7. package/core/src/lib/runtime/runtime-authz.guard.js.map +1 -1
  8. package/domain/seed/src/lib/category-companion-entity.builder.d.ts +1 -1
  9. package/domain/seed/src/lib/category-companion-entity.builder.d.ts.map +1 -1
  10. package/domain/seed/src/lib/category-companion-entity.builder.js +64 -0
  11. package/domain/seed/src/lib/category-companion-entity.builder.js.map +1 -1
  12. package/jql/schema/src/lib/generated/widget-data-types.bootstrap.js +1 -1
  13. package/jql/schema/src/lib/generated/widget-data-types.bootstrap.js.map +1 -1
  14. package/package.json +2 -2
  15. package/realtime/src/lib/auth/auth-security-alert-realtime.listener.d.ts +18 -0
  16. package/realtime/src/lib/auth/auth-security-alert-realtime.listener.d.ts.map +1 -0
  17. package/realtime/src/lib/auth/auth-security-alert-realtime.listener.js +90 -0
  18. package/realtime/src/lib/auth/auth-security-alert-realtime.listener.js.map +1 -0
  19. package/realtime/src/lib/delivery/socket-io-realtime.delivery.d.ts.map +1 -1
  20. package/realtime/src/lib/delivery/socket-io-realtime.delivery.js +9 -4
  21. package/realtime/src/lib/delivery/socket-io-realtime.delivery.js.map +1 -1
  22. package/realtime/src/lib/gateway/realtime-ws-auth.d.ts +1 -1
  23. package/realtime/src/lib/gateway/realtime-ws-auth.d.ts.map +1 -1
  24. package/realtime/src/lib/gateway/realtime-ws-auth.js +4 -2
  25. package/realtime/src/lib/gateway/realtime-ws-auth.js.map +1 -1
  26. package/realtime/src/lib/gateway/realtime.gateway.d.ts +1 -0
  27. package/realtime/src/lib/gateway/realtime.gateway.d.ts.map +1 -1
  28. package/realtime/src/lib/gateway/realtime.gateway.js +9 -2
  29. package/realtime/src/lib/gateway/realtime.gateway.js.map +1 -1
  30. package/realtime/src/lib/realtime.module.d.ts.map +1 -1
  31. package/realtime/src/lib/realtime.module.js +2 -0
  32. package/realtime/src/lib/realtime.module.js.map +1 -1
  33. package/realtime/src/lib/rooms/realtime-rooms.util.d.ts +8 -0
  34. package/realtime/src/lib/rooms/realtime-rooms.util.d.ts.map +1 -1
  35. package/realtime/src/lib/rooms/realtime-rooms.util.js +22 -0
  36. package/realtime/src/lib/rooms/realtime-rooms.util.js.map +1 -1
  37. package/realtime/src/lib/services/realtime-publisher.service.d.ts.map +1 -1
  38. package/realtime/src/lib/services/realtime-publisher.service.js +7 -1
  39. package/realtime/src/lib/services/realtime-publisher.service.js.map +1 -1
  40. package/realtime/src/lib/topics/realtime-topics.d.ts +1 -0
  41. package/realtime/src/lib/topics/realtime-topics.d.ts.map +1 -1
  42. package/realtime/src/lib/topics/realtime-topics.js +2 -1
  43. package/realtime/src/lib/topics/realtime-topics.js.map +1 -1
  44. package/realtime/src/lib/types/realtime.types.d.ts +19 -0
  45. package/realtime/src/lib/types/realtime.types.d.ts.map +1 -1
  46. package/realtime/src/lib/types/realtime.types.js.map +1 -1
  47. package/security/src/index.d.ts +4 -0
  48. package/security/src/index.d.ts.map +1 -1
  49. package/security/src/index.js +5 -0
  50. package/security/src/index.js.map +1 -1
  51. package/security/src/lib/auth/auth-cookie-response.util.d.ts.map +1 -1
  52. package/security/src/lib/auth/auth-cookie-response.util.js +4 -1
  53. package/security/src/lib/auth/auth-cookie-response.util.js.map +1 -1
  54. package/security/src/lib/auth/auth-cookie.service.d.ts +2 -0
  55. package/security/src/lib/auth/auth-cookie.service.d.ts.map +1 -1
  56. package/security/src/lib/auth/auth-cookie.service.js +17 -0
  57. package/security/src/lib/auth/auth-cookie.service.js.map +1 -1
  58. package/security/src/lib/auth/auth-csrf.middleware.d.ts +14 -0
  59. package/security/src/lib/auth/auth-csrf.middleware.d.ts.map +1 -0
  60. package/security/src/lib/auth/auth-csrf.middleware.js +60 -0
  61. package/security/src/lib/auth/auth-csrf.middleware.js.map +1 -0
  62. package/security/src/lib/auth/auth-identity-provider.source.d.ts +11 -0
  63. package/security/src/lib/auth/auth-identity-provider.source.d.ts.map +1 -1
  64. package/security/src/lib/auth/auth-identity-provider.source.js +6 -1
  65. package/security/src/lib/auth/auth-identity-provider.source.js.map +1 -1
  66. package/security/src/lib/auth/auth-local-credentials.service.d.ts +8 -0
  67. package/security/src/lib/auth/auth-local-credentials.service.d.ts.map +1 -1
  68. package/security/src/lib/auth/auth-local-credentials.service.js +41 -16
  69. package/security/src/lib/auth/auth-local-credentials.service.js.map +1 -1
  70. package/security/src/lib/auth/auth-max-device-sessions-policy.d.ts +14 -0
  71. package/security/src/lib/auth/auth-max-device-sessions-policy.d.ts.map +1 -0
  72. package/security/src/lib/auth/auth-max-device-sessions-policy.js +48 -0
  73. package/security/src/lib/auth/auth-max-device-sessions-policy.js.map +1 -0
  74. package/security/src/lib/auth/auth-runtime.handlers.d.ts +15 -3
  75. package/security/src/lib/auth/auth-runtime.handlers.d.ts.map +1 -1
  76. package/security/src/lib/auth/auth-runtime.handlers.js +51 -3
  77. package/security/src/lib/auth/auth-runtime.handlers.js.map +1 -1
  78. package/security/src/lib/auth/auth.config.d.ts +7 -0
  79. package/security/src/lib/auth/auth.config.d.ts.map +1 -1
  80. package/security/src/lib/auth/auth.config.js +8 -1
  81. package/security/src/lib/auth/auth.config.js.map +1 -1
  82. package/security/src/lib/auth/auth.events.d.ts +22 -0
  83. package/security/src/lib/auth/auth.events.d.ts.map +1 -1
  84. package/security/src/lib/auth/auth.events.js +3 -1
  85. package/security/src/lib/auth/auth.events.js.map +1 -1
  86. package/security/src/lib/auth/auth.service.d.ts +65 -5
  87. package/security/src/lib/auth/auth.service.d.ts.map +1 -1
  88. package/security/src/lib/auth/auth.service.js +311 -10
  89. package/security/src/lib/auth/auth.service.js.map +1 -1
  90. package/security/src/lib/auth/auth.types.d.ts +36 -0
  91. package/security/src/lib/auth/auth.types.d.ts.map +1 -1
  92. package/security/src/lib/auth/auth.types.js.map +1 -1
  93. package/security/src/lib/auth/device-session.service.d.ts +59 -1
  94. package/security/src/lib/auth/device-session.service.d.ts.map +1 -1
  95. package/security/src/lib/auth/device-session.service.js +299 -28
  96. package/security/src/lib/auth/device-session.service.js.map +1 -1
  97. package/security/src/lib/auth/jwt-auth.guard.d.ts +2 -1
  98. package/security/src/lib/auth/jwt-auth.guard.d.ts.map +1 -1
  99. package/security/src/lib/auth/jwt-auth.guard.js +4 -2
  100. package/security/src/lib/auth/jwt-auth.guard.js.map +1 -1
  101. package/security/src/lib/auth/login-attempt.service.d.ts +14 -3
  102. package/security/src/lib/auth/login-attempt.service.d.ts.map +1 -1
  103. package/security/src/lib/auth/login-attempt.service.js +35 -10
  104. package/security/src/lib/auth/login-attempt.service.js.map +1 -1
  105. package/security/src/lib/auth/request-meta.util.js +64 -11
  106. package/security/src/lib/auth/request-meta.util.js.map +1 -1
  107. package/security/src/lib/auth/token-revocation.constants.d.ts +9 -0
  108. package/security/src/lib/auth/token-revocation.constants.d.ts.map +1 -0
  109. package/security/src/lib/auth/token-revocation.constants.js +14 -0
  110. package/security/src/lib/auth/token-revocation.constants.js.map +1 -0
  111. package/security/src/lib/auth/token.service.d.ts +26 -1
  112. package/security/src/lib/auth/token.service.d.ts.map +1 -1
  113. package/security/src/lib/auth/token.service.js +105 -4
  114. package/security/src/lib/auth/token.service.js.map +1 -1
  115. package/security/src/lib/oauth/connect.controller.d.ts +81 -7
  116. package/security/src/lib/oauth/connect.controller.d.ts.map +1 -1
  117. package/security/src/lib/oauth/connect.controller.js +264 -36
  118. package/security/src/lib/oauth/connect.controller.js.map +1 -1
  119. package/security/src/lib/oauth/oauth-bff.util.d.ts +9 -0
  120. package/security/src/lib/oauth/oauth-bff.util.d.ts.map +1 -0
  121. package/security/src/lib/oauth/oauth-bff.util.js +30 -0
  122. package/security/src/lib/oauth/oauth-bff.util.js.map +1 -0
  123. package/security/src/lib/oauth/oauth-claims.util.d.ts +6 -0
  124. package/security/src/lib/oauth/oauth-claims.util.d.ts.map +1 -0
  125. package/security/src/lib/oauth/oauth-claims.util.js +36 -0
  126. package/security/src/lib/oauth/oauth-claims.util.js.map +1 -0
  127. package/security/src/lib/oauth/oauth-client-registry.service.d.ts +25 -0
  128. package/security/src/lib/oauth/oauth-client-registry.service.d.ts.map +1 -0
  129. package/security/src/lib/oauth/oauth-client-registry.service.js +201 -0
  130. package/security/src/lib/oauth/oauth-client-registry.service.js.map +1 -0
  131. package/security/src/lib/oauth/oauth-connect.exception-filter.d.ts +10 -0
  132. package/security/src/lib/oauth/oauth-connect.exception-filter.d.ts.map +1 -0
  133. package/security/src/lib/oauth/oauth-connect.exception-filter.js +59 -0
  134. package/security/src/lib/oauth/oauth-connect.exception-filter.js.map +1 -0
  135. package/security/src/lib/oauth/oauth-error.util.d.ts +23 -0
  136. package/security/src/lib/oauth/oauth-error.util.d.ts.map +1 -0
  137. package/security/src/lib/oauth/oauth-error.util.js +114 -0
  138. package/security/src/lib/oauth/oauth-error.util.js.map +1 -0
  139. package/security/src/lib/oauth/oauth-grant-store.interface.d.ts +16 -0
  140. package/security/src/lib/oauth/oauth-grant-store.interface.d.ts.map +1 -0
  141. package/security/src/lib/oauth/oauth-grant-store.interface.js +14 -0
  142. package/security/src/lib/oauth/oauth-grant-store.interface.js.map +1 -0
  143. package/security/src/lib/oauth/oauth-issuer.util.d.ts +7 -0
  144. package/security/src/lib/oauth/oauth-issuer.util.d.ts.map +1 -0
  145. package/security/src/lib/oauth/oauth-issuer.util.js +25 -0
  146. package/security/src/lib/oauth/oauth-issuer.util.js.map +1 -0
  147. package/security/src/lib/oauth/oauth-op.service.d.ts +35 -0
  148. package/security/src/lib/oauth/oauth-op.service.d.ts.map +1 -0
  149. package/security/src/lib/oauth/oauth-op.service.js +152 -0
  150. package/security/src/lib/oauth/oauth-op.service.js.map +1 -0
  151. package/security/src/lib/oauth/oauth-op.types.d.ts +73 -0
  152. package/security/src/lib/oauth/oauth-op.types.d.ts.map +1 -0
  153. package/security/src/lib/oauth/oauth-op.types.js +5 -0
  154. package/security/src/lib/oauth/oauth-op.types.js.map +1 -0
  155. package/security/src/lib/oauth/oauth-provider-hint.util.d.ts +8 -0
  156. package/security/src/lib/oauth/oauth-provider-hint.util.d.ts.map +1 -0
  157. package/security/src/lib/oauth/oauth-provider-hint.util.js +24 -0
  158. package/security/src/lib/oauth/oauth-provider-hint.util.js.map +1 -0
  159. package/security/src/lib/oauth/oauth-redis-oidc-adapter.d.ts +27 -0
  160. package/security/src/lib/oauth/oauth-redis-oidc-adapter.d.ts.map +1 -0
  161. package/security/src/lib/oauth/oauth-redis-oidc-adapter.js +159 -0
  162. package/security/src/lib/oauth/oauth-redis-oidc-adapter.js.map +1 -0
  163. package/security/src/lib/oauth/oauth-rp.service.d.ts +53 -0
  164. package/security/src/lib/oauth/oauth-rp.service.d.ts.map +1 -0
  165. package/security/src/lib/oauth/oauth-rp.service.js +371 -0
  166. package/security/src/lib/oauth/oauth-rp.service.js.map +1 -0
  167. package/security/src/lib/oauth/oauth-rp.types.d.ts +25 -0
  168. package/security/src/lib/oauth/oauth-rp.types.d.ts.map +1 -0
  169. package/security/src/lib/oauth/oauth-rp.types.js +5 -0
  170. package/security/src/lib/oauth/oauth-rp.types.js.map +1 -0
  171. package/security/src/lib/oauth/oidc-provider-engine.service.d.ts +25 -0
  172. package/security/src/lib/oauth/oidc-provider-engine.service.d.ts.map +1 -0
  173. package/security/src/lib/oauth/oidc-provider-engine.service.js +208 -0
  174. package/security/src/lib/oauth/oidc-provider-engine.service.js.map +1 -0
  175. package/security/src/lib/oauth/platform-oauth.service.d.ts +43 -14
  176. package/security/src/lib/oauth/platform-oauth.service.d.ts.map +1 -1
  177. package/security/src/lib/oauth/platform-oauth.service.js +177 -170
  178. package/security/src/lib/oauth/platform-oauth.service.js.map +1 -1
  179. package/security/src/lib/oauth/platform-oauth.types.d.ts +11 -3
  180. package/security/src/lib/oauth/platform-oauth.types.d.ts.map +1 -1
  181. package/security/src/lib/oauth/platform-oauth.types.js.map +1 -1
  182. package/security/src/lib/oauth/redis-oauth-grant-store.service.d.ts +22 -0
  183. package/security/src/lib/oauth/redis-oauth-grant-store.service.d.ts.map +1 -0
  184. package/security/src/lib/oauth/redis-oauth-grant-store.service.js +132 -0
  185. package/security/src/lib/oauth/redis-oauth-grant-store.service.js.map +1 -0
  186. package/security/src/lib/oauth/testing/in-memory-oauth-grant-store.d.ts +14 -0
  187. package/security/src/lib/oauth/testing/in-memory-oauth-grant-store.d.ts.map +1 -0
  188. package/security/src/lib/oauth/testing/in-memory-oauth-grant-store.js +46 -0
  189. package/security/src/lib/oauth/testing/in-memory-oauth-grant-store.js.map +1 -0
  190. package/security/src/lib/oauth/testing/jest-empty-module.d.ts +4 -0
  191. package/security/src/lib/oauth/testing/jest-empty-module.d.ts.map +1 -0
  192. package/security/src/lib/oauth/testing/jest-empty-module.js +11 -0
  193. package/security/src/lib/oauth/testing/jest-empty-module.js.map +1 -0
  194. package/security/src/lib/oauth/testing/mock-oidc-provider.d.ts +49 -0
  195. package/security/src/lib/oauth/testing/mock-oidc-provider.d.ts.map +1 -0
  196. package/security/src/lib/oauth/testing/mock-oidc-provider.js +158 -0
  197. package/security/src/lib/oauth/testing/mock-oidc-provider.js.map +1 -0
  198. package/security/src/lib/security.module.d.ts.map +1 -1
  199. package/security/src/lib/security.module.js +31 -0
  200. package/security/src/lib/security.module.js.map +1 -1
  201. package/security/src/lib/session/backend-session.types.d.ts +2 -0
  202. package/security/src/lib/session/backend-session.types.d.ts.map +1 -1
  203. package/security/src/lib/session/backend-session.types.js.map +1 -1
  204. package/security/src/lib/session/optional-jwt-session.middleware.d.ts +6 -4
  205. package/security/src/lib/session/optional-jwt-session.middleware.d.ts.map +1 -1
  206. package/security/src/lib/session/optional-jwt-session.middleware.js +18 -7
  207. package/security/src/lib/session/optional-jwt-session.middleware.js.map +1 -1
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ var OidcProviderEngineService_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.OidcProviderEngineService = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const oidc_provider_1 = tslib_1.__importDefault(require("oidc-provider"));
8
+ const auth_local_credentials_service_1 = require("../auth/auth-local-credentials.service");
9
+ const auth_config_1 = require("../auth/auth.config");
10
+ const token_service_1 = require("../auth/token.service");
11
+ const oauth_client_registry_service_1 = require("./oauth-client-registry.service");
12
+ const oauth_issuer_util_1 = require("./oauth-issuer.util");
13
+ const oauth_redis_oidc_adapter_1 = require("./oauth-redis-oidc-adapter");
14
+ const Provider = oidc_provider_1.default;
15
+ function isOidcProviderEngineEnabled() {
16
+ const raw = process.env['AUTH_OIDC_PROVIDER_ENGINE']?.trim()?.toLowerCase();
17
+ if (raw === 'false' || raw === '0') {
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ let OidcProviderEngineService = OidcProviderEngineService_1 = class OidcProviderEngineService {
23
+ constructor(clients, credentials, tokens) {
24
+ this.clients = clients;
25
+ this.credentials = credentials;
26
+ this.tokens = tokens;
27
+ this.logger = new common_1.Logger(OidcProviderEngineService_1.name);
28
+ this.provider = null;
29
+ this.callbackHandler = null;
30
+ this.issuer = '';
31
+ }
32
+ async onModuleInit() {
33
+ if (!isOidcProviderEngineEnabled()) {
34
+ this.logger.log('oidc-provider engine disabled (AUTH_OIDC_PROVIDER_ENGINE=false).');
35
+ return;
36
+ }
37
+ try {
38
+ await this.bootstrapProvider();
39
+ this.logger.log(`oidc-provider engine ready (issuer=${this.issuer}).`);
40
+ }
41
+ catch (error) {
42
+ this.logger.error(`Failed to bootstrap oidc-provider: ${String(error)}`);
43
+ }
44
+ }
45
+ isEnabled() {
46
+ return this.provider != null && this.callbackHandler != null;
47
+ }
48
+ getIssuer() {
49
+ return this.issuer;
50
+ }
51
+ async getDiscoveryDocument() {
52
+ if (!this.provider) {
53
+ return null;
54
+ }
55
+ return this.provider.metadata;
56
+ }
57
+ /**
58
+ * Forwards an Express request to oidc-provider (paths must be issuer-relative, without `/api` prefix).
59
+ */
60
+ async forward(req, res) {
61
+ if (!this.callbackHandler) {
62
+ res.status(503).json({ error: 'oidc_provider_unavailable' });
63
+ return;
64
+ }
65
+ const originalUrl = req.originalUrl || req.url;
66
+ const relative = originalUrl.replace(/^\/api(?=\/|$)/, '') || originalUrl;
67
+ const previousUrl = req.url;
68
+ req.url = relative;
69
+ await new Promise((resolve, reject) => {
70
+ this.callbackHandler(req, res, (error) => {
71
+ req.url = previousUrl;
72
+ if (error) {
73
+ reject(error);
74
+ return;
75
+ }
76
+ resolve();
77
+ });
78
+ });
79
+ }
80
+ async bootstrapProvider() {
81
+ this.issuer = (0, oauth_issuer_util_1.resolveOAuthIssuer)();
82
+ // oidc-provider requires private RSA material (`d`); public JWKS must stay HTTP-only.
83
+ const jwks = this.tokens.getSigningJwks();
84
+ const credentials = this.credentials;
85
+ const registeredClients = this.clients.listClients().map((client) => {
86
+ const entry = {
87
+ client_id: client.clientId,
88
+ token_endpoint_auth_method: client.publicClient ? 'none' : 'client_secret_post',
89
+ redirect_uris: this.clients.resolveRedirectUris(client.clientId),
90
+ post_logout_redirect_uris: this.clients.resolvePostLogoutRedirectUris(client.clientId),
91
+ grant_types: [...client.allowedGrantTypes],
92
+ response_types: ['code'],
93
+ scope: client.allowedScopes.join(' '),
94
+ };
95
+ if (!client.publicClient && client.clientSecret?.trim()) {
96
+ entry['client_secret'] = client.clientSecret.trim();
97
+ }
98
+ return entry;
99
+ });
100
+ const cookieKey = process.env['AUTH_OIDC_COOKIE_KEYS']?.trim() || process.env['JWT_SECRET']?.trim() || 'dev-oidc-provider-cookie-key';
101
+ /** Absolute URI resource indicator (RFC 8707); JWT `aud` stays fixed `platform`. */
102
+ const platformResource = 'urn:acorex:platform';
103
+ const provider = new Provider(this.issuer, {
104
+ adapter: oauth_redis_oidc_adapter_1.OAuthRedisOidcAdapter,
105
+ clients: registeredClients,
106
+ jwks,
107
+ cookies: {
108
+ keys: [cookieKey],
109
+ },
110
+ // Must include every scope registered on clients (invalid_client_metadata otherwise).
111
+ scopes: ['openid', 'offline_access', 'profile', 'email'],
112
+ routes: {
113
+ authorization: '/connect/authorize',
114
+ token: '/connect/token',
115
+ userinfo: '/connect/userinfo',
116
+ revocation: '/connect/revocation',
117
+ end_session: '/connect/endsession',
118
+ jwks: '/.well-known/jwks.json',
119
+ },
120
+ claims: {
121
+ openid: ['sub'],
122
+ profile: ['name', 'picture'],
123
+ email: ['email'],
124
+ },
125
+ features: {
126
+ // Built-in OP login/consent UI for standard clients (Keycloak, etc.).
127
+ // First-party SPA continues to use federation broker + Pure BFF cookies.
128
+ devInteractions: { enabled: process.env['NODE_ENV'] !== 'production' },
129
+ revocation: { enabled: true },
130
+ introspection: { enabled: false },
131
+ rpInitiatedLogout: { enabled: true },
132
+ resourceIndicators: {
133
+ enabled: true,
134
+ defaultResource: async () => platformResource,
135
+ useGrantedResource: async () => true,
136
+ getResourceServerInfo: async () => ({
137
+ scope: 'openid profile email offline_access',
138
+ audience: auth_config_1.PLATFORM_ACCESS_TOKEN_AUDIENCE,
139
+ accessTokenFormat: 'jwt',
140
+ }),
141
+ },
142
+ },
143
+ pkce: {
144
+ required: () => true,
145
+ },
146
+ findAccount: async (_ctx, id) => {
147
+ const looksLikeUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(id.trim());
148
+ let user = null;
149
+ if (looksLikeUuid) {
150
+ try {
151
+ user = await credentials.findUserById(id);
152
+ }
153
+ catch {
154
+ user = null;
155
+ }
156
+ }
157
+ if (!user) {
158
+ user = await credentials.findUserByUsername(id);
159
+ }
160
+ if (!user) {
161
+ return undefined;
162
+ }
163
+ const email = typeof user.email === 'string' ? user.email : undefined;
164
+ return {
165
+ // Must match session.accountId (login form may submit username, not UUID).
166
+ accountId: id,
167
+ async claims() {
168
+ return {
169
+ sub: user.id,
170
+ email,
171
+ name: user.displayName ?? user.username ?? user.id,
172
+ picture: user.avatar ?? undefined,
173
+ };
174
+ },
175
+ };
176
+ },
177
+ extraTokenClaims: async (_ctx, token) => {
178
+ if (token.kind !== 'AccessToken') {
179
+ return undefined;
180
+ }
181
+ return {
182
+ typ: 'at+jwt',
183
+ };
184
+ },
185
+ renderError: async (ctx, out, error) => {
186
+ this.logger.error(`oidc-provider renderError: ${error?.name || 'Error'}: ${error?.message || String(error)}`);
187
+ if (error?.stack) {
188
+ this.logger.error(error.stack);
189
+ }
190
+ ctx.type = 'html';
191
+ ctx.body = `<!DOCTYPE html><html><body><pre>${JSON.stringify(out, null, 2)}\n\n${String(error?.stack || error)}</pre></body></html>`;
192
+ ctx.status = 500;
193
+ },
194
+ });
195
+ provider.proxy = true;
196
+ this.provider = provider;
197
+ this.callbackHandler = provider.callback();
198
+ }
199
+ };
200
+ exports.OidcProviderEngineService = OidcProviderEngineService;
201
+ exports.OidcProviderEngineService = OidcProviderEngineService = OidcProviderEngineService_1 = tslib_1.__decorate([
202
+ (0, common_1.Injectable)(),
203
+ tslib_1.__metadata("design:paramtypes", [oauth_client_registry_service_1.OAuthClientRegistryService,
204
+ auth_local_credentials_service_1.AuthLocalCredentialsService,
205
+ token_service_1.TokenService])
206
+ ], OidcProviderEngineService);
207
+ //#endregion
208
+ //# sourceMappingURL=oidc-provider-engine.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc-provider-engine.service.js","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oidc-provider-engine.service.ts"],"names":[],"mappings":"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"}
@@ -3,41 +3,70 @@ import { AuthService } from '../auth/auth.service';
3
3
  import { AuthLocalCredentialsService } from '../auth/auth-local-credentials.service';
4
4
  import { TokenService } from '../auth/token.service';
5
5
  import type { AuthRequestMeta } from '../auth/request-meta.util';
6
- import type { OAuthTokenResponse, PlatformOAuthAuthorizeRequest } from './platform-oauth.types';
6
+ import type { OAuthExchangeResult, PlatformOAuthAuthorizeRequest } from './platform-oauth.types';
7
+ import { OAuthOpService } from './oauth-op.service';
8
+ import { OAuthRpService } from './oauth-rp.service';
9
+ import { OAuthClientRegistryService } from './oauth-client-registry.service';
10
+ export interface PlatformOAuthAuthorizeInitRequest {
11
+ clientId: string;
12
+ redirectUri: string;
13
+ scope: string;
14
+ provider: string;
15
+ issuer: string;
16
+ }
7
17
  export declare class PlatformOAuthService {
8
18
  private readonly auth;
9
19
  private readonly credentials;
10
20
  private readonly tokens;
11
21
  private readonly moduleRef;
12
- private readonly logger;
13
- private readonly authorizationCodes;
14
- private readonly externalStates;
15
- constructor(auth: AuthService, credentials: AuthLocalCredentialsService, tokens: TokenService, moduleRef: ModuleRef);
22
+ private readonly op;
23
+ private readonly rp;
24
+ private readonly clients;
25
+ constructor(auth: AuthService, credentials: AuthLocalCredentialsService, tokens: TokenService, moduleRef: ModuleRef, op: OAuthOpService, rp: OAuthRpService, clients: OAuthClientRegistryService);
16
26
  getDiscoveryDocument(issuer: string): {
17
27
  issuer: string;
18
28
  authorization_endpoint: string;
19
29
  token_endpoint: string;
20
30
  jwks_uri: string;
31
+ userinfo_endpoint: string;
32
+ revocation_endpoint: string;
33
+ end_session_endpoint: string;
21
34
  response_types_supported: string[];
22
35
  grant_types_supported: string[];
23
36
  code_challenge_methods_supported: string[];
24
37
  scopes_supported: string[];
38
+ subject_types_supported: string[];
39
+ id_token_signing_alg_values_supported: string[];
25
40
  };
26
- /** Dev platform broker uses HS256 id_tokens; JWKS is advertised for OIDC discovery clients only. */
41
+ /** JWKS document used by OIDC discovery clients to validate Platform `id_token` signatures. */
27
42
  getJwksDocument(): {
28
- keys: unknown[];
43
+ keys: Array<Record<string, unknown>>;
29
44
  };
45
+ /**
46
+ * Detects first-party federation broker token requests (platform auth codes + platform JWT refresh tokens).
47
+ */
48
+ isBrokerTokenRequest(body: Record<string, string | undefined>): boolean;
49
+ /**
50
+ * BFF entry: server generates PKCE verifier/challenge and returns platform authorize URL.
51
+ * Verifier is stored server-side (never in browser localStorage).
52
+ */
53
+ initAuthorization(input: PlatformOAuthAuthorizeInitRequest): Promise<{
54
+ authorizeUrl: string;
55
+ }>;
30
56
  beginAuthorization(request: PlatformOAuthAuthorizeRequest): Promise<string>;
31
57
  completeExternalCallback(providerKey: string, code: string, state: string): Promise<string>;
32
- exchangeAuthorizationCode(body: Record<string, string | undefined>, meta: AuthRequestMeta): Promise<OAuthTokenResponse>;
58
+ exchangeAuthorizationCode(body: Record<string, string | undefined>, meta: AuthRequestMeta): Promise<OAuthExchangeResult>;
59
+ endSession(input: {
60
+ idTokenHint?: string;
61
+ postLogoutRedirectUri?: string;
62
+ clientId?: string;
63
+ state?: string;
64
+ }): Promise<string | null>;
33
65
  private exchangeRefreshToken;
34
- private exchangeExternalAuthorizationCode;
35
- private parseIdToken;
36
- private assertSupportedAuthorizeRequest;
37
- private assertClientId;
38
- private resolveAllowedClientIds;
66
+ private toOAuthExchangeResult;
39
67
  private requireBrokerConfig;
40
68
  private resolveIdentityProviderCatalog;
41
- private verifyPkce;
69
+ private resolveProfileViaUserInfo;
70
+ private resolveIssuerFromUserInfoUrl;
42
71
  }
43
72
  //# sourceMappingURL=platform-oauth.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-oauth.service.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/platform-oauth.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAEV,kBAAkB,EAGlB,6BAA6B,EAC9B,MAAM,wBAAwB,CAAC;AAIhC,qBACa,oBAAoB;IAM7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsD;IACzF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkD;gBAG9D,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,2BAA2B,EACxC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,SAAS;IAGvC,oBAAoB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;IAcnC,oGAAoG;IACpG,eAAe;cACQ,OAAO,EAAE;;IAG1B,kBAAkB,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC;IAmC3E,wBAAwB,CAC5B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAyCZ,yBAAyB,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACxC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,kBAAkB,CAAC;YAkEhB,oBAAoB;YA2BpB,iCAAiC;IAgD/C,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,+BAA+B;IAoBvC,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;YAYjB,mBAAmB;IAgBjC,OAAO,CAAC,8BAA8B;IAUtC,OAAO,CAAC,UAAU;CAYnB"}
1
+ {"version":3,"file":"platform-oauth.service.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/platform-oauth.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EACV,mBAAmB,EAEnB,6BAA6B,EAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAK7E,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBACa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBANP,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,2BAA2B,EACxC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,0BAA0B;IAGtD,oBAAoB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;IAmBnC,+FAA+F;IAC/F,eAAe;;;IAIf;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO;IAwBvE;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,iCAAiC,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAwB9F,kBAAkB,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3E,wBAAwB,CAC5B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IA6CZ,yBAAyB,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACxC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,mBAAmB,CAAC;IA+DzB,UAAU,CAAC,KAAK,EAAE;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YA2BZ,oBAAoB;IAgClC,OAAO,CAAC,qBAAqB;YAef,mBAAmB;IAgBjC,OAAO,CAAC,8BAA8B;YAUxB,yBAAyB;YA0BzB,4BAA4B;CAkB3C"}