UNPKG

sdk-node-apis-efi

Version:

Module for integration with Efi Bank API

246 lines (245 loc) 6.44 kB
import * as z from "zod"; const DateSchema = z.iso.date(); const DateTimeSchema = z.iso.datetime({ offset: true }); const PaymentStatusSchema = z.enum([ 'EM_PROCESSAMENTO', 'AGENDADO', 'REALIZADO', 'LIQUIDADO', 'CANCELADO', 'NAO_REALIZADO', ]); export const PayDetailBarCodeParamsSchema = z .object({ codBarras: z.string().regex(/^\d{44,48}$/) }) .strict(); export const PayRequestBarCodeParamsSchema = PayDetailBarCodeParamsSchema; export const PayRequestBarCodeBodySchema = z .object({ valor: z.number().int().positive(), dataPagamento: DateSchema, descricao: z.string().optional(), }) .strict(); export const PayDetailPaymentParamsSchema = z.object({ idPagamento: z.string() }).strict(); export const PayListPaymentsParamsSchema = z .object({ dataInicio: DateSchema, dataFim: DateSchema, }) .strict(); export const PayWebhookBodySchema = z.object({ url: z.url() }).strict(); export const PayListWebhookParamsSchema = z .object({ dataInicio: DateTimeSchema, dataFim: DateTimeSchema, }) .strict(); export const PayDeleteWebhookBodySchema = PayWebhookBodySchema; const PayPartySchema = z .object({ nome: z.string(), documento: z.string(), }) .loose(); const PayBilletValuesSchema = z .object({ original: z.number(), abatimento: z.number(), multa: z.number(), juros: z.number(), desconto: z.number(), final: z.number(), }) .loose(); const PayInformationSchema = z .object({ divergente: z .object({ deveAceitar: z.boolean(), valorMinimo: z.number(), valorMaximo: z.number(), }) .loose(), parcial: z .object({ deveAceitar: z.boolean(), limiteDePagamentos: z.number().int(), }) .loose(), podeSerPago: z.boolean(), }) .loose(); const PayDetailBilletResponseSchema = z .object({ tipo: z.literal('boleto'), banco: z .object({ codigo: z.number().int(), nome: z.string(), }) .loose(), codBarras: z.string(), linhaDigitavel: z.string(), datas: z .object({ vencimento: z.string(), limitePagamento: z.string(), }) .loose(), beneficiario: PayPartySchema.extend({ fantasia: z.string() }).loose(), pagador: PayPartySchema, valores: PayBilletValuesSchema, informacoesPagamento: PayInformationSchema, }) .loose(); const PayDetailTaxResponseSchema = z .object({ tipo: z.literal('tributo'), banco: z.null(), codBarras: z.string(), linhaDigitavel: z.string(), datas: z .object({ vencimento: z.string(), limitePagamento: z.null(), }) .loose(), beneficiario: z.null(), pagador: z.null(), sacadorAvalista: PayPartySchema.nullable(), valores: z .object({ original: z.number(), abatimento: z.number().nullable(), pago: z.number().nullable(), final: z.number(), }) .loose(), informacoesPagamento: z.null(), }) .loose(); export const PayDetailBarCodeResponseSchema = z.discriminatedUnion('tipo', [ PayDetailBilletResponseSchema, PayDetailTaxResponseSchema, ]); const PayRequestDateResponseSchema = z .object({ solicitacao: z.string(), pagamento: z.string(), }) .loose(); export const PayRequestBarCodeResponseSchema = z .object({ idPagamento: z.string(), valorPago: z.number().int(), status: PaymentStatusSchema, data: PayRequestDateResponseSchema, }) .loose(); const PayLiquidatedPaymentResponseSchema = z .object({ idPagamento: z.string(), valorPago: z.number().int(), status: z.literal('LIQUIDADO'), motivoRecusa: z.string().nullable(), data: z .object({ solicitacao: z.string(), pagamento: z.string(), }) .loose(), }) .loose(); const PayFailedPaymentResponseSchema = z .object({ idPagamento: z.string(), codBarras: z.string(), linhaDigitavel: z.string(), valorPago: z.number().int(), status: z.literal('NAO_REALIZADO'), retornoBancario: z.string(), protocolo: z.string().nullable(), descricao: z.string(), horario: z .object({ solicitacao: z.string(), }) .loose(), }) .loose(); const PayPendingPaymentResponseSchema = z .object({ idPagamento: z.string(), status: z.enum(['EM_PROCESSAMENTO', 'AGENDADO', 'REALIZADO', 'CANCELADO']), codBarras: z.string().optional(), linhaDigitavel: z.string().optional(), valorPago: z.number().int().optional(), motivoRecusa: z.string().nullable().optional(), retornoBancario: z.string().nullable().optional(), protocolo: z.string().nullable().optional(), descricao: z.string().optional(), data: z .object({ solicitacao: z.string(), pagamento: z.string().nullable().optional(), }) .loose() .optional(), horario: z .object({ solicitacao: z.string(), }) .loose() .optional(), }) .loose(); export const PayDetailPaymentResponseSchema = z.discriminatedUnion('status', [ PayLiquidatedPaymentResponseSchema, PayFailedPaymentResponseSchema, PayPendingPaymentResponseSchema, ]); export const PayListPaymentsResponseSchema = z .object({ datas: z .object({ inicial: DateSchema, final: DateSchema, }) .loose(), solicitacoes: z .object({ total: z.number().int(), processando: z.number().int(), sucesso: z.number().int(), falha: z.number().int(), cancelada: z.number().int(), }) .loose(), solicitacoesFalhas: z.array(z.number().int()), }) .loose(); export const PayConfigWebhookResponseSchema = z.object({ url: z.string() }).loose(); export const PayListWebhookResponseSchema = z .object({ parametros: z .object({ inicio: z.string(), fim: z.string(), paginacao: z .object({ paginaAtual: z.number().int(), itensPorPagina: z.number().int(), quantidadeDePaginas: z.number().int(), quantidadeTotalDeItens: z.number().int(), }) .loose(), }) .loose(), webhooks: z.array(z .object({ url: z.string(), criacao: z.string(), }) .loose()), }) .loose();