@@ -23,8 +23,9 @@ export interface DashboardData {
2323 license : SourceResult < LicenseData >
2424}
2525
26- function missingEnv ( name : string ) : SourceResult < never > {
27- return { ok : false , error : `${ name } : not configured (missing env vars)` }
26+ /** Runs `fn` if `envKey` is set, otherwise returns a "not configured" error. */
27+ function guardedFetch < T > ( envKey : string | undefined , name : string , fn : ( ) => Promise < SourceResult < T > > ) : Promise < SourceResult < T > > {
28+ return envKey ? fn ( ) : Promise . resolve ( { ok : false , error : `${ name } : not configured (missing env vars)` } )
2829}
2930
3031/** Returns the env object from CF Pages platform, falling back to $env/dynamic/private for local dev. */
@@ -59,41 +60,27 @@ export async function fetchDashboardData(
5960 const env = await resolveEnv ( platform )
6061
6162 const [ umami , cloudflare , paddle , github , posthog , license ] = await Promise . all ( [
62- env ?. UMAMI_API_URL
63- ? fetchUmamiData (
64- {
65- UMAMI_API_URL : env . UMAMI_API_URL ,
66- UMAMI_USERNAME : env . UMAMI_USERNAME ,
67- UMAMI_PASSWORD : env . UMAMI_PASSWORD ,
68- UMAMI_WEBSITE_ID : env . UMAMI_WEBSITE_ID ,
69- UMAMI_BLOG_WEBSITE_ID : env . UMAMI_BLOG_WEBSITE_ID ,
70- } ,
71- range
72- )
73- : Promise . resolve ( missingEnv ( 'Umami' ) ) ,
74- env ?. CLOUDFLARE_API_TOKEN
75- ? fetchCloudflareData (
76- { CLOUDFLARE_API_TOKEN : env . CLOUDFLARE_API_TOKEN , CLOUDFLARE_ACCOUNT_ID : env . CLOUDFLARE_ACCOUNT_ID } ,
77- range
78- )
79- : Promise . resolve ( missingEnv ( 'Cloudflare' ) ) ,
80- env ?. PADDLE_API_KEY_LIVE
81- ? fetchPaddleData ( { PADDLE_API_KEY_LIVE : env . PADDLE_API_KEY_LIVE } , range )
82- : Promise . resolve ( missingEnv ( 'Paddle' ) ) ,
63+ guardedFetch ( env ?. UMAMI_API_URL , 'Umami' , ( ) =>
64+ fetchUmamiData ( {
65+ UMAMI_API_URL : env . UMAMI_API_URL ,
66+ UMAMI_USERNAME : env . UMAMI_USERNAME ,
67+ UMAMI_PASSWORD : env . UMAMI_PASSWORD ,
68+ UMAMI_WEBSITE_ID : env . UMAMI_WEBSITE_ID ,
69+ UMAMI_BLOG_WEBSITE_ID : env . UMAMI_BLOG_WEBSITE_ID ,
70+ } , range ) ) ,
71+ guardedFetch ( env ?. CLOUDFLARE_API_TOKEN , 'Cloudflare' , ( ) =>
72+ fetchCloudflareData ( { CLOUDFLARE_API_TOKEN : env . CLOUDFLARE_API_TOKEN , CLOUDFLARE_ACCOUNT_ID : env . CLOUDFLARE_ACCOUNT_ID } , range ) ) ,
73+ guardedFetch ( env ?. PADDLE_API_KEY_LIVE , 'Paddle' , ( ) =>
74+ fetchPaddleData ( { PADDLE_API_KEY_LIVE : env . PADDLE_API_KEY_LIVE } , range ) ) ,
8375 fetchGitHubData ( { GITHUB_TOKEN : env ?. GITHUB_TOKEN } ) ,
84- env ?. POSTHOG_API_KEY
85- ? fetchPostHogData (
86- {
87- POSTHOG_API_KEY : env . POSTHOG_API_KEY ,
88- POSTHOG_PROJECT_ID : env . POSTHOG_PROJECT_ID ,
89- POSTHOG_API_URL : env . POSTHOG_API_URL ,
90- } ,
91- range
92- )
93- : Promise . resolve ( missingEnv ( 'PostHog' ) ) ,
94- env ?. LICENSE_SERVER_ADMIN_TOKEN
95- ? fetchLicenseData ( { LICENSE_SERVER_ADMIN_TOKEN : env . LICENSE_SERVER_ADMIN_TOKEN } )
96- : Promise . resolve ( missingEnv ( 'License server' ) ) ,
76+ guardedFetch ( env ?. POSTHOG_API_KEY , 'PostHog' , ( ) =>
77+ fetchPostHogData ( {
78+ POSTHOG_API_KEY : env . POSTHOG_API_KEY ,
79+ POSTHOG_PROJECT_ID : env . POSTHOG_PROJECT_ID ,
80+ POSTHOG_API_URL : env . POSTHOG_API_URL ,
81+ } , range ) ) ,
82+ guardedFetch ( env ?. LICENSE_SERVER_ADMIN_TOKEN , 'License server' , ( ) =>
83+ fetchLicenseData ( { LICENSE_SERVER_ADMIN_TOKEN : env . LICENSE_SERVER_ADMIN_TOKEN } ) ) ,
9784 ] )
9885
9986 return { range, updatedAt : new Date ( ) . toISOString ( ) , umami, cloudflare, paddle, github, posthog, license }
0 commit comments