UNPKG

@vulog/aima-document

Version:

55 lines (47 loc) 1.91 kB
import { Client } from '@vulog/aima-client'; import { z } from 'zod'; import { DocumentSummary, PersonalInformationDocument, PersonalInformationDocumentType, personalInformationDocumentTypeSchema, } from './types'; const schema = z.object({ userId: z.string().trim().nonempty().uuid(), types: z.array(personalInformationDocumentTypeSchema).min(0).optional(), }); export const getUserDocuments = async ( client: Client, userId: string, types?: PersonalInformationDocumentType[] // optional parameter ): Promise<DocumentSummary> => { const result = schema.safeParse({ userId, types }); if (!result.success) { throw new TypeError('Invalid args', { cause: result.error.issues, }); } const docSumary: DocumentSummary = await client .get<DocumentSummary>(`/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/users/${userId}/documents`) .then(({ data }) => data); if (docSumary && docSumary.documents?.length > 0 && result.data.types && result.data.types.length > 0) { const piTypes = result.data.types.join(','); docSumary.documents = await Promise.all( docSumary.documents.map(async (doc) => { const pi: PersonalInformationDocument = await client .get<PersonalInformationDocument>( `/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/users/${userId}/documents/${doc.id}/pi?types=${piTypes}` ) .then(({ data }) => data); if (pi?.documentNumber1) { return { ...doc, // Copy the original documentNumber: pi.documentNumber1, // update the documentNumber field }; } return doc; }) ); } return docSumary; };