@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
JavaScript
;
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