import { readFile } from 'node:fs/promises'; import { pathToFileURL } from 'node:url'; import { z } from 'zod'; import { VelrimClient, type VelrimClientOptions } from '@velrim/sdk'; export const Invoice = z.object({ invoice_number: z.string(), total: z.number(), currency: z.enum(['USD', 'EUR']), po_number: z.string().nullable().optional(), }); export async function extractInvoice(bytes: Uint8Array, options: VelrimClientOptions = {}) { const client = new VelrimClient(options); const result = await client.extract(Invoice, { bytes }); // Validation enforces types. Field metadata describes extraction evidence. return { invoice: result.data, fields: result.fields, meta: result.meta }; } if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const path = process.argv[2]; if (!path) throw new Error('Usage: npx tsx invoice.ts invoice.pdf'); const result = await extractInvoice(await readFile(path)); // Content-free output; inspect invoice and fields inside your application. console.log({ request_id: result.meta.request_id, billed_pages: result.meta.billed_pages }); }