@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,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OAuthClientRegistryService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const core_1 = require("@nestjs/core");
7
+ const crypto_1 = require("crypto");
8
+ const auth_identity_provider_source_1 = require("../auth/auth-identity-provider.source");
9
+ //#region ---- OAuth client registry ----
10
+ const DEFAULT_REGISTERED_CLIENTS = [
11
+ {
12
+ clientId: 'acorex',
13
+ publicClient: true,
14
+ redirectUris: [
15
+ 'http://localhost:4800/auth/oauth-callback',
16
+ 'http://127.0.0.1:4800/auth/oauth-callback',
17
+ ],
18
+ postLogoutRedirectUris: ['http://localhost:4800/', 'http://127.0.0.1:4800/'],
19
+ allowedScopes: ['openid', 'profile', 'email', 'offline_access'],
20
+ allowedGrantTypes: ['authorization_code', 'refresh_token'],
21
+ },
22
+ {
23
+ clientId: 'spa-client',
24
+ publicClient: true,
25
+ redirectUris: [
26
+ 'http://localhost:4800/auth/oauth-callback',
27
+ 'http://127.0.0.1:4800/auth/oauth-callback',
28
+ ],
29
+ postLogoutRedirectUris: ['http://localhost:4800/', 'http://127.0.0.1:4800/'],
30
+ allowedScopes: ['openid', 'profile', 'email', 'offline_access'],
31
+ allowedGrantTypes: ['authorization_code', 'refresh_token'],
32
+ },
33
+ ];
34
+ function parseExtraRedirectUris() {
35
+ const raw = process.env['AUTH_OAUTH_EXTRA_REDIRECT_URIS']?.trim();
36
+ if (!raw) {
37
+ return [];
38
+ }
39
+ return raw
40
+ .split(',')
41
+ .map((value) => value.trim())
42
+ .filter(Boolean);
43
+ }
44
+ function parseExtraPostLogoutRedirectUris() {
45
+ const raw = process.env['AUTH_OAUTH_EXTRA_POST_LOGOUT_REDIRECT_URIS']?.trim();
46
+ if (!raw) {
47
+ return [];
48
+ }
49
+ return raw
50
+ .split(',')
51
+ .map((value) => value.trim())
52
+ .filter(Boolean);
53
+ }
54
+ let OAuthClientRegistryService = class OAuthClientRegistryService {
55
+ constructor(moduleRef) {
56
+ this.moduleRef = moduleRef;
57
+ }
58
+ listClients() {
59
+ try {
60
+ const clients = this.moduleRef.get(auth_identity_provider_source_1.AUTH_OAUTH_REGISTERED_CLIENTS, {
61
+ strict: false,
62
+ });
63
+ if (Array.isArray(clients) && clients.length > 0) {
64
+ return clients;
65
+ }
66
+ }
67
+ catch {
68
+ /* module not loaded */
69
+ }
70
+ return DEFAULT_REGISTERED_CLIENTS;
71
+ }
72
+ getClient(clientId) {
73
+ const normalized = clientId.trim();
74
+ if (!normalized) {
75
+ return null;
76
+ }
77
+ return this.listClients().find((client) => client.clientId === normalized) ?? null;
78
+ }
79
+ assertClientId(clientId) {
80
+ const client = this.getClient(clientId);
81
+ if (!client) {
82
+ throw new common_1.BadRequestException(`Unsupported client_id: ${clientId}`);
83
+ }
84
+ return client;
85
+ }
86
+ /** Seeded + env-extra redirect URIs for a client (OP engine + validation). */
87
+ resolveRedirectUris(clientId) {
88
+ const client = this.assertClientId(clientId);
89
+ return [...new Set([...client.redirectUris, ...parseExtraRedirectUris()])];
90
+ }
91
+ /** Seeded + env-extra post-logout redirect URIs for a client. */
92
+ resolvePostLogoutRedirectUris(clientId) {
93
+ const client = this.assertClientId(clientId);
94
+ return [...new Set([...client.postLogoutRedirectUris, ...parseExtraPostLogoutRedirectUris()])];
95
+ }
96
+ assertRedirectUri(clientId, redirectUri) {
97
+ const normalized = redirectUri.trim();
98
+ const allowed = new Set(this.resolveRedirectUris(clientId));
99
+ if (!allowed.has(normalized)) {
100
+ throw new common_1.BadRequestException('redirect_uri is not registered for this client.');
101
+ }
102
+ }
103
+ assertPostLogoutRedirectUri(clientId, redirectUri) {
104
+ const normalized = redirectUri.trim();
105
+ if (!normalized) {
106
+ throw new common_1.BadRequestException('post_logout_redirect_uri is required.');
107
+ }
108
+ if (clientId?.trim()) {
109
+ const allowed = new Set(this.resolvePostLogoutRedirectUris(clientId));
110
+ if (!allowed.has(normalized)) {
111
+ throw new common_1.BadRequestException('post_logout_redirect_uri is not registered for this client.');
112
+ }
113
+ return;
114
+ }
115
+ const globalAllowed = new Set([
116
+ ...this.listClients().flatMap((client) => client.postLogoutRedirectUris),
117
+ ...parseExtraPostLogoutRedirectUris(),
118
+ ]);
119
+ if (!globalAllowed.has(normalized)) {
120
+ throw new common_1.BadRequestException('post_logout_redirect_uri is not registered.');
121
+ }
122
+ }
123
+ assertGrantType(clientId, grantType) {
124
+ const client = this.assertClientId(clientId);
125
+ const normalized = grantType.trim();
126
+ if (!client.allowedGrantTypes.includes(normalized)) {
127
+ throw new common_1.BadRequestException(`Unsupported grant_type for client: ${grantType}`);
128
+ }
129
+ }
130
+ assertScopes(clientId, scope) {
131
+ if (!scope?.trim()) {
132
+ return;
133
+ }
134
+ const client = this.assertClientId(clientId);
135
+ const requested = scope
136
+ .trim()
137
+ .split(/\s+/)
138
+ .map((part) => part.trim())
139
+ .filter(Boolean);
140
+ for (const part of requested) {
141
+ if (!client.allowedScopes.includes(part)) {
142
+ throw new common_1.BadRequestException(`Unsupported scope for client: ${part}`);
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Validates token-endpoint client authentication.
148
+ * Public PKCE clients skip secret validation; confidential clients require `client_secret`.
149
+ */
150
+ assertTokenEndpointClientAuth(clientId, body) {
151
+ const client = this.assertClientId(clientId);
152
+ if (client.publicClient) {
153
+ return client;
154
+ }
155
+ const providedSecret = this.readClientSecret(body);
156
+ const expectedSecret = client.clientSecret?.trim();
157
+ if (!expectedSecret) {
158
+ throw new common_1.BadRequestException('Confidential client is missing configured client_secret.');
159
+ }
160
+ if (!providedSecret || !this.secretsEqual(providedSecret, expectedSecret)) {
161
+ throw new common_1.UnauthorizedException('Invalid client credentials.');
162
+ }
163
+ return client;
164
+ }
165
+ readClientSecret(body) {
166
+ const fromBody = body['client_secret']?.trim();
167
+ if (fromBody) {
168
+ return fromBody;
169
+ }
170
+ const authHeader = body['authorization']?.trim();
171
+ if (authHeader?.toLowerCase().startsWith('basic ')) {
172
+ const encoded = authHeader.slice(6).trim();
173
+ try {
174
+ const decoded = Buffer.from(encoded, 'base64').toString('utf8');
175
+ const separator = decoded.indexOf(':');
176
+ if (separator >= 0) {
177
+ return decoded.slice(separator + 1);
178
+ }
179
+ }
180
+ catch {
181
+ return undefined;
182
+ }
183
+ }
184
+ return undefined;
185
+ }
186
+ secretsEqual(provided, expected) {
187
+ const providedBuf = Buffer.from(provided);
188
+ const expectedBuf = Buffer.from(expected);
189
+ if (providedBuf.length !== expectedBuf.length) {
190
+ return false;
191
+ }
192
+ return (0, crypto_1.timingSafeEqual)(providedBuf, expectedBuf);
193
+ }
194
+ };
195
+ exports.OAuthClientRegistryService = OAuthClientRegistryService;
196
+ exports.OAuthClientRegistryService = OAuthClientRegistryService = tslib_1.__decorate([
197
+ (0, common_1.Injectable)(),
198
+ tslib_1.__metadata("design:paramtypes", [core_1.ModuleRef])
199
+ ], OAuthClientRegistryService);
200
+ //#endregion
201
+ //# sourceMappingURL=oauth-client-registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-client-registry.service.js","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-client-registry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ArgumentsHost, ExceptionFilter } from '@nestjs/common';
2
+ /**
3
+ * Converts exceptions on OAuth/OIDC connect routes into RFC 6749 error JSON
4
+ * `{ error, error_description }` instead of Nest's default `{ statusCode, message }`.
5
+ */
6
+ export declare class OAuthConnectExceptionFilter implements ExceptionFilter {
7
+ private readonly logger;
8
+ catch(exception: unknown, host: ArgumentsHost): void;
9
+ }
10
+ //# sourceMappingURL=oauth-connect.exception-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-connect.exception-filter.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-connect.exception-filter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EAEb,eAAe,EAIhB,MAAM,gBAAgB,CAAC;AAQxB;;;GAGG;AACH,qBACa,2BAA4B,YAAW,eAAe;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgD;IAEvE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;CAiCrD"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ //#region ---- OAuth connect exception filter ----
3
+ var OAuthConnectExceptionFilter_1;
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.OAuthConnectExceptionFilter = void 0;
6
+ const tslib_1 = require("tslib");
7
+ const common_1 = require("@nestjs/common");
8
+ const oauth_error_util_1 = require("./oauth-error.util");
9
+ /**
10
+ * Converts exceptions on OAuth/OIDC connect routes into RFC 6749 error JSON
11
+ * `{ error, error_description }` instead of Nest's default `{ statusCode, message }`.
12
+ */
13
+ let OAuthConnectExceptionFilter = OAuthConnectExceptionFilter_1 = class OAuthConnectExceptionFilter {
14
+ constructor() {
15
+ this.logger = new common_1.Logger(OAuthConnectExceptionFilter_1.name);
16
+ }
17
+ catch(exception, host) {
18
+ const ctx = host.switchToHttp();
19
+ const res = ctx.getResponse();
20
+ const req = ctx.getRequest();
21
+ if (exception instanceof oauth_error_util_1.OAuthErrorException) {
22
+ const status = exception.getStatus();
23
+ res.status(status).json(exception.getResponse());
24
+ return;
25
+ }
26
+ if (exception instanceof common_1.HttpException) {
27
+ const status = exception.getStatus();
28
+ const body = exception.getResponse();
29
+ const message = (0, oauth_error_util_1.extractExceptionMessage)(body);
30
+ const mapped = (0, oauth_error_util_1.mapHttpExceptionToOAuthError)(status, message, req.path);
31
+ this.logger.warn(`OAuth connect error ${req.method} ${req.path}: ${mapped.error} — ${mapped.error_description}` +
32
+ (message === 'Request failed.' ? ` raw=${safeJson(body)}` : ''));
33
+ res.status(mapped.status).json({
34
+ error: mapped.error,
35
+ error_description: mapped.error_description,
36
+ });
37
+ return;
38
+ }
39
+ this.logger.error(`Unhandled OAuth connect error on ${req.method} ${req.path}`, exception);
40
+ res.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({
41
+ error: 'server_error',
42
+ error_description: 'An unexpected error occurred.',
43
+ });
44
+ }
45
+ };
46
+ exports.OAuthConnectExceptionFilter = OAuthConnectExceptionFilter;
47
+ exports.OAuthConnectExceptionFilter = OAuthConnectExceptionFilter = OAuthConnectExceptionFilter_1 = tslib_1.__decorate([
48
+ (0, common_1.Catch)()
49
+ ], OAuthConnectExceptionFilter);
50
+ function safeJson(value) {
51
+ try {
52
+ return JSON.stringify(value);
53
+ }
54
+ catch {
55
+ return String(value);
56
+ }
57
+ }
58
+ //#endregion
59
+ //# sourceMappingURL=oauth-connect.exception-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-connect.exception-filter.js","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-connect.exception-filter.ts"],"names":[],"mappings":";AAAA,kDAAkD;;;;;AAElD,2CAOwB;AAExB,yDAI4B;AAE5B;;;GAGG;AAEI,IAAM,2BAA2B,mCAAjC,MAAM,2BAA2B;IAAjC;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,6BAA2B,CAAC,IAAI,CAAC,CAAC;IAmCzE,CAAC;IAjCC,KAAK,CAAC,SAAkB,EAAE,IAAmB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAEtC,IAAI,SAAS,YAAY,sCAAmB,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,SAAS,YAAY,sBAAa,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAA,0CAAuB,EAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAA,+CAA4B,EAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,uBAAuB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,iBAAiB,EAAE;gBAC5F,CAAC,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClE,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;aAC5C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3F,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;YAChD,KAAK,EAAE,cAAc;YACrB,iBAAiB,EAAE,+BAA+B;SACnD,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AApCY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,cAAK,GAAE;GACK,2BAA2B,CAoCvC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,YAAY"}
@@ -0,0 +1,23 @@
1
+ import { HttpException } from '@nestjs/common';
2
+ /** RFC 6749 / OIDC error codes used on `/connect/*` responses. */
3
+ export type OAuthErrorCode = 'invalid_request' | 'invalid_client' | 'invalid_grant' | 'invalid_token' | 'unauthorized_client' | 'unsupported_grant_type' | 'invalid_scope' | 'access_denied' | 'server_error' | 'temporarily_unavailable';
4
+ export declare class OAuthErrorException extends HttpException {
5
+ readonly oauthError: OAuthErrorCode;
6
+ constructor(oauthError: OAuthErrorCode, description: string, statusCode?: number);
7
+ }
8
+ export declare function oauthInvalidRequest(description: string): OAuthErrorException;
9
+ export declare function oauthInvalidGrant(description: string): OAuthErrorException;
10
+ export declare function oauthInvalidClient(description: string): OAuthErrorException;
11
+ /** OIDC UserInfo / bearer access-token failures (RFC 6750). */
12
+ export declare function oauthInvalidToken(description: string): OAuthErrorException;
13
+ export declare function oauthUnsupportedGrantType(description: string): OAuthErrorException;
14
+ export declare function oauthAccessDenied(description: string): OAuthErrorException;
15
+ export declare function oauthServerError(description: string): OAuthErrorException;
16
+ /** Map Nest HTTP exceptions thrown by OAuth code to RFC 6749 / RFC 6750 error codes. */
17
+ export declare function mapHttpExceptionToOAuthError(status: number, message: string, path: string): {
18
+ error: OAuthErrorCode;
19
+ error_description: string;
20
+ status: number;
21
+ };
22
+ export declare function extractExceptionMessage(response: string | object): string;
23
+ //# sourceMappingURL=oauth-error.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-error.util.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-error.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,kEAAkE;AAClE,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,qBAAqB,GACrB,wBAAwB,GACxB,eAAe,GACf,eAAe,GACf,cAAc,GACd,yBAAyB,CAAC;AAE9B,qBAAa,mBAAoB,SAAQ,aAAa;aAElC,UAAU,EAAE,cAAc;gBAA1B,UAAU,EAAE,cAAc,EAC1C,WAAW,EAAE,MAAM,EACnB,UAAU,SAAM;CAUnB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAE5E;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAE1E;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAE3E;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAE1E;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAElF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAE1E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAEzE;AAED,wFAAwF;AACxF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAyCtE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAmCzE"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ //#region ---- OAuth error helpers ----
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.OAuthErrorException = void 0;
5
+ exports.oauthInvalidRequest = oauthInvalidRequest;
6
+ exports.oauthInvalidGrant = oauthInvalidGrant;
7
+ exports.oauthInvalidClient = oauthInvalidClient;
8
+ exports.oauthInvalidToken = oauthInvalidToken;
9
+ exports.oauthUnsupportedGrantType = oauthUnsupportedGrantType;
10
+ exports.oauthAccessDenied = oauthAccessDenied;
11
+ exports.oauthServerError = oauthServerError;
12
+ exports.mapHttpExceptionToOAuthError = mapHttpExceptionToOAuthError;
13
+ exports.extractExceptionMessage = extractExceptionMessage;
14
+ const common_1 = require("@nestjs/common");
15
+ class OAuthErrorException extends common_1.HttpException {
16
+ constructor(oauthError, description, statusCode = 400) {
17
+ super({
18
+ error: oauthError,
19
+ error_description: description,
20
+ }, statusCode);
21
+ this.oauthError = oauthError;
22
+ }
23
+ }
24
+ exports.OAuthErrorException = OAuthErrorException;
25
+ function oauthInvalidRequest(description) {
26
+ return new OAuthErrorException('invalid_request', description, 400);
27
+ }
28
+ function oauthInvalidGrant(description) {
29
+ return new OAuthErrorException('invalid_grant', description, 400);
30
+ }
31
+ function oauthInvalidClient(description) {
32
+ return new OAuthErrorException('invalid_client', description, 401);
33
+ }
34
+ /** OIDC UserInfo / bearer access-token failures (RFC 6750). */
35
+ function oauthInvalidToken(description) {
36
+ return new OAuthErrorException('invalid_token', description, 401);
37
+ }
38
+ function oauthUnsupportedGrantType(description) {
39
+ return new OAuthErrorException('unsupported_grant_type', description, 400);
40
+ }
41
+ function oauthAccessDenied(description) {
42
+ return new OAuthErrorException('access_denied', description, 403);
43
+ }
44
+ function oauthServerError(description) {
45
+ return new OAuthErrorException('server_error', description, 500);
46
+ }
47
+ /** Map Nest HTTP exceptions thrown by OAuth code to RFC 6749 / RFC 6750 error codes. */
48
+ function mapHttpExceptionToOAuthError(status, message, path) {
49
+ const onTokenEndpoint = path.includes('/connect/token');
50
+ const onUserInfo = path.includes('/connect/userinfo');
51
+ if (status === 401) {
52
+ if (onUserInfo) {
53
+ return { error: 'invalid_token', error_description: message, status: 401 };
54
+ }
55
+ if (onTokenEndpoint && /client|client_id|credentials/i.test(message)) {
56
+ return { error: 'invalid_client', error_description: message, status: 401 };
57
+ }
58
+ if (/invalid.?token|bearer access token|access token is required/i.test(message)) {
59
+ return { error: 'invalid_token', error_description: message, status: 401 };
60
+ }
61
+ return { error: 'invalid_grant', error_description: message, status: 400 };
62
+ }
63
+ if (status === 403) {
64
+ if (/csrf/i.test(message)) {
65
+ return { error: 'access_denied', error_description: message, status: 403 };
66
+ }
67
+ return { error: 'access_denied', error_description: message, status: 403 };
68
+ }
69
+ if (status === 503) {
70
+ return { error: 'temporarily_unavailable', error_description: message, status: 503 };
71
+ }
72
+ if (status >= 500) {
73
+ return { error: 'server_error', error_description: message, status: 500 };
74
+ }
75
+ if (/unsupported grant/i.test(message)) {
76
+ return { error: 'unsupported_grant_type', error_description: message, status: 400 };
77
+ }
78
+ if (/scope/i.test(message)) {
79
+ return { error: 'invalid_scope', error_description: message, status: 400 };
80
+ }
81
+ return { error: 'invalid_request', error_description: message, status: status >= 400 ? status : 400 };
82
+ }
83
+ function extractExceptionMessage(response) {
84
+ if (typeof response === 'string') {
85
+ return response;
86
+ }
87
+ if (Array.isArray(response.message)) {
88
+ return response.message.join('; ');
89
+ }
90
+ if (typeof response.message === 'string') {
91
+ return response.message;
92
+ }
93
+ if (typeof response.error_description === 'string') {
94
+ return response.error_description;
95
+ }
96
+ // Entity middleware abort: `{ success: false, error: { message, code, ... } }`
97
+ const nestedError = response.error;
98
+ if (nestedError != null && typeof nestedError === 'object') {
99
+ const nestedMessage = nestedError.message;
100
+ if (typeof nestedMessage === 'string' && nestedMessage.trim()) {
101
+ return nestedMessage;
102
+ }
103
+ const nestedCode = nestedError.code;
104
+ if (typeof nestedCode === 'string' && nestedCode.trim()) {
105
+ return nestedCode;
106
+ }
107
+ }
108
+ if (typeof nestedError === 'string' && nestedError.trim()) {
109
+ return nestedError;
110
+ }
111
+ return 'Request failed.';
112
+ }
113
+ //#endregion
114
+ //# sourceMappingURL=oauth-error.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-error.util.js","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-error.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { OAuthCodeRecord, OAuthExternalStateRecord } from './oauth-op.types';
2
+ /**
3
+ * Shared contract for storing OAuth/OIDC authorization codes and external redirect state.
4
+ *
5
+ * Final implementation must be multi-instance safe (no process-memory-only).
6
+ */
7
+ export declare abstract class OAuthGrantStore {
8
+ abstract saveCode(code: string, record: OAuthCodeRecord, ttlMs: number): Promise<void>;
9
+ abstract consumeCode(code: string): Promise<OAuthCodeRecord | null>;
10
+ abstract saveState(state: string, record: OAuthExternalStateRecord, ttlMs: number): Promise<void>;
11
+ abstract consumeState(state: string): Promise<OAuthExternalStateRecord | null>;
12
+ /** BFF server-side PKCE verifier keyed by `code_challenge` until authorize consumes it. */
13
+ abstract savePkceVerifier(codeChallenge: string, codeVerifier: string, ttlMs: number): Promise<void>;
14
+ abstract consumePkceVerifier(codeChallenge: string): Promise<string | null>;
15
+ }
16
+ //# sourceMappingURL=oauth-grant-store.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-grant-store.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-grant-store.interface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAElF;;;;GAIG;AACH,8BAAsB,eAAe;IACnC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtF,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAEnE,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAE9E,2FAA2F;IAC3F,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACpG,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAC5E"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ //#region ---- OAuth grant store ----
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.OAuthGrantStore = void 0;
5
+ /**
6
+ * Shared contract for storing OAuth/OIDC authorization codes and external redirect state.
7
+ *
8
+ * Final implementation must be multi-instance safe (no process-memory-only).
9
+ */
10
+ class OAuthGrantStore {
11
+ }
12
+ exports.OAuthGrantStore = OAuthGrantStore;
13
+ //#endregion
14
+ //# sourceMappingURL=oauth-grant-store.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-grant-store.interface.js","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-grant-store.interface.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;AAIrC;;;;GAIG;AACH,MAAsB,eAAe;CAUpC;AAVD,0CAUC;AAED,YAAY"}
@@ -0,0 +1,7 @@
1
+ import type { Request } from 'express';
2
+ /**
3
+ * Resolves the platform OAuth issuer URL.
4
+ * Prefer `AUTH_OAUTH_ISSUER` so discovery, ID Token `iss`, and authorize stay consistent.
5
+ */
6
+ export declare function resolveOAuthIssuer(req?: Request): string;
7
+ //# sourceMappingURL=oauth-issuer.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-issuer.util.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-issuer.util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAgBxD"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ //#region ---- OAuth issuer resolution ----
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.resolveOAuthIssuer = resolveOAuthIssuer;
5
+ /**
6
+ * Resolves the platform OAuth issuer URL.
7
+ * Prefer `AUTH_OAUTH_ISSUER` so discovery, ID Token `iss`, and authorize stay consistent.
8
+ */
9
+ function resolveOAuthIssuer(req) {
10
+ const configured = process.env['AUTH_OAUTH_ISSUER']?.trim()?.replace(/\/$/, '');
11
+ if (configured) {
12
+ return configured;
13
+ }
14
+ if (req) {
15
+ const forwardedProto = req.headers['x-forwarded-proto'];
16
+ const protoHeader = Array.isArray(forwardedProto) ? forwardedProto[0] : forwardedProto;
17
+ const proto = (protoHeader?.split(',')[0] || req.protocol || 'http').trim();
18
+ const host = (req.get('host') || 'localhost:5500').trim();
19
+ return `${proto}://${host}/api`;
20
+ }
21
+ const port = process.env['PORT']?.trim() || '5500';
22
+ return `http://localhost:${port}/api`;
23
+ }
24
+ //#endregion
25
+ //# sourceMappingURL=oauth-issuer.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-issuer.util.js","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-issuer.util.ts"],"names":[],"mappings":";AAAA,2CAA2C;;AAQ3C,gDAgBC;AApBD;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,GAAa;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QACvF,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,GAAG,KAAK,MAAM,IAAI,MAAM,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC;IACnD,OAAO,oBAAoB,IAAI,MAAM,CAAC;AACxC,CAAC;AAED,YAAY"}
@@ -0,0 +1,35 @@
1
+ import { ModuleRef } from '@nestjs/core';
2
+ import { OAuthClientRegistryService } from './oauth-client-registry.service';
3
+ import { OAuthRpService } from './oauth-rp.service';
4
+ import { OAuthGrantStore } from './oauth-grant-store.interface';
5
+ import type { OAuthCodeRecord, OAuthExternalStateRecord } from './oauth-op.types';
6
+ import type { PlatformOAuthAuthorizeRequest } from './platform-oauth.types';
7
+ export declare class OAuthOpService {
8
+ private readonly grants;
9
+ private readonly rp;
10
+ private readonly clients;
11
+ private readonly moduleRef;
12
+ private readonly authorizationCodeTtlMs;
13
+ constructor(grants: OAuthGrantStore, rp: OAuthRpService, clients: OAuthClientRegistryService, moduleRef: ModuleRef);
14
+ beginAuthorization(request: PlatformOAuthAuthorizeRequest): Promise<{
15
+ externalState: string;
16
+ externalUrl: string;
17
+ }>;
18
+ issueCode(input: Omit<OAuthCodeRecord, 'expiresAt'> & {
19
+ expiresAt?: number;
20
+ }): Promise<string>;
21
+ consumeCode(input: {
22
+ code: string;
23
+ clientId: string;
24
+ redirectUri: string;
25
+ codeVerifier?: string;
26
+ }): Promise<OAuthCodeRecord>;
27
+ saveExternalState(state: string, record: OAuthExternalStateRecord): Promise<void>;
28
+ consumeExternalState(state: string): Promise<OAuthExternalStateRecord>;
29
+ stagePkceVerifier(codeChallenge: string, codeVerifier: string): Promise<void>;
30
+ private requireBrokerConfig;
31
+ private resolveIdentityProviderCatalog;
32
+ private assertSupportedAuthorizeRequest;
33
+ private verifyPkce;
34
+ }
35
+ //# sourceMappingURL=oauth-op.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-op.service.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/framework/server/security/src/lib/oauth/oauth-op.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAQ5E,qBACa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA8B;gBAGlD,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,SAAS;IAGjC,kBAAkB,CACtB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAmCpD,SAAS,CACb,KAAK,EAAE,IAAI,CACT,eAAe,EACf,WAAW,CACZ,GAAG;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC,MAAM,CAAC;IAgBZ,WAAW,CAAC,KAAK,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBtB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjF,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQtE,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIrE,mBAAmB;IAgBjC,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,+BAA+B;IAsBvC,OAAO,CAAC,UAAU;CAYnB"}