UNPKG

qapinterface

Version:

Comprehensive API utilities for Node.js applications including authentication, security, request processing, and response handling with zero external dependencies

44 lines (37 loc) 1.28 kB
/** * Sleep Handler * Single Responsibility: Handle async sleep/delay operations ONLY */ /** * Creates an async sleep delay * @param {number} ms - Delay in milliseconds * @returns {Promise<void>} Promise that resolves after the delay */ function sleep(ms) { if (typeof ms !== 'number' || ms < 0) { throw new Error('Sleep duration must be a non-negative number'); } return new Promise(resolve => setTimeout(resolve, ms)); } /** * Creates an async sleep with jitter to avoid thundering herd * @param {number} ms - Base delay in milliseconds * @param {number} [jitterFactor=0.1] - Jitter factor (0.0 to 1.0) * @returns {Promise<void>} Promise that resolves after the delay with jitter */ function sleepWithJitter(ms, jitterFactor = 0.1) { if (typeof ms !== 'number' || ms < 0) { throw new Error('Sleep duration must be a non-negative number'); } if (typeof jitterFactor !== 'number' || jitterFactor < 0 || jitterFactor > 1) { throw new Error('Jitter factor must be between 0.0 and 1.0'); } // Add random jitter: ±jitterFactor * ms const jitter = (Math.random() - 0.5) * 2 * jitterFactor * ms; const delayWithJitter = Math.max(0, ms + jitter); return sleep(delayWithJitter); } module.exports = { sleep, sleepWithJitter };