diff --git a/src/components/upload/UppyPhotoUpload.tsx b/src/components/upload/UppyPhotoUpload.tsx index e989edce..54adf895 100644 --- a/src/components/upload/UppyPhotoUpload.tsx +++ b/src/components/upload/UppyPhotoUpload.tsx @@ -144,8 +144,7 @@ export function UppyPhotoUpload({ if (statusResponse.ok) { const status: UploadSuccessResponse = await statusResponse.json(); if (status.uploaded && status.urls) { - const CLOUDFLARE_ACCOUNT_HASH = import.meta.env.VITE_CLOUDFLARE_ACCOUNT_HASH; - return `https://imagedelivery.net/${CLOUDFLARE_ACCOUNT_HASH}/${cloudflareId}/public`; + return `https://cdn.thrillwiki.com/images/${cloudflareId}/public`; } } diff --git a/src/lib/cloudflareImageUtils.ts b/src/lib/cloudflareImageUtils.ts index 2e7a12c0..c9d9d07d 100644 --- a/src/lib/cloudflareImageUtils.ts +++ b/src/lib/cloudflareImageUtils.ts @@ -12,17 +12,16 @@ export type CloudflareVariant = | 'logo' | 'public'; -const CLOUDFLARE_ACCOUNT_HASH = import.meta.env.VITE_CLOUDFLARE_ACCOUNT_HASH; - /** * Build a Cloudflare image URL with specified variant + * Uses CDN proxy for branded URLs */ export function getCloudflareImageUrl( imageId: string | undefined, variant: CloudflareVariant = 'public' ): string | undefined { if (!imageId) return undefined; - return `https://imagedelivery.net/${CLOUDFLARE_ACCOUNT_HASH}/${imageId}/${variant}`; + return `https://cdn.thrillwiki.com/images/${imageId}/${variant}`; } /** @@ -53,9 +52,14 @@ export function getBannerUrls(imageId: string | undefined) { /** * Extract Cloudflare image ID from various URL formats + * Supports both old imagedelivery.net and new CDN URLs */ export function extractCloudflareImageId(url: string): string | null { - // Match imagedelivery.net URLs - const match = url.match(/imagedelivery\.net\/[^\/]+\/([a-f0-9-]+)\//i); - return match ? match[1] : null; + // Match old imagedelivery.net URLs + const deliveryMatch = url.match(/imagedelivery\.net\/[^\/]+\/([a-f0-9-]+)\//i); + if (deliveryMatch) return deliveryMatch[1]; + + // Match new cdn.thrillwiki.com URLs + const cdnMatch = url.match(/cdn\.thrillwiki\.com\/images\/([a-f0-9-]+)\//i); + return cdnMatch ? cdnMatch[1] : null; } diff --git a/src/lib/imageUploadHelper.ts b/src/lib/imageUploadHelper.ts index 40c15f56..e6b82864 100644 --- a/src/lib/imageUploadHelper.ts +++ b/src/lib/imageUploadHelper.ts @@ -87,12 +87,10 @@ export async function uploadPendingImages(images: UploadedImage[]): Promise, user // Insert photos into the photos table const photosToInsert = resolvedData.photos.map((photo: any, index: number) => { // Extract CloudFlare image ID from URL if not provided + // Supports both old imagedelivery.net and new cdn.thrillwiki.com URLs let cloudflareImageId = photo.cloudflare_image_id; if (!cloudflareImageId && photo.url) { - // URL format: https://imagedelivery.net/{account_hash}/{image_id}/{variant} - const urlParts = photo.url.split('/'); - cloudflareImageId = urlParts[urlParts.length - 2]; + cloudflareImageId = extractCloudflareImageId(photo.url); + + // Fallback: parse from URL structure + if (!cloudflareImageId) { + const urlParts = photo.url.split('/'); + cloudflareImageId = urlParts[urlParts.length - 2]; + } } return { diff --git a/supabase/functions/process-oauth-profile/index.ts b/supabase/functions/process-oauth-profile/index.ts index b018c9de..7b53ba62 100644 --- a/supabase/functions/process-oauth-profile/index.ts +++ b/supabase/functions/process-oauth-profile/index.ts @@ -277,7 +277,7 @@ Deno.serve(async (req) => { if (result.success) { cloudflareImageId = result.result.id; - cloudflareImageUrl = `https://imagedelivery.net/${CLOUDFLARE_ACCOUNT_HASH}/${cloudflareImageId}/avatar`; + cloudflareImageUrl = `https://cdn.thrillwiki.com/images/${cloudflareImageId}/avatar`; console.log('[OAuth Profile] Uploaded to Cloudflare:', { cloudflareImageId, cloudflareImageUrl }); } else { throw new Error('Cloudflare upload failed'); diff --git a/supabase/functions/upload-image/index.ts b/supabase/functions/upload-image/index.ts index b96b1710..718bbd28 100644 --- a/supabase/functions/upload-image/index.ts +++ b/supabase/functions/upload-image/index.ts @@ -587,8 +587,8 @@ serve(async (req) => { const result = imageResult.result const duration = endRequest(tracking); - // Construct proper imagedelivery.net URLs using account hash and image ID - const baseUrl = `https://imagedelivery.net/${CLOUDFLARE_ACCOUNT_HASH}/${result.id}` + // Construct CDN URLs for display + const baseUrl = `https://cdn.thrillwiki.com/images/${result.id}` edgeLogger.info('Image status retrieved', { action: 'get_image_status', requestId: tracking.requestId, duration });