@angro/nav-connector
Version:
Node.js module which provides an interface for communicating with NAV online invoice service.
173 lines (154 loc) • 5.05 kB
JavaScript
const axiosCreate = require('axios').create;
const defaultBaseUrl = 'https://api.onlineszamla.nav.gov.hu/invoiceService/v3/';
const manageInvoice = require('../src/manage-invoice.js');
const manageAnnulment = require('../src/manage-annulment.js');
const queryTransactionStatus = require('../src/query-transaction-status.js');
const testConnection = require('../src/test-connection.js');
const queryInvoiceData = require('../src/query-invoice-data.js');
const queryInvoiceDigest = require('../src/query-invoice-digest');
const queryTaxpayer = require('../src/query-taxpayer.js');
/** Class representing a NAV online interface.
*/
module.exports = class NavConnector {
/**
* Create a navConnector.
* @param {Object} params Constructor params.
* @param {Object} params.technicalUser Technical user data.
* @param {Object} params.softwareData Software data.
* @param {string} [params.baseURL=https://api.onlineszamla.nav.gov.hu/invoiceService/v3/] Axios baseURL.
* @param {number} [params.timeout=70000] Axios default timeout integer in milliseconds.
*/
constructor({
technicalUser,
softwareData,
baseURL = defaultBaseUrl,
timeout = 70000,
}) {
this.technicalUser = technicalUser;
this.softwareData = softwareData;
this.axios = axiosCreate({
baseURL,
timeout,
headers: {
'content-type': 'application/xml',
accept: 'application/xml',
encoding: 'UTF-8',
},
});
}
/**
* Send request to NAV service to manage invoices.
* @async
* @param {Object} invoiceOperations Request object for xml conversion and send.
* @returns {Promise<string>} Manage invoice operation transaction id.
*/
async manageInvoice(invoiceOperations) {
const { technicalUser, softwareData, axios } = this;
return manageInvoice({
invoiceOperations,
technicalUser,
softwareData,
axios,
});
}
/**
* Send request to NAV service to manage invoice annulments.
* @async
* @param {Object} annulmentOperations Request object for xml conversion and send.
* @returns {Promise<string>} Manage invoice annulment operation transaction id.
*/
async manageAnnulment(annulmentOperations) {
const { technicalUser, softwareData, axios } = this;
return manageAnnulment({
annulmentOperations,
technicalUser,
softwareData,
axios,
});
}
/**
* Get the result of a previously sent manage invoice request.
* @async
* @param {Object} params Function params.
* @param {string} params.transactionId Manage invoice operation transaction id.
* @param {boolean} [params.returnOriginalRequest=false] Flag for api response to contain the original invoice.
* @returns {Promise<Array>} processingResults
*/
async queryTransactionStatus({
transactionId,
returnOriginalRequest = false,
}) {
const { technicalUser, softwareData, axios } = this;
return queryTransactionStatus({
transactionId,
returnOriginalRequest,
technicalUser,
softwareData,
axios,
});
}
/**
* Test connection, user auth data and keys validity with a tokenExchangeRequest.
* @async
* @throws {Object} Will throw an error if there was a network expectation
* or any user given auth data or key is invalid.
*/
async testConnection() {
const { technicalUser, softwareData, axios } = this;
return testConnection({
technicalUser,
softwareData,
axios,
});
}
/**
* Query previously sent invoices with invoice number or query params.
* @async
* @param {Object} params Function params.
* @param {Object} params.invoiceQuery Query single invoice with invoice number.
* @returns {Promise<Object>} response
*/
async queryInvoiceData({ invoiceQuery }) {
const { technicalUser, softwareData, axios } = this;
return queryInvoiceData({
invoiceQuery,
technicalUser,
softwareData,
axios,
});
}
/**
* Query previously sent invoices with query params.
* @async
* @param {Object} params Function params.
* @param {number} params.page Integer page to query.
* @param {string} params.invoiceDirection inbound or outbound request type
* @param {Object} params.queryParams Query multiple invoices with params.
* @returns {Promise<Object>} response
*/
async queryInvoiceDigest({ page, invoiceDirection, queryParams }) {
const { technicalUser, softwareData, axios } = this;
return queryInvoiceDigest({
page,
invoiceDirection,
queryParams,
technicalUser,
softwareData,
axios,
});
}
/**
* Get taxpayer information by tax number.
* @param {string} taxNumber Taxpayer tax number to get information for.
* @returns {Promise<Object>} Taxpayer information.
*/
async queryTaxpayer(taxNumber) {
const { technicalUser, softwareData, axios } = this;
return queryTaxpayer({
taxNumber,
technicalUser,
softwareData,
axios,
});
}
};