UNPKG

eust-conciliation

Version:
54 lines (47 loc) 1.7 kB
import { Injectable } from '@severo-tech/injection-decorator'; import { BadGateway } from '@somma/node-errors'; import axios, { isAxiosError } from 'axios'; import { IInvoiceClient, IInvoiceClientFilter, } from '../../application/contracts'; import { Invoice } from '../../domain/invoice'; import { Base01EUSTClient } from './base-01eust-client'; import { RetryMethod } from '../../application/decorators'; @Injectable() export class Invoice01EUSTClient extends Base01EUSTClient implements IInvoiceClient { @RetryMethod({ ms: 500 }) public async getUnreconciled(filters: IInvoiceClientFilter): Promise<Invoice[]> { const url = `${this.baseURL}/v1/invoices/unreconciled`; const params = { ...filters, }; const headers = { Authorization: await this.getToken(), }; this.logger.debug( `"Invoice01EUSTClient.getUnreconciled" - Sending GET request to url [${url}] with params [${JSON.stringify( params, )}]`, ); try { const { data } = await axios.get<Invoice[]>(url, { params, headers, }); return data.map((invoice: Invoice) => ({ ...invoice, issueDate: new Date(invoice.issueDate as unknown as string), createdAt: new Date(invoice.createdAt as unknown as string), updatedAt: new Date(invoice.updatedAt as unknown as string), })); } catch (error) { const message = `Cannot get Unreconciled Invoices: GET - "${url}" | params: [${JSON.stringify( params, )}]`; const err = isAxiosError(error) ? error.response?.data : error; this.logger.error(message, err); throw new BadGateway(message, undefined, err); } } }