Skip to content

Commit 244ef62

Browse files
authored
fix(node): feed in our API key and options to the process end flush (#1284)
## 🧰 Changes This fixes an issue in the Node SDK where when we call `process.on('exit')` to flush the log queue when the process ends we aren't feeding an API key or SDK options into the `doSend()` call, resulting in the SDK crashing the server it's being run in: ``` [server] /Users/username/Documents/GitHub/readme/node_modules/readmeio/dist/src/lib/metrics-log.js:85 [server] if (options.fireAndForget) { [server] ^ [server] [server] TypeError: Cannot read properties of undefined (reading 'fireAndForget') [server] at metricsAPICall (/Users/username/Documents/GitHub/readme/node_modules/readmeio/src/lib/metrics-log.ts:134:15) [server] at process.doSend (/Users/username/Documents/GitHub/readme/node_modules/readmeio/src/lib/log.ts:28:17) [server] at process.emit (node:events:531:35) [server] at process.emit (node:domain:489:12) [server] at process.emit.sharedData.processEmitHook.installedValue [as emit] (/Users/username/Documents/GitHub/readme/node_modules/@cspotcode/source-map-support/source-map-support.js:745:40) [server] at process.exit (node:internal/process/per_thread:240:15) [server] at process.emit.sharedData.processEmitHook.installedValue [as emit] (/Users/username/Documents/GitHub/readme/node_modules/@cspotcode/source-map-support/source-map-support.js:750:17) [server] at process._fatalException (node:internal/process/execution:155:25) [server] [server] Node.js v22.21.0 [server] [nodemon] app crashed - waiting for file changes before starting... ```
1 parent 35e81e6 commit 244ef62

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

packages/node/src/lib/log.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import { metricsAPICall } from './metrics-log';
1717
import { patchRequest } from './patch-request';
1818
import { patchResponse } from './patch-response';
1919

20+
let sdkAPIKey: string;
21+
let sdkOptions: Options;
2022
let queue: OutgoingLogBody[] = [];
2123
function doSend(readmeApiKey: string, options: Options) {
2224
// Copy the queue so we can send all the requests in one batch
@@ -34,8 +36,14 @@ function doSend(readmeApiKey: string, options: Options) {
3436

3537
logger.debug({ message: 'Queue flushed.', args: { queue } });
3638
}
39+
3740
// Make sure we flush the queue if the process is exited
38-
process.on('exit', doSend);
41+
process.on('exit', () => {
42+
if (sdkAPIKey && sdkOptions) {
43+
return doSend(sdkAPIKey, sdkOptions);
44+
}
45+
return;
46+
});
3947

4048
/* eslint-disable typescript-sort-keys/interface */
4149
export interface ExtendedIncomingMessage extends IncomingMessage {
@@ -117,6 +125,11 @@ export function log(
117125
else logger.configure({ isLoggingEnabled: true, strategy: options.logger });
118126
}
119127

128+
if (!sdkAPIKey || !sdkOptions) {
129+
sdkAPIKey = readmeApiKey;
130+
sdkOptions = options;
131+
}
132+
120133
// Ensures the buffer length is between 1 and 30
121134
const bufferLength = clamp(options.bufferLength || config.bufferLength, 1, 30);
122135

0 commit comments

Comments
 (0)