@lenne.tech/nest-server 12.3.2 → 12.4.0

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 (34) hide show
  1. package/.claude/rules/configurable-features.md +1 -1
  2. package/.claude/rules/testing.md +4 -4
  3. package/FRAMEWORK-API.md +1 -1
  4. package/dist/core/common/helpers/swagger.helper.js +6 -0
  5. package/dist/core/common/helpers/swagger.helper.js.map +1 -1
  6. package/dist/core/common/interfaces/server-options.interface.d.ts +5 -0
  7. package/dist/core/modules/error-code/error-codes.d.ts +18 -0
  8. package/dist/core/modules/error-code/error-codes.js +16 -0
  9. package/dist/core/modules/error-code/error-codes.js.map +1 -1
  10. package/dist/core/modules/system-setup/core-system-setup.controller.d.ts +2 -2
  11. package/dist/core/modules/system-setup/core-system-setup.controller.js +17 -7
  12. package/dist/core/modules/system-setup/core-system-setup.controller.js.map +1 -1
  13. package/dist/core/modules/system-setup/core-system-setup.service.d.ts +18 -0
  14. package/dist/core/modules/system-setup/core-system-setup.service.js +118 -15
  15. package/dist/core/modules/system-setup/core-system-setup.service.js.map +1 -1
  16. package/dist/core/modules/system-setup/system-setup-http-init.helper.d.ts +11 -0
  17. package/dist/core/modules/system-setup/system-setup-http-init.helper.js +45 -0
  18. package/dist/core/modules/system-setup/system-setup-http-init.helper.js.map +1 -0
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/server/modules/error-code/error-codes.d.ts +2 -0
  23. package/migration-guides/11.13.x-to-11.14.0.md +5 -5
  24. package/migration-guides/12.3.x-to-12.4.x.md +169 -0
  25. package/package.json +1 -1
  26. package/src/core/common/helpers/swagger.helper.ts +7 -0
  27. package/src/core/common/interfaces/server-options.interface.ts +59 -5
  28. package/src/core/modules/error-code/error-codes.ts +27 -0
  29. package/src/core/modules/system-setup/INTEGRATION-CHECKLIST.md +51 -16
  30. package/src/core/modules/system-setup/README.md +144 -28
  31. package/src/core/modules/system-setup/core-system-setup.controller.ts +30 -8
  32. package/src/core/modules/system-setup/core-system-setup.service.ts +246 -23
  33. package/src/core/modules/system-setup/system-setup-http-init.helper.ts +130 -0
  34. package/src/index.ts +1 -0
@@ -17,6 +17,7 @@ import { ForbiddenException, Injectable, Logger } from '@nestjs/common';
17
17
  import { InjectConnection } from '../../common/persistence/mongo/mongoose-compat.js';
18
18
  import { isEmail } from 'class-validator';
19
19
  import { defaultSqlLockStore, SYSTEM_SETUP_CLAIM_STALE_AFTER_MS, SYSTEM_SETUP_LOCK_COLLECTION, SYSTEM_SETUP_LOCK_KEY, systemSetupMongoLocks, } from '../../common/persistence/infrastructure-locks.js';
20
+ import { isLocalEnv } from '../../common/helpers/cookies.helper.js';
20
21
  import { ConfigService } from '../../common/services/config.service.js';
21
22
  import { legacyCredentialAccountIssuer } from '../better-auth/core-better-auth-account-issuer.helper.js';
22
23
  import { CoreBetterAuthUserMapper } from '../better-auth/core-better-auth-user.mapper.js';
@@ -24,6 +25,7 @@ import { CoreBetterAuthService } from '../better-auth/core-better-auth.service.j
24
25
  import { ErrorCode } from '../error-code/error-codes.js';
25
26
  import { getPersistenceRuntime } from '../../common/persistence/persistence-runtime.registry.js';
26
27
  import { getBetterAuthSqlStore } from '../better-auth/core-better-auth-sql.registry.js';
28
+ import { isSystemSetupTokenValid, resolveSystemSetupHttpInit, SYSTEM_SETUP_TOKEN_HEADER, } from './system-setup-http-init.helper.js';
27
29
  const SETUP_LOCK_COLLECTION = SYSTEM_SETUP_LOCK_COLLECTION;
28
30
  const INITIAL_ADMIN_CLAIM_STALE_AFTER_MS = SYSTEM_SETUP_CLAIM_STALE_AFTER_MS;
29
31
  let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupService {
@@ -40,23 +42,14 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
40
42
  this.configService = configService;
41
43
  }
42
44
  async onApplicationBootstrap() {
43
- const initialAdmin = this.configService.configFastButReadOnly?.systemSetup?.initialAdmin;
45
+ await this.createInitialAdminFromConfig();
46
+ await this.reportSetupReachability();
47
+ }
48
+ async createInitialAdminFromConfig() {
49
+ const initialAdmin = this.usableInitialAdmin({ warn: true });
44
50
  if (!initialAdmin) {
45
51
  return;
46
52
  }
47
- if (!initialAdmin.email || !initialAdmin.password) {
48
- const missing = [!initialAdmin.email && 'email', !initialAdmin.password && 'password'].filter(Boolean).join(', ');
49
- this.logger.warn(`Incomplete initialAdmin config - missing: ${missing}. Auto-creation skipped.`);
50
- return;
51
- }
52
- if (!isEmail(initialAdmin.email)) {
53
- this.logger.warn(`Invalid initialAdmin email format: "${initialAdmin.email}". Auto-creation skipped.`);
54
- return;
55
- }
56
- if (!initialAdmin.password.trim()) {
57
- this.logger.warn('Empty initialAdmin password. Auto-creation skipped.');
58
- return;
59
- }
60
53
  const status = await this.getSetupStatus();
61
54
  if (!status.needsSetup) {
62
55
  return;
@@ -82,6 +75,96 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
82
75
  }
83
76
  }
84
77
  }
78
+ usableInitialAdmin(options) {
79
+ const initialAdmin = this.configService.configFastButReadOnly?.systemSetup?.initialAdmin;
80
+ const skip = (message) => {
81
+ if (options?.warn) {
82
+ this.logger.warn(message);
83
+ }
84
+ return undefined;
85
+ };
86
+ if (!initialAdmin) {
87
+ return undefined;
88
+ }
89
+ if (!initialAdmin.email || !initialAdmin.password) {
90
+ const missing = [!initialAdmin.email && 'email', !initialAdmin.password && 'password'].filter(Boolean).join(', ');
91
+ return skip(`Incomplete initialAdmin config - missing: ${missing}. Auto-creation skipped.`);
92
+ }
93
+ if (!isEmail(initialAdmin.email)) {
94
+ return skip(`Invalid initialAdmin email format: "${initialAdmin.email}". Auto-creation skipped.`);
95
+ }
96
+ if (typeof initialAdmin.password !== 'string') {
97
+ return skip(`initialAdmin password is a ${typeof initialAdmin.password}, not a string (an all-digit ENV value is ` +
98
+ 'converted to a number). Auto-creation skipped.');
99
+ }
100
+ if (!initialAdmin.password.trim()) {
101
+ return skip('Empty initialAdmin password. Auto-creation skipped.');
102
+ }
103
+ return initialAdmin;
104
+ }
105
+ currentEnv() {
106
+ return this.configService.configFastButReadOnly?.env ?? process.env.NODE_ENV;
107
+ }
108
+ getHttpInitPolicy() {
109
+ return resolveSystemSetupHttpInit(this.configService.configFastButReadOnly?.systemSetup?.httpInit, this.currentEnv());
110
+ }
111
+ assertHttpInitAllowed(token) {
112
+ const policy = this.getHttpInitPolicy();
113
+ if (!policy.enabled) {
114
+ throw new ForbiddenException(ErrorCode.SYSTEM_SETUP_HTTP_INIT_DISABLED);
115
+ }
116
+ if (policy.tokenRequired && !isSystemSetupTokenValid(policy.token, token)) {
117
+ throw new ForbiddenException(ErrorCode.SYSTEM_SETUP_TOKEN_INVALID);
118
+ }
119
+ }
120
+ async reportSetupReachability() {
121
+ const policy = this.getHttpInitPolicy();
122
+ if (policy.problem) {
123
+ this.logger.error(`POST /system-setup/init stays closed: ${policy.problem}. Set a token of at least 16 characters ` +
124
+ '(NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN), or systemSetup.httpInit: true to open it without one.');
125
+ }
126
+ this.warnAboutIgnoredEnvironmentNames();
127
+ if (isLocalEnv(this.currentEnv()) || this.usableInitialAdmin() || (policy.enabled && policy.tokenRequired)) {
128
+ return;
129
+ }
130
+ let needsSetup;
131
+ try {
132
+ needsSetup = (await this.getSetupStatus()).needsSetup;
133
+ }
134
+ catch (error) {
135
+ this.logger.warn(`Could not check whether initial setup is needed: ${error instanceof Error ? error.message : 'Unknown error'}`);
136
+ return;
137
+ }
138
+ if (!needsSetup) {
139
+ return;
140
+ }
141
+ const env = this.currentEnv() ?? '(not set)';
142
+ if (!policy.enabled) {
143
+ this.logger.error(`No users exist and this instance cannot be set up: environment "${env}" closes POST /system-setup/init, ` +
144
+ 'and no initialAdmin is configured. Set NSC__SYSTEM_SETUP__INITIAL_ADMIN__EMAIL and ' +
145
+ 'NSC__SYSTEM_SETUP__INITIAL_ADMIN__PASSWORD (created on the next start), or open the HTTP init explicitly ' +
146
+ 'with NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN=<secret of at least 16 characters> ' +
147
+ `(sent as the "${SYSTEM_SETUP_TOKEN_HEADER}" header).`);
148
+ return;
149
+ }
150
+ this.logger.warn(`No users exist and POST /system-setup/init is open without a token in environment "${env}": whoever reaches ` +
151
+ 'the API first becomes the administrator. Prefer NSC__SYSTEM_SETUP__INITIAL_ADMIN__EMAIL / __PASSWORD, or ' +
152
+ 'protect the init with NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN.');
153
+ }
154
+ warnAboutIgnoredEnvironmentNames() {
155
+ for (const key of Object.keys(process.env)) {
156
+ if (!key.startsWith('NSC__')) {
157
+ continue;
158
+ }
159
+ const segments = key.slice('NSC__'.length).split('__');
160
+ if (segments[0]?.replace(/_/g, '').toLowerCase() !== 'systemsetup' ||
161
+ !segments.some((s) => /[a-z][A-Z]/.test(s))) {
162
+ continue;
163
+ }
164
+ const corrected = `NSC__${segments.map((s) => s.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase()).join('__')}`;
165
+ this.logger.warn(`Environment variable ${key} is not read (camelCase segment). Use ${corrected} instead.`);
166
+ }
167
+ }
85
168
  async claimInitialAdminSetup() {
86
169
  const locks = await this.setupLocks();
87
170
  return locks.tryAcquire(SYSTEM_SETUP_LOCK_KEY, this.claimOwner, INITIAL_ADMIN_CLAIM_STALE_AFTER_MS / 1000);
@@ -94,6 +177,17 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
94
177
  this.logger.warn(`Failed to release initial admin setup claim: ${error instanceof Error ? error.message : 'Unknown error'}`);
95
178
  }
96
179
  }
180
+ async rollbackInitialAdmin(context, iamUserId, email) {
181
+ try {
182
+ await context.internalAdapter.deleteUser(iamUserId);
183
+ this.logger.warn(`Initial admin creation failed; the partially created user ${email} was removed again`);
184
+ }
185
+ catch (error) {
186
+ this.logger.error(`Initial admin creation failed and the partially created user ${email} could not be removed ` +
187
+ `(${error instanceof Error ? error.message : 'Unknown error'}). Remove that user and its accounts from ` +
188
+ '"users" and "account", otherwise initial setup stays refused because a user exists.');
189
+ }
190
+ }
97
191
  async setupLocks() {
98
192
  return ((await defaultSqlLockStore('system-setup')) ??
99
193
  systemSetupMongoLocks(this.connection.collection(SETUP_LOCK_COLLECTION)));
@@ -111,8 +205,11 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
111
205
  }
112
206
  async getSetupStatus() {
113
207
  const userCount = await this.countUsers();
208
+ const httpInit = this.getHttpInitPolicy();
114
209
  return {
115
210
  betterAuthEnabled: this.betterAuthService.isEnabled(),
211
+ httpInitEnabled: httpInit.enabled,
212
+ httpInitTokenRequired: httpInit.enabled && httpInit.tokenRequired,
116
213
  needsSetup: userCount === 0,
117
214
  };
118
215
  }
@@ -138,8 +235,10 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
138
235
  `${INITIAL_ADMIN_CLAIM_STALE_AFTER_MS / 60_000} minutes.`);
139
236
  throw new ForbiddenException(ErrorCode.SYSTEM_SETUP_NOT_AVAILABLE);
140
237
  }
238
+ let createdIamUserId;
239
+ let context;
141
240
  try {
142
- const context = await authInstance.$context;
241
+ context = await authInstance.$context;
143
242
  const normalizedPassword = this.userMapper.normalizePasswordForIam(input.password);
144
243
  const iamUser = await context.internalAdapter.createUser({
145
244
  email: input.email,
@@ -149,6 +248,7 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
149
248
  if (!iamUser) {
150
249
  throw new Error('Failed to create IAM user');
151
250
  }
251
+ createdIamUserId = iamUser.id;
152
252
  const hashedPassword = await context.password.hash(normalizedPassword);
153
253
  const credentialIssuer = legacyCredentialAccountIssuer();
154
254
  await context.internalAdapter.linkAccount({
@@ -185,6 +285,9 @@ let CoreSystemSetupService = CoreSystemSetupService_1 = class CoreSystemSetupSer
185
285
  };
186
286
  }
187
287
  catch (error) {
288
+ if (createdIamUserId && context) {
289
+ await this.rollbackInitialAdmin(context, createdIamUserId, input.email);
290
+ }
188
291
  await this.releaseInitialAdminSetupClaim();
189
292
  if (error instanceof Error && (error.message?.includes('duplicate key') || error.message?.includes('E11000'))) {
190
293
  throw new ForbiddenException(ErrorCode.SYSTEM_SETUP_NOT_AVAILABLE);
@@ -1 +1 @@
1
- {"version":3,"file":"core-system-setup.service.js","sourceRoot":"","sources":["../../../../src/core/modules/system-setup/core-system-setup.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-system-setup.service.js","sourceRoot":"","sources":["../../../../src/core/modules/system-setup/core-system-setup.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const SYSTEM_SETUP_TOKEN_HEADER = "x-system-setup-token";
2
+ export declare const SYSTEM_SETUP_TOKEN_MIN_LENGTH = 16;
3
+ export interface ISystemSetupHttpInitPolicy {
4
+ enabled: boolean;
5
+ problem?: string;
6
+ source: 'config' | 'default';
7
+ token?: string;
8
+ tokenRequired: boolean;
9
+ }
10
+ export declare function resolveSystemSetupHttpInit(httpInit: unknown, env: string | undefined): ISystemSetupHttpInitPolicy;
11
+ export declare function isSystemSetupTokenValid(expected: string | undefined, provided: unknown): boolean;
@@ -0,0 +1,45 @@
1
+ import { createHash, timingSafeEqual } from 'node:crypto';
2
+ import { isLocalEnv } from '../../common/helpers/cookies.helper.js';
3
+ export const SYSTEM_SETUP_TOKEN_HEADER = 'x-system-setup-token';
4
+ export const SYSTEM_SETUP_TOKEN_MIN_LENGTH = 16;
5
+ export function resolveSystemSetupHttpInit(httpInit, env) {
6
+ if (httpInit === true) {
7
+ return { enabled: true, source: 'config', tokenRequired: false };
8
+ }
9
+ if (httpInit === false) {
10
+ return { enabled: false, source: 'config', tokenRequired: false };
11
+ }
12
+ if (httpInit && typeof httpInit === 'object' && !Array.isArray(httpInit)) {
13
+ const { enabled, token } = httpInit;
14
+ if (enabled === false) {
15
+ return { enabled: false, source: 'config', tokenRequired: false };
16
+ }
17
+ const problem = tokenProblem(token);
18
+ if (problem) {
19
+ return { enabled: false, problem, source: 'config', tokenRequired: false };
20
+ }
21
+ return { enabled: true, source: 'config', token: token, tokenRequired: true };
22
+ }
23
+ return { enabled: isLocalEnv(env), source: 'default', tokenRequired: false };
24
+ }
25
+ export function isSystemSetupTokenValid(expected, provided) {
26
+ if (typeof expected !== 'string' || !expected || typeof provided !== 'string' || !provided) {
27
+ return false;
28
+ }
29
+ const digest = (value) => createHash('sha256').update(value, 'utf8').digest();
30
+ return timingSafeEqual(digest(expected), digest(provided));
31
+ }
32
+ function tokenProblem(token) {
33
+ if (token === undefined || token === null) {
34
+ return 'systemSetup.httpInit is an object without a token';
35
+ }
36
+ if (typeof token !== 'string') {
37
+ return (`systemSetup.httpInit.token is a ${typeof token}, not a string — an empty or all-digit ` +
38
+ 'NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN is converted to a number; use a token with letters');
39
+ }
40
+ if (token.trim().length < SYSTEM_SETUP_TOKEN_MIN_LENGTH) {
41
+ return `systemSetup.httpInit.token is shorter than ${SYSTEM_SETUP_TOKEN_MIN_LENGTH} characters`;
42
+ }
43
+ return undefined;
44
+ }
45
+ //# sourceMappingURL=system-setup-http-init.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-setup-http-init.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/system-setup/system-setup-http-init.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAUpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAWhE,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAsDhD,MAAM,UAAU,0BAA0B,CAAC,QAAiB,EAAE,GAAuB;IACnF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,QAAkD,CAAC;QAC9E,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACpE,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAe,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC1F,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC/E,CAAC;AAUD,MAAM,UAAU,uBAAuB,CAAC,QAA4B,EAAE,QAAiB;IACrF,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IACtF,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7D,CAAC;AAGD,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,mDAAmD,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CACL,mCAAmC,OAAO,KAAK,yCAAyC;YACxF,wFAAwF,CACzF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;QACxD,OAAO,8CAA8C,6BAA6B,aAAa,CAAC;IAClG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -215,6 +215,7 @@ export * from './core/modules/permissions/permissions-scanner.js';
215
215
  export * from './core/modules/system-setup/core-system-setup.controller.js';
216
216
  export * from './core/modules/system-setup/core-system-setup.module.js';
217
217
  export * from './core/modules/system-setup/core-system-setup.service.js';
218
+ export * from './core/modules/system-setup/system-setup-http-init.helper.js';
218
219
  export * from './core/modules/sync/core-sync-base.controller.js';
219
220
  export * from './core/modules/sync/core-sync.constants.js';
220
221
  export * from './core/modules/sync/core-sync.controller.js';
package/dist/index.js CHANGED
@@ -214,6 +214,7 @@ export * from './core/modules/permissions/permissions-scanner.js';
214
214
  export * from './core/modules/system-setup/core-system-setup.controller.js';
215
215
  export * from './core/modules/system-setup/core-system-setup.module.js';
216
216
  export * from './core/modules/system-setup/core-system-setup.service.js';
217
+ export * from './core/modules/system-setup/system-setup-http-init.helper.js';
217
218
  export * from './core/modules/sync/core-sync-base.controller.js';
218
219
  export * from './core/modules/sync/core-sync.constants.js';
219
220
  export * from './core/modules/sync/core-sync.controller.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AAKjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,wDAAwD,CAAC;AACvE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,oDAAoD,CAAC;AACnE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,iDAAiD,CAAC;AAChE,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,iDAAiD,CAAC;AAChE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,qDAAqD,CAAC;AACpE,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,qDAAqD,CAAC;AACpE,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mDAAmD,CAAC;AAClE,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uDAAuD,CAAC;AACtE,cAAc,oDAAoD,CAAC;AACnE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,qDAAqD,CAAC;AACpE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oCAAoC,CAAC;AACnD,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,8DAA8D,CAAC;AAC7E,cAAc,sEAAsE,CAAC;AACrF,cAAc,uEAAuE,CAAC;AACtF,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8DAA8D,CAAC;AAC7E,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,wDAAwD,CAAC;AACvE,cAAc,uDAAuD,CAAC;AACtE,cAAc,0DAA0D,CAAC;AACzE,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAClE,cAAc,wCAAwC,CAAC;AACvD,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,yDAAyD,CAAC;AACxE,cAAc,sDAAsD,CAAC;AACrE,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,kDAAkD,CAAC;AACjE,cAAc,wDAAwD,CAAC;AACvE,cAAc,iDAAiD,CAAC;AAChE,cAAc,2DAA2D,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AACzF,cAAc,yCAAyC,CAAC;AACxD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,yDAAyD,CAAC;AACxE,cAAc,yDAAyD,CAAC;AACxE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uDAAuD,CAAC;AACtE,cAAc,yDAAyD,CAAC;AACxE,cAAc,yCAAyC,CAAC;AACxD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uDAAuD,CAAC;AACtE,cAAc,mDAAmD,CAAC;AAClE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wDAAwD,CAAC;AACvE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,0CAA0C,CAAC;AACzD,cAAc,mDAAmD,CAAC;AAClE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AACnE,cAAc,mCAAmC,CAAC;AAClD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,0CAA0C,CAAC;AACzD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AAMpD,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,oDAAoD,CAAC;AACnE,cAAc,uDAAuD,CAAC;AACtE,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AAMnE,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iEAAiE,CAAC;AAChF,cAAc,mEAAmE,CAAC;AAClF,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,kEAAkE,CAAC;AACjF,cAAc,0CAA0C,CAAC;AACzD,cAAc,wDAAwD,CAAC;AACvE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,oDAAoD,CAAC;AACnE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,yDAAyD,CAAC;AACxE,cAAc,wDAAwD,CAAC;AACvE,cAAc,mDAAmD,CAAC;AAClE,cAAc,kEAAkE,CAAC;AACjF,cAAc,wDAAwD,CAAC;AACvE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,yCAAyC,CAAC;AAMxD,cAAc,4BAA4B,CAAC;AAM3C,cAAc,qCAAqC,CAAC;AAMpD,cAAc,oCAAoC,CAAC;AAMnD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6CAA6C,CAAC;AAC5D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0CAA0C,CAAC;AACzD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,kEAAkE,CAAC;AACjF,cAAc,yDAAyD,CAAC;AAMxE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,yDAAyD,CAAC;AACxE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,0DAA0D,CAAC;AAMzE,cAAc,6BAA6B,CAAC;AAM5C,cAAc,iCAAiC,CAAC;AAMhD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,wDAAwD,CAAC;AACvE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,mDAAmD,CAAC;AAMlE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,yDAAyD,CAAC;AACxE,cAAc,0DAA0D,CAAC;AAMzE,cAAc,kDAAkD,CAAC;AACjE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wDAAwD,CAAC;AACvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,oDAAoD,CAAC;AAMnE,cAAc,6BAA6B,CAAC;AAM5C,cAAc,mDAAmD,CAAC;AAClE,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAM7D,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sDAAsD,CAAC;AACrE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uEAAuE,CAAC;AAMtF,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,8 @@ export declare const ErrorCode: {
71
71
  SYSTEM_SETUP_NOT_AVAILABLE: string;
72
72
  SYSTEM_SETUP_DISABLED: string;
73
73
  SYSTEM_SETUP_BETTERAUTH_REQUIRED: string;
74
+ SYSTEM_SETUP_HTTP_INIT_DISABLED: string;
75
+ SYSTEM_SETUP_TOKEN_INVALID: string;
74
76
  AI_NO_CONNECTION: string;
75
77
  AI_CONNECTION_DISABLED: string;
76
78
  AI_CONNECTION_NOT_AVAILABLE: string;
@@ -49,9 +49,9 @@ New module for creating the first admin user on fresh deployments, especially us
49
49
 
50
50
  ```bash
51
51
  # .env or Docker environment
52
- NSC__systemSetup__initialAdmin__email=admin@example.com
53
- NSC__systemSetup__initialAdmin__password=YourSecurePassword123!
54
- NSC__systemSetup__initialAdmin__name=Admin # optional
52
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__EMAIL=admin@example.com
53
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__PASSWORD=YourSecurePassword123!
54
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__NAME=Admin # optional
55
55
  ```
56
56
 
57
57
  Or in `config.env.ts`:
@@ -190,8 +190,8 @@ betterAuth: {
190
190
 
191
191
  ```bash
192
192
  # .env
193
- NSC__systemSetup__initialAdmin__email=admin@example.com
194
- NSC__systemSetup__initialAdmin__password=YourSecurePassword123!
193
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__EMAIL=admin@example.com
194
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__PASSWORD=YourSecurePassword123!
195
195
  ```
196
196
 
197
197
  ### Step 4: Build and Test
@@ -0,0 +1,169 @@
1
+ # Migration Guide: 12.3.x → 12.4.x
2
+
3
+ ## 12.4.0 contains breaking changes
4
+
5
+ The version number moves only the MINOR digit (the MAJOR follows NestJS). Read §1 before you update: a deployed
6
+ instance that creates its first administrator through `POST /system-setup/init` (a setup page in the frontend) is
7
+ refused from now on until it is configured.
8
+
9
+ ## Overview
10
+
11
+ | Category | Details |
12
+ |---|---|
13
+ | **Breaking Changes** | `POST /system-setup/init` is closed outside `local`, `ci` and `e2e` unless `systemSetup.httpInit` opens it (§1) |
14
+ | **New Features** | `systemSetup.httpInit` (`true` or `{ token }`), the `X-System-Setup-Token` header, `httpInitEnabled` / `httpInitTokenRequired` in `GET /system-setup/status`, error codes `LTNS_0053` / `LTNS_0054`, a boot report for a deployment that cannot be set up (§1) |
15
+ | **Bugfixes** | A deployed instance without `initialAdmin` could be taken over through the anonymous init (§1). A creation that failed after the user was written left a user without the admin role behind and locked the setup for good (§2). The documented ENV names for `initialAdmin` were never read (§3) |
16
+ | **Migration Effort** | None for a deployment that provisions its first admin through `initialAdmin`, and none locally. A deployed stage set up through the UI: one ENV variable (§1). A project using the camelCase ENV names: rename them (§3) |
17
+
18
+ ## Quick Migration
19
+
20
+ ```bash
21
+ pnpm add @lenne.tech/nest-server@12.4.0
22
+ pnpm run update # nest-server-starter based projects: aligns the pins the framework raised
23
+ pnpm run build
24
+ pnpm test
25
+ ```
26
+
27
+ **Vendor mode**: run `/lt-dev:backend:update-nest-server-core` as usual.
28
+
29
+ Local development and the e2e suites of a starter-based project keep working without a change: `local`, `ci` and
30
+ `e2e` keep the init open.
31
+
32
+ ## 1. The HTTP init is fail-closed outside the local environments
33
+
34
+ `POST /system-setup/init` is anonymous (`S_EVERYONE`). Until 12.4.0 its only guard was "no user exists yet", in every
35
+ environment, so every deployed instance that went live without `systemSetup.initialAdmin` could be taken over by
36
+ whoever called the route before the first person signed up — an administrator account for anybody who found the API.
37
+
38
+ **What changes:** outside `local`, `ci` and `e2e` the init answers **403 `LTNS_0053`** unless `systemSetup.httpInit`
39
+ opens it. The environment is the configured `env` (else `NODE_ENV`); the deployed `develop` and `test` stages of a
40
+ starter-based project, `production`, `staging` and any unknown or missing name count as deployed.
41
+
42
+ | `systemSetup.httpInit` | `local` / `ci` / `e2e` | every other environment |
43
+ |---|---|---|
44
+ | not set | open | **closed** — 403 `LTNS_0053` |
45
+ | `true` | open | open, without a token |
46
+ | `{ token: '<at least 16 characters>' }` | open, token required | open, token required — 403 `LTNS_0054` without it |
47
+ | `false` / `{ enabled: false }` | closed | closed |
48
+
49
+ `systemSetup.initialAdmin` is not affected: the configured admin is still created at boot in every environment.
50
+
51
+ **What to do on a deployed stage**, preferred first:
52
+
53
+ 1. **Provision the admin via ENV** — created on the next start, no setup page needed:
54
+
55
+ ```bash
56
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__EMAIL=admin@example.com
57
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__PASSWORD=<strong password>
58
+ ```
59
+
60
+ 2. **Open the init with a token** when the setup must happen through the UI:
61
+
62
+ ```bash
63
+ NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN=<secret of at least 16 characters, with letters>
64
+ ```
65
+
66
+ The frontend sends it in the `X-System-Setup-Token` header. Remove the variable once the admin exists.
67
+
68
+ 3. **Open the init without a token** (`NSC__SYSTEM_SETUP__HTTP_INIT=true`) only where nobody else can reach the API
69
+ before you do: whoever calls it first becomes the administrator. The boot warns about it while no user exists.
70
+
71
+ **A misconfiguration closes, it never opens.** `httpInit: { token: process.env.SETUP_TOKEN }` with the variable unset,
72
+ an empty or short token, or an empty / all-digit `NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN` (the environment reader turns
73
+ it into a number) keep the init closed and log an error at boot naming the problem. A string `"true"` from
74
+ `NEST_SERVER_CONFIG` counts as not set.
75
+
76
+ **Frontend:** `GET /system-setup/status` additionally returns `httpInitEnabled` and `httpInitTokenRequired`, always,
77
+ whatever `needsSetup` says. Show the setup form only when `needsSetup && httpInitEnabled`, with a token field when
78
+ `httpInitTokenRequired`. A backend older than 12.4.0 sends neither field; treat that as "available" (as before).
79
+ `@lenne.tech/nuxt-extensions` handles this from its next release on.
80
+
81
+ ```typescript
82
+ const { needsSetup, httpInitEnabled = true, httpInitTokenRequired = false } = await status.json();
83
+ if (needsSetup && httpInitEnabled) {
84
+ await fetch('/system-setup/init', {
85
+ body: JSON.stringify({ email, name, password }),
86
+ headers: {
87
+ 'Content-Type': 'application/json',
88
+ ...(httpInitTokenRequired ? { 'X-System-Setup-Token': setupToken } : {}),
89
+ },
90
+ method: 'POST',
91
+ });
92
+ }
93
+ ```
94
+
95
+ **Boot report.** A deployed instance that starts with zero users, no usable `initialAdmin` and a closed init now logs
96
+ an error that names both ways in — before, it stayed silent until somebody tried to sign in.
97
+
98
+ **Swagger:** while the init is closed, `POST /system-setup/init` is left out of the document `setupSwagger()` builds.
99
+
100
+ **A project controller** that extends `CoreSystemSetupController` and overrides `createInitialAdmin()` must call
101
+ `this.systemSetupService.assertHttpInitAllowed(token)` first (the token read with
102
+ `@Headers(SYSTEM_SETUP_TOKEN_HEADER)`); otherwise the override keeps the init open in every environment. A project's
103
+ own endpoint that calls `CoreSystemSetupService.createInitialAdmin()` directly does the same.
104
+
105
+ ## 2. A failed creation no longer leaves a user behind
106
+
107
+ When a step after creating the user failed (linking the credential account, the user sync, the role update, the legacy
108
+ password), only the setup claim was released. The user stayed — without the admin role — so `needsSetup` turned
109
+ `false` and the init was refused for good: a deployment with a user and no administrator, recoverable only by editing
110
+ the database.
111
+
112
+ **What changes:** the partially created user is removed again (`internalAdapter.deleteUser()`: sessions, accounts and
113
+ the `users` row), `needsSetup` stays `true`, and the setup can be retried. The caller still gets 403 `LTNS_0050`, and
114
+ the server log names the original failure. If the removal itself fails, the log says which user to delete by hand.
115
+
116
+ **What to check on an instance that hit this before 12.4.0:** a `users` row without the admin role and no
117
+ administrator anywhere. Delete that row and its `account` rows, then provision the admin as in §1.
118
+
119
+ ## 3. The ENV names for `initialAdmin`
120
+
121
+ The README, the integration checklist, the interface documentation and the 11.14.0 migration guide named the
122
+ variables `NSC__systemSetup__initialAdmin__email` / `__password` / `__name`. The environment reader lowercases every
123
+ segment it does not split at `_`, so those land under `systemsetup.initialadmin` — a key nothing reads — and no admin
124
+ was ever created from them.
125
+
126
+ **The names that work:**
127
+
128
+ ```bash
129
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__EMAIL=admin@example.com
130
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__PASSWORD=<strong password>
131
+ NSC__SYSTEM_SETUP__INITIAL_ADMIN__NAME=Admin # optional
132
+ ```
133
+
134
+ Since 12.4.0 the boot warns about a `NSC__systemSetup__…` variable and names its correct spelling (names only, never
135
+ values). The environment reader itself is unchanged: it applies to every setting of every project.
136
+
137
+ ## Compatibility Notes
138
+
139
+ | Pattern | Status |
140
+ |---|---|
141
+ | `systemSetup.initialAdmin` via config or (SCREAMING_SNAKE) ENV | Unchanged |
142
+ | Setup page used locally / in e2e suites (`local`, `ci`, `e2e`) | Unchanged |
143
+ | Setup page used on a deployed stage without configuration | **403 `LTNS_0053`** — see §1 |
144
+ | `systemSetup: { enabled: false }` | Unchanged (no endpoints at all) |
145
+ | `CoreSystemSetupService.createInitialAdmin()` called by project code | Not gated — call `assertHttpInitAllowed()` first on an HTTP path |
146
+ | A frontend reading `GET /system-setup/status` | Two additional fields; existing fields unchanged |
147
+
148
+ ## Troubleshooting
149
+
150
+ | Symptom | Cause | Fix |
151
+ |---|---|---|
152
+ | 403 `LTNS_0053` on a deployed stage | The init is closed there by default | `initialAdmin` via ENV, or `NSC__SYSTEM_SETUP__HTTP_INIT__TOKEN` (§1) |
153
+ | 403 `LTNS_0054` | Token missing or different | Send the configured value in `X-System-Setup-Token` |
154
+ | Boot error "POST /system-setup/init stays closed" | The token configuration is unusable (missing, empty, short, a number) | Set a token of at least 16 characters with letters |
155
+ | Boot error "No users exist and this instance cannot be set up" | Deployed, no users, no usable `initialAdmin`, init closed | One of the ways in §1 |
156
+ | Boot warning "Environment variable NSC__systemSetup__… is not read" | camelCase ENV names | Rename as in §3 |
157
+
158
+ ## Module Documentation
159
+
160
+ ### System Setup
161
+
162
+ - [README](../src/core/modules/system-setup/README.md) — "HTTP init (`systemSetup.httpInit`)"
163
+ - [Integration Checklist](../src/core/modules/system-setup/INTEGRATION-CHECKLIST.md) — Steps 1 and 1b
164
+
165
+ ## References
166
+
167
+ - `src/core/modules/system-setup/system-setup-http-init.helper.ts` — `resolveSystemSetupHttpInit()`, `isSystemSetupTokenValid()`
168
+ - `src/core/modules/system-setup/core-system-setup.service.ts` — `assertHttpInitAllowed()`, `reportSetupReachability()`, `rollbackInitialAdmin()`
169
+ - `.claude/rules/configurable-features.md` — "System Setup" row
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lenne.tech/nest-server",
3
- "version": "12.3.2",
3
+ "version": "12.4.0",
4
4
  "type": "module",
5
5
  "description": "Server framework in TypeScript on top of NestJS: GraphQL and REST APIs on MongoDB, PostgreSQL, MySQL or MariaDB, with authentication, field-level permissions, multi-tenancy, offline sync and an AI assistant.",
6
6
  "keywords": [
@@ -22,6 +22,8 @@ import { CoreBetterAuthService } from '../../modules/better-auth/core-better-aut
22
22
  import { CoreHubActionsController } from '../../modules/hub/core-hub-actions.controller.js';
23
23
  import { CoreHubController } from '../../modules/hub/core-hub.controller.js';
24
24
  import { isHubEnabled, normalizeHubConfig } from '../../modules/hub/hub-config.helper.js';
25
+ import { CoreSystemSetupController } from '../../modules/system-setup/core-system-setup.controller.js';
26
+ import { resolveSystemSetupHttpInit } from '../../modules/system-setup/system-setup-http-init.helper.js';
25
27
  import { SKIP_TENANT_CHECK_KEY } from '../../modules/tenant/core-tenant.decorators.js';
26
28
  import { API_METHODS_KEY } from '../decorators/api-methods.decorator.js';
27
29
  import { mergeRolesMetadata } from '../../modules/tenant/core-tenant.helpers.js';
@@ -419,6 +421,11 @@ function isSwitchedOffOperation(reference: IHandlerReference, method: string, av
419
421
  ) {
420
422
  return !HUB_AVAILABILITY[handlerName](availability, availability.hub);
421
423
  }
424
+ // The anonymous init answers LTNS_0053 to everybody where `systemSetup.httpInit` keeps it closed (12.4.0+)
425
+ if (extendsClass(controller, CoreSystemSetupController) && handlerName === 'createInitialAdmin') {
426
+ const { env, systemSetup } = availability.config;
427
+ return !resolveSystemSetupHttpInit(systemSetup?.httpInit, env ?? process.env.NODE_ENV).enabled;
428
+ }
422
429
  return false;
423
430
  }
424
431