97 lines
2.8 KiB
JavaScript
97 lines
2.8 KiB
JavaScript
const DEFAULT_METHOD = 'GET';
|
|
const DEFAULT_EXPECTED_STATUS = 200;
|
|
const DEFAULT_RETRY_COUNT = 3;
|
|
const DEFAULT_RETRY_DELAY_MS = 5000;
|
|
|
|
function readNumber(value, fallback) {
|
|
if (!value) {
|
|
return fallback;
|
|
}
|
|
|
|
const parsed = Number.parseInt(value, 10);
|
|
return Number.isNaN(parsed) ? fallback : parsed;
|
|
}
|
|
|
|
function sleep(ms) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
|
|
function buildHeaders() {
|
|
const headers = {
|
|
'content-type': 'application/json',
|
|
};
|
|
|
|
if (process.env.HEADERS_JSON) {
|
|
const customHeaders = JSON.parse(process.env.HEADERS_JSON);
|
|
Object.assign(headers, customHeaders);
|
|
}
|
|
|
|
if (process.env.AUTH_TOKEN) {
|
|
headers.authorization = `Bearer ${process.env.AUTH_TOKEN}`;
|
|
}
|
|
|
|
if (!process.env.REQUEST_BODY) {
|
|
delete headers['content-type'];
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
async function runTask() {
|
|
const targetUrl = process.env.TARGET_URL;
|
|
if (!targetUrl) {
|
|
throw new Error('Missing TARGET_URL secret.');
|
|
}
|
|
|
|
const method = (process.env.HTTP_METHOD || DEFAULT_METHOD).toUpperCase();
|
|
const expectedStatus = readNumber(process.env.EXPECTED_STATUS, DEFAULT_EXPECTED_STATUS);
|
|
const retryCount = readNumber(process.env.RETRY_COUNT, DEFAULT_RETRY_COUNT);
|
|
const retryDelayMs = readNumber(process.env.RETRY_DELAY_MS, DEFAULT_RETRY_DELAY_MS);
|
|
const headers = buildHeaders();
|
|
|
|
const requestOptions = {
|
|
method,
|
|
headers,
|
|
};
|
|
|
|
if (process.env.REQUEST_BODY) {
|
|
requestOptions.body = process.env.REQUEST_BODY;
|
|
}
|
|
|
|
for (let attempt = 1; attempt <= retryCount; attempt += 1) {
|
|
console.log(`Attempt ${attempt}/${retryCount}: ${method} ${targetUrl}`);
|
|
|
|
try {
|
|
const response = await fetch(targetUrl, requestOptions);
|
|
const responseText = await response.text();
|
|
|
|
console.log(`Response status: ${response.status}`);
|
|
if (responseText) {
|
|
console.log(`Response body: ${responseText.slice(0, 1000)}`);
|
|
}
|
|
|
|
if (response.status !== expectedStatus) {
|
|
throw new Error(`Expected status ${expectedStatus}, received ${response.status}.`);
|
|
}
|
|
|
|
console.log('Scheduled task completed successfully.');
|
|
return;
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : String(error);
|
|
console.error(`Attempt ${attempt} failed: ${message}`);
|
|
|
|
if (attempt === retryCount) {
|
|
throw error;
|
|
}
|
|
|
|
console.log(`Waiting ${retryDelayMs}ms before retry.`);
|
|
await sleep(retryDelayMs);
|
|
}
|
|
}
|
|
}
|
|
|
|
runTask().catch((error) => {
|
|
console.error('Scheduled task failed.');
|
|
console.error(error);
|
|
process.exit(1);
|
|
}); |