32 lines
861 B
TypeScript
32 lines
861 B
TypeScript
import { supabase } from '../supabase';
|
|
|
|
export async function createCheckout(amount: number, tier: 'premium') {
|
|
const { data, error } = await supabase.functions.invoke('create-payment', {
|
|
body: {
|
|
amount,
|
|
currency: 'USD',
|
|
tier,
|
|
description: `InSpot ${tier} Subscription`,
|
|
},
|
|
});
|
|
|
|
if (error) throw error;
|
|
return data as { checkoutUrl: string; paymentId: string };
|
|
}
|
|
|
|
export async function pollPaymentStatus(paymentId: string, maxAttempts = 20) {
|
|
for (let i = 0; i < maxAttempts; i++) {
|
|
const { data, error } = await supabase
|
|
.from('payments')
|
|
.select('status')
|
|
.eq('id', paymentId)
|
|
.single();
|
|
|
|
if (error) throw error;
|
|
if (data.status === 'paid' || data.status === 'failed') return data.status;
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
}
|
|
return 'pending';
|
|
}
|