File size: 1,091 Bytes
004f460
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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<string> {
  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)
  })
}