import type { MessageKey } from '../i18n/en' export const MAX_IMAGE_BYTES = 8 * 1024 * 1024 // matches backend AMANPAY_MAX_UPLOAD_MB default export const MAX_AUDIO_BYTES = 8 * 1024 * 1024 /** Validate an uploaded image file. Returns an i18n error key or undefined. */ export function validateImageFile(file: File): MessageKey | undefined { if (!file.type.startsWith('image/')) return 'bio.err.imageType' if (file.size > MAX_IMAGE_BYTES) return 'bio.err.tooLarge' return undefined } export function validateAudioFile(file: File): MessageKey | undefined { if (!file.type.startsWith('audio/')) return 'bio.err.audioType' if (file.size > MAX_AUDIO_BYTES) return 'bio.err.tooLarge' return undefined } /** Read a File as a base64 data URI (what the biometric backend accepts). */ export function fileToDataUri(file: File): Promise { return new Promise((resolve, reject) => { const reader = new FileReader() reader.onerror = () => reject(new Error('read failed')) reader.onloadend = () => resolve(String(reader.result)) reader.readAsDataURL(file) }) }