@lenne.tech/nest-server 11.41.2 → 11.41.4

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 (103) hide show
  1. package/.claude/rules/architecture.md +1 -0
  2. package/.claude/rules/configurable-features.md +1 -0
  3. package/.claude/rules/role-system.md +15 -1
  4. package/.claude/rules/testing.md +16 -4
  5. package/CLAUDE.md +2 -1
  6. package/FRAMEWORK-API.md +4 -1
  7. package/dist/core/common/helpers/graceful-shutdown.helper.js.map +1 -1
  8. package/dist/core/common/helpers/logging.helper.js +2 -0
  9. package/dist/core/common/helpers/logging.helper.js.map +1 -1
  10. package/dist/core/common/helpers/process-diagnostics.helper.js.map +1 -1
  11. package/dist/core/common/interfaces/server-options.interface.d.ts +20 -0
  12. package/dist/core/modules/ai/helpers/ai-mcp-oauth.helper.d.ts +2 -2
  13. package/dist/core/modules/ai/helpers/ai-mcp-oauth.helper.js +46 -6
  14. package/dist/core/modules/ai/helpers/ai-mcp-oauth.helper.js.map +1 -1
  15. package/dist/core/modules/ai/services/core-ai-mcp-oauth.service.js +7 -1
  16. package/dist/core/modules/ai/services/core-ai-mcp-oauth.service.js.map +1 -1
  17. package/dist/core/modules/api-token/core-api-token.constants.d.ts +6 -0
  18. package/dist/core/modules/api-token/core-api-token.constants.js +11 -0
  19. package/dist/core/modules/api-token/core-api-token.constants.js.map +1 -0
  20. package/dist/core/modules/api-token/core-api-token.decorators.d.ts +1 -0
  21. package/dist/core/modules/api-token/core-api-token.decorators.js +8 -0
  22. package/dist/core/modules/api-token/core-api-token.decorators.js.map +1 -0
  23. package/dist/core/modules/api-token/core-api-token.helpers.d.ts +127 -0
  24. package/dist/core/modules/api-token/core-api-token.helpers.js +398 -0
  25. package/dist/core/modules/api-token/core-api-token.helpers.js.map +1 -0
  26. package/dist/core/modules/api-token/core-api-token.middleware.d.ts +10 -0
  27. package/dist/core/modules/api-token/core-api-token.middleware.js +58 -0
  28. package/dist/core/modules/api-token/core-api-token.middleware.js.map +1 -0
  29. package/dist/core/modules/api-token/core-api-token.model.d.ts +20 -0
  30. package/dist/core/modules/api-token/core-api-token.model.js +199 -0
  31. package/dist/core/modules/api-token/core-api-token.model.js.map +1 -0
  32. package/dist/core/modules/api-token/core-api-token.module.d.ts +11 -0
  33. package/dist/core/modules/api-token/core-api-token.module.js +39 -0
  34. package/dist/core/modules/api-token/core-api-token.module.js.map +1 -0
  35. package/dist/core/modules/api-token/core-api-token.registry.d.ts +9 -0
  36. package/dist/core/modules/api-token/core-api-token.registry.js +17 -0
  37. package/dist/core/modules/api-token/core-api-token.registry.js.map +1 -0
  38. package/dist/core/modules/api-token/core-api-token.service.d.ts +104 -0
  39. package/dist/core/modules/api-token/core-api-token.service.js +550 -0
  40. package/dist/core/modules/api-token/core-api-token.service.js.map +1 -0
  41. package/dist/core/modules/auth/guards/roles.guard.js +17 -1
  42. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  43. package/dist/core/modules/better-auth/better-auth-roles.guard.js +12 -2
  44. package/dist/core/modules/better-auth/better-auth-roles.guard.js.map +1 -1
  45. package/dist/core/modules/better-auth/core-better-auth.middleware.js +4 -0
  46. package/dist/core/modules/better-auth/core-better-auth.middleware.js.map +1 -1
  47. package/dist/core/modules/better-auth/core-better-auth.module.d.ts +4 -0
  48. package/dist/core/modules/better-auth/core-better-auth.module.js +18 -0
  49. package/dist/core/modules/better-auth/core-better-auth.module.js.map +1 -1
  50. package/dist/core/modules/tenant/core-tenant-guard.registry.d.ts +2 -0
  51. package/dist/core/modules/tenant/core-tenant-guard.registry.js +19 -0
  52. package/dist/core/modules/tenant/core-tenant-guard.registry.js.map +1 -0
  53. package/dist/core/modules/tenant/core-tenant.guard.d.ts +1 -0
  54. package/dist/core/modules/tenant/core-tenant.guard.js +28 -12
  55. package/dist/core/modules/tenant/core-tenant.guard.js.map +1 -1
  56. package/dist/core/modules/tenant/core-tenant.helpers.d.ts +1 -0
  57. package/dist/core/modules/tenant/core-tenant.helpers.js +19 -0
  58. package/dist/core/modules/tenant/core-tenant.helpers.js.map +1 -1
  59. package/dist/core/modules/tenant/core-tenant.module.d.ts +5 -2
  60. package/dist/core/modules/tenant/core-tenant.module.js +8 -0
  61. package/dist/core/modules/tenant/core-tenant.module.js.map +1 -1
  62. package/dist/core/modules/user/core-user.service.js +7 -0
  63. package/dist/core/modules/user/core-user.service.js.map +1 -1
  64. package/dist/core.module.js +6 -0
  65. package/dist/core.module.js.map +1 -1
  66. package/dist/index.d.ts +7 -0
  67. package/dist/index.js +7 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/tsconfig.build.tsbuildinfo +1 -1
  70. package/docs/REQUEST-LIFECYCLE.md +49 -1
  71. package/docs/security-overrides.md +16 -10
  72. package/migration-guides/11.41.3-to-11.41.4.md +172 -0
  73. package/package.json +38 -37
  74. package/src/core/common/helpers/graceful-shutdown.helper.ts +9 -0
  75. package/src/core/common/helpers/logging.helper.ts +7 -0
  76. package/src/core/common/helpers/process-diagnostics.helper.ts +4 -0
  77. package/src/core/common/interfaces/server-options.interface.ts +110 -0
  78. package/src/core/modules/ai/INTEGRATION-CHECKLIST.md +17 -10
  79. package/src/core/modules/ai/README.md +9 -1
  80. package/src/core/modules/ai/helpers/ai-mcp-oauth.helper.ts +74 -7
  81. package/src/core/modules/ai/services/core-ai-mcp-oauth.service.ts +13 -1
  82. package/src/core/modules/api-token/INTEGRATION-CHECKLIST.md +121 -0
  83. package/src/core/modules/api-token/README.md +212 -0
  84. package/src/core/modules/api-token/core-api-token.constants.ts +27 -0
  85. package/src/core/modules/api-token/core-api-token.decorators.ts +29 -0
  86. package/src/core/modules/api-token/core-api-token.helpers.ts +711 -0
  87. package/src/core/modules/api-token/core-api-token.middleware.ts +57 -0
  88. package/src/core/modules/api-token/core-api-token.model.ts +193 -0
  89. package/src/core/modules/api-token/core-api-token.module.ts +48 -0
  90. package/src/core/modules/api-token/core-api-token.registry.ts +53 -0
  91. package/src/core/modules/api-token/core-api-token.service.ts +822 -0
  92. package/src/core/modules/auth/guards/roles.guard.ts +23 -2
  93. package/src/core/modules/better-auth/better-auth-roles.guard.ts +18 -4
  94. package/src/core/modules/better-auth/core-better-auth.middleware.ts +8 -0
  95. package/src/core/modules/better-auth/core-better-auth.module.ts +33 -0
  96. package/src/core/modules/tenant/README.md +17 -0
  97. package/src/core/modules/tenant/core-tenant-guard.registry.ts +36 -0
  98. package/src/core/modules/tenant/core-tenant.guard.ts +52 -12
  99. package/src/core/modules/tenant/core-tenant.helpers.ts +30 -0
  100. package/src/core/modules/tenant/core-tenant.module.ts +19 -2
  101. package/src/core/modules/user/core-user.service.ts +14 -0
  102. package/src/core.module.ts +12 -0
  103. package/src/index.ts +12 -0
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.API_TOKEN_HEADER = exports.API_TOKEN_MAX_ASSERTION_LENGTH = exports.API_TOKEN_CLOCK_TOLERANCE_SECONDS = exports.API_TOKEN_DEFAULTS = void 0;
4
+ exports.resolveApiTokenConfig = resolveApiTokenConfig;
5
+ exports.getApiTokenConfig = getApiTokenConfig;
6
+ exports.getApiTokenTenantMemberRole = getApiTokenTenantMemberRole;
7
+ exports.getApiTokenManageRole = getApiTokenManageRole;
8
+ exports.resolveApiTokenEncryptionKey = resolveApiTokenEncryptionKey;
9
+ exports.assertApiTokenConfigIsUsable = assertApiTokenConfigIsUsable;
10
+ exports.readApiTokenCredential = readApiTokenCredential;
11
+ exports.readApiTokenCredentialFromHeaders = readApiTokenCredentialFromHeaders;
12
+ exports.hasApiTokenCredential = hasApiTokenCredential;
13
+ exports.generateApiToken = generateApiToken;
14
+ exports.parseApiToken = parseApiToken;
15
+ exports.hashApiTokenSecret = hashApiTokenSecret;
16
+ exports.safeEqualHex = safeEqualHex;
17
+ exports.generateApiTokenSigningKey = generateApiTokenSigningKey;
18
+ exports.signApiTokenAssertion = signApiTokenAssertion;
19
+ exports.decodeApiTokenAssertion = decodeApiTokenAssertion;
20
+ exports.verifyApiTokenAssertionSignature = verifyApiTokenAssertionSignature;
21
+ exports.checkApiTokenAssertionTiming = checkApiTokenAssertionTiming;
22
+ exports.getApiTokenContext = getApiTokenContext;
23
+ exports.attachApiTokenContext = attachApiTokenContext;
24
+ exports.createTenantApiTokenPrincipal = createTenantApiTokenPrincipal;
25
+ exports.isTenantApiTokenPrincipal = isTenantApiTokenPrincipal;
26
+ exports.assertApiTokenScopes = assertApiTokenScopes;
27
+ exports.assertTenantApiTokenRouteAccess = assertTenantApiTokenRouteAccess;
28
+ exports.enforceApiTokenRoute = enforceApiTokenRoute;
29
+ exports.getApiTokenTenantRestriction = getApiTokenTenantRestriction;
30
+ exports.capApiTokenTenantRole = capApiTokenTenantRole;
31
+ const node_crypto_1 = require("node:crypto");
32
+ const common_1 = require("@nestjs/common");
33
+ const role_enum_1 = require("../../common/enums/role.enum");
34
+ const cookies_helper_1 = require("../../common/helpers/cookies.helper");
35
+ const config_service_1 = require("../../common/services/config.service");
36
+ const error_codes_1 = require("../error-code/error-codes");
37
+ const core_tenant_enums_1 = require("../tenant/core-tenant.enums");
38
+ const core_tenant_helpers_1 = require("../tenant/core-tenant.helpers");
39
+ const core_api_token_constants_1 = require("./core-api-token.constants");
40
+ exports.API_TOKEN_DEFAULTS = {
41
+ maxAssertionLifetimeSeconds: 900,
42
+ prefix: 'ltt',
43
+ rateLimit: { max: 600, windowSeconds: 60 },
44
+ };
45
+ exports.API_TOKEN_CLOCK_TOLERANCE_SECONDS = 30;
46
+ exports.API_TOKEN_MAX_ASSERTION_LENGTH = 8192;
47
+ exports.API_TOKEN_HEADER = 'x-api-key';
48
+ const PREFIX_PATTERN = /^[a-z][a-z0-9]{1,15}$/;
49
+ const SCOPE_PATTERN = /^[A-Za-z0-9:._-]{1,64}$/;
50
+ const PUBLIC_ID_PATTERN = /^[0-9a-f]{24}$/;
51
+ const BASE64URL_PATTERN = /^[A-Za-z0-9_-]+$/;
52
+ function resolveApiTokenConfig(config) {
53
+ const raw = config?.apiTokens;
54
+ const options = typeof raw === 'object' && raw !== null ? raw : {};
55
+ const enabled = raw === true || (typeof raw === 'object' && raw !== null && raw.enabled !== false);
56
+ const multiTenancy = !!config?.multiTenancy && config.multiTenancy.enabled !== false;
57
+ const lifetime = Number(options.maxAssertionLifetimeSeconds);
58
+ return {
59
+ enabled,
60
+ encryptionKey: typeof options.encryptionKey === 'string' && options.encryptionKey ? options.encryptionKey : undefined,
61
+ manageRole: typeof options.manageRole === 'string' && options.manageRole ? options.manageRole : undefined,
62
+ maxAssertionLifetimeSeconds: options.maxAssertionLifetimeSeconds !== null &&
63
+ typeof options.maxAssertionLifetimeSeconds !== 'boolean' &&
64
+ Number.isFinite(lifetime) &&
65
+ lifetime > 0
66
+ ? Math.floor(lifetime)
67
+ : exports.API_TOKEN_DEFAULTS.maxAssertionLifetimeSeconds,
68
+ multiTenancy,
69
+ prefix: typeof options.prefix === 'string' ? options.prefix : exports.API_TOKEN_DEFAULTS.prefix,
70
+ rateLimit: resolveRateLimit(options.rateLimit),
71
+ scopes: Array.isArray(options.scopes) ? [...options.scopes] : [],
72
+ tenantTokens: enabled && multiTenancy && options.tenantTokens !== false,
73
+ userTokens: enabled && options.userTokens !== false,
74
+ };
75
+ }
76
+ function resolveRateLimit(value) {
77
+ if (value === false || (typeof value === 'object' && value !== null && value.enabled === false)) {
78
+ return false;
79
+ }
80
+ const options = typeof value === 'object' && value !== null ? value : {};
81
+ const max = Number(options.max);
82
+ const windowSeconds = Number(options.windowSeconds);
83
+ return {
84
+ max: Number.isFinite(max) && max > 0 ? Math.floor(max) : exports.API_TOKEN_DEFAULTS.rateLimit.max,
85
+ windowSeconds: Number.isFinite(windowSeconds) && windowSeconds > 0
86
+ ? Math.floor(windowSeconds)
87
+ : exports.API_TOKEN_DEFAULTS.rateLimit.windowSeconds,
88
+ };
89
+ }
90
+ function getApiTokenConfig() {
91
+ return resolveApiTokenConfig(config_service_1.ConfigService.configFastButReadOnly);
92
+ }
93
+ function hierarchy() {
94
+ return config_service_1.ConfigService.configFastButReadOnly?.multiTenancy?.roleHierarchy ?? core_tenant_enums_1.DEFAULT_ROLE_HIERARCHY;
95
+ }
96
+ function getApiTokenTenantMemberRole() {
97
+ const entries = Object.entries(hierarchy());
98
+ if (entries.length === 0) {
99
+ return 'member';
100
+ }
101
+ return entries.reduce((a, b) => (a[1] <= b[1] ? a : b))[0];
102
+ }
103
+ function getApiTokenManageRole(config = getApiTokenConfig()) {
104
+ if (config.manageRole) {
105
+ return config.manageRole;
106
+ }
107
+ const entries = Object.entries(hierarchy());
108
+ if (entries.length === 0) {
109
+ return 'owner';
110
+ }
111
+ return entries.reduce((a, b) => (a[1] >= b[1] ? a : b))[0];
112
+ }
113
+ function resolveApiTokenEncryptionKey(config = getApiTokenConfig()) {
114
+ return config.encryptionKey || process.env.SECRETS_ENCRYPTION_KEY || undefined;
115
+ }
116
+ function assertApiTokenConfigIsUsable() {
117
+ const config = getApiTokenConfig();
118
+ if (!config.enabled) {
119
+ return;
120
+ }
121
+ if (!PREFIX_PATTERN.test(config.prefix)) {
122
+ throw new Error(`apiTokens.prefix "${config.prefix}" is invalid: use 2-16 lowercase letters and digits, starting with ` +
123
+ 'a letter. The prefix is how the server tells a token apart from every other credential.');
124
+ }
125
+ const invalidScopes = config.scopes.filter((scope) => typeof scope !== 'string' || !SCOPE_PATTERN.test(scope));
126
+ if (invalidScopes.length) {
127
+ throw new Error(`apiTokens.scopes contains invalid scope(s) ${JSON.stringify(invalidScopes)}: ` +
128
+ 'use 1-64 characters of letters, digits, ":", ".", "_" or "-".');
129
+ }
130
+ if (config.tenantTokens) {
131
+ const multiTenancy = config_service_1.ConfigService.configFastButReadOnly?.multiTenancy;
132
+ const declared = new Set([...Object.keys(hierarchy()), ...(multiTenancy?.additionalMembershipRoles ?? [])]);
133
+ const manageRole = getApiTokenManageRole(config);
134
+ if ((0, role_enum_1.isForbiddenMembershipRole)(manageRole) || !declared.has(manageRole)) {
135
+ throw new Error(`apiTokens.manageRole "${manageRole}" is not a declared tenant role. ` +
136
+ `Declared: [${[...declared].sort().join(', ')}]. Managing tenant tokens is a tenant right, so it ` +
137
+ 'needs a role from roleHierarchy or additionalMembershipRoles — never a global or system role.');
138
+ }
139
+ const levels = hierarchy();
140
+ const memberRole = getApiTokenTenantMemberRole();
141
+ if (manageRole in levels && levels[memberRole] >= levels[manageRole]) {
142
+ throw new Error(`apiTokens needs a tenant role hierarchy with a role below "${manageRole}": a tenant token acts with ` +
143
+ `the lowest role ("${memberRole}"), and in this hierarchy that role already reaches the role that ` +
144
+ 'manages tokens — a token would count as a tenant administrator. Set apiTokens.tenantTokens: false ' +
145
+ 'if you only need user tokens.');
146
+ }
147
+ }
148
+ if ((0, cookies_helper_1.isProductionLikeEnv)(config_service_1.ConfigService.configFastButReadOnly?.env) && !resolveApiTokenEncryptionKey(config)) {
149
+ throw new Error('apiTokens.encryptionKey (or SECRETS_ENCRYPTION_KEY) is required in production/staging. ' +
150
+ 'Without it, the signing keys of all tokens are encrypted with a public development default. ' +
151
+ 'Set a random value of 32+ characters.');
152
+ }
153
+ }
154
+ function classify(value, prefix) {
155
+ if (value.startsWith(`${prefix}_`)) {
156
+ return { kind: 'token', value };
157
+ }
158
+ if (value.startsWith(`${prefix}s_`)) {
159
+ return { kind: 'assertion', value };
160
+ }
161
+ return undefined;
162
+ }
163
+ function readApiTokenCredential(authorization, prefix) {
164
+ if (typeof authorization !== 'string') {
165
+ return undefined;
166
+ }
167
+ const match = /^bearer\s+(\S+)\s*$/i.exec(authorization);
168
+ return match ? classify(match[1], prefix) : undefined;
169
+ }
170
+ function readApiTokenCredentialFromHeaders(headers, prefix) {
171
+ const fromAuthorization = readApiTokenCredential(headers?.authorization, prefix);
172
+ const apiKeyHeader = headers?.[exports.API_TOKEN_HEADER];
173
+ const fromApiKey = typeof apiKeyHeader === 'string' ? classify(apiKeyHeader.trim(), prefix) : undefined;
174
+ if (fromAuthorization && fromApiKey && fromAuthorization.value !== fromApiKey.value) {
175
+ return 'conflict';
176
+ }
177
+ return fromAuthorization ?? fromApiKey;
178
+ }
179
+ function hasApiTokenCredential(request) {
180
+ const config = getApiTokenConfig();
181
+ return config.enabled && !!readApiTokenCredentialFromHeaders(request?.headers, config.prefix);
182
+ }
183
+ function generateApiToken(prefix) {
184
+ const publicId = (0, node_crypto_1.randomBytes)(12).toString('hex');
185
+ const secret = (0, node_crypto_1.randomBytes)(32).toString('hex');
186
+ return { publicId, secret, token: `${prefix}_${publicId}_${secret}` };
187
+ }
188
+ function parseApiToken(value, prefix) {
189
+ if (!PREFIX_PATTERN.test(prefix)) {
190
+ return undefined;
191
+ }
192
+ const match = new RegExp(`^${prefix}_([0-9a-f]{24})_([0-9a-f]{64})$`).exec(value ?? '');
193
+ return match ? { publicId: match[1], secret: match[2] } : undefined;
194
+ }
195
+ function hashApiTokenSecret(secret) {
196
+ return (0, node_crypto_1.createHash)('sha256').update(secret, 'utf8').digest('hex');
197
+ }
198
+ function safeEqualHex(a, b) {
199
+ const left = Buffer.from(a ?? '', 'hex');
200
+ const right = Buffer.from(b ?? '', 'hex');
201
+ return left.length > 0 && left.length === right.length && (0, node_crypto_1.timingSafeEqual)(left, right);
202
+ }
203
+ function generateApiTokenSigningKey() {
204
+ return (0, node_crypto_1.randomBytes)(32).toString('hex');
205
+ }
206
+ function signApiTokenAssertion(options) {
207
+ const prefix = options.prefix ?? exports.API_TOKEN_DEFAULTS.prefix;
208
+ const expiresAtMs = options.expiresAt !== undefined
209
+ ? new Date(options.expiresAt).getTime()
210
+ : Date.now() + (options.expiresInSeconds ?? 300) * 1000;
211
+ const payload = {};
212
+ if (options.claims !== undefined)
213
+ payload.claims = options.claims;
214
+ payload.exp = Math.floor(expiresAtMs / 1000);
215
+ if (options.nonce !== undefined)
216
+ payload.nonce = options.nonce;
217
+ if (options.subject !== undefined)
218
+ payload.sub = options.subject;
219
+ payload.tid = options.publicId;
220
+ const payloadSegment = Buffer.from(JSON.stringify(payload), 'utf8').toString('base64url');
221
+ return `${prefix}s_${payloadSegment}.${signAssertionPayload(payloadSegment, options.signingKey).toString('base64url')}`;
222
+ }
223
+ function signAssertionPayload(payloadSegment, signingKey) {
224
+ return (0, node_crypto_1.createHmac)('sha256', Buffer.from(signingKey, 'utf8')).update(payloadSegment, 'ascii').digest();
225
+ }
226
+ function decodeApiTokenAssertion(value, prefix) {
227
+ const head = `${prefix}s_`;
228
+ if (typeof value !== 'string' || value.length > exports.API_TOKEN_MAX_ASSERTION_LENGTH || !value.startsWith(head)) {
229
+ return undefined;
230
+ }
231
+ const parts = value.slice(head.length).split('.');
232
+ if (parts.length !== 2) {
233
+ return undefined;
234
+ }
235
+ const [payloadSegment, signature] = parts;
236
+ if (!BASE64URL_PATTERN.test(payloadSegment) || !BASE64URL_PATTERN.test(signature)) {
237
+ return undefined;
238
+ }
239
+ let payload;
240
+ try {
241
+ payload = JSON.parse(Buffer.from(payloadSegment, 'base64url').toString('utf8'));
242
+ }
243
+ catch {
244
+ return undefined;
245
+ }
246
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
247
+ return undefined;
248
+ }
249
+ if (typeof payload.tid !== 'string' || !PUBLIC_ID_PATTERN.test(payload.tid) || !Number.isInteger(payload.exp)) {
250
+ return undefined;
251
+ }
252
+ for (const field of ['sub', 'nonce']) {
253
+ if (payload[field] !== undefined && (typeof payload[field] !== 'string' || payload[field].length > 256)) {
254
+ return undefined;
255
+ }
256
+ }
257
+ if (payload.claims !== undefined &&
258
+ (payload.claims === null || typeof payload.claims !== 'object' || Array.isArray(payload.claims))) {
259
+ return undefined;
260
+ }
261
+ return {
262
+ payload: { claims: payload.claims, exp: payload.exp, nonce: payload.nonce, sub: payload.sub, tid: payload.tid },
263
+ payloadSegment,
264
+ signature,
265
+ };
266
+ }
267
+ function verifyApiTokenAssertionSignature(payloadSegment, signature, signingKey) {
268
+ const expected = signAssertionPayload(payloadSegment, signingKey);
269
+ const provided = Buffer.from(signature, 'base64url');
270
+ return provided.length === expected.length && (0, node_crypto_1.timingSafeEqual)(provided, expected);
271
+ }
272
+ function checkApiTokenAssertionTiming(payload, maxLifetimeSeconds, now = Date.now()) {
273
+ const nowSeconds = Math.floor(now / 1000);
274
+ if (payload.exp + exports.API_TOKEN_CLOCK_TOLERANCE_SECONDS < nowSeconds) {
275
+ return 'expired';
276
+ }
277
+ if (payload.exp - nowSeconds > maxLifetimeSeconds + exports.API_TOKEN_CLOCK_TOLERANCE_SECONDS) {
278
+ return 'too-long';
279
+ }
280
+ return 'ok';
281
+ }
282
+ const API_TOKEN_CONTEXT = Symbol('apiTokenContext');
283
+ function getApiTokenContext(user) {
284
+ return user && typeof user === 'object' ? user[API_TOKEN_CONTEXT] : undefined;
285
+ }
286
+ function attachApiTokenContext(user, context) {
287
+ user[API_TOKEN_CONTEXT] = Object.freeze({ ...context, scopes: [...context.scopes] });
288
+ return user;
289
+ }
290
+ function createTenantApiTokenPrincipal(context) {
291
+ const principal = {
292
+ hasRole: () => false,
293
+ id: context.tokenId,
294
+ name: context.name,
295
+ roles: [],
296
+ scopes: [...context.scopes],
297
+ tenantId: context.tenantId,
298
+ };
299
+ return attachApiTokenContext(principal, { ...context, kind: core_api_token_constants_1.ApiTokenKind.TENANT });
300
+ }
301
+ function isTenantApiTokenPrincipal(user) {
302
+ return getApiTokenContext(user)?.kind === core_api_token_constants_1.ApiTokenKind.TENANT;
303
+ }
304
+ function denied() {
305
+ return new common_1.ForbiddenException(error_codes_1.ErrorCode.ACCESS_DENIED);
306
+ }
307
+ function tenantHeaderName() {
308
+ return (config_service_1.ConfigService.configFastButReadOnly?.multiTenancy?.headerName ?? 'x-tenant-id').toLowerCase();
309
+ }
310
+ function assertApiTokenScopes(context, handler, controllerClass) {
311
+ const handlerScopes = handler
312
+ ? Reflect.getMetadata(core_api_token_constants_1.API_TOKEN_SCOPES_KEY, handler)
313
+ : undefined;
314
+ const requiredScopes = handlerScopes ??
315
+ (controllerClass
316
+ ? Reflect.getMetadata(core_api_token_constants_1.API_TOKEN_SCOPES_KEY, controllerClass)
317
+ : undefined);
318
+ if (!requiredScopes?.length || !requiredScopes.some((scope) => context.scopes.includes(scope))) {
319
+ throw denied();
320
+ }
321
+ }
322
+ function assertTenantApiTokenRouteAccess(options) {
323
+ const { context, controllerClass, handler, request } = options;
324
+ const handlerRoles = handler ? Reflect.getMetadata('roles', handler) : undefined;
325
+ const classRoles = controllerClass
326
+ ? Reflect.getMetadata('roles', controllerClass)
327
+ : undefined;
328
+ const roles = (0, core_tenant_helpers_1.mergeRolesMetadata)([handlerRoles, classRoles]);
329
+ if (roles.includes(role_enum_1.RoleEnum.S_NO_ONE)) {
330
+ throw denied();
331
+ }
332
+ const systemCheckRoles = handlerRoles?.length ? handlerRoles : roles;
333
+ const memberRole = getApiTokenTenantMemberRole();
334
+ const openedBySystemRole = [role_enum_1.RoleEnum.S_EVERYONE, role_enum_1.RoleEnum.S_USER, role_enum_1.RoleEnum.S_VERIFIED].some((role) => systemCheckRoles.includes(role));
335
+ if (!openedBySystemRole) {
336
+ const checkable = roles.filter((role) => !(0, core_tenant_helpers_1.isSystemRole)(role));
337
+ if (roles.length && !checkable.length) {
338
+ throw denied();
339
+ }
340
+ if (checkable.length) {
341
+ const tenantRoles = (0, core_tenant_helpers_1.tenantSatisfiableRoles)(checkable);
342
+ if (!tenantRoles.length || !(0, core_tenant_helpers_1.checkRoleAccess)(tenantRoles, undefined, memberRole)) {
343
+ throw denied();
344
+ }
345
+ }
346
+ }
347
+ assertTenantHeaderMatches(request, context.tenantId);
348
+ if (request) {
349
+ request.tenantId = context.tenantId;
350
+ request.tenantRole = memberRole;
351
+ request.isAdminBypass = false;
352
+ request.tenantIds = undefined;
353
+ }
354
+ }
355
+ function assertTenantHeaderMatches(request, tenantId) {
356
+ const header = request?.headers?.[tenantHeaderName()];
357
+ if (header !== undefined && (typeof header !== 'string' || header.trim() !== tenantId)) {
358
+ throw denied();
359
+ }
360
+ }
361
+ function enforceApiTokenRoute(options) {
362
+ const { request } = options;
363
+ if (!request) {
364
+ return undefined;
365
+ }
366
+ const context = getApiTokenContext(request.user);
367
+ if (!context) {
368
+ if (!request.user && hasApiTokenCredential(request)) {
369
+ throw new common_1.UnauthorizedException(error_codes_1.ErrorCode.UNAUTHORIZED);
370
+ }
371
+ return undefined;
372
+ }
373
+ assertApiTokenScopes(context, options.handler, options.controllerClass);
374
+ if (context.kind === core_api_token_constants_1.ApiTokenKind.TENANT) {
375
+ assertTenantApiTokenRouteAccess({ ...options, context });
376
+ return core_api_token_constants_1.ApiTokenKind.TENANT;
377
+ }
378
+ if (context.tenantId) {
379
+ assertTenantHeaderMatches(request, context.tenantId);
380
+ }
381
+ return core_api_token_constants_1.ApiTokenKind.USER;
382
+ }
383
+ function getApiTokenTenantRestriction(user) {
384
+ const context = getApiTokenContext(user);
385
+ return context?.kind === core_api_token_constants_1.ApiTokenKind.USER ? context.tenantId : undefined;
386
+ }
387
+ function capApiTokenTenantRole(user, membershipRole) {
388
+ const context = getApiTokenContext(user);
389
+ if (context?.kind !== core_api_token_constants_1.ApiTokenKind.USER || !context.maxTenantRole) {
390
+ return membershipRole;
391
+ }
392
+ const levels = hierarchy();
393
+ if (!(membershipRole in levels) || !(context.maxTenantRole in levels)) {
394
+ return null;
395
+ }
396
+ return levels[membershipRole] <= levels[context.maxTenantRole] ? membershipRole : context.maxTenantRole;
397
+ }
398
+ //# sourceMappingURL=core-api-token.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-api-token.helpers.js","sourceRoot":"","sources":["../../../../src/core/modules/api-token/core-api-token.helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { NestMiddleware } from '@nestjs/common';
2
+ import { NextFunction, Request, Response } from 'express';
3
+ import { CoreApiTokenService } from './core-api-token.service';
4
+ export declare class CoreApiTokenMiddleware implements NestMiddleware {
5
+ protected readonly apiTokenService?: CoreApiTokenService;
6
+ constructor(apiTokenService?: CoreApiTokenService);
7
+ use(req: Request & {
8
+ user?: unknown;
9
+ }, res: Response, next: NextFunction): Promise<void>;
10
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CoreApiTokenMiddleware = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const error_codes_1 = require("../error-code/error-codes");
18
+ const core_api_token_helpers_1 = require("./core-api-token.helpers");
19
+ const core_api_token_service_1 = require("./core-api-token.service");
20
+ let CoreApiTokenMiddleware = class CoreApiTokenMiddleware {
21
+ apiTokenService;
22
+ constructor(apiTokenService) {
23
+ this.apiTokenService = apiTokenService;
24
+ }
25
+ async use(req, res, next) {
26
+ const config = (0, core_api_token_helpers_1.getApiTokenConfig)();
27
+ if (!config.enabled) {
28
+ return next();
29
+ }
30
+ const credential = (0, core_api_token_helpers_1.readApiTokenCredentialFromHeaders)(req.headers, config.prefix);
31
+ if (!credential) {
32
+ return next();
33
+ }
34
+ if (credential === 'conflict' || !this.apiTokenService) {
35
+ throw new common_1.UnauthorizedException(error_codes_1.ErrorCode.UNAUTHORIZED);
36
+ }
37
+ const user = await this.apiTokenService.authenticate(credential);
38
+ const context = (0, core_api_token_helpers_1.getApiTokenContext)(user);
39
+ if (!user || !context) {
40
+ throw new common_1.UnauthorizedException(error_codes_1.ErrorCode.UNAUTHORIZED);
41
+ }
42
+ const limited = await this.apiTokenService.consumeRateLimit(context.tokenId);
43
+ if (limited) {
44
+ res.setHeader('Retry-After', String(limited.retryAfter));
45
+ throw new common_1.HttpException(error_codes_1.ErrorCode.RATE_LIMIT_EXCEEDED, common_1.HttpStatus.TOO_MANY_REQUESTS);
46
+ }
47
+ this.apiTokenService.touchLastUsed(context.tokenId);
48
+ req.user = user;
49
+ next();
50
+ }
51
+ };
52
+ exports.CoreApiTokenMiddleware = CoreApiTokenMiddleware;
53
+ exports.CoreApiTokenMiddleware = CoreApiTokenMiddleware = __decorate([
54
+ (0, common_1.Injectable)(),
55
+ __param(0, (0, common_1.Optional)()),
56
+ __metadata("design:paramtypes", [core_api_token_service_1.CoreApiTokenService])
57
+ ], CoreApiTokenMiddleware);
58
+ //# sourceMappingURL=core-api-token.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-api-token.middleware.js","sourceRoot":"","sources":["../../../../src/core/modules/api-token/core-api-token.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwH;AAGxH,2DAAsD;AACtD,qEAAoH;AACpH,qEAA+D;AAgBxD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACU;IAA3C,YAA2C,eAAqC;QAArC,oBAAe,GAAf,eAAe,CAAsB;IAAG,CAAC;IAEpF,KAAK,CAAC,GAAG,CAAC,GAAiC,EAAE,GAAa,EAAE,IAAkB;QAC5E,MAAM,MAAM,GAAG,IAAA,0CAAiB,GAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,0DAAiC,EAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,UAAU,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,IAAI,8BAAqB,CAAC,uBAAS,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAA,2CAAkB,EAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,8BAAqB,CAAC,uBAAS,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7E,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACzD,MAAM,IAAI,sBAAa,CAAC,uBAAS,CAAC,mBAAmB,EAAE,mBAAU,CAAC,iBAAiB,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAGpD,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,EAAE,CAAC;IACT,CAAC;CACF,CAAA;AAnCY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCAAsC,4CAAmB;GADrE,sBAAsB,CAmClC"}
@@ -0,0 +1,20 @@
1
+ import { CorePersistenceModel } from '../../common/models/core-persistence.model';
2
+ import { ApiTokenKind } from './core-api-token.constants';
3
+ export declare class CoreApiTokenModel extends CorePersistenceModel {
4
+ createdBy: string;
5
+ description: string;
6
+ expiresAt: Date;
7
+ kind: ApiTokenKind;
8
+ lastUsedAt: Date;
9
+ maxTenantRole: string;
10
+ name: string;
11
+ publicId: string;
12
+ revokedAt: Date;
13
+ scopes: string[];
14
+ secretHash: string;
15
+ signingKeyEncrypted: string;
16
+ tenant: string;
17
+ updatedBy: string;
18
+ user: string;
19
+ securityCheck(user: any, force?: boolean): this;
20
+ }