react-on-rails-pro-node-renderer 16.5.0 → 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.
@@ -10,6 +10,7 @@ export type ProvidedNewBundle = {
10
10
  timestamp: string | number;
11
11
  bundle: Asset;
12
12
  };
13
+ export declare function handleNewBundlesProvided(requestContext: string, providedNewBundles: ProvidedNewBundle[], assetsToCopy: Asset[] | null | undefined): Promise<ResponseResult | undefined>;
13
14
  /**
14
15
  * Creates the result for the Fastify server to use.
15
16
  * @returns Promise where the result contains { status, data, headers } to
@@ -1 +1 @@
1
- {"version":3,"file":"handleRenderRequest.d.ts","sourceRoot":"","sources":["../../src/worker/handleRenderRequest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EACL,KAAK,EAKL,cAAc,EAKf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AAqJF;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,YAAY,EACZ,cAAc,GACf,EAAE;IACD,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,GAAG,OAAO,CAAC,cAAc,CAAC,CAkE1B"}
1
+ {"version":3,"file":"handleRenderRequest.d.ts","sourceRoot":"","sources":["../../src/worker/handleRenderRequest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EACL,KAAK,EAKL,cAAc,EAKf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AA2HF,wBAAsB,wBAAwB,CAC5C,cAAc,EAAE,MAAM,EACtB,kBAAkB,EAAE,iBAAiB,EAAE,EACvC,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,GAAG,SAAS,GACvC,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAuBrC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,YAAY,EACZ,cAAc,GACf,EAAE;IACD,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,GAAG,OAAO,CAAC,cAAc,CAAC,CAkE1B"}
@@ -9,6 +9,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.handleNewBundlesProvided = handleNewBundlesProvided;
12
13
  exports.handleRenderRequest = handleRenderRequest;
13
14
  const cluster_1 = __importDefault(require("cluster"));
14
15
  const path_1 = __importDefault(require("path"));
@@ -57,7 +58,7 @@ async function prepareResult(renderingRequest, bundleFilePathPerTimestamp) {
57
58
  * @param renderingRequest
58
59
  * @param assetsToCopy might be null
59
60
  */
60
- async function handleNewBundleProvided(renderingRequest, providedNewBundle, assetsToCopy) {
61
+ async function handleNewBundleProvided(requestContext, providedNewBundle, assetsToCopy) {
61
62
  const bundleFilePathPerTimestamp = (0, utils_js_1.getRequestBundleFilePath)(providedNewBundle.timestamp);
62
63
  const bundleDirectory = path_1.default.dirname(bundleFilePathPerTimestamp);
63
64
  await (0, promises_1.mkdir)(bundleDirectory, { recursive: true });
@@ -69,27 +70,30 @@ async function handleNewBundleProvided(renderingRequest, providedNewBundle, asse
69
70
  lockfileName = name;
70
71
  lockAcquired = wasLockAcquired;
71
72
  if (!wasLockAcquired) {
72
- const msg = (0, utils_js_1.formatExceptionMessage)(renderingRequest, errorMessage, `Failed to acquire lock ${lockfileName}. Worker: ${(0, utils_js_1.workerIdLabel)()}.`);
73
+ const msg = (0, utils_js_1.formatExceptionMessage)(requestContext, errorMessage, `Failed to acquire lock ${lockfileName}. Worker: ${(0, utils_js_1.workerIdLabel)()}.`);
73
74
  return (0, utils_js_1.errorResponseResult)(msg);
74
75
  }
75
76
  try {
76
77
  log_js_1.default.info(`Moving uploaded file ${providedNewBundle.bundle.savedFilePath} to ${bundleFilePathPerTimestamp}`);
77
78
  await (0, utils_js_1.moveUploadedAsset)(providedNewBundle.bundle, bundleFilePathPerTimestamp);
78
- if (assetsToCopy) {
79
- await (0, utils_js_1.copyUploadedAssets)(assetsToCopy, bundleDirectory);
80
- }
81
79
  log_js_1.default.info(`Completed moving uploaded file ${providedNewBundle.bundle.savedFilePath} to ${bundleFilePathPerTimestamp}`);
82
80
  }
83
81
  catch (error) {
84
82
  const fileExists = await (0, fileExistsAsync_js_1.default)(bundleFilePathPerTimestamp);
85
83
  if (!fileExists) {
86
- const msg = (0, utils_js_1.formatExceptionMessage)(renderingRequest, error, `Unexpected error when moving the bundle from ${providedNewBundle.bundle.savedFilePath} \
84
+ const msg = (0, utils_js_1.formatExceptionMessage)(requestContext, error, `Unexpected error when moving the bundle from ${providedNewBundle.bundle.savedFilePath} \
87
85
  to ${bundleFilePathPerTimestamp})`);
88
86
  log_js_1.default.error(msg);
89
87
  return (0, utils_js_1.errorResponseResult)(msg);
90
88
  }
91
89
  log_js_1.default.info('File exists when trying to overwrite bundle %s. Assuming bundle written by other thread', bundleFilePathPerTimestamp);
92
90
  }
91
+ // Always copy assets to the bundle directory — even if the bundle was
92
+ // already present (e.g., from a prior upload or another worker).
93
+ // copyUploadedAssets uses overwrite:true, so this is idempotent.
94
+ if (assetsToCopy) {
95
+ await (0, utils_js_1.copyUploadedAssets)(assetsToCopy, bundleDirectory);
96
+ }
93
97
  return undefined;
94
98
  }
95
99
  finally {
@@ -99,15 +103,15 @@ to ${bundleFilePathPerTimestamp})`);
99
103
  await (0, locks_js_1.unlock)(lockfileName);
100
104
  }
101
105
  catch (error) {
102
- const msg = (0, utils_js_1.formatExceptionMessage)(renderingRequest, error, `Error unlocking ${lockfileName} from worker ${(0, utils_js_1.workerIdLabel)()}.`);
106
+ const msg = (0, utils_js_1.formatExceptionMessage)(requestContext, error, `Error unlocking ${lockfileName} from worker ${(0, utils_js_1.workerIdLabel)()}.`);
103
107
  log_js_1.default.warn(msg);
104
108
  }
105
109
  }
106
110
  }
107
111
  }
108
- async function handleNewBundlesProvided(renderingRequest, providedNewBundles, assetsToCopy) {
112
+ async function handleNewBundlesProvided(requestContext, providedNewBundles, assetsToCopy) {
109
113
  log_js_1.default.info('Worker received new bundles: %s', providedNewBundles);
110
- const handlingPromises = providedNewBundles.map((providedNewBundle) => handleNewBundleProvided(renderingRequest, providedNewBundle, assetsToCopy));
114
+ const handlingPromises = providedNewBundles.map((providedNewBundle) => handleNewBundleProvided(requestContext, providedNewBundle, assetsToCopy));
111
115
  // Defensive: use allSettled so that if handleNewBundleProvided ever throws
112
116
  // unexpectedly, all in-flight operations still complete before the handler
113
117
  // returns and the onResponse hook deletes req.uploadDir. Currently
@@ -1 +1 @@
1
- {"version":3,"file":"handleRenderRequest.js","sourceRoot":"","sources":["../../src/worker/handleRenderRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handleRenderRequest.js","sourceRoot":"","sources":["../../src/worker/handleRenderRequest.ts"],"names":[],"mappings":"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"}
@@ -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;AAKvF,OAAO,EAOL,KAAK,EAIN,MAAM,mBAAmB,CAAC;AAW3B,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;AAiCD,eAAO,MAAM,YAAY,YAExB,CAAC;AAkBF,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;;EAqWlD"}
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
@@ -59,7 +59,6 @@ const authHandler_js_1 = __importDefault(require("./worker/authHandler.js"));
59
59
  const handleRenderRequest_js_1 = require("./worker/handleRenderRequest.js");
60
60
  const handleGracefulShutdown_js_1 = __importDefault(require("./worker/handleGracefulShutdown.js"));
61
61
  const utils_js_1 = require("./shared/utils.js");
62
- const locks_js_1 = require("./shared/locks.js");
63
62
  const tracing_js_1 = require("./shared/tracing.js");
64
63
  const fastifyConfigFunctions = [];
65
64
  /**
@@ -95,6 +94,39 @@ function assertAsset(value, key) {
95
94
  throw new Error(`React On Rails Error: Expected an asset for key: ${key}`);
96
95
  }
97
96
  }
97
+ /**
98
+ * Parses the multipart form body to separate bundle files from shared assets.
99
+ * Used by both the render and /upload-assets endpoints to avoid duplicating
100
+ * bundle-vs-asset classification logic.
101
+ *
102
+ * @param body The parsed multipart request body.
103
+ * @param primaryBundleTimestamp If provided, a field with key `"bundle"` is
104
+ * treated as a bundle for this timestamp (render endpoint convention).
105
+ */
106
+ function extractBundlesAndAssets(body, primaryBundleTimestamp) {
107
+ const providedNewBundles = [];
108
+ const assetsToCopy = [];
109
+ Object.entries(body).forEach(([key, value]) => {
110
+ if (key === 'bundle' && primaryBundleTimestamp != null) {
111
+ assertAsset(value, key);
112
+ providedNewBundles.push({ timestamp: primaryBundleTimestamp, bundle: value });
113
+ }
114
+ else if (key.startsWith('bundle_')) {
115
+ const timestamp = key.slice('bundle_'.length);
116
+ if (!timestamp) {
117
+ log_js_1.default.warn('Received form field with key "bundle_" but no hash suffix — possible bug in the Ruby client');
118
+ }
119
+ else {
120
+ assertAsset(value, key);
121
+ providedNewBundles.push({ timestamp, bundle: value });
122
+ }
123
+ }
124
+ else if (isAsset(value)) {
125
+ assetsToCopy.push(value);
126
+ }
127
+ });
128
+ return { providedNewBundles, assetsToCopy };
129
+ }
98
130
  // Remove after this issue is resolved: https://github.com/fastify/light-my-request/issues/315
99
131
  let useHttp2 = true;
100
132
  // Call before any test using `app.inject()`
@@ -117,6 +149,9 @@ function run(config) {
117
149
  // getConfig():
118
150
  (0, configBuilder_js_1.buildConfig)(config);
119
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.
120
155
  const app = (0, fastify_1.default)({
121
156
  http2: useHttp2,
122
157
  bodyLimit: 104857600, // 100 MB
@@ -232,21 +267,7 @@ function run(config) {
232
267
  // }
233
268
  const { renderingRequest } = req.body;
234
269
  const { bundleTimestamp } = req.params;
235
- const providedNewBundles = [];
236
- const assetsToCopy = [];
237
- Object.entries(req.body).forEach(([key, value]) => {
238
- if (key === 'bundle') {
239
- assertAsset(value, key);
240
- providedNewBundles.push({ timestamp: bundleTimestamp, bundle: value });
241
- }
242
- else if (key.startsWith('bundle_')) {
243
- assertAsset(value, key);
244
- providedNewBundles.push({ timestamp: key.replace('bundle_', ''), bundle: value });
245
- }
246
- else if (isAsset(value)) {
247
- assetsToCopy.push(value);
248
- }
249
- });
270
+ const { providedNewBundles, assetsToCopy } = extractBundlesAndAssets(req.body, bundleTimestamp);
250
271
  try {
251
272
  const dependencyBundleTimestamps = extractBodyArrayField(req.body, 'dependencyBundleTimestamps');
252
273
  await (0, tracing_js_1.trace)(async (context) => {
@@ -274,74 +295,40 @@ function run(config) {
274
295
  });
275
296
  // There can be additional files that might be required at the runtime.
276
297
  // Since the remote renderer doesn't contain any assets, they must be uploaded manually.
298
+ // Bundle files use the form key convention "bundle_<hash>" and are placed in
299
+ // their own directory; remaining assets are copied to every bundle directory.
277
300
  app.post('/upload-assets', async (req, res) => {
278
301
  if (!(await requestPrechecks(req, res))) {
279
302
  return;
280
303
  }
281
- const assets = Object.values(req.body).filter(isAsset);
282
- // Handle targetBundles as either a string or an array
283
- const targetBundles = extractBodyArrayField(req.body, 'targetBundles');
284
- if (!targetBundles || targetBundles.length === 0) {
285
- const errorMsg = 'No targetBundles provided. As of protocol version 2.0.0, targetBundles is required.';
304
+ const { providedNewBundles, assetsToCopy } = extractBundlesAndAssets(req.body);
305
+ if (providedNewBundles.length === 0) {
306
+ const errorMsg = 'No bundle_<hash> fields provided. ' +
307
+ 'The /upload-assets endpoint requires at least one bundle file with a "bundle_<hash>" form key.';
286
308
  log_js_1.default.error(errorMsg);
287
309
  await setResponse((0, utils_js_1.errorResponseResult)(errorMsg), res);
288
310
  return;
289
311
  }
290
- const assetsDescription = JSON.stringify(assets.map((asset) => asset.filename));
291
- const taskDescription = `Uploading files ${assetsDescription} to bundle directories: ${targetBundles.join(', ')}`;
312
+ const bundleNames = providedNewBundles.map((b) => b.bundle.filename);
313
+ const assetNames = assetsToCopy.map((a) => a.filename);
314
+ const taskDescription = `Uploading bundles [${bundleNames.join(', ')}] with assets [${assetNames.join(', ')}]`;
292
315
  log_js_1.default.info(taskDescription);
293
316
  try {
294
- // Use per-bundle locks (same lock key as handleRenderRequest) so that
295
- // asset copies and render-request bundle writes to the same directory
296
- // are mutually exclusive. See https://github.com/shakacode/react_on_rails/issues/2463
297
- //
298
- // Use allSettled (not Promise.all) to ensure every in-flight copy
299
- // finishes before the handler returns. Otherwise the onResponse hook
300
- // can delete req.uploadDir while background copies still read from it.
301
- const copyPromises = targetBundles.map(async (bundleTimestamp) => {
302
- const bundleDirectory = (0, utils_js_1.getBundleDirectory)(bundleTimestamp);
303
- await (0, promises_1.mkdir)(bundleDirectory, { recursive: true });
304
- const bundleFilePath = (0, utils_js_1.getRequestBundleFilePath)(bundleTimestamp);
305
- const { lockfileName, wasLockAcquired, errorMessage } = await (0, locks_js_1.lock)(bundleFilePath);
306
- if (!wasLockAcquired) {
307
- const msg = (0, utils_js_1.formatExceptionMessage)(taskDescription, errorMessage, `Failed to acquire lock ${lockfileName}. Worker: ${(0, utils_js_1.workerIdLabel)()}.`);
308
- throw new Error(msg);
309
- }
310
- try {
311
- await (0, utils_js_1.copyUploadedAssets)(assets, bundleDirectory);
312
- log_js_1.default.info(`Copied assets to bundle directory: ${bundleDirectory}`);
313
- }
314
- finally {
315
- try {
316
- await (0, locks_js_1.unlock)(lockfileName);
317
- }
318
- catch (error) {
319
- log_js_1.default.warn({
320
- msg: `Error unlocking ${lockfileName} from worker ${(0, utils_js_1.workerIdLabel)()}`,
321
- err: error,
322
- task: taskDescription,
323
- });
324
- }
325
- }
326
- });
327
- const results = await Promise.allSettled(copyPromises);
328
- const firstFailure = results.find((r) => r.status === 'rejected');
329
- if (firstFailure) {
330
- throw firstFailure.reason;
317
+ // Reuses the same per-bundle lock + move/copy logic as the render
318
+ // endpoint so that concurrent /upload-assets and render requests
319
+ // targeting the same bundle directory are mutually exclusive.
320
+ // See https://github.com/shakacode/react_on_rails/issues/2463
321
+ const result = await (0, handleRenderRequest_js_1.handleNewBundlesProvided)(taskDescription, providedNewBundles, assetsToCopy);
322
+ if (result) {
323
+ await setResponse(result, res);
324
+ return;
331
325
  }
332
- await setResponse({
333
- status: 200,
334
- headers: {},
335
- }, res);
326
+ await setResponse({ status: 200, headers: {} }, res);
336
327
  }
337
328
  catch (err) {
338
- const msg = 'ERROR when trying to copy assets';
329
+ const msg = 'ERROR when trying to upload bundles and assets';
339
330
  const message = `${msg}. ${err}. Task: ${taskDescription}`;
340
- log_js_1.default.error({
341
- msg,
342
- err,
343
- task: taskDescription,
344
- });
331
+ log_js_1.default.error({ msg, err, task: taskDescription });
345
332
  await setResponse((0, utils_js_1.errorResponseResult)(message), res);
346
333
  }
347
334
  });
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.0",
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.0"
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
  }
@@ -77,7 +77,7 @@ async function prepareResult(
77
77
  * @param assetsToCopy might be null
78
78
  */
79
79
  async function handleNewBundleProvided(
80
- renderingRequest: string,
80
+ requestContext: string,
81
81
  providedNewBundle: ProvidedNewBundle,
82
82
  assetsToCopy: Asset[] | null | undefined,
83
83
  ): Promise<ResponseResult | undefined> {
@@ -95,7 +95,7 @@ async function handleNewBundleProvided(
95
95
 
96
96
  if (!wasLockAcquired) {
97
97
  const msg = formatExceptionMessage(
98
- renderingRequest,
98
+ requestContext,
99
99
  errorMessage,
100
100
  `Failed to acquire lock ${lockfileName}. Worker: ${workerIdLabel()}.`,
101
101
  );
@@ -107,10 +107,6 @@ async function handleNewBundleProvided(
107
107
  `Moving uploaded file ${providedNewBundle.bundle.savedFilePath} to ${bundleFilePathPerTimestamp}`,
108
108
  );
109
109
  await moveUploadedAsset(providedNewBundle.bundle, bundleFilePathPerTimestamp);
110
- if (assetsToCopy) {
111
- await copyUploadedAssets(assetsToCopy, bundleDirectory);
112
- }
113
-
114
110
  log.info(
115
111
  `Completed moving uploaded file ${providedNewBundle.bundle.savedFilePath} to ${bundleFilePathPerTimestamp}`,
116
112
  );
@@ -118,7 +114,7 @@ async function handleNewBundleProvided(
118
114
  const fileExists = await fileExistsAsync(bundleFilePathPerTimestamp);
119
115
  if (!fileExists) {
120
116
  const msg = formatExceptionMessage(
121
- renderingRequest,
117
+ requestContext,
122
118
  error,
123
119
  `Unexpected error when moving the bundle from ${providedNewBundle.bundle.savedFilePath} \
124
120
  to ${bundleFilePathPerTimestamp})`,
@@ -132,6 +128,13 @@ to ${bundleFilePathPerTimestamp})`,
132
128
  );
133
129
  }
134
130
 
131
+ // Always copy assets to the bundle directory — even if the bundle was
132
+ // already present (e.g., from a prior upload or another worker).
133
+ // copyUploadedAssets uses overwrite:true, so this is idempotent.
134
+ if (assetsToCopy) {
135
+ await copyUploadedAssets(assetsToCopy, bundleDirectory);
136
+ }
137
+
135
138
  return undefined;
136
139
  } finally {
137
140
  if (lockAcquired && lockfileName) {
@@ -140,7 +143,7 @@ to ${bundleFilePathPerTimestamp})`,
140
143
  await unlock(lockfileName);
141
144
  } catch (error) {
142
145
  const msg = formatExceptionMessage(
143
- renderingRequest,
146
+ requestContext,
144
147
  error,
145
148
  `Error unlocking ${lockfileName} from worker ${workerIdLabel()}.`,
146
149
  );
@@ -150,15 +153,15 @@ to ${bundleFilePathPerTimestamp})`,
150
153
  }
151
154
  }
152
155
 
153
- async function handleNewBundlesProvided(
154
- renderingRequest: string,
156
+ export async function handleNewBundlesProvided(
157
+ requestContext: string,
155
158
  providedNewBundles: ProvidedNewBundle[],
156
159
  assetsToCopy: Asset[] | null | undefined,
157
160
  ): Promise<ResponseResult | undefined> {
158
161
  log.info('Worker received new bundles: %s', providedNewBundles);
159
162
 
160
163
  const handlingPromises = providedNewBundles.map((providedNewBundle) =>
161
- handleNewBundleProvided(renderingRequest, providedNewBundle, assetsToCopy),
164
+ handleNewBundleProvided(requestContext, providedNewBundle, assetsToCopy),
162
165
  );
163
166
  // Defensive: use allSettled so that if handleNewBundleProvided ever throws
164
167
  // unexpectedly, all in-flight operations still complete before the handler