UNPKG

@checkfirst/nestjs-outlook

Version:

An opinionated NestJS module for Microsoft Outlook integration that provides easy access to Microsoft Graph API for emails, calendars, and more.

61 lines 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeGraphApiCall = executeGraphApiCall; const retry_util_1 = require("./retry.util"); async function executeGraphApiCall(operation, options = {}) { const { maxRetries = 3, retryDelayMs = 1000, logger = { warn: (message) => { console.warn(message); }, error: (message) => { console.error(message); }, }, resourceName = 'resource', return404AsNull = false, } = options; for (let retryCount = 0; retryCount < maxRetries; retryCount++) { try { return await operation(); } catch (error) { if ((0, retry_util_1.is404Error)(error)) { if (return404AsNull) { logger.warn(`Resource not found (likely deleted): ${resourceName}`); return null; } logger.error(`Resource not found: ${resourceName}`, error); throw error; } if ((0, retry_util_1.isNonRetryableError)(error)) { logger.error(`Non-retryable error for ${resourceName}`, error); throw error; } if (retryCount >= maxRetries) { logger.error(`Max retries (${maxRetries}) exceeded for ${resourceName}`, error); throw error; } if ((0, retry_util_1.is429Error)(error)) { const retryAfterSeconds = (0, retry_util_1.extractRetryAfterSeconds)(error); const delayMs = retryAfterSeconds !== null ? retryAfterSeconds * 1000 : retryDelayMs * Math.pow(2, retryCount); logger.warn(`Rate limited on ${resourceName}, retrying after ${delayMs / 1000}s (${maxRetries - retryCount} attempts remaining)`); await (0, retry_util_1.delay)(delayMs); retryCount++; continue; } if ((0, retry_util_1.isNetworkError)(error)) { const delayMs = retryDelayMs * Math.pow(2, retryCount); logger.warn(`Network timeout on ${resourceName}, retrying after ${delayMs}ms (${maxRetries - retryCount} attempts remaining)`); await (0, retry_util_1.delay)(delayMs); retryCount++; continue; } if ((0, retry_util_1.isServerError)(error)) { const delayMs = retryDelayMs * Math.pow(2, retryCount); logger.warn(`Server error on ${resourceName}, retrying after ${delayMs}ms (${maxRetries - retryCount} attempts remaining)`); await (0, retry_util_1.delay)(delayMs); retryCount++; continue; } logger.error(`Unknown error for ${resourceName}`, error); throw error; } } throw new Error(`Max retries (${maxRetries}) exceeded for ${resourceName}`); } //# sourceMappingURL=outlook-api-executor.util.js.map