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.
- package/lib/shared/configBuilder.d.ts +3 -1
- package/lib/shared/configBuilder.d.ts.map +1 -1
- package/lib/shared/configBuilder.js +83 -8
- package/lib/shared/configBuilder.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/worker.d.ts.map +1 -1
- package/lib/worker.js +3 -0
- package/lib/worker.js.map +1 -1
- package/package.json +3 -3
- package/src/shared/configBuilder.ts +100 -11
- package/src/worker.ts +3 -0
- package/tests/configBuilder.test.ts +323 -8
package/lib/worker.d.ts.map
CHANGED
|
@@ -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;;
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
//
|
|
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
|
-
//
|
|
191
|
-
replayServerAsyncOperationLogs:
|
|
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
|
-
|
|
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
|
-
|
|
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':
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
21
|
-
warn
|
|
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
|
});
|