const fs = require('fs');
const path = require('path');
const axios = require('axios');
const { promisify } = require('util');
const setTimeoutPromise = promisify(setTimeout);
/**
* Backs up API payloads with a timeout.
* @param {string} apiUrl The URL of the API endpoint.
* @param {string} backupDir The directory to store the backup files.
* @param {number} timeoutMs The timeout in milliseconds.
* @param {string} filenamePrefix Optional prefix for backup filenames.
*/
async function backupApiPayload(apiUrl, backupDir, timeoutMs, filenamePrefix = 'api_payload') {
try {
// Ensure backup directory exists
if (!fs.existsSync(backupDir)) {
fs.mkdirSync(backupDir, { recursive: true });
}
const filename = `${filenamePrefix}_${Date.now()}.json`;
const filePath = path.join(backupDir, filename);
const timeout = setTimeout(() => {
throw new Error('API request timed out');
}, timeoutMs);
const response = await axios.get(apiUrl, { timeout: timeoutMs });
clearTimeout(timeout); // Clear timeout if request completes before timeout
fs.writeFileSync(filePath, JSON.stringify(response.data, null, 2));
console.log(`Backup created: ${filePath}`);
} catch (error) {
console.error(`Error backing up API payload from ${apiUrl}: ${error.message}`);
}
}
module.exports = backupApiPayload;
Add your comment