// Initialize HelcimPay.js session import { requireAuth } from '../../utils/auth.js' import { initializeHelcimPaySession } from '../../utils/helcim.js' export default defineEventHandler(async (event) => { try { const body = await validateBody(event, helcimInitializePaymentSchema) // Event ticket purchases can be made without authentication const isEventTicket = body.metadata?.type === 'event_ticket' if (!isEventTicket) { await requireAuth(event) } const amount = body.amount || 0 // For event tickets with amount > 0, we do a purchase // For subscriptions or card verification, we do verify const paymentType = isEventTicket && amount > 0 ? 'purchase' : 'verify' const requestBody = { paymentType, amount: paymentType === 'purchase' ? amount : 0, currency: 'CAD', paymentMethod: 'cc' } // For subscription setup (verify mode), include customer code if provided // For one-time purchases (event tickets), don't include customer code // as the customer may not exist in Helcim yet if (body.customerCode && paymentType === 'verify') { requestBody.customerCode = body.customerCode } // Add product/event information for better display in Helcim modal if (body.metadata?.eventTitle) { // Some Helcim accounts don't support invoice numbers in initialization // Try multiple fields that might display in the modal requestBody.description = body.metadata.eventTitle requestBody.notes = body.metadata.eventTitle requestBody.orderNumber = `${body.metadata.eventId}` } const paymentData = await initializeHelcimPaySession(requestBody) return { success: true, checkoutToken: paymentData.checkoutToken, secretToken: paymentData.secretToken } } catch (error) { if (error.statusCode) throw error console.error('Error initializing HelcimPay:', error) throw createError({ statusCode: 500, statusMessage: 'An unexpected error occurred' }) } })