d3ro-voice/server/supabase/functions/audio-purge/index.ts

31 lines
1.2 KiB
TypeScript

// server/supabase/functions/audio-purge/index.ts
// Service-only worker invoked by pg_cron (public.dispatch_audio_purge_v1) to
// remove audio objects whose history entry or meeting was deleted.
import { isServiceRoleApiKey, isServiceRoleAuthorization } from '../_shared/push-contract.ts'
import { createServiceRoleClient } from '../_shared/quota.ts'
import { supabaseStorageBucket } from '../_shared/storage-objects.ts'
import { handleAudioPurgeRequest } from './handler.ts'
import { AUDIO_BUCKET } from './policy.ts'
import { supabaseAudioPurgeQueue } from './queue-adapter.ts'
async function authorizeServiceCaller(req: Request): Promise<boolean> {
const legacyServiceBearer = await isServiceRoleAuthorization(
req.headers.get('Authorization'),
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY'),
)
return legacyServiceBearer || await isServiceRoleApiKey(req.headers.get('apikey'))
}
Deno.serve(async (req: Request) => {
return await handleAudioPurgeRequest(req, {
authorize: authorizeServiceCaller,
createDeps: () => {
const client = createServiceRoleClient()
return {
queue: supabaseAudioPurgeQueue(client),
storage: supabaseStorageBucket(client, AUDIO_BUCKET),
}
},
})
})