UNPKG

@angro/nav-client-node

Version:

Node.js SDK for NAV connector cloud

327 lines (299 loc) 8.28 kB
const axiosCreate = require("axios").create; const queryTaxpayer = require("../src/requests/query-taxpayer.js"); const queryInvoices = require("../src/requests/query-invoices.js"); const querySupplierInvoices = require("../src/requests/query-supplier-invoices.js"); const queryInvoice = require("../src/requests/query-invoice.js"); const queryInvoiceData = require("../src/requests/query-invoice-data.js"); const createStornoInvoice = require("../src/requests/create-storno-invoice"); const createModifyInvoice = require("../src/requests/create-modify-invoice"); const createAnnulInvoice = require("../src/requests/create-annul-invoice"); const createInvoice = require("../src/requests/create-invoice"); const createResendInvoice = require("../src/requests/create-resend-invoice"); const RequestSignature = require("./util/RequestSignature"); /** * Client for sending requests to NAV connector */ class ApiClient { /** * Construct the client * @param {string} userId - ID of your user * @param {string} secretToken - Corresponding secret token * @param {number} [params.timeout=70000] Axios default timeout integer in milliseconds. */ constructor(userId, secretToken, timeout, url) { this.userId = userId; this.secretToken = secretToken; this.timeout = timeout; const _baseURL = url || process.env.ANGRO_API_URL || "http://nav.angro.hu"; this.axios = axiosCreate({ baseURL: _baseURL, timeout, headers: { "content-type": "application/json", accept: "application/json", encoding: "UTF-8", }, }); this.requestSignature = new RequestSignature(userId, secretToken); } /** * Get taxpayer information by tax number. * @async * @param {Object} params Function params. * @param {string} params.taxNumber Taxpayer tax number to get information for. * @returns {Promise<Object>} Taxpayer information. */ async getTaxpayer({ taxNumber }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await queryTaxpayer({ taxNumber, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * Get all invoices associated with the user * @async * @param {Object} params Function params. * @param {boolean} [params.requestItems=false] If true, associated items will be returned with invoices * @param {boolean} [params.requestNavData=false] If true, query will return data from NAV * @returns {Promise<Object>} All invoices */ async getInvoices({ requestItems = false, requestNavData = false, queryParams, }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await queryInvoices({ requestItems, requestNavData, queryParams, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * Get all supplier invoices based on the sarch params * @async * @param {Object} params Function params. * @param {boolean} [params.dateFrom] Date to get invoices from. * @param {boolean} [params.dateTo] Date to get invoices to. * @param {boolean} [params.page] Page number. * @returns {Promise<Object>} All supplier invoices */ async getSupplierInvoices({ dateFrom, dateTo, page, taxNo }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await querySupplierInvoices({ dateFrom, dateTo, page, taxNo, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * Get the result of a previously sent manage invoice request. * @async * @param {Object} params Function params. * @param {string} params.id The id of the invoice * @param {boolean} [params.requestNavData=false] If true invoice data from NAV will be returned * @param {boolean} [params.requestNavStatus=false] If true invoice status from NAV will be returned * @returns {Promise<Object>} Invoice information */ async getInvoice({ id, requestNavData = false, requestNavStatus = false }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await queryInvoice({ id, requestNavData, requestNavStatus, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * Get the details of the selected supplier invoice. * @async * @param {Object} params Function params. * @param {string} params.invoiceNumber The number of the invoice. * @param {string} params.supplierTaxNumber The tax number of the supplier. * @returns {Promise<Object>} Invoice information */ async getInvoiceData({ supplierInvoiceId, invoiceNumber, supplierTaxNumber }) { const { axios, requestSignature } = this; const res = { errors: [] }; try { res.response = await queryInvoiceData({ supplierInvoiceId, invoiceNumber, supplierTaxNumber, axios, requestSignature }); return res; } catch (error) { res.errors.push(error); return res; } } /** * Send request to create an invoice * @async * @param {Object} params Function params * @param {Invoice} params.payload Invoice payload * @returns {Promise<string>} Invoice id */ async createInvoice(payload) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await createInvoice({ payload, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * @async * @param {string} id the id of the invoice * @param {Invoice} params.payload Invoice payload * @returns {Promise<string>} Invoice Id */ async stornoInvoice({ id, payload }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await createStornoInvoice({ id, payload, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * @async * @param {string} id the id of the invoice * @param {Invoice} params.payload Invoice payload * @returns {Promise<string>} Invoice Id */ async modifyInvoice({ id, payload }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await createModifyInvoice({ id, payload, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * @async * @param {string} id the id of the invoice * @param {Annulment} params.payload Annulment payload * @returns {Promise<string>} Annulment Id */ async annulInvoice({ id, payload }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await createAnnulInvoice({ id, payload, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } /** * @async * @param {string} id the id of the invoice * @param {Invoice} params.payload Invoice customerInfo and supplierInfo payload * @returns {Promise<string>} Invoice id */ async resendInvoice({ id, payload }) { const { axios, requestSignature } = this; const res = { errors: [], }; try { res.response = await createResendInvoice({ id, payload, axios, requestSignature, }); return res; } catch (error) { res.errors.push(error); return res; } } } module.exports.ApiClient = ApiClient;