From 6023a53efc016aebbc8dd882482cd0c2782462ac Mon Sep 17 00:00:00 2001 From: Robert Tidball Date: Wed, 8 Jul 2026 18:57:17 +1000 Subject: [PATCH] Add FXMacroData release calendar example --- examples/fxmacrodata-release-calendar.ts | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 examples/fxmacrodata-release-calendar.ts diff --git a/examples/fxmacrodata-release-calendar.ts b/examples/fxmacrodata-release-calendar.ts new file mode 100644 index 0000000..906529a --- /dev/null +++ b/examples/fxmacrodata-release-calendar.ts @@ -0,0 +1,59 @@ +import * as https from "https"; + +interface FxMacroDataCalendarResponse { + data: FxMacroDataEvent[]; +} + +interface FxMacroDataEvent { + name?: string; + date?: string; + announcement_datetime_utc?: string; + market_tier?: number; + top_tier_for_currency?: boolean; +} + +export async function fetchFxMacroDataCalendar( + currency: string, + startDate: string, + endDate: string +): Promise { + const url = `https://fxmacrodata.com/api/v1/calendar/${currency}?start_date=${startDate}&end_date=${endDate}`; + const payload = await getJson(url); + return payload.data || []; +} + +export function topTierBlackoutDates(events: FxMacroDataEvent[]): string[] { + const dates = events + .filter(event => event.top_tier_for_currency || event.market_tier === 1) + .map(event => (event.announcement_datetime_utc || event.date || "").slice(0, 10)) + .filter(date => date.length > 0); + return Array.from(new Set(dates)).sort(); +} + +function getJson(url: string): Promise { + return new Promise((resolve, reject) => { + https.get(url, response => { + let data = ""; + response.on("data", chunk => { + data += chunk; + }); + response.on("end", () => { + try { + resolve(JSON.parse(data) as T); + } + catch (error) { + reject(error); + } + }); + }).on("error", reject); + }); +} + +if (require.main === module) { + fetchFxMacroDataCalendar("USD", "2026-07-01", "2026-07-20") + .then(events => console.log(topTierBlackoutDates(events))) + .catch(error => { + console.error(error); + process.exitCode = 1; + }); +}