diff --git a/src/lib/server/cloudflare.ts b/src/lib/server/cloudflare.ts index 2c4a3a6..fd4fcd4 100644 --- a/src/lib/server/cloudflare.ts +++ b/src/lib/server/cloudflare.ts @@ -36,6 +36,36 @@ async function graphql( return result.data; } +async function getSiteTagByToken( + apiToken: string, + accountId: string, + siteToken: string +): Promise { + if (siteToken.length !== 32) return siteToken; // It's probably already a site_tag + try { + const response = await fetch( + `https://api.cloudflare.com/client/v4/accounts/${accountId}/rum/site_info`, + { + headers: { Authorization: `Bearer ${apiToken}` } + } + ); + if (!response.ok) return siteToken; + const data = (await response.json()) as { + success: boolean; + result: { site_tag: string; site_token: string }[]; + }; + if (data.success && Array.isArray(data.result)) { + const matched = data.result.find( + (s) => s.site_token === siteToken || s.site_tag === siteToken + ); + if (matched) return matched.site_tag; + } + } catch (e) { + console.warn('Failed to resolve site_tag from token', e); + } + return siteToken; +} + export async function purgePublicCache(platform: App.Platform | undefined): Promise { const env = platform?.env as AnalyticsEnv | undefined; let error: string | null = null; @@ -262,6 +292,7 @@ async function fetchAudience( siteTag: string, now: Date ): Promise { + const realSiteTag = await getSiteTagByToken(token, accountId, siteTag); const thirtyDaysAgo = new Date(now.getTime() - 30 * 86400000).toISOString().split('T')[0]; try { const data = await graphql<{ @@ -282,7 +313,7 @@ async function fetchAudience( accounts(filter: { accountTag: $account }) { rumPageloadEventsAdaptiveGroups( limit: 30 - filter: { siteToken: $site, datetime_geq: $date } + filter: { siteTag: $site, datetime_geq: $date } orderBy: [date_ASC] ) { count @@ -299,7 +330,7 @@ async function fetchAudience( `, { account: accountId, - site: siteTag, + site: realSiteTag, date: `${thirtyDaysAgo}T00:00:00Z` } );