import React from 'https://esm.sh/react@18.2.0?deno-std=0.177.0' import { ImageResponse } from 'https://deno.land/x/og_edge@0.0.4/mod.ts' import { createClient } from 'jsr:@supabase/supabase-js@2' import { corsHeaders } from '../_shared/cors.ts' const STORAGE_URL = 'https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/lw6' const BACKGROUND_IMAGE_STD = `${STORAGE_URL}/lw6_ticket_regular.png` const BACKGROUND_IMAGE_GOLDEN = `${STORAGE_URL}/lw6_ticket_gold.png` const SUPA_CHECKMARK = `${STORAGE_URL}/supaverified.png` const SUPA_CHECKMARK_GOLD = `${STORAGE_URL}/supaverified_gold.png?v=3` // Load custom font const FONT_URL = `${STORAGE_URL}/CircularStd-Book.otf` const font = fetch(new URL(FONT_URL, import.meta.url)).then((res) => res.arrayBuffer()) export async function handler(req: Request) { const url = new URL(req.url) const ticketNumber = url.searchParams.get('ticketNumber') const username = url.searchParams.get('username') ?? url.searchParams.get('amp;username') const name = url.searchParams.get('name') ?? url.searchParams.get('amp;name') const golden = url.searchParams.get('golden') ?? url.searchParams.get('amp;golden') if (!username || !ticketNumber || !name) { return new Response(JSON.stringify({ error: 'missing params' }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, status: 400, }) } try { // Try to get image from Supabase Storage CDN. const storageResponse = await fetch(`${STORAGE_URL}/tickets/${username}.png?v=3`) if (storageResponse.ok) return storageResponse // Else, generate image ad upload to storage. const fontData = await font const numDigits = `${Number(ticketNumber)}`.length const prefix = `00000000`.slice(numDigits) const generatedImage = new ImageResponse( ( <>
{name}
December 12th 2022
{/* URL */}supabase.com/launch-week
{`No ${prefix}${ticketNumber}`}