diff --git a/netlify/loaders/api.js b/netlify/loaders/api.js index b93a8d3..4c7ba1d 100644 --- a/netlify/loaders/api.js +++ b/netlify/loaders/api.js @@ -3,7 +3,7 @@ export async function getEventInfo(eventId, env) { return null } const response = await fetch( - `${env.FAMILY_API_URL}/event/${eventId}?description=false&metrics=true&fresh=false&refresh=true`, + `${env.FAMILY_API_URL}/event/${eventId}?description=false&metrics=true&fresh=true&refresh=false`, { headers: { 'x-api-key': env.FAMILY_API_KEY, @@ -142,11 +142,14 @@ export async function getEventsMetrics(eventIds, env) { if (!env.FAMILY_API_KEY) { throw new Error(`Events (${eventIds.length}) metrics could not be fetched, configure Family API key`) } - const response = await fetch(`${env.FAMILY_API_URL}/events/${eventIds.map((eventId) => encodeURIComponent(eventId)).join(',')}/metrics`, { - headers: { - 'x-api-key': env.FAMILY_API_KEY, - }, - }) + const response = await fetch( + `${env.FAMILY_API_URL}/events/${eventIds.map((eventId) => encodeURIComponent(eventId)).join(',')}/metrics?fresh=true`, + { + headers: { + 'x-api-key': env.FAMILY_API_KEY, + }, + } + ) if (response.status === 404) { return null } diff --git a/package.json b/package.json index fd7fe34..11668d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@poap-xyz/poap-family", - "version": "1.12.8", + "version": "1.12.9", "author": { "name": "POAP", "url": "https://poap.xyz" diff --git a/src/loaders/api.js b/src/loaders/api.js index 93c51d0..231fed7 100644 --- a/src/loaders/api.js +++ b/src/loaders/api.js @@ -296,16 +296,21 @@ async function getEventsOwners(eventIds, abortSignal, expiryDates, fresh = true) return body } -async function getEventMetrics(eventId, abortSignal, refresh = false) { +async function getEventMetrics(eventId, abortSignal, refresh = false, fresh = true) { if (!FAMILY_API_KEY) { throw new Error(`Event ${eventId} metrics could not be fetched, configure Family API key`) } - const response = await fetch(`${FAMILY_API_URL}/event/${eventId}/metrics?refresh=${encodeURIComponent(refresh)}`, { - signal: abortSignal instanceof AbortSignal ? abortSignal : null, - headers: { - 'x-api-key': FAMILY_API_KEY, - }, - }) + const response = await fetch( + `${FAMILY_API_URL}/event/${eventId}/metrics?` + + `refresh=${encodeURIComponent(refresh)}&` + + `fresh=${encodeURIComponent(fresh)}`, + { + signal: abortSignal instanceof AbortSignal ? abortSignal : null, + headers: { + 'x-api-key': FAMILY_API_KEY, + }, + } + ) if (response.status === 404) { return null } @@ -335,16 +340,20 @@ async function getEventMetrics(eventId, abortSignal, refresh = false) { } } -async function getEventsMetrics(eventIds, abortSignal) { +async function getEventsMetrics(eventIds, abortSignal, fresh = true) { if (!FAMILY_API_KEY) { throw new Error(`Events (${eventIds.length}) metrics could not be fetched, configure Family API key`) } - const response = await fetch(`${FAMILY_API_URL}/events/${eventIds.map((eventId) => encodeURIComponent(eventId)).join(',')}/metrics`, { - signal: abortSignal instanceof AbortSignal ? abortSignal : null, - headers: { - 'x-api-key': FAMILY_API_KEY, - }, - }) + const response = await fetch( + `${FAMILY_API_URL}/events/${eventIds.map((eventId) => encodeURIComponent(eventId)).join(',')}/metrics?` + + `fresh=${encodeURIComponent(fresh)}`, + { + signal: abortSignal instanceof AbortSignal ? abortSignal : null, + headers: { + 'x-api-key': FAMILY_API_KEY, + }, + } + ) if (response.status === 404) { return null } diff --git a/src/loaders/event.js b/src/loaders/event.js index ff5bc4d..4ab1944 100644 --- a/src/loaders/event.js +++ b/src/loaders/event.js @@ -177,7 +177,7 @@ async function eventLoader({ params, request }) { } const [tokensSettled, metricsSettled] = await Promise.allSettled([ fetchPOAPs(params.eventId), - getEventMetrics(params.eventId, null, /*refresh*/force === 'true'), + getEventMetrics(params.eventId, null, /*refresh*/force === 'true', /*fresh*/true), ]) if (tokensSettled.status === 'rejected') { throw new Response('', { diff --git a/src/pages/Events.js b/src/pages/Events.js index d34950b..59f3e4f 100644 --- a/src/pages/Events.js +++ b/src/pages/Events.js @@ -157,7 +157,7 @@ function Events() { setLoading((alsoLoading) => ({ ...alsoLoading, [eventId]: LOADING_OWNERS })) return Promise.allSettled([ fetchPOAPs(eventId, abortSignal), - getEventMetrics(eventId, abortSignal, searchParams.get('force') === 'true'), + getEventMetrics(eventId, abortSignal, searchParams.get('force') === 'true', /*fresh*/true), ]).then( ([eventOwnerTokensResult, eventMetricsResult]) => { removeLoading(eventId) @@ -338,11 +338,14 @@ function Events() { const expiryDates = parseExpiryDates(events) Promise.all([ getEventsOwners(eventIds, controller.signal, expiryDates, /*fresh*/false), - getEventsMetrics(eventIds, controller.signal), + getEventsMetrics(eventIds, controller.signal, /*fresh*/true), ]).then( ([newOwners, eventsMetrics]) => { if (eventsMetrics) { - setMetrics((oldReservations) => ({ ...oldReservations, ...eventsMetrics })) + const foundMetrics = Object.fromEntries( + Object.entries(eventsMetrics).filter(([, metrics]) => metrics != null) + ) + setMetrics((oldReservations) => ({ ...oldReservations, ...foundMetrics })) } if (newOwners) { setOwners((oldOwners) => ({ ...oldOwners, ...newOwners }))