@angro/nav-client-node
Version:
Node.js SDK for NAV connector cloud
327 lines (299 loc) • 8.28 kB
JavaScript
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;