eust-conciliation
Version:
43 lines (37 loc) • 1.53 kB
text/typescript
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';
()
export class Conciliation01EUSTClient extends Base01EUSTClient implements IConciliationClient {
({ 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);
}
}
}