UNPKG

@rudderstack/integrations-lib

Version:

A comprehensive TypeScript library providing shared utilities, SDKs, and tools for RudderStack integrations and destinations.

119 lines 10.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.delay = delay; exports.timeout = timeout; exports.safeExecute = safeExecute; exports.validateAndDefaultOptions = validateAndDefaultOptions; const os_1 = require("os"); const cluster_1 = __importDefault(require("cluster")); const logger = __importStar(require("../logger")); /** * Utility functions for ClusterManager */ /** * Creates a promise that resolves after the specified timeout */ function delay(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } /** * Creates a promise that rejects after the specified timeout */ function timeout(promise, ms, errorMessage) { let timeoutHandle; const timeoutPromise = new Promise((_, reject) => { timeoutHandle = setTimeout(() => { reject(new Error(errorMessage ?? `Operation timed out after ${ms}ms`)); }, ms); }); return Promise.race([ promise.finally(() => { clearTimeout(timeoutHandle); }), timeoutPromise, ]); } /** * Safely executes an async function with error handling */ async function safeExecute(fn, errorMessage) { try { return await fn(); } catch (error) { logger.error(`${errorMessage}:`, error); return undefined; } } /** * Validates ClusterManagerOptions and provides defaults * * @param options - User-provided options * @returns Required options with defaults applied * * @see {@link https://nodejs.org/docs/latest/api/cluster.html#clustersettings Node.js Cluster Settings} */ function validateAndDefaultOptions(options) { const numCPUs = (0, os_1.cpus)().length; return { cluster: options.cluster ?? cluster_1.default, /** * Default serialization method * * Uses 'json' for maximum compatibility across Node.js versions * * @see {@link https://nodejs.org/docs/latest/api/cluster.html#clustersettings Node.js Cluster Settings} */ serialization: options.serialization ?? 'json', primaryFn: options.primaryFn ?? (() => { }), primaryShutdownFn: options.primaryShutdownFn ?? (async () => { }), workerFn: options.workerFn ?? (() => { }), workerShutdownFn: options.workerShutdownFn ?? (async () => { }), pingFrequency: options.pingFrequency ?? 10000, pingTimeout: options.pingTimeout ?? 30000, stuckWorkerRespawnFunc: options.stuckWorkerRespawnFunc ?? (() => true), restartMaxTimes: options.restartMaxTimes ?? 3, shutdownSignals: options.shutdownSignals ?? ['SIGINT', 'SIGTERM'], shutdownTimeout: options.shutdownTimeout ?? 30000, numWorkers: options.numWorkers ?? numCPUs, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2x1c3Rlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLHNCQUlDO0FBS0QsMEJBYUM7QUFLRCxrQ0FVQztBQVVELDhEQTBCQztBQXJGRCwyQkFBMEI7QUFDMUIsc0RBQThCO0FBRTlCLGtEQUFvQztBQUVwQzs7R0FFRztBQUVIOztHQUVHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLEVBQVU7SUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixPQUFPLENBQUksT0FBbUIsRUFBRSxFQUFVLEVBQUUsWUFBcUI7SUFDL0UsSUFBSSxhQUE2QixDQUFDO0lBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3RELGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztRQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNuQixZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBQ0YsY0FBYztLQUNmLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxXQUFXLENBQy9CLEVBQXdCLEVBQ3hCLFlBQW9CO0lBRXBCLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FDdkMsT0FBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsSUFBQSxTQUFJLEdBQUUsQ0FBQyxNQUFNLENBQUM7SUFDOUIsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLGlCQUFPO1FBQ25DOzs7Ozs7V0FNRztRQUNILGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLE1BQU07UUFDOUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDaEQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSyxJQUFtQixFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQy9FLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBUyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssSUFBbUIsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM3RSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxLQUFLO1FBQzdDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLEtBQUs7UUFDekMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixJQUFJLENBQUMsR0FBWSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQy9FLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUM7UUFDN0MsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ2pFLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLEtBQUs7UUFDakQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTztLQUMxQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNwdXMgfSBmcm9tICdvcyc7XG5pbXBvcnQgY2x1c3RlciBmcm9tICdjbHVzdGVyJztcbmltcG9ydCB7IENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIENsdXN0ZXJNYW5hZ2VyXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCByZWplY3RzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dFxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dDxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHRpbWVvdXRIYW5kbGU6IE5vZGVKUy5UaW1lb3V0O1xuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvck1lc3NhZ2UgPz8gYE9wZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKTtcbiAgICB9LCBtcyk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICBwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgIH0pLFxuICAgIHRpbWVvdXRQcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBTYWZlbHkgZXhlY3V0ZXMgYW4gYXN5bmMgZnVuY3Rpb24gd2l0aCBlcnJvciBoYW5kbGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FmZUV4ZWN1dGU8VD4oXG4gIGZuOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYCR7ZXJyb3JNZXNzYWdlfTpgLCBlcnJvcik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBDbHVzdGVyTWFuYWdlck9wdGlvbnMgYW5kIHByb3ZpZGVzIGRlZmF1bHRzXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBVc2VyLXByb3ZpZGVkIG9wdGlvbnNcbiAqIEByZXR1cm5zIFJlcXVpcmVkIG9wdGlvbnMgd2l0aCBkZWZhdWx0cyBhcHBsaWVkXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9jbHVzdGVyLmh0bWwjY2x1c3RlcnNldHRpbmdzIE5vZGUuanMgQ2x1c3RlciBTZXR0aW5nc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQW5kRGVmYXVsdE9wdGlvbnMoXG4gIG9wdGlvbnM6IENsdXN0ZXJNYW5hZ2VyT3B0aW9ucyxcbik6IFJlcXVpcmVkPENsdXN0ZXJNYW5hZ2VyT3B0aW9ucz4ge1xuICBjb25zdCBudW1DUFVzID0gY3B1cygpLmxlbmd0aDtcbiAgcmV0dXJuIHtcbiAgICBjbHVzdGVyOiBvcHRpb25zLmNsdXN0ZXIgPz8gY2x1c3RlcixcbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gbWV0aG9kXG4gICAgICpcbiAgICAgKiBVc2VzICdqc29uJyBmb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5IGFjcm9zcyBOb2RlLmpzIHZlcnNpb25zXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2NsdXN0ZXIuaHRtbCNjbHVzdGVyc2V0dGluZ3MgTm9kZS5qcyBDbHVzdGVyIFNldHRpbmdzfVxuICAgICAqL1xuICAgIHNlcmlhbGl6YXRpb246IG9wdGlvbnMuc2VyaWFsaXphdGlvbiA/PyAnanNvbicsXG4gICAgcHJpbWFyeUZuOiBvcHRpb25zLnByaW1hcnlGbiA/PyAoKCk6IHZvaWQgPT4ge30pLFxuICAgIHByaW1hcnlTaHV0ZG93bkZuOiBvcHRpb25zLnByaW1hcnlTaHV0ZG93bkZuID8/IChhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7fSksXG4gICAgd29ya2VyRm46IG9wdGlvbnMud29ya2VyRm4gPz8gKCgpOiB2b2lkID0+IHt9KSxcbiAgICB3b3JrZXJTaHV0ZG93bkZuOiBvcHRpb25zLndvcmtlclNodXRkb3duRm4gPz8gKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHt9KSxcbiAgICBwaW5nRnJlcXVlbmN5OiBvcHRpb25zLnBpbmdGcmVxdWVuY3kgPz8gMTAwMDAsXG4gICAgcGluZ1RpbWVvdXQ6IG9wdGlvbnMucGluZ1RpbWVvdXQgPz8gMzAwMDAsXG4gICAgc3R1Y2tXb3JrZXJSZXNwYXduRnVuYzogb3B0aW9ucy5zdHVja1dvcmtlclJlc3Bhd25GdW5jID8/ICgoKTogYm9vbGVhbiA9PiB0cnVlKSxcbiAgICByZXN0YXJ0TWF4VGltZXM6IG9wdGlvbnMucmVzdGFydE1heFRpbWVzID8/IDMsXG4gICAgc2h1dGRvd25TaWduYWxzOiBvcHRpb25zLnNodXRkb3duU2lnbmFscyA/PyBbJ1NJR0lOVCcsICdTSUdURVJNJ10sXG4gICAgc2h1dGRvd25UaW1lb3V0OiBvcHRpb25zLnNodXRkb3duVGltZW91dCA/PyAzMDAwMCxcbiAgICBudW1Xb3JrZXJzOiBvcHRpb25zLm51bVdvcmtlcnMgPz8gbnVtQ1BVcyxcbiAgfTtcbn1cbiJdfQ==