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.
- 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/handleRenderRequest.d.ts +1 -0
- package/lib/worker/handleRenderRequest.d.ts.map +1 -1
- package/lib/worker/handleRenderRequest.js +13 -9
- package/lib/worker/handleRenderRequest.js.map +1 -1
- package/lib/worker.d.ts.map +1 -1
- package/lib/worker.js +57 -70
- package/lib/worker.js.map +1 -1
- package/package.json +3 -3
- package/src/shared/configBuilder.ts +100 -11
- package/src/worker/handleRenderRequest.ts +14 -11
- package/src/worker.ts +70 -85
- package/tests/configBuilder.test.ts +323 -8
- package/tests/uploadRaceCondition.test.ts +9 -9
- package/tests/worker.test.ts +27 -2
|
@@ -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;
|
|
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(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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(
|
|
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(
|
|
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":";AAAA;;;;;GAKG;;;;;
|
|
1
|
+
{"version":3,"file":"handleRenderRequest.js","sourceRoot":"","sources":["../../src/worker/handleRenderRequest.ts"],"names":[],"mappings":"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"}
|
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;
|
|
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
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
|
291
|
-
const
|
|
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
|
-
//
|
|
295
|
-
//
|
|
296
|
-
// are mutually exclusive.
|
|
297
|
-
//
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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
|
|
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.
|
|
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
|
}
|
|
@@ -77,7 +77,7 @@ async function prepareResult(
|
|
|
77
77
|
* @param assetsToCopy might be null
|
|
78
78
|
*/
|
|
79
79
|
async function handleNewBundleProvided(
|
|
80
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|