Files
mortgagefi-helper/utils/cronhost.ts

39 lines
1.5 KiB
TypeScript

// NOTE: Real cronhost API integration pending official REST docs.
// These stubs simulate scheduling/canceling and should be replaced with actual fetch calls.
export interface ScheduleParams {
apiKey: string;
runAt: number; // epoch seconds
method: 'POST' | 'GET';
url: string;
body?: any;
headers?: Record<string, string>;
}
export interface ScheduleResult {
jobId: string;
scheduledRunAtUtc: number;
}
export async function scheduleOneTimeJob(params: ScheduleParams): Promise<ScheduleResult> {
const { apiKey, runAt, method, url } = params;
if (!apiKey) throw new Error('Missing cronhost API key');
if (!url) throw new Error('Missing target URL');
if (!runAt || runAt < Math.floor(Date.now() / 1000)) throw new Error('runAt must be in the future');
console.warn('[cronhost] scheduleOneTimeJob is a stub. Replace with real API call.');
// Example real call outline:
// await fetch('https://api.cronho.st/schedules', { method: 'POST', headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({...}) })
return {
jobId: `stub_${Math.random().toString(36).slice(2)}`,
scheduledRunAtUtc: runAt,
};
}
export async function cancelJob(apiKey: string, jobId: string): Promise<void> {
if (!apiKey || !jobId) return;
console.warn('[cronhost] cancelJob is a stub. Replace with real API call.', { jobId });
// Example: await fetch(`https://api.cronho.st/jobs/${jobId}`, { method: 'DELETE', headers: { Authorization: `Bearer ${apiKey}` } })
}