UNPKG

eust-conciliation

Version:
43 lines (37 loc) 1.53 kB
import { Injectable } from '@severo-tech/injection-decorator'; import { BadGateway } from '@somma/node-errors'; import axios, { isAxiosError } from 'axios'; import { IConciliationClient } from '../../application/contracts'; import { Invoice } from '../../domain/invoice'; import { Base01EUSTClient } from './base-01eust-client'; import { RetryMethod } from '../../application/decorators'; import { Debit } from '../../domain/debit'; @Injectable() export class Conciliation01EUSTClient extends Base01EUSTClient implements IConciliationClient { @RetryMethod({ ms: 500 }) public async conciliate(debits: Debit[], invoices: Invoice[]): Promise<void> { const url = `${this.baseURL}/v1/conciliations`; const body = { debitIds: debits.map(({ id }: Debit): string => id), invoiceIds: invoices.map(({ id }: Invoice): string => id), }; const headers = { Authorization: await this.getToken(), }; this.logger.debug( `"Conciliation01EUSTClient.conciliate" - Sending POST request to url [${url}] with body [${JSON.stringify(body)}]`, ); try { await axios.post<{ conciliated: boolean, integrated: boolean }>( url, body, { headers }, ); } catch (error) { const message = `Cannot conciliate invoices x debits: POST - "${url}" | body: [${JSON.stringify(body)}]`; const err = isAxiosError(error) ? error.response?.data : error; this.logger.error(message, err); throw new BadGateway(message, undefined, err); } } }