import {z} from 'zod' export type LSSWellKnownFilters = 'None' | 'DocumentsNotSent' | 'DocumentsNotSigned' | 'ProjectInfoNotComplete' | 'ContractNotUploaded' | 'LoanDetailsNotVerified' | 'NotInstalled' | 'NotFunded' | 'ProjectCertificateNotSigned' | 'NoPto' | 'CreditExpiringWithin30Days' | 'WorkOrderNotInitiallySigned' | 'ConditionalClaimsReleaseNotSigned' | 'FinalClaimsReleaseNotSigned' | 'ConsumerAgreementNotSent' | 'ConsumerAgreementNotSigned' | 'ConsumerAgreementNotViewed' | 'InRescissionPeriod' | 'WorkOrderNotSignedAfterChangeOrder' | 'DomesticContentNotQualifiedNoPto' | 'AoMNotSigned' | 'CpcRejected' | 'CreditExpiredWithinExtensionWindow'; export type LSSPipelineActionTile = 'None' | 'CreditAtRisk' | 'LoanDocActions' | 'NtpActions' | 'InstallActions'; export type LSSRateTermParameters = {rate?: number | undefined, term?: number | undefined}; export type LSSNumericRange = {lowRange?: (number | null) | undefined, highRange?: (number | null) | undefined}; export type LSSStageType = 'None' | 'Approved' | 'AgreementCompleted' | 'AgreementSent' | 'AgreementSigned' | 'ConditionalReleaseSigned' | 'ContractUploaded' | 'ContractSigned' | 'FinalReleaseSigned' | 'Funded' | 'InstallComplete' | 'InRescission' | 'LoanDetailsVerified' | 'LoanDocumentsSent' | 'LoanDocumentsSigned' | 'NtpComplete' | 'ProjectCertificateSent' | 'ProjectCertificateSigned' | 'PtoComplete' | 'ProjectInfoComplete' | 'WorkOrderRequested' | 'WorkOrderSigned' | 'IcPaymentRequestSent' | 'NtpPaymentRequestSent' | 'DocsNotarized' | 'ApprovedWithStips'; export type LSSStageFilter = {complete?: (LSSStageType | null) | undefined, notComplete?: (LSSStageType | null) | undefined}; export type LSSAddressParameters3 = {completeAddress?: (string | null) | undefined, locality?: (string | null) | undefined, adminArea1?: (Array | null) | undefined, adminArea2?: (string | null) | undefined, postalCode?: (string | null) | undefined, country?: (string | null) | undefined}; export type LSSDateRange = {startDate?: (string | null) | undefined, endDate?: (string | null) | undefined}; export type LSSApplicantParameters3 = {firstName?: (string | null) | undefined, lastName?: (string | null) | undefined, dateOfBirth?: (string | null) | undefined, socialSecurity?: (string | null) | undefined, emailAddress?: (string | null) | undefined, phoneNumber?: (string | null) | undefined, completeAddress?: (string | null) | undefined, locality?: (string | null) | undefined, adminArea1?: (Array | null) | undefined, adminArea2?: (string | null) | undefined, postalCode?: (string | null) | undefined, country?: (string | null) | undefined, isPrimary?: (boolean | null) | undefined}; export type LSSPersonParameters = {type?: (string | null) | undefined, userId?: (unknown | null) | undefined, name?: (string | null) | undefined, emailAddress?: (string | null) | undefined}; export type LSSPartyParameters3 = {type?: (string | null) | undefined, organizationId?: (unknown | null) | undefined, entityId?: (unknown | null) | undefined, name?: (string | null) | undefined, hKey?: (string | null) | undefined, isPrimary?: (boolean | null) | undefined, workspaceId?: (unknown | null) | undefined}; export type LSSMilestoneParameters = {date?: (LSSDateRange | null) | undefined, Milestone?: (string | null) | undefined}; export type LSSSortByField3 = 'None' | 'DateCreated' | 'DateUpdated' | 'SearchScore' | 'CreditExpirationDate' | 'ApprovalDate' | 'LoanAmount' | 'LastCompletedMilestoneUpdatedAt'; export type LSSResultsSortOrder = 'Ascending' | 'Descending'; export type LSSSortField3 = {field?: LSSSortByField3 | undefined, order?: LSSResultsSortOrder | undefined}; export type LSSCasesSearchParameters2 = {hasFrozenCases?: (boolean | null) | undefined, hasOpenCases?: (boolean | null) | undefined, hasRejectedCases?: (boolean | null) | undefined, hasClosedCases?: (boolean | null) | undefined, hasOpenBorrowerCases?: (boolean | null) | undefined, hasOpenGoodLeapCases?: (boolean | null) | undefined}; export type LSSOrders = {payeeType?: (Array | null) | undefined, status?: (Array | null) | undefined}; export type LSSLoanSearchParameters = {wellKnownFilter?: (LSSWellKnownFilters | null) | undefined, tile?: (LSSPipelineActionTile | null) | undefined, title?: (string | null) | undefined, numberOfApplicants?: (number | null) | undefined, loanId?: (Array | null) | undefined, language?: (Array | null) | undefined, rateAndTerms?: (Array | null) | undefined, isAutoPay?: (boolean | null) | undefined, tenantId?: unknown | undefined, loanVersion?: (LSSNumericRange | null) | undefined, loanAmount?: (number | null) | undefined, loanAmountRange?: (LSSNumericRange | null) | undefined, category?: (Array | null) | undefined, referenceId?: (string | null) | undefined, subCategories?: (Array | null) | undefined, status?: (Array | null) | undefined, tags?: (Array | null) | undefined, stage?: (LSSStageFilter | null) | undefined, interestRate?: (LSSNumericRange | null) | undefined, term?: (Array | null) | undefined, propertyLocation?: (LSSAddressParameters3 | null) | undefined, dateCreated?: (LSSDateRange | null) | undefined, dateUpdated?: (LSSDateRange | null) | undefined, creditDecisionType?: (string | null) | undefined, creditExpirationDate?: (LSSDateRange | null) | undefined, applicant?: (LSSApplicantParameters3 | null) | undefined, person?: (LSSPersonParameters | null) | undefined, parties?: (Array | null) | undefined, hierarchies?: (Array | null) | undefined, milestone?: (LSSMilestoneParameters | null) | undefined, sort?: (LSSSortField3 | null) | undefined, fields?: (Array | null) | undefined, agent?: (string | null) | undefined, legacyDealer?: (string | null) | undefined, cases?: (LSSCasesSearchParameters2 | null) | undefined, orders?: (LSSOrders | null) | undefined, includeExpiredLoans?: (boolean | null) | undefined}; export type CreateApiPosfinancingRestV2LoansSearchArgs = {cursor?: string | undefined, limit?: number | undefined, body: LSSLoanSearchParameters}; export type CreateApiPosfinancingRestV2LoansSearchOptions = {baseUrl?: string | undefined, jwt?: string | undefined, fetch?: typeof fetch | undefined}; export const lSSAddress3 = z.object({completeAddress: z.string().nullable().optional(), locality: z.string().nullable().optional(), adminArea1: z.string().nullable().optional(), adminArea2: z.string().nullable().optional(), postalCode: z.string().nullable().optional(), country: z.string().nullable().optional()}); export const lSSApplicant3 = z.object({firstName: z.string().nullable().optional(), lastName: z.string().nullable().optional(), dateOfBirth: z.string().nullable().optional(), socialSecurity: z.string().nullable().optional(), emailAddress: z.string().nullable().optional(), phoneNumber: z.string().nullable().optional(), completeAddress: z.string().nullable().optional(), locality: z.string().nullable().optional(), adminArea1: z.string().nullable().optional(), adminArea2: z.string().nullable().optional(), postalCode: z.string().nullable().optional(), country: z.string().nullable().optional(), isPrimary: z.boolean().nullable().optional()}); export const lSSPerson3 = z.object({type: z.string().nullable().optional(), userId: z.string().nullable().optional(), name: z.string().nullable().optional(), emailAddress: z.string().nullable().optional(), phone: z.string().nullable().optional()}); export const lSSCaseSummary3 = z.object({frozenCases: z.number().int().nullable().optional(), rejectedCases: z.number().int().nullable().optional(), openCases: z.number().int().nullable().optional(), closedCases: z.number().int().nullable().optional(), openGLCases: z.number().int().nullable().optional(), totalCases: z.number().int().nullable().optional(), openBorrowerCases: z.number().int().nullable().optional(), dateCreated: z.string().nullable().optional(), dateUpdated: z.string().nullable().optional()}); export const lSSParty3 = z.object({type: z.string().nullable().optional(), organizationId: z.string().nullable().optional(), entityId: z.string().nullable().optional(), name: z.string().nullable().optional(), hKey: z.string().nullable().optional(), isPrimary: z.boolean().nullable().optional(), workspaceId: z.string().nullable().optional(), isDisabled: z.boolean().optional()}); export const lSSMilestoneObject = z.object({date: z.string().nullable().optional(), milestone: z.string().nullable().optional()}); export const lSSNextStep = z.object({step: z.string().nullable().optional(), waitingOn: z.string().nullable().optional()}); export const lSSOrder = z.object({id: z.string().optional(), amount: z.number().nullable().optional(), payee: z.string().nullable().optional(), payeeType: z.string().nullable().optional(), status: z.string().nullable().optional()}); export const lSSSearchableLoan = z.object({agent: z.string().nullable().optional(), title: z.string().nullable().optional(), numberOfApplicants: z.number().int().nullable().optional(), loanId: z.string().nullable().optional(), loanGuid: z.string().nullable().optional(), language: z.string().nullable().optional(), referenceId: z.string().nullable().optional(), isAutoPay: z.boolean().nullable().optional(), tenantId: z.string().nullable().optional(), loanVersion: z.string().nullable().optional(), loanAmount: z.number().nullable().optional(), category: z.string().nullable().optional(), categoryName: z.string().nullable().optional(), subCategories: z.array(z.string()).nullable().optional(), status: z.string().nullable().optional(), statusDisplayValue: z.string().nullable().optional(), stage: z.string().nullable().optional(), interestRate: z.number().nullable().optional(), term: z.number().int().nullable().optional(), propertyLocation: lSSAddress3.nullable().optional(), dateCreated: z.string().nullable().optional(), dateUpdated: z.string().nullable().optional(), creditExpirationDate: z.string().nullable().optional(), approvalDate: z.string().nullable().optional(), creditDecisionType: z.string().nullable().optional(), applicants: z.array(lSSApplicant3).nullable().optional(), people: z.array(lSSPerson3).nullable().optional(), tags: z.array(z.string()).nullable().optional(), cases: lSSCaseSummary3.nullable().optional(), parties: z.array(lSSParty3).nullable().optional(), milestones: z.array(lSSMilestoneObject).nullable().optional(), legacyDealer: z.string().nullable().optional(), hasPurchaseOrder: z.boolean().nullable().optional(), purchaseOrderStatus: z.string().nullable().optional(), lastCompletedMilestone: z.string().nullable().optional(), waitingOn: z.array(z.string()).nullable().optional(), lastCompletedMilestoneUpdatedAt: z.string().nullable().optional(), nextSteps: z.array(lSSNextStep).nullable().optional(), orders: z.array(lSSOrder).nullable().optional(), includeNotCreatedOrders: z.boolean().nullable().optional()}); export const lSSCursor = z.object({next: z.string().nullable().optional(), size: z.number().int().optional(), total: z.number().int().optional()}); export const lSSMeta = z.object({cursor: lSSCursor.nullable().optional(), pageNumber: z.number().int().nullable().optional(), itemsPerPage: z.number().int().nullable().optional(), total: z.number().int().nullable().optional()}); export const lSSResponseViewModelOfIReadOnlyCollectionOfSearchableLoanAndMeta = z.object({payload: z.array(lSSSearchableLoan).nullable().optional(), meta: lSSMeta.nullable().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Required Authorization Claims: lss_can_do_everything,lss_can_search_organization,lss_can_search_own,ogn_can_read_all_loans, * * POST /posfinancing/rest/v2/loans-search */ export const createApiPosfinancingRestV2LoansSearch = async (args: CreateApiPosfinancingRestV2LoansSearchArgs, options?: CreateApiPosfinancingRestV2LoansSearchOptions) => { const {baseUrl = "https://devint01-api.goodleap.com", fetch: fetchFn = fetch, jwt} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json;version=1") if (args.cursor != null) query.append("cursor", String(args.cursor)) if (args.limit != null) query.append("limit", String(args.limit)) if (jwt !== undefined) headers.set('authorization', `Bearer ${jwt}`) const url = `${baseUrl.replace(/\/+$/, '')}/posfinancing/rest/v2/loans-search${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(lSSResponseViewModelOfIReadOnlyCollectionOfSearchableLoanAndMeta, await res.json()) };