import { BaseClient } from "../client/baseClient"; import { InvoiceExportInitResponse, InvoiceExportRequest, InvoiceExportStatusResponse, InvoiceMetadataResponse, InvoiceQueryFilters, normalizeInvoiceQueryFilters, validateInvoiceQueryFilters, } from "../types/invoices"; export class InvoicesClient extends BaseClient { async getInvoice(ksefNumber: string): Promise { const token = await this.getAccessToken(); return this.http.request({ method: "GET", path: `/invoices/ksef/${encodeURIComponent(ksefNumber)}`, authToken: token, responseType: "text", headers: { Accept: "application/xml", }, }); } async queryInvoiceMetadata( filters: InvoiceQueryFilters, pageOffset?: number, pageSize?: number, sortOrder?: "Asc" | "Desc", ): Promise { const normalizedFilters = normalizeInvoiceQueryFilters(filters); validateInvoiceQueryFilters(normalizedFilters); const token = await this.getAccessToken(); return this.http.request({ method: "POST", path: "/invoices/query/metadata", query: { pageOffset, pageSize, sortOrder, }, body: normalizedFilters, authToken: token, }); } async exportInvoices(request: InvoiceExportRequest): Promise { const { onlyMetadata, includeMetadata, ...body } = request; const normalizedFilters = normalizeInvoiceQueryFilters(body.filters); validateInvoiceQueryFilters(normalizedFilters); const token = await this.getAccessToken(); return this.http.request({ method: "POST", path: "/invoices/exports", body: { ...body, ...((onlyMetadata ?? includeMetadata) !== undefined ? { onlyMetadata: onlyMetadata ?? includeMetadata } : {}), filters: normalizedFilters, }, authToken: token, }); } async getInvoiceExportStatus(referenceNumber: string): Promise { const token = await this.getAccessToken(); return this.http.request({ method: "GET", path: `/invoices/exports/${encodeURIComponent(referenceNumber)}`, authToken: token, }); } }