react-on-rails-pro-node-renderer 16.5.1 → 16.6.0-rc.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.
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAe,MAAM,EAAa,MAAM,2BAA2B,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,mBAAmB,CAAC;AASvF,OAAO,EAKL,KAAK,EAEN,MAAM,mBAAmB,CAAC;AAU3B,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAU,aAAa;QAErB,KAAK,EAAE,KAAK,CAAC;KACd;CACF;AAED,OAAO,QAAQ,SAAS,CAAC;IAEvB,UAAU,cAAc;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB;CACF;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;AAInE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,qBAAqB,QAErE;AAqED,eAAO,MAAM,YAAY,YAExB,CAAC;AAkBF,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;;EAgTlD"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAe,MAAM,EAAa,MAAM,2BAA2B,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,mBAAmB,CAAC;AASvF,OAAO,EAKL,KAAK,EAEN,MAAM,mBAAmB,CAAC;AAU3B,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAU,aAAa;QAErB,KAAK,EAAE,KAAK,CAAC;KACd;CACF;AAED,OAAO,QAAQ,SAAS,CAAC;IAEvB,UAAU,cAAc;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB;CACF;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;AAInE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,qBAAqB,QAErE;AAqED,eAAO,MAAM,YAAY,YAExB,CAAC;AAkBF,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;;EAmTlD"}
package/lib/worker.js CHANGED
@@ -149,6 +149,9 @@ function run(config) {
149
149
  // getConfig():
150
150
  (0, configBuilder_js_1.buildConfig)(config);
151
151
  const { serverBundleCachePath, logHttpLevel, port, host, fastifyServerOptions, workersCount } = (0, configBuilder_js_1.getConfig)();
152
+ // The renderer uses cleartext HTTP/2 (h2c). Node's `allowHTTP1` option only
153
+ // applies to TLS servers (http2.createSecureServer), so it cannot enable
154
+ // HTTP/1.1 Kubernetes httpGet probes on this listener.
152
155
  const app = (0, fastify_1.default)({
153
156
  http2: useHttp2,
154
157
  bodyLimit: 104857600, // 100 MB
package/lib/worker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-on-rails-pro-node-renderer",
3
- "version": "16.5.1",
3
+ "version": "16.6.0-rc.0",
4
4
  "protocolVersion": "2.0.0",
5
5
  "description": "React on Rails Pro Node Renderer for server-side rendering",
6
6
  "main": "lib/ReactOnRailsProNodeRenderer.js",
@@ -29,7 +29,7 @@
29
29
  "dependencies": {
30
30
  "@fastify/formbody": "^7.4.0 || ^8.0.2",
31
31
  "@fastify/multipart": "^8.3.1 || ^9.0.3",
32
- "fastify": "^5.8.1",
32
+ "fastify": "^5.8.3",
33
33
  "fs-extra": "^11.2.0",
34
34
  "jsonwebtoken": "^9.0.3",
35
35
  "lockfile": "^1.0.4",
@@ -60,7 +60,7 @@
60
60
  "sentry-testkit": "^5.0.6",
61
61
  "touch": "^3.1.0",
62
62
  "typescript": "^5.4.3",
63
- "react-on-rails": "16.5.1"
63
+ "react-on-rails": "16.6.0-rc.0"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "@honeybadger-io/js": ">=4.0.0",
@@ -18,7 +18,6 @@ const DEFAULT_PORT = 3800;
18
18
  const DEFAULT_LOG_LEVEL = 'info';
19
19
  const { env } = process;
20
20
  const MAX_DEBUG_SNIPPET_LENGTH = 1000;
21
- const NODE_ENV = env.NODE_ENV || 'production';
22
21
 
23
22
  /* Update ./docs/node-renderer/js-configuration.md when something here changes */
24
23
  // Node renderer configuration
@@ -57,7 +56,7 @@ export interface Config {
57
56
  // Number of workers that will be forked to serve rendering requests.
58
57
  workersCount: number;
59
58
  // The password expected to receive from the **Rails client** to authenticate rendering requests.
60
- // If no password is set, no authentication will be required.
59
+ // In development/test it is optional; in other environments the renderer refuses to start without it.
61
60
  password: string | undefined;
62
61
  // Next 2 params, allWorkersRestartInterval and delayBetweenIndividualWorkerRestarts must both
63
62
  // be set if you wish to have automatic worker restarting, say to clear memory leaks.
@@ -143,6 +142,28 @@ function logLevel(level: string): LevelWithSilent {
143
142
  }
144
143
  }
145
144
 
145
+ function normalizedRuntimeEnvs() {
146
+ return [env.RAILS_ENV, env.NODE_ENV]
147
+ .filter((value): value is string => Boolean(value))
148
+ .map((value) => value.toLowerCase());
149
+ }
150
+
151
+ function runtimeEnvsAllowDevelopmentDefaults() {
152
+ const runtimeEnvs = normalizedRuntimeEnvs();
153
+ // Fail closed: every present runtime env must be development/test before we allow
154
+ // missing-password defaults. Any production-like value, or no env at all, still
155
+ // requires an explicit password.
156
+ return runtimeEnvs.length > 0 && runtimeEnvs.every((value) => value === 'development' || value === 'test');
157
+ }
158
+
159
+ function defaultReplayServerAsyncOperationLogs() {
160
+ if (env.REPLAY_SERVER_ASYNC_OPERATION_LOGS != null) {
161
+ return truthy(env.REPLAY_SERVER_ASYNC_OPERATION_LOGS);
162
+ }
163
+
164
+ return env.NODE_ENV?.toLowerCase() === 'development';
165
+ }
166
+
146
167
  const defaultConfig: Config = {
147
168
  // Use env port if we run on Heroku
148
169
  port: Number(env.RENDERER_PORT) || DEFAULT_PORT,
@@ -187,10 +208,8 @@ const defaultConfig: Config = {
187
208
  // default to true if empty, otherwise it is set to false
188
209
  stubTimers: env.RENDERER_STUB_TIMERS === 'true' || !env.RENDERER_STUB_TIMERS,
189
210
 
190
- // default to true in development, otherwise it is set to false
191
- replayServerAsyncOperationLogs: truthy(
192
- env.REPLAY_SERVER_ASYNC_OPERATION_LOGS ?? NODE_ENV === 'development',
193
- ),
211
+ // Default to true in development, otherwise it is set to false.
212
+ replayServerAsyncOperationLogs: defaultReplayServerAsyncOperationLogs(),
194
213
 
195
214
  // Maximum number of VM contexts to keep in memory. Defaults to 2 since typically only two contexts
196
215
  // are needed - one for the server bundle and one for React Server Components (RSC) if enabled.
@@ -208,7 +227,8 @@ function envValuesUsed() {
208
227
  RENDERER_BUNDLE_PATH:
209
228
  !userConfig.serverBundleCachePath && !userConfig.bundlePath && env.RENDERER_BUNDLE_PATH,
210
229
  RENDERER_WORKERS_COUNT: !userConfig.workersCount && env.RENDERER_WORKERS_COUNT,
211
- RENDERER_PASSWORD: !userConfig.password && env.RENDERER_PASSWORD && '<MASKED>',
230
+ // Explicit password overrides, including empty strings, intentionally suppress the env-derived value here.
231
+ RENDERER_PASSWORD: userConfig.password === undefined && env.RENDERER_PASSWORD && '<MASKED>',
212
232
  RENDERER_SUPPORT_MODULES: !('supportModules' in userConfig) && env.RENDERER_SUPPORT_MODULES,
213
233
  RENDERER_STUB_TIMERS: !('stubTimers' in userConfig) && env.RENDERER_STUB_TIMERS,
214
234
  RENDERER_ALL_WORKERS_RESTART_INTERVAL:
@@ -226,10 +246,20 @@ function envValuesUsed() {
226
246
  }
227
247
 
228
248
  function sanitizedSettings(aConfig: Partial<Config> | undefined, defaultValue?: string) {
249
+ let sanitizedPassword = defaultValue;
250
+
251
+ if (aConfig?.password === '') {
252
+ sanitizedPassword = '<EMPTY STRING>';
253
+ } else if (aConfig?.password) {
254
+ sanitizedPassword = '<MASKED>';
255
+ }
256
+
229
257
  return aConfig && Object.keys(aConfig).length > 0
230
258
  ? {
231
259
  ...aConfig,
232
- password: aConfig.password != null ? '<MASKED>' : defaultValue,
260
+ // Distinguish explicit empty-string overrides from truly missing passwords in diagnostics.
261
+ // Empty strings still flow through as explicit overrides and fail validation in production-like envs.
262
+ password: sanitizedPassword,
233
263
  allWorkersRestartInterval: aConfig.allWorkersRestartInterval || defaultValue,
234
264
  delayBetweenIndividualWorkerRestarts: aConfig.delayBetweenIndividualWorkerRestarts || defaultValue,
235
265
  gracefulWorkerRestartTimeout: aConfig.gracefulWorkerRestartTimeout || defaultValue,
@@ -241,19 +271,72 @@ export function logSanitizedConfig() {
241
271
  log.info({
242
272
  'Node Renderer version': packageJson.version,
243
273
  'Protocol version': packageJson.protocolVersion,
244
- 'Default settings': defaultConfig,
274
+ 'Default settings at module load (env-backed values may lag current runtime)': sanitizedSettings(
275
+ defaultConfig,
276
+ '<NOT PROVIDED AT MODULE LOAD>',
277
+ ),
245
278
  'ENV values used for settings (use "RENDERER_" prefix)': envValuesUsed(),
246
279
  'Customized values for settings from config object (overrides ENV)': sanitizedSettings(userConfig),
247
280
  'Final renderer settings': sanitizedSettings(config, '<NOT PROVIDED>'),
248
281
  });
249
282
  }
250
283
 
284
+ function validatePasswordForProduction(aConfig: Config): string | null {
285
+ // Only a truthy password satisfies the production-like requirement. Null, undefined, and empty strings are
286
+ // all treated as missing passwords.
287
+ if (aConfig.password) return null;
288
+
289
+ // Require all present runtime envs to be development/test; fail closed otherwise.
290
+ // If either env indicates a production-like value, or neither env is set, password is required.
291
+ // This preserves a fail-closed invariant across the renderer startup path and the Ruby-side checks.
292
+ const allowMissingPassword = runtimeEnvsAllowDevelopmentDefaults();
293
+ if (allowMissingPassword) return null;
294
+
295
+ return (
296
+ 'RENDERER_PASSWORD must be set in production-like environments ' +
297
+ `(NODE_ENV: "${env.NODE_ENV ?? '(not set)'}", RAILS_ENV: "${env.RAILS_ENV ?? '(not set)'}").` +
298
+ '\n\n' +
299
+ 'In development and test environments, the renderer password is optional and no authentication\n' +
300
+ 'is required. In all other environments, you must explicitly configure a password to secure\n' +
301
+ 'communication between Rails and the Node Renderer.\n\n' +
302
+ 'To fix this, set the RENDERER_PASSWORD environment variable:\n\n' +
303
+ ' export RENDERER_PASSWORD="your-secure-password"\n\n' +
304
+ 'Or pass it in the config object:\n\n' +
305
+ ' reactOnRailsProNodeRenderer({ password: process.env.RENDERER_PASSWORD });\n\n' +
306
+ 'Environment matrix:\n' +
307
+ ' development — password optional (no authentication)\n' +
308
+ ' test — password optional (no authentication)\n' +
309
+ ' (neither set) — treated as production-like; RENDERER_PASSWORD required\n' +
310
+ ' all other environments (staging, production, qa, preview, etc.) — RENDERER_PASSWORD required'
311
+ );
312
+ }
313
+
251
314
  /**
252
- * Lazily create the config
315
+ * Lazily create the config.
316
+ * Passing password: undefined means "keep the env/default password", not "clear the password".
317
+ * Other undefined keys retain normal JavaScript spread semantics.
253
318
  */
254
319
  export function buildConfig(providedUserConfig?: Partial<Config>): Config {
255
320
  userConfig = providedUserConfig || {};
256
- config = { ...defaultConfig, ...userConfig };
321
+ const explicitUndefinedPassword =
322
+ Object.prototype.hasOwnProperty.call(userConfig, 'password') && userConfig.password === undefined;
323
+
324
+ if (explicitUndefinedPassword && !runtimeEnvsAllowDevelopmentDefaults()) {
325
+ log.warn(
326
+ 'buildConfig({ password: undefined }) preserves the env/default password rather than clearing it. ' +
327
+ 'In production-like environments, a password is always required and cannot be cleared.',
328
+ );
329
+ }
330
+ const runtimeDefaultConfig = {
331
+ ...defaultConfig,
332
+ password: env.RENDERER_PASSWORD,
333
+ // Re-evaluate env-derived defaults at build time in case env vars are set post-import.
334
+ replayServerAsyncOperationLogs: defaultReplayServerAsyncOperationLogs(),
335
+ };
336
+ config = { ...runtimeDefaultConfig, ...userConfig };
337
+ if (explicitUndefinedPassword) {
338
+ config.password = runtimeDefaultConfig.password;
339
+ }
257
340
 
258
341
  // Handle bundlePath deprecation
259
342
  if ('bundlePath' in userConfig) {
@@ -319,6 +402,12 @@ export function buildConfig(providedUserConfig?: Partial<Config>): Config {
319
402
  process.exit(1);
320
403
  }
321
404
 
405
+ const passwordValidationError = validatePasswordForProduction(config);
406
+ if (passwordValidationError) {
407
+ log.error(passwordValidationError);
408
+ process.exit(1);
409
+ }
410
+
322
411
  log.level = config.logLevel;
323
412
  return config;
324
413
  }
package/src/worker.ts CHANGED
@@ -162,6 +162,9 @@ export default function run(config: Partial<Config>) {
162
162
 
163
163
  const { serverBundleCachePath, logHttpLevel, port, host, fastifyServerOptions, workersCount } = getConfig();
164
164
 
165
+ // The renderer uses cleartext HTTP/2 (h2c). Node's `allowHTTP1` option only
166
+ // applies to TLS servers (http2.createSecureServer), so it cannot enable
167
+ // HTTP/1.1 Kubernetes httpGet probes on this listener.
165
168
  const app = fastify({
166
169
  http2: useHttp2 as true,
167
170
  bodyLimit: 104857600, // 100 MB
@@ -1,11 +1,21 @@
1
1
  describe('configBuilder', () => {
2
- const originalRendererHost = process.env.RENDERER_HOST;
2
+ const envVarsToRestore = [
3
+ 'RENDERER_HOST',
4
+ 'NODE_ENV',
5
+ 'RENDERER_PASSWORD',
6
+ 'RAILS_ENV',
7
+ 'REPLAY_SERVER_ASYNC_OPERATION_LOGS',
8
+ 'RENDERER_WORKERS_COUNT',
9
+ ] as const;
10
+ const savedEnvValues = Object.fromEntries(envVarsToRestore.map((key) => [key, process.env[key]]));
3
11
 
4
12
  afterEach(() => {
5
- if (originalRendererHost === undefined) {
6
- delete process.env.RENDERER_HOST;
7
- } else {
8
- process.env.RENDERER_HOST = originalRendererHost;
13
+ for (const key of envVarsToRestore) {
14
+ if (savedEnvValues[key] === undefined) {
15
+ delete process.env[key];
16
+ } else {
17
+ process.env[key] = savedEnvValues[key];
18
+ }
9
19
  }
10
20
  jest.restoreAllMocks();
11
21
  jest.resetModules();
@@ -13,17 +23,25 @@ describe('configBuilder', () => {
13
23
 
14
24
  function loadConfigBuilderWithMockedLogger() {
15
25
  const info = jest.fn();
26
+ const error = jest.fn();
27
+ const warn = jest.fn();
16
28
  jest.doMock('../src/shared/log', () => ({
17
29
  __esModule: true,
18
30
  default: {
19
31
  info,
20
- error: jest.fn(),
21
- warn: jest.fn(),
32
+ error,
33
+ warn,
22
34
  fatal: jest.fn(),
23
35
  },
24
36
  }));
25
37
  const { buildConfig, logSanitizedConfig } = jest.requireActual('../src/shared/configBuilder');
26
- return { buildConfig, logSanitizedConfig, info };
38
+ return { buildConfig, logSanitizedConfig, info, error, warn };
39
+ }
40
+
41
+ function mockProcessExit() {
42
+ return jest.spyOn(process, 'exit').mockImplementation(((code?: number) => {
43
+ throw new Error(`process.exit: ${code ?? 0}`);
44
+ }) as never);
27
45
  }
28
46
 
29
47
  function envValuesUsedForRenderedConfig(userConfig: { host?: string }) {
@@ -51,4 +69,301 @@ describe('configBuilder', () => {
51
69
 
52
70
  expect(envValues.RENDERER_HOST).toBe(false);
53
71
  });
72
+
73
+ it('does not mark RENDERER_PASSWORD as env-provided when password is explicitly overridden', () => {
74
+ process.env.RENDERER_PASSWORD = 'env-password';
75
+ const { buildConfig, logSanitizedConfig, info } = loadConfigBuilderWithMockedLogger();
76
+
77
+ buildConfig({ password: '' });
78
+ logSanitizedConfig();
79
+
80
+ const logPayload = info.mock.calls[0][0] as Record<string, unknown>;
81
+ const envValues = logPayload['ENV values used for settings (use "RENDERER_" prefix)'] as Record<
82
+ string,
83
+ unknown
84
+ >;
85
+
86
+ expect(envValues.RENDERER_PASSWORD).toBe(false);
87
+ });
88
+
89
+ it('masks module-load password defaults in sanitized logs', () => {
90
+ process.env.RENDERER_PASSWORD = 'env-password';
91
+ const { buildConfig, logSanitizedConfig, info } = loadConfigBuilderWithMockedLogger();
92
+
93
+ buildConfig();
94
+ logSanitizedConfig();
95
+
96
+ const logPayload = info.mock.calls[0][0] as Record<string, unknown>;
97
+ const defaultSettings = logPayload[
98
+ 'Default settings at module load (env-backed values may lag current runtime)'
99
+ ] as Record<string, unknown>;
100
+
101
+ expect(defaultSettings.password).toBe('<MASKED>');
102
+ });
103
+
104
+ it('labels an empty-string password override explicitly in sanitized logs', () => {
105
+ const { buildConfig, logSanitizedConfig, info } = loadConfigBuilderWithMockedLogger();
106
+
107
+ buildConfig({ password: '' });
108
+ logSanitizedConfig();
109
+
110
+ const logPayload = info.mock.calls[0][0] as Record<string, unknown>;
111
+ const finalSettings = logPayload['Final renderer settings'] as Record<string, unknown>;
112
+
113
+ expect(finalSettings.password).toBe('<EMPTY STRING>');
114
+ });
115
+
116
+ describe('password validation in production-like environments', () => {
117
+ it('throws when no password is set in production', () => {
118
+ process.env.NODE_ENV = 'production';
119
+ delete process.env.RENDERER_PASSWORD;
120
+ const processExit = mockProcessExit();
121
+
122
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
123
+
124
+ expect(() => buildConfig()).toThrow('process.exit: 1');
125
+ expect(processExit).toHaveBeenCalledWith(1);
126
+ });
127
+
128
+ it('throws when no password is set in staging', () => {
129
+ process.env.NODE_ENV = 'staging';
130
+ delete process.env.RENDERER_PASSWORD;
131
+ const processExit = mockProcessExit();
132
+
133
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
134
+
135
+ expect(() => buildConfig()).toThrow('process.exit: 1');
136
+ expect(processExit).toHaveBeenCalledWith(1);
137
+ });
138
+
139
+ it('does not throw when password is set via env in production', () => {
140
+ process.env.NODE_ENV = 'production';
141
+ process.env.RENDERER_PASSWORD = 'secure-password';
142
+
143
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
144
+
145
+ expect(() => buildConfig()).not.toThrow();
146
+ });
147
+
148
+ it('does not throw when password is set via config in production', () => {
149
+ process.env.NODE_ENV = 'production';
150
+ delete process.env.RENDERER_PASSWORD;
151
+
152
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
153
+
154
+ expect(() => buildConfig({ password: 'secure-password' })).not.toThrow();
155
+ });
156
+
157
+ it('does not throw in development without a password', () => {
158
+ process.env.NODE_ENV = 'development';
159
+ delete process.env.RENDERER_PASSWORD;
160
+
161
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
162
+
163
+ expect(() => buildConfig()).not.toThrow();
164
+ });
165
+
166
+ it('does not throw in test without a password', () => {
167
+ process.env.NODE_ENV = 'test';
168
+ delete process.env.RENDERER_PASSWORD;
169
+
170
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
171
+
172
+ expect(() => buildConfig()).not.toThrow();
173
+ });
174
+
175
+ it('throws when RAILS_ENV is production even if NODE_ENV is development', () => {
176
+ process.env.NODE_ENV = 'development';
177
+ process.env.RAILS_ENV = 'production';
178
+ delete process.env.RENDERER_PASSWORD;
179
+ const processExit = mockProcessExit();
180
+
181
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
182
+
183
+ expect(() => buildConfig()).toThrow('process.exit: 1');
184
+ expect(processExit).toHaveBeenCalledWith(1);
185
+ });
186
+
187
+ it('throws when NODE_ENV is production even if RAILS_ENV is development', () => {
188
+ process.env.NODE_ENV = 'production';
189
+ process.env.RAILS_ENV = 'development';
190
+ delete process.env.RENDERER_PASSWORD;
191
+ const processExit = mockProcessExit();
192
+
193
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
194
+
195
+ expect(() => buildConfig()).toThrow('process.exit: 1');
196
+ expect(processExit).toHaveBeenCalledWith(1);
197
+ });
198
+
199
+ it('throws when RAILS_ENV is production and NODE_ENV is unset', () => {
200
+ delete process.env.NODE_ENV;
201
+ process.env.RAILS_ENV = 'production';
202
+ delete process.env.RENDERER_PASSWORD;
203
+ const processExit = mockProcessExit();
204
+
205
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
206
+
207
+ expect(() => buildConfig()).toThrow('process.exit: 1');
208
+ expect(processExit).toHaveBeenCalledWith(1);
209
+ });
210
+
211
+ it('throws when NODE_ENV is staging even if RAILS_ENV is development', () => {
212
+ process.env.NODE_ENV = 'staging';
213
+ process.env.RAILS_ENV = 'development';
214
+ delete process.env.RENDERER_PASSWORD;
215
+ const processExit = mockProcessExit();
216
+
217
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
218
+
219
+ expect(() => buildConfig()).toThrow('process.exit: 1');
220
+ expect(processExit).toHaveBeenCalledWith(1);
221
+ });
222
+
223
+ it('throws when RAILS_ENV is production even if NODE_ENV is test', () => {
224
+ process.env.NODE_ENV = 'test';
225
+ process.env.RAILS_ENV = 'production';
226
+ delete process.env.RENDERER_PASSWORD;
227
+ const processExit = mockProcessExit();
228
+
229
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
230
+
231
+ expect(() => buildConfig()).toThrow('process.exit: 1');
232
+ expect(processExit).toHaveBeenCalledWith(1);
233
+ });
234
+
235
+ it('does not throw when RAILS_ENV is development and NODE_ENV is development', () => {
236
+ process.env.NODE_ENV = 'development';
237
+ process.env.RAILS_ENV = 'development';
238
+ delete process.env.RENDERER_PASSWORD;
239
+
240
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
241
+
242
+ expect(() => buildConfig()).not.toThrow();
243
+ });
244
+
245
+ it('does not throw when NODE_ENV uses mixed-case development value', () => {
246
+ process.env.NODE_ENV = 'Development';
247
+ process.env.RAILS_ENV = 'development';
248
+ delete process.env.RENDERER_PASSWORD;
249
+
250
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
251
+
252
+ expect(() => buildConfig()).not.toThrow();
253
+ });
254
+
255
+ it('does not throw when only RAILS_ENV is development and NODE_ENV is unset', () => {
256
+ delete process.env.NODE_ENV;
257
+ process.env.RAILS_ENV = 'development';
258
+ delete process.env.RENDERER_PASSWORD;
259
+
260
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
261
+
262
+ expect(() => buildConfig()).not.toThrow();
263
+ });
264
+
265
+ it('throws when neither NODE_ENV nor RAILS_ENV is set (fail-closed)', () => {
266
+ delete process.env.NODE_ENV;
267
+ delete process.env.RAILS_ENV;
268
+ delete process.env.RENDERER_PASSWORD;
269
+ const processExit = mockProcessExit();
270
+
271
+ const { buildConfig, error } = loadConfigBuilderWithMockedLogger();
272
+
273
+ expect(() => buildConfig()).toThrow('process.exit: 1');
274
+ expect(processExit).toHaveBeenCalledWith(1);
275
+ expect(error).toHaveBeenCalledWith(
276
+ expect.stringContaining('(neither set) — treated as production-like; RENDERER_PASSWORD required'),
277
+ );
278
+ });
279
+
280
+ it('does not throw when password is set after module import', () => {
281
+ process.env.NODE_ENV = 'production';
282
+ delete process.env.RENDERER_PASSWORD;
283
+
284
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
285
+
286
+ process.env.RENDERER_PASSWORD = 'late-loaded-password';
287
+
288
+ expect(() => buildConfig()).not.toThrow();
289
+ });
290
+
291
+ it('does not treat undefined user password as override when env password exists', () => {
292
+ process.env.NODE_ENV = 'production';
293
+ process.env.RENDERER_PASSWORD = 'late-loaded-password';
294
+
295
+ const { buildConfig, warn } = loadConfigBuilderWithMockedLogger();
296
+
297
+ expect(() => buildConfig({ password: undefined })).not.toThrow();
298
+ expect(warn).toHaveBeenCalledWith(
299
+ expect.stringContaining('buildConfig({ password: undefined }) preserves the env/default password'),
300
+ );
301
+ });
302
+
303
+ it('does not warn about undefined password in development environments', () => {
304
+ process.env.NODE_ENV = 'development';
305
+ process.env.RENDERER_PASSWORD = 'dev-password';
306
+
307
+ const { buildConfig, warn } = loadConfigBuilderWithMockedLogger();
308
+
309
+ buildConfig({ password: undefined });
310
+ expect(warn).not.toHaveBeenCalled();
311
+ });
312
+
313
+ it('keeps normal spread semantics for non-password undefined overrides', () => {
314
+ process.env.NODE_ENV = 'production';
315
+ process.env.RENDERER_PASSWORD = 'late-loaded-password';
316
+ process.env.RENDERER_WORKERS_COUNT = '7';
317
+
318
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
319
+
320
+ expect(buildConfig({ workersCount: undefined }).workersCount).toBeUndefined();
321
+ });
322
+ });
323
+
324
+ describe('replayServerAsyncOperationLogs defaults', () => {
325
+ it('defaults to true when NODE_ENV is development', () => {
326
+ process.env.NODE_ENV = 'development';
327
+ delete process.env.RAILS_ENV;
328
+ delete process.env.REPLAY_SERVER_ASYNC_OPERATION_LOGS;
329
+
330
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
331
+ const config = buildConfig();
332
+
333
+ expect(config.replayServerAsyncOperationLogs).toBe(true);
334
+ });
335
+
336
+ it('defaults to true when NODE_ENV is development even if RAILS_ENV is production', () => {
337
+ process.env.NODE_ENV = 'development';
338
+ process.env.RAILS_ENV = 'production';
339
+ delete process.env.REPLAY_SERVER_ASYNC_OPERATION_LOGS;
340
+
341
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
342
+ const config = buildConfig({ password: 'secure-password' });
343
+
344
+ expect(config.replayServerAsyncOperationLogs).toBe(true);
345
+ });
346
+
347
+ it('defaults to false in test when no explicit override is provided', () => {
348
+ process.env.NODE_ENV = 'test';
349
+ delete process.env.RAILS_ENV;
350
+ delete process.env.REPLAY_SERVER_ASYNC_OPERATION_LOGS;
351
+
352
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
353
+ const config = buildConfig();
354
+
355
+ expect(config.replayServerAsyncOperationLogs).toBe(false);
356
+ });
357
+
358
+ it('treats mixed-case NODE_ENV development values as development', () => {
359
+ process.env.NODE_ENV = 'Development';
360
+ delete process.env.RAILS_ENV;
361
+ delete process.env.REPLAY_SERVER_ASYNC_OPERATION_LOGS;
362
+
363
+ const { buildConfig } = loadConfigBuilderWithMockedLogger();
364
+ const config = buildConfig();
365
+
366
+ expect(config.replayServerAsyncOperationLogs).toBe(true);
367
+ });
368
+ });
54
369
  });