keez-invoicing 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +366 -0
- package/dist/coverage/lcov-report/block-navigation.js +71 -0
- package/dist/coverage/lcov-report/prettify.js +478 -0
- package/dist/coverage/lcov-report/sorter.js +177 -0
- package/dist/eslint.config.js +56 -0
- package/dist/jest.config.cjs +13 -0
- package/dist/jest.config.js +13 -0
- package/dist/src/api/__tests__/index.test.js +52 -0
- package/dist/src/api/authorise.js +48 -0
- package/dist/src/api/invoices/cancel.js +33 -0
- package/dist/src/api/invoices/create.js +97 -0
- package/dist/src/api/invoices/delete.js +33 -0
- package/dist/src/api/invoices/downloadPdf.js +31 -0
- package/dist/src/api/invoices/getAll.js +84 -0
- package/dist/src/api/invoices/sendMail.js +59 -0
- package/dist/src/api/invoices/submitEfactura.js +34 -0
- package/dist/src/api/invoices/update.js +61 -0
- package/dist/src/api/invoices/validate.js +39 -0
- package/dist/src/api/invoices/view.js +93 -0
- package/dist/src/api/items/create.js +42 -0
- package/dist/src/api/items/getAll.js +74 -0
- package/dist/src/api/items/getById.js +46 -0
- package/dist/src/api/items/index.js +14 -0
- package/dist/src/api/items/patch.js +49 -0
- package/dist/src/api/items/update.js +41 -0
- package/dist/src/config/constants.js +23 -0
- package/dist/src/config/constructorParam.js +3 -0
- package/dist/src/config/measureUnit.js +22 -0
- package/dist/src/config/paymentType.js +17 -0
- package/dist/src/config/paymentType.js.js +16 -0
- package/dist/src/dto/allInvoicesResponse.js +3 -0
- package/dist/src/dto/authResponse.js +3 -0
- package/dist/src/dto/common/index.js +3 -0
- package/dist/src/dto/common/paginationParams.js +3 -0
- package/dist/src/dto/createInvoiceRequest.js +3 -0
- package/dist/src/dto/invoiceResponse.js +3 -0
- package/dist/src/dto/invoices/index.js +3 -0
- package/dist/src/dto/invoices/invoiceFilterParams.js +3 -0
- package/dist/src/dto/invoices/invoiceRequestV2.js +3 -0
- package/dist/src/dto/invoices/sendInvoiceParams.js +3 -0
- package/dist/src/dto/items/allItemsResponse.js +3 -0
- package/dist/src/dto/items/index.js +3 -0
- package/dist/src/dto/items/itemRequest.js +3 -0
- package/dist/src/dto/items/itemResponse.js +3 -0
- package/dist/src/errors/KeezError.js +27 -0
- package/dist/src/helpers/logger.js +15 -0
- package/dist/src/index.js +15 -0
- package/dist/src/keezApi.js +283 -0
- package/dist/tests/additional-coverage.test.js +351 -0
- package/dist/tests/edge-cases.test.js +353 -0
- package/dist/tests/error-handling.test.js +224 -0
- package/dist/tests/filter-params.test.js +267 -0
- package/dist/tests/index.test.js +493 -0
- package/dist/tests/invoices-extended.test.js +168 -0
- package/dist/tests/items.test.js +142 -0
- package/dist/types/coverage/lcov-report/block-navigation.d.ts +1 -0
- package/dist/types/coverage/lcov-report/prettify.d.ts +0 -0
- package/dist/types/coverage/lcov-report/sorter.d.ts +1 -0
- package/dist/types/eslint.config.d.ts +2 -0
- package/dist/types/jest.config.d.cts +9 -0
- package/dist/types/jest.config.d.ts +9 -0
- package/dist/types/src/api/__tests__/index.test.d.ts +1 -0
- package/dist/types/src/api/authorise.d.ts +18 -0
- package/dist/types/src/api/invoices/cancel.d.ts +9 -0
- package/dist/types/src/api/invoices/create.d.ts +22 -0
- package/dist/types/src/api/invoices/delete.d.ts +9 -0
- package/dist/types/src/api/invoices/downloadPdf.d.ts +8 -0
- package/dist/types/src/api/invoices/getAll.d.ts +22 -0
- package/dist/types/src/api/invoices/sendMail.d.ts +24 -0
- package/dist/types/src/api/invoices/submitEfactura.d.ts +9 -0
- package/dist/types/src/api/invoices/update.d.ts +11 -0
- package/dist/types/src/api/invoices/validate.d.ts +21 -0
- package/dist/types/src/api/invoices/view.d.ts +22 -0
- package/dist/types/src/api/items/create.d.ts +10 -0
- package/dist/types/src/api/items/getAll.d.ts +10 -0
- package/dist/types/src/api/items/getById.d.ts +10 -0
- package/dist/types/src/api/items/index.d.ts +5 -0
- package/dist/types/src/api/items/patch.d.ts +11 -0
- package/dist/types/src/api/items/update.d.ts +11 -0
- package/dist/types/src/config/constants.d.ts +13 -0
- package/dist/types/src/config/constructorParam.d.ts +6 -0
- package/dist/types/src/config/measureUnit.d.ts +17 -0
- package/dist/types/src/config/paymentType.d.ts +12 -0
- package/dist/types/src/config/paymentType.js.d.ts +11 -0
- package/dist/types/src/dto/allInvoicesResponse.d.ts +21 -0
- package/dist/types/src/dto/authResponse.d.ts +7 -0
- package/dist/types/src/dto/common/index.d.ts +1 -0
- package/dist/types/src/dto/common/paginationParams.d.ts +4 -0
- package/dist/types/src/dto/createInvoiceRequest.d.ts +34 -0
- package/dist/types/src/dto/invoiceResponse.d.ts +48 -0
- package/dist/types/src/dto/invoices/index.d.ts +3 -0
- package/dist/types/src/dto/invoices/invoiceFilterParams.d.ts +8 -0
- package/dist/types/src/dto/invoices/invoiceRequestV2.d.ts +23 -0
- package/dist/types/src/dto/invoices/sendInvoiceParams.d.ts +5 -0
- package/dist/types/src/dto/items/allItemsResponse.d.ts +13 -0
- package/dist/types/src/dto/items/index.d.ts +3 -0
- package/dist/types/src/dto/items/itemRequest.d.ts +34 -0
- package/dist/types/src/dto/items/itemResponse.d.ts +15 -0
- package/dist/types/src/errors/KeezError.d.ts +11 -0
- package/dist/types/src/helpers/logger.d.ts +2 -0
- package/dist/types/src/index.d.ts +11 -0
- package/dist/types/src/keezApi.d.ts +114 -0
- package/dist/types/tests/additional-coverage.test.d.ts +1 -0
- package/dist/types/tests/edge-cases.test.d.ts +1 -0
- package/dist/types/tests/error-handling.test.d.ts +1 -0
- package/dist/types/tests/filter-params.test.d.ts +1 -0
- package/dist/types/tests/index.test.d.ts +1 -0
- package/dist/types/tests/invoices-extended.test.d.ts +1 -0
- package/dist/types/tests/items.test.d.ts +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
var addSorting = (function () {
|
|
4
|
+
'use strict';
|
|
5
|
+
var cols, currentSort = {
|
|
6
|
+
index: 0,
|
|
7
|
+
desc: false
|
|
8
|
+
};
|
|
9
|
+
// returns the summary table element
|
|
10
|
+
function getTable() {
|
|
11
|
+
return document.querySelector('.coverage-summary');
|
|
12
|
+
}
|
|
13
|
+
// returns the thead element of the summary table
|
|
14
|
+
function getTableHeader() {
|
|
15
|
+
return getTable().querySelector('thead tr');
|
|
16
|
+
}
|
|
17
|
+
// returns the tbody element of the summary table
|
|
18
|
+
function getTableBody() {
|
|
19
|
+
return getTable().querySelector('tbody');
|
|
20
|
+
}
|
|
21
|
+
// returns the th element for nth column
|
|
22
|
+
function getNthColumn(n) {
|
|
23
|
+
return getTableHeader().querySelectorAll('th')[n];
|
|
24
|
+
}
|
|
25
|
+
function onFilterInput() {
|
|
26
|
+
const searchValue = document.getElementById('fileSearch').value;
|
|
27
|
+
const rows = document.getElementsByTagName('tbody')[0].children;
|
|
28
|
+
// Try to create a RegExp from the searchValue. If it fails (invalid regex),
|
|
29
|
+
// it will be treated as a plain text search
|
|
30
|
+
let searchRegex;
|
|
31
|
+
try {
|
|
32
|
+
searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
searchRegex = null;
|
|
36
|
+
}
|
|
37
|
+
for (let i = 0; i < rows.length; i++) {
|
|
38
|
+
const row = rows[i];
|
|
39
|
+
let isMatch = false;
|
|
40
|
+
if (searchRegex) {
|
|
41
|
+
// If a valid regex was created, use it for matching
|
|
42
|
+
isMatch = searchRegex.test(row.textContent);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Otherwise, fall back to the original plain text search
|
|
46
|
+
isMatch = row.textContent
|
|
47
|
+
.toLowerCase()
|
|
48
|
+
.includes(searchValue.toLowerCase());
|
|
49
|
+
}
|
|
50
|
+
row.style.display = isMatch ? '' : 'none';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// loads the search box
|
|
54
|
+
function addSearchBox() {
|
|
55
|
+
var template = document.getElementById('filterTemplate');
|
|
56
|
+
var templateClone = template.content.cloneNode(true);
|
|
57
|
+
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
|
58
|
+
template.parentElement.appendChild(templateClone);
|
|
59
|
+
}
|
|
60
|
+
// loads all columns
|
|
61
|
+
function loadColumns() {
|
|
62
|
+
var colNodes = getTableHeader().querySelectorAll('th'), colNode, cols = [], col, i;
|
|
63
|
+
for (i = 0; i < colNodes.length; i += 1) {
|
|
64
|
+
colNode = colNodes[i];
|
|
65
|
+
col = {
|
|
66
|
+
key: colNode.getAttribute('data-col'),
|
|
67
|
+
sortable: !colNode.getAttribute('data-nosort'),
|
|
68
|
+
type: colNode.getAttribute('data-type') || 'string'
|
|
69
|
+
};
|
|
70
|
+
cols.push(col);
|
|
71
|
+
if (col.sortable) {
|
|
72
|
+
col.defaultDescSort = col.type === 'number';
|
|
73
|
+
colNode.innerHTML =
|
|
74
|
+
colNode.innerHTML + '<span class="sorter"></span>';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return cols;
|
|
78
|
+
}
|
|
79
|
+
// attaches a data attribute to every tr element with an object
|
|
80
|
+
// of data values keyed by column name
|
|
81
|
+
function loadRowData(tableRow) {
|
|
82
|
+
var tableCols = tableRow.querySelectorAll('td'), colNode, col, data = {}, i, val;
|
|
83
|
+
for (i = 0; i < tableCols.length; i += 1) {
|
|
84
|
+
colNode = tableCols[i];
|
|
85
|
+
col = cols[i];
|
|
86
|
+
val = colNode.getAttribute('data-value');
|
|
87
|
+
if (col.type === 'number') {
|
|
88
|
+
val = Number(val);
|
|
89
|
+
}
|
|
90
|
+
data[col.key] = val;
|
|
91
|
+
}
|
|
92
|
+
return data;
|
|
93
|
+
}
|
|
94
|
+
// loads all row data
|
|
95
|
+
function loadData() {
|
|
96
|
+
var rows = getTableBody().querySelectorAll('tr'), i;
|
|
97
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
98
|
+
rows[i].data = loadRowData(rows[i]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// sorts the table using the data for the ith column
|
|
102
|
+
function sortByIndex(index, desc) {
|
|
103
|
+
var key = cols[index].key, sorter = function (a, b) {
|
|
104
|
+
a = a.data[key];
|
|
105
|
+
b = b.data[key];
|
|
106
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
107
|
+
}, finalSorter = sorter, tableBody = document.querySelector('.coverage-summary tbody'), rowNodes = tableBody.querySelectorAll('tr'), rows = [], i;
|
|
108
|
+
if (desc) {
|
|
109
|
+
finalSorter = function (a, b) {
|
|
110
|
+
return -1 * sorter(a, b);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
for (i = 0; i < rowNodes.length; i += 1) {
|
|
114
|
+
rows.push(rowNodes[i]);
|
|
115
|
+
tableBody.removeChild(rowNodes[i]);
|
|
116
|
+
}
|
|
117
|
+
rows.sort(finalSorter);
|
|
118
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
119
|
+
tableBody.appendChild(rows[i]);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// removes sort indicators for current column being sorted
|
|
123
|
+
function removeSortIndicators() {
|
|
124
|
+
var col = getNthColumn(currentSort.index), cls = col.className;
|
|
125
|
+
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
|
126
|
+
col.className = cls;
|
|
127
|
+
}
|
|
128
|
+
// adds sort indicators for current column being sorted
|
|
129
|
+
function addSortIndicators() {
|
|
130
|
+
getNthColumn(currentSort.index).className += currentSort.desc
|
|
131
|
+
? ' sorted-desc'
|
|
132
|
+
: ' sorted';
|
|
133
|
+
}
|
|
134
|
+
// adds event listeners for all sorter widgets
|
|
135
|
+
function enableUI() {
|
|
136
|
+
var i, el, ithSorter = function ithSorter(i) {
|
|
137
|
+
var col = cols[i];
|
|
138
|
+
return function () {
|
|
139
|
+
var desc = col.defaultDescSort;
|
|
140
|
+
if (currentSort.index === i) {
|
|
141
|
+
desc = !currentSort.desc;
|
|
142
|
+
}
|
|
143
|
+
sortByIndex(i, desc);
|
|
144
|
+
removeSortIndicators();
|
|
145
|
+
currentSort.index = i;
|
|
146
|
+
currentSort.desc = desc;
|
|
147
|
+
addSortIndicators();
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
for (i = 0; i < cols.length; i += 1) {
|
|
151
|
+
if (cols[i].sortable) {
|
|
152
|
+
// add the click event handler on the th so users
|
|
153
|
+
// dont have to click on those tiny arrows
|
|
154
|
+
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
|
155
|
+
if (el.addEventListener) {
|
|
156
|
+
el.addEventListener('click', ithSorter(i));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
el.attachEvent('onclick', ithSorter(i));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// adds sorting functionality to the UI
|
|
165
|
+
return function () {
|
|
166
|
+
if (!getTable()) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
cols = loadColumns();
|
|
170
|
+
loadData();
|
|
171
|
+
addSearchBox();
|
|
172
|
+
addSortIndicators();
|
|
173
|
+
enableUI();
|
|
174
|
+
};
|
|
175
|
+
})();
|
|
176
|
+
window.addEventListener('load', addSorting);
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY292ZXJhZ2UvbGNvdi1yZXBvcnQvc29ydGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvQkFBb0I7QUFDcEIsSUFBSSxVQUFVLEdBQUcsQ0FBQztJQUNkLFlBQVksQ0FBQztJQUNiLElBQUksSUFBSSxFQUNKLFdBQVcsR0FBRztRQUNWLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxFQUFFLEtBQUs7S0FDZCxDQUFDO0lBRU4sb0NBQW9DO0lBQ3BDLFNBQVMsUUFBUTtRQUNiLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxpREFBaUQ7SUFDakQsU0FBUyxjQUFjO1FBQ25CLE9BQU8sUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxpREFBaUQ7SUFDakQsU0FBUyxZQUFZO1FBQ2pCLE9BQU8sUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCx3Q0FBd0M7SUFDeEMsU0FBUyxZQUFZLENBQUMsQ0FBQztRQUNuQixPQUFPLGNBQWMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxTQUFTLGFBQWE7UUFDbEIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDaEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUVoRSw0RUFBNEU7UUFDNUUsNENBQTRDO1FBQzVDLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQztZQUNELFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7UUFDM0UsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFFcEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDZCxvREFBb0Q7Z0JBQ3BELE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0oseURBQXlEO2dCQUN6RCxPQUFPLEdBQUcsR0FBRyxDQUFDLFdBQVc7cUJBQ3BCLFdBQVcsRUFBRTtxQkFDYixRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsU0FBUyxZQUFZO1FBQ2pCLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxhQUFhLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7UUFDbkUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixTQUFTLFdBQVc7UUFDaEIsSUFBSSxRQUFRLEdBQUcsY0FBYyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQ2xELE9BQU8sRUFDUCxJQUFJLEdBQUcsRUFBRSxFQUNULEdBQUcsRUFDSCxDQUFDLENBQUM7UUFFTixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsR0FBRyxHQUFHO2dCQUNGLEdBQUcsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztnQkFDckMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7Z0JBQzlDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFFBQVE7YUFDdEQsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZixHQUFHLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO2dCQUM1QyxPQUFPLENBQUMsU0FBUztvQkFDYixPQUFPLENBQUMsU0FBUyxHQUFHLDhCQUE4QixDQUFDO1lBQzNELENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELCtEQUErRDtJQUMvRCxzQ0FBc0M7SUFDdEMsU0FBUyxXQUFXLENBQUMsUUFBUTtRQUN6QixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQzNDLE9BQU8sRUFDUCxHQUFHLEVBQ0gsSUFBSSxHQUFHLEVBQUUsRUFDVCxDQUFDLEVBQ0QsR0FBRyxDQUFDO1FBQ1IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QscUJBQXFCO0lBQ3JCLFNBQVMsUUFBUTtRQUNiLElBQUksSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUM1QyxDQUFDLENBQUM7UUFFTixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBQ0Qsb0RBQW9EO0lBQ3BELFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQzVCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQ3JCLE1BQU0sR0FBRyxVQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFDRCxXQUFXLEdBQUcsTUFBTSxFQUNwQixTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUM3RCxRQUFRLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUMzQyxJQUFJLEdBQUcsRUFBRSxFQUNULENBQUMsQ0FBQztRQUVOLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxXQUFXLEdBQUcsVUFBUyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFDRCwwREFBMEQ7SUFDMUQsU0FBUyxvQkFBb0I7UUFDekIsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFFeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0QsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUNELHVEQUF1RDtJQUN2RCxTQUFTLGlCQUFpQjtRQUN0QixZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsSUFBSTtZQUN6RCxDQUFDLENBQUMsY0FBYztZQUNoQixDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BCLENBQUM7SUFDRCw4Q0FBOEM7SUFDOUMsU0FBUyxRQUFRO1FBQ2IsSUFBSSxDQUFDLEVBQ0QsRUFBRSxFQUNGLFNBQVMsR0FBRyxTQUFTLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsQixPQUFPO2dCQUNILElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBRS9CLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDN0IsQ0FBQztnQkFDRCxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQixvQkFBb0IsRUFBRSxDQUFDO2dCQUN2QixXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLGlCQUFpQixFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsaURBQWlEO2dCQUNqRCwwQ0FBMEM7Z0JBQzFDLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDdEIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztxQkFBTSxDQUFDO29CQUNKLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0QsdUNBQXVDO0lBQ3ZDLE9BQU87UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLFFBQVEsRUFBRSxDQUFDO1FBQ1gsWUFBWSxFQUFFLENBQUM7UUFDZixpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLFFBQVEsRUFBRSxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xudmFyIGFkZFNvcnRpbmcgPSAoZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHZhciBjb2xzLFxuICAgICAgICBjdXJyZW50U29ydCA9IHtcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgZGVzYzogZmFsc2VcbiAgICAgICAgfTtcblxuICAgIC8vIHJldHVybnMgdGhlIHN1bW1hcnkgdGFibGUgZWxlbWVudFxuICAgIGZ1bmN0aW9uIGdldFRhYmxlKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvdmVyYWdlLXN1bW1hcnknKTtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgdGhlYWQgZWxlbWVudCBvZiB0aGUgc3VtbWFyeSB0YWJsZVxuICAgIGZ1bmN0aW9uIGdldFRhYmxlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGUoKS5xdWVyeVNlbGVjdG9yKCd0aGVhZCB0cicpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSB0Ym9keSBlbGVtZW50IG9mIHRoZSBzdW1tYXJ5IHRhYmxlXG4gICAgZnVuY3Rpb24gZ2V0VGFibGVCb2R5KCkge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGUoKS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSB0aCBlbGVtZW50IGZvciBudGggY29sdW1uXG4gICAgZnVuY3Rpb24gZ2V0TnRoQ29sdW1uKG4pIHtcbiAgICAgICAgcmV0dXJuIGdldFRhYmxlSGVhZGVyKCkucXVlcnlTZWxlY3RvckFsbCgndGgnKVtuXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkZpbHRlcklucHV0KCkge1xuICAgICAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlU2VhcmNoJykudmFsdWU7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGJvZHknKVswXS5jaGlsZHJlbjtcblxuICAgICAgICAvLyBUcnkgdG8gY3JlYXRlIGEgUmVnRXhwIGZyb20gdGhlIHNlYXJjaFZhbHVlLiBJZiBpdCBmYWlscyAoaW52YWxpZCByZWdleCksXG4gICAgICAgIC8vIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHBsYWluIHRleHQgc2VhcmNoXG4gICAgICAgIGxldCBzZWFyY2hSZWdleDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlYXJjaFJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hWYWx1ZSwgJ2knKTsgLy8gJ2knIGZvciBjYXNlLWluc2Vuc2l0aXZlXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBzZWFyY2hSZWdleCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc2VhcmNoUmVnZXgpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhIHZhbGlkIHJlZ2V4IHdhcyBjcmVhdGVkLCB1c2UgaXQgZm9yIG1hdGNoaW5nXG4gICAgICAgICAgICAgICAgaXNNYXRjaCA9IHNlYXJjaFJlZ2V4LnRlc3Qocm93LnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHBsYWluIHRleHQgc2VhcmNoXG4gICAgICAgICAgICAgICAgaXNNYXRjaCA9IHJvdy50ZXh0Q29udGVudFxuICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gaXNNYXRjaCA/ICcnIDogJ25vbmUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbG9hZHMgdGhlIHNlYXJjaCBib3hcbiAgICBmdW5jdGlvbiBhZGRTZWFyY2hCb3goKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXJUZW1wbGF0ZScpO1xuICAgICAgICB2YXIgdGVtcGxhdGVDbG9uZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICB0ZW1wbGF0ZUNsb25lLmdldEVsZW1lbnRCeUlkKCdmaWxlU2VhcmNoJykub25pbnB1dCA9IG9uRmlsdGVySW5wdXQ7XG4gICAgICAgIHRlbXBsYXRlLnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGVtcGxhdGVDbG9uZSk7XG4gICAgfVxuXG4gICAgLy8gbG9hZHMgYWxsIGNvbHVtbnNcbiAgICBmdW5jdGlvbiBsb2FkQ29sdW1ucygpIHtcbiAgICAgICAgdmFyIGNvbE5vZGVzID0gZ2V0VGFibGVIZWFkZXIoKS5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpLFxuICAgICAgICAgICAgY29sTm9kZSxcbiAgICAgICAgICAgIGNvbHMgPSBbXSxcbiAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbE5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb2xOb2RlID0gY29sTm9kZXNbaV07XG4gICAgICAgICAgICBjb2wgPSB7XG4gICAgICAgICAgICAgICAga2V5OiBjb2xOb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wnKSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogIWNvbE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW5vc29ydCcpLFxuICAgICAgICAgICAgICAgIHR5cGU6IGNvbE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSB8fCAnc3RyaW5nJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgaWYgKGNvbC5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbC5kZWZhdWx0RGVzY1NvcnQgPSBjb2wudHlwZSA9PT0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgY29sTm9kZS5pbm5lckhUTUwgPVxuICAgICAgICAgICAgICAgICAgICBjb2xOb2RlLmlubmVySFRNTCArICc8c3BhbiBjbGFzcz1cInNvcnRlclwiPjwvc3Bhbj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cbiAgICAvLyBhdHRhY2hlcyBhIGRhdGEgYXR0cmlidXRlIHRvIGV2ZXJ5IHRyIGVsZW1lbnQgd2l0aCBhbiBvYmplY3RcbiAgICAvLyBvZiBkYXRhIHZhbHVlcyBrZXllZCBieSBjb2x1bW4gbmFtZVxuICAgIGZ1bmN0aW9uIGxvYWRSb3dEYXRhKHRhYmxlUm93KSB7XG4gICAgICAgIHZhciB0YWJsZUNvbHMgPSB0YWJsZVJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLFxuICAgICAgICAgICAgY29sTm9kZSxcbiAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgIGRhdGEgPSB7fSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB2YWw7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0YWJsZUNvbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbE5vZGUgPSB0YWJsZUNvbHNbaV07XG4gICAgICAgICAgICBjb2wgPSBjb2xzW2ldO1xuICAgICAgICAgICAgdmFsID0gY29sTm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFbY29sLmtleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIC8vIGxvYWRzIGFsbCByb3cgZGF0YVxuICAgIGZ1bmN0aW9uIGxvYWREYXRhKCkge1xuICAgICAgICB2YXIgcm93cyA9IGdldFRhYmxlQm9keSgpLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyksXG4gICAgICAgICAgICBpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICByb3dzW2ldLmRhdGEgPSBsb2FkUm93RGF0YShyb3dzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzb3J0cyB0aGUgdGFibGUgdXNpbmcgdGhlIGRhdGEgZm9yIHRoZSBpdGggY29sdW1uXG4gICAgZnVuY3Rpb24gc29ydEJ5SW5kZXgoaW5kZXgsIGRlc2MpIHtcbiAgICAgICAgdmFyIGtleSA9IGNvbHNbaW5kZXhdLmtleSxcbiAgICAgICAgICAgIHNvcnRlciA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBhID0gYS5kYXRhW2tleV07XG4gICAgICAgICAgICAgICAgYiA9IGIuZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaW5hbFNvcnRlciA9IHNvcnRlcixcbiAgICAgICAgICAgIHRhYmxlQm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb3ZlcmFnZS1zdW1tYXJ5IHRib2R5JyksXG4gICAgICAgICAgICByb3dOb2RlcyA9IHRhYmxlQm9keS5xdWVyeVNlbGVjdG9yQWxsKCd0cicpLFxuICAgICAgICAgICAgcm93cyA9IFtdLFxuICAgICAgICAgICAgaTtcblxuICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgICAgZmluYWxTb3J0ZXIgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xICogc29ydGVyKGEsIGIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dOb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcm93cy5wdXNoKHJvd05vZGVzW2ldKTtcbiAgICAgICAgICAgIHRhYmxlQm9keS5yZW1vdmVDaGlsZChyb3dOb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByb3dzLnNvcnQoZmluYWxTb3J0ZXIpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQocm93c1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcmVtb3ZlcyBzb3J0IGluZGljYXRvcnMgZm9yIGN1cnJlbnQgY29sdW1uIGJlaW5nIHNvcnRlZFxuICAgIGZ1bmN0aW9uIHJlbW92ZVNvcnRJbmRpY2F0b3JzKCkge1xuICAgICAgICB2YXIgY29sID0gZ2V0TnRoQ29sdW1uKGN1cnJlbnRTb3J0LmluZGV4KSxcbiAgICAgICAgICAgIGNscyA9IGNvbC5jbGFzc05hbWU7XG5cbiAgICAgICAgY2xzID0gY2xzLnJlcGxhY2UoLyBzb3J0ZWQkLywgJycpLnJlcGxhY2UoLyBzb3J0ZWQtZGVzYyQvLCAnJyk7XG4gICAgICAgIGNvbC5jbGFzc05hbWUgPSBjbHM7XG4gICAgfVxuICAgIC8vIGFkZHMgc29ydCBpbmRpY2F0b3JzIGZvciBjdXJyZW50IGNvbHVtbiBiZWluZyBzb3J0ZWRcbiAgICBmdW5jdGlvbiBhZGRTb3J0SW5kaWNhdG9ycygpIHtcbiAgICAgICAgZ2V0TnRoQ29sdW1uKGN1cnJlbnRTb3J0LmluZGV4KS5jbGFzc05hbWUgKz0gY3VycmVudFNvcnQuZGVzY1xuICAgICAgICAgICAgPyAnIHNvcnRlZC1kZXNjJ1xuICAgICAgICAgICAgOiAnIHNvcnRlZCc7XG4gICAgfVxuICAgIC8vIGFkZHMgZXZlbnQgbGlzdGVuZXJzIGZvciBhbGwgc29ydGVyIHdpZGdldHNcbiAgICBmdW5jdGlvbiBlbmFibGVVSSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBlbCxcbiAgICAgICAgICAgIGl0aFNvcnRlciA9IGZ1bmN0aW9uIGl0aFNvcnRlcihpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbCA9IGNvbHNbaV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZXNjID0gY29sLmRlZmF1bHREZXNjU29ydDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNvcnQuaW5kZXggPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSAhY3VycmVudFNvcnQuZGVzYztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzb3J0QnlJbmRleChpLCBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU29ydEluZGljYXRvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNvcnQuaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U29ydC5kZXNjID0gZGVzYztcbiAgICAgICAgICAgICAgICAgICAgYWRkU29ydEluZGljYXRvcnMoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChjb2xzW2ldLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBjbGljayBldmVudCBoYW5kbGVyIG9uIHRoZSB0aCBzbyB1c2Vyc1xuICAgICAgICAgICAgICAgIC8vIGRvbnQgaGF2ZSB0byBjbGljayBvbiB0aG9zZSB0aW55IGFycm93c1xuICAgICAgICAgICAgICAgIGVsID0gZ2V0TnRoQ29sdW1uKGkpLnF1ZXJ5U2VsZWN0b3IoJy5zb3J0ZXInKS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaXRoU29ydGVyKGkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbC5hdHRhY2hFdmVudCgnb25jbGljaycsIGl0aFNvcnRlcihpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZHMgc29ydGluZyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBVSVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFnZXRUYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29scyA9IGxvYWRDb2x1bW5zKCk7XG4gICAgICAgIGxvYWREYXRhKCk7XG4gICAgICAgIGFkZFNlYXJjaEJveCgpO1xuICAgICAgICBhZGRTb3J0SW5kaWNhdG9ycygpO1xuICAgICAgICBlbmFibGVVSSgpO1xuICAgIH07XG59KSgpO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGFkZFNvcnRpbmcpO1xuIl19
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const js_1 = __importDefault(require("@eslint/js"));
|
|
7
|
+
const typescript_eslint_1 = __importDefault(require("typescript-eslint"));
|
|
8
|
+
const globals_1 = __importDefault(require("globals"));
|
|
9
|
+
exports.default = typescript_eslint_1.default.config(
|
|
10
|
+
// Global ignores (replaces .eslintignore)
|
|
11
|
+
{
|
|
12
|
+
ignores: ['node_modules/**', 'lib/**', 'coverage/**', 'dist/**'],
|
|
13
|
+
},
|
|
14
|
+
// Base ESLint recommended rules
|
|
15
|
+
js_1.default.configs.recommended,
|
|
16
|
+
// TypeScript recommended rules
|
|
17
|
+
...typescript_eslint_1.default.configs.recommended,
|
|
18
|
+
// Project-specific configuration
|
|
19
|
+
{
|
|
20
|
+
files: ['src/**/*.ts'],
|
|
21
|
+
languageOptions: {
|
|
22
|
+
ecmaVersion: 'latest',
|
|
23
|
+
sourceType: 'module',
|
|
24
|
+
globals: {
|
|
25
|
+
...globals_1.default.node,
|
|
26
|
+
...globals_1.default.es2021,
|
|
27
|
+
},
|
|
28
|
+
parserOptions: {
|
|
29
|
+
project: true,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
rules: {
|
|
33
|
+
// Spacing and formatting
|
|
34
|
+
'indent': 'off',
|
|
35
|
+
'@typescript-eslint/indent': 'off', // Disabled - using Prettier/WebStorm for formatting
|
|
36
|
+
'object-curly-spacing': ['error', 'always'],
|
|
37
|
+
'object-curly-newline': 'off',
|
|
38
|
+
'padded-blocks': 'off',
|
|
39
|
+
// TypeScript specific
|
|
40
|
+
'no-shadow': 'off',
|
|
41
|
+
'@typescript-eslint/no-shadow': ['error'],
|
|
42
|
+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }],
|
|
43
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
44
|
+
// Best practices
|
|
45
|
+
'max-len': ['error', { code: 144, ignoreUrls: true }],
|
|
46
|
+
'no-plusplus': ['error', { allowForLoopAfterthoughts: true }],
|
|
47
|
+
'class-methods-use-this': 'off',
|
|
48
|
+
'no-underscore-dangle': ['error', { allowAfterThis: true }],
|
|
49
|
+
// Allow certain patterns
|
|
50
|
+
'no-restricted-syntax': 'off',
|
|
51
|
+
'arrow-parens': ['error', 'as-needed'],
|
|
52
|
+
'implicit-arrow-linebreak': 'off',
|
|
53
|
+
'operator-linebreak': 'off',
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2VzbGludC5jb25maWcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBZ0M7QUFDaEMsMEVBQXlDO0FBQ3pDLHNEQUE4QjtBQUU5QixrQkFBZSwyQkFBUSxDQUFDLE1BQU07QUFDMUIsMENBQTBDO0FBQzFDO0lBQ0ksT0FBTyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUM7Q0FDbkU7QUFFRCxnQ0FBZ0M7QUFDaEMsWUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO0FBRTFCLCtCQUErQjtBQUMvQixHQUFHLDJCQUFRLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFFL0IsaUNBQWlDO0FBQ2pDO0lBQ0ksS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3RCLGVBQWUsRUFBRTtRQUNiLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE9BQU8sRUFBRTtZQUNMLEdBQUcsaUJBQU8sQ0FBQyxJQUFJO1lBQ2YsR0FBRyxpQkFBTyxDQUFDLE1BQU07U0FDcEI7UUFDRCxhQUFhLEVBQUU7WUFDWCxPQUFPLEVBQUUsSUFBSTtTQUNoQjtLQUNKO0lBQ0QsS0FBSyxFQUFFO1FBQ0gseUJBQXlCO1FBQ3pCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLG9EQUFvRDtRQUN4RixzQkFBc0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFDM0Msc0JBQXNCLEVBQUUsS0FBSztRQUM3QixlQUFlLEVBQUUsS0FBSztRQUV0QixzQkFBc0I7UUFDdEIsV0FBVyxFQUFFLEtBQUs7UUFDbEIsOEJBQThCLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDekMsbUNBQW1DLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDNUcsb0NBQW9DLEVBQUUsTUFBTTtRQUU1QyxpQkFBaUI7UUFDakIsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckQsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0Qsd0JBQXdCLEVBQUUsS0FBSztRQUMvQixzQkFBc0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUUzRCx5QkFBeUI7UUFDekIsc0JBQXNCLEVBQUUsS0FBSztRQUM3QixjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO1FBQ3RDLDBCQUEwQixFQUFFLEtBQUs7UUFDakMsb0JBQW9CLEVBQUUsS0FBSztLQUM5QjtDQUNKLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgdHNlc2xpbnQgZnJvbSAndHlwZXNjcmlwdC1lc2xpbnQnO1xuaW1wb3J0IGdsb2JhbHMgZnJvbSAnZ2xvYmFscyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRzZXNsaW50LmNvbmZpZyhcbiAgICAvLyBHbG9iYWwgaWdub3JlcyAocmVwbGFjZXMgLmVzbGludGlnbm9yZSlcbiAgICB7XG4gICAgICAgIGlnbm9yZXM6IFsnbm9kZV9tb2R1bGVzLyoqJywgJ2xpYi8qKicsICdjb3ZlcmFnZS8qKicsICdkaXN0LyoqJ10sXG4gICAgfSxcblxuICAgIC8vIEJhc2UgRVNMaW50IHJlY29tbWVuZGVkIHJ1bGVzXG4gICAgZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWQsXG5cbiAgICAvLyBUeXBlU2NyaXB0IHJlY29tbWVuZGVkIHJ1bGVzXG4gICAgLi4udHNlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCxcblxuICAgIC8vIFByb2plY3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICAgIHtcbiAgICAgICAgZmlsZXM6IFsnc3JjLyoqLyoudHMnXSxcbiAgICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgICAgICBlY21hVmVyc2lvbjogJ2xhdGVzdCcsXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyxcbiAgICAgICAgICAgIGdsb2JhbHM6IHtcbiAgICAgICAgICAgICAgICAuLi5nbG9iYWxzLm5vZGUsXG4gICAgICAgICAgICAgICAgLi4uZ2xvYmFscy5lczIwMjEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHByb2plY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBydWxlczoge1xuICAgICAgICAgICAgLy8gU3BhY2luZyBhbmQgZm9ybWF0dGluZ1xuICAgICAgICAgICAgJ2luZGVudCc6ICdvZmYnLFxuICAgICAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQnOiAnb2ZmJywgLy8gRGlzYWJsZWQgLSB1c2luZyBQcmV0dGllci9XZWJTdG9ybSBmb3IgZm9ybWF0dGluZ1xuICAgICAgICAgICAgJ29iamVjdC1jdXJseS1zcGFjaW5nJzogWydlcnJvcicsICdhbHdheXMnXSxcbiAgICAgICAgICAgICdvYmplY3QtY3VybHktbmV3bGluZSc6ICdvZmYnLFxuICAgICAgICAgICAgJ3BhZGRlZC1ibG9ja3MnOiAnb2ZmJyxcblxuICAgICAgICAgICAgLy8gVHlwZVNjcmlwdCBzcGVjaWZpY1xuICAgICAgICAgICAgJ25vLXNoYWRvdyc6ICdvZmYnLFxuICAgICAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cnOiBbJ2Vycm9yJ10sXG4gICAgICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzJzogWydlcnJvcicsIHsgYXJnc0lnbm9yZVBhdHRlcm46ICdeXycsIGNhdWdodEVycm9yc0lnbm9yZVBhdHRlcm46ICdeXycgfV0sXG4gICAgICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSc6ICd3YXJuJyxcblxuICAgICAgICAgICAgLy8gQmVzdCBwcmFjdGljZXNcbiAgICAgICAgICAgICdtYXgtbGVuJzogWydlcnJvcicsIHsgY29kZTogMTQ0LCBpZ25vcmVVcmxzOiB0cnVlIH1dLFxuICAgICAgICAgICAgJ25vLXBsdXNwbHVzJzogWydlcnJvcicsIHsgYWxsb3dGb3JMb29wQWZ0ZXJ0aG91Z2h0czogdHJ1ZSB9XSxcbiAgICAgICAgICAgICdjbGFzcy1tZXRob2RzLXVzZS10aGlzJzogJ29mZicsXG4gICAgICAgICAgICAnbm8tdW5kZXJzY29yZS1kYW5nbGUnOiBbJ2Vycm9yJywgeyBhbGxvd0FmdGVyVGhpczogdHJ1ZSB9XSxcblxuICAgICAgICAgICAgLy8gQWxsb3cgY2VydGFpbiBwYXR0ZXJuc1xuICAgICAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogJ29mZicsXG4gICAgICAgICAgICAnYXJyb3ctcGFyZW5zJzogWydlcnJvcicsICdhcy1uZWVkZWQnXSxcbiAgICAgICAgICAgICdpbXBsaWNpdC1hcnJvdy1saW5lYnJlYWsnOiAnb2ZmJyxcbiAgICAgICAgICAgICdvcGVyYXRvci1saW5lYnJlYWsnOiAnb2ZmJyxcbiAgICAgICAgfSxcbiAgICB9LFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = {
|
|
3
|
+
transform: {
|
|
4
|
+
'^.+\\.(t|j)s$': 'ts-jest',
|
|
5
|
+
},
|
|
6
|
+
testRegex: '(/tests/.*|(\\.|/)(test|spec))\\.(t|j)s$',
|
|
7
|
+
modulePathIgnorePatterns: ['<rootDir>/dist/'],
|
|
8
|
+
moduleFileExtensions: ['ts', 'js', 'json', 'node'],
|
|
9
|
+
moduleNameMapper: {
|
|
10
|
+
'^@/(.*)$': '<rootDir>/src/$1',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC5jb25maWcuY2pzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vamVzdC5jb25maWcuY2pzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLENBQUMsT0FBTyxHQUFHO0lBQ2IsU0FBUyxFQUFFO1FBQ1AsZUFBZSxFQUFFLFNBQVM7S0FDN0I7SUFDRCxTQUFTLEVBQUUsMENBQTBDO0lBQ3JELHdCQUF3QixFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDN0Msb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDbEQsZ0JBQWdCLEVBQUU7UUFDZCxVQUFVLEVBQUUsa0JBQWtCO0tBQ2pDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHRyYW5zZm9ybToge1xuICAgICAgICAnXi4rXFxcXC4odHxqKXMkJzogJ3RzLWplc3QnLFxuICAgIH0sXG4gICAgdGVzdFJlZ2V4OiAnKC90ZXN0cy8uKnwoXFxcXC58LykodGVzdHxzcGVjKSlcXFxcLih0fGopcyQnLFxuICAgIG1vZHVsZVBhdGhJZ25vcmVQYXR0ZXJuczogWyc8cm9vdERpcj4vZGlzdC8nXSxcbiAgICBtb2R1bGVGaWxlRXh0ZW5zaW9uczogWyd0cycsICdqcycsICdqc29uJywgJ25vZGUnXSxcbiAgICBtb2R1bGVOYW1lTWFwcGVyOiB7XG4gICAgICAgICdeQC8oLiopJCc6ICc8cm9vdERpcj4vc3JjLyQxJyxcbiAgICB9LFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = {
|
|
3
|
+
transform: {
|
|
4
|
+
'^.+\\.(t|j)s$': 'ts-jest',
|
|
5
|
+
},
|
|
6
|
+
testRegex: '(/tests/.*|(\\.|/)(test|spec))\\.(t|j)s$',
|
|
7
|
+
modulePathIgnorePatterns: ['<rootDir>/dist/'],
|
|
8
|
+
moduleFileExtensions: ['ts', 'js', 'json', 'node'],
|
|
9
|
+
moduleNameMapper: {
|
|
10
|
+
'^@/(.*)$': '<rootDir>/src/$1',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9qZXN0LmNvbmZpZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxDQUFDLE9BQU8sR0FBRztJQUNiLFNBQVMsRUFBRTtRQUNQLGVBQWUsRUFBRSxTQUFTO0tBQzdCO0lBQ0QsU0FBUyxFQUFFLDBDQUEwQztJQUNyRCx3QkFBd0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO0lBQzdDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2xELGdCQUFnQixFQUFFO1FBQ2QsVUFBVSxFQUFFLGtCQUFrQjtLQUNqQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgJ14uK1xcXFwuKHR8ailzJCc6ICd0cy1qZXN0JyxcbiAgICB9LFxuICAgIHRlc3RSZWdleDogJygvdGVzdHMvLip8KFxcXFwufC8pKHRlc3R8c3BlYykpXFxcXC4odHxqKXMkJyxcbiAgICBtb2R1bGVQYXRoSWdub3JlUGF0dGVybnM6IFsnPHJvb3REaXI+L2Rpc3QvJ10sXG4gICAgbW9kdWxlRmlsZUV4dGVuc2lvbnM6IFsndHMnLCAnanMnLCAnanNvbicsICdub2RlJ10sXG4gICAgbW9kdWxlTmFtZU1hcHBlcjoge1xuICAgICAgICAnXkAvKC4qKSQnOiAnPHJvb3REaXI+L3NyYy8kMScsXG4gICAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// import nock = require('nock');
|
|
4
|
+
const keezApi_1 = require("../../keezApi");
|
|
5
|
+
describe('Keez API authorisation', () => {
|
|
6
|
+
let keezApi;
|
|
7
|
+
beforeAll(() => {
|
|
8
|
+
keezApi = new keezApi_1.KeezApi({
|
|
9
|
+
application_id: '123',
|
|
10
|
+
client_eid: '123',
|
|
11
|
+
secret: '123',
|
|
12
|
+
user: '123',
|
|
13
|
+
live: true,
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
/* test('should generate a new token', async () => {
|
|
17
|
+
const result = await keezApi.createInvoice({
|
|
18
|
+
amount: 400,
|
|
19
|
+
currencyCode: 'RON',
|
|
20
|
+
itemId: '123',
|
|
21
|
+
partner: {
|
|
22
|
+
isLegalPerson: false,
|
|
23
|
+
partnerName: 'Marian Ion',
|
|
24
|
+
countryName: 'Romania',
|
|
25
|
+
countryCode: 'RO',
|
|
26
|
+
countyCode: 'RO.B',
|
|
27
|
+
countyName: 'Bucuresti',
|
|
28
|
+
addressDetails: 'Strada Testez nr. 4',
|
|
29
|
+
cityName: 'Timisoara',
|
|
30
|
+
identificationNumber: '1234',
|
|
31
|
+
},
|
|
32
|
+
paymentType: 10,
|
|
33
|
+
series: 'PDI',
|
|
34
|
+
});
|
|
35
|
+
console.log('result is');
|
|
36
|
+
console.log(result);
|
|
37
|
+
expect(result).toBeTruthy();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('should generate a new token', async () => {
|
|
41
|
+
const result = await keezApi.validateInvoice('f28730f84ed04613a36583e8c2a755c3');
|
|
42
|
+
console.log('result is');
|
|
43
|
+
console.log(result);
|
|
44
|
+
expect(result).toBeTruthy();
|
|
45
|
+
}); */
|
|
46
|
+
test('should change the live mode', () => {
|
|
47
|
+
keezApi.setLive(false);
|
|
48
|
+
expect(keezApi.getBaseDomain())
|
|
49
|
+
.toBe('https://staging.keez.ro');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvX190ZXN0c19fL2luZGV4LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBaUM7QUFDakMsMkNBQXdDO0FBRXhDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxPQUFnQixDQUFDO0lBRXJCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDWCxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDO1lBQ2xCLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBNkJPO0lBRVAsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgS2VlekFwaSB9IGZyb20gJy4uLy4uL2tlZXpBcGknO1xuXG5kZXNjcmliZSgnS2VleiBBUEkgYXV0aG9yaXNhdGlvbicsICgpID0+IHtcbiAgICBsZXQga2VlekFwaTogS2VlekFwaTtcblxuICAgIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgICAgIGtlZXpBcGkgPSBuZXcgS2VlekFwaSh7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogJzEyMycsXG4gICAgICAgICAgICBjbGllbnRfZWlkOiAnMTIzJyxcbiAgICAgICAgICAgIHNlY3JldDogJzEyMycsXG4gICAgICAgICAgICB1c2VyOiAnMTIzJyxcbiAgICAgICAgICAgIGxpdmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyogdGVzdCgnc2hvdWxkIGdlbmVyYXRlIGEgbmV3IHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrZWV6QXBpLmNyZWF0ZUludm9pY2Uoe1xuICAgICAgICAgICAgYW1vdW50OiA0MDAsXG4gICAgICAgICAgICBjdXJyZW5jeUNvZGU6ICdST04nLFxuICAgICAgICAgICAgaXRlbUlkOiAnMTIzJyxcbiAgICAgICAgICAgIHBhcnRuZXI6IHtcbiAgICAgICAgICAgICAgICBpc0xlZ2FsUGVyc29uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwYXJ0bmVyTmFtZTogJ01hcmlhbiBJb24nLFxuICAgICAgICAgICAgICAgIGNvdW50cnlOYW1lOiAnUm9tYW5pYScsXG4gICAgICAgICAgICAgICAgY291bnRyeUNvZGU6ICdSTycsXG4gICAgICAgICAgICAgICAgY291bnR5Q29kZTogJ1JPLkInLFxuICAgICAgICAgICAgICAgIGNvdW50eU5hbWU6ICdCdWN1cmVzdGknLFxuICAgICAgICAgICAgICAgIGFkZHJlc3NEZXRhaWxzOiAnU3RyYWRhIFRlc3RleiBuci4gNCcsXG4gICAgICAgICAgICAgICAgY2l0eU5hbWU6ICdUaW1pc29hcmEnLFxuICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9uTnVtYmVyOiAnMTIzNCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF5bWVudFR5cGU6IDEwLFxuICAgICAgICAgICAgc2VyaWVzOiAnUERJJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHQgaXMnKTtcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc2hvdWxkIGdlbmVyYXRlIGEgbmV3IHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrZWV6QXBpLnZhbGlkYXRlSW52b2ljZSgnZjI4NzMwZjg0ZWQwNDYxM2EzNjU4M2U4YzJhNzU1YzMnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdCBpcycpO1xuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7ICAqL1xuXG4gICAgdGVzdCgnc2hvdWxkIGNoYW5nZSB0aGUgbGl2ZSBtb2RlJywgKCkgPT4ge1xuICAgICAgICBrZWV6QXBpLnNldExpdmUoZmFsc2UpO1xuICAgICAgICBleHBlY3Qoa2VlekFwaS5nZXRCYXNlRG9tYWluKCkpXG4gICAgICAgICAgICAudG9CZSgnaHR0cHM6Ly9zdGFnaW5nLmtlZXoucm8nKTtcbiAgICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.apiGenerateToken = apiGenerateToken;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const logger_1 = require("../helpers/logger");
|
|
9
|
+
const KeezError_1 = require("../errors/KeezError");
|
|
10
|
+
const constants_1 = require("../config/constants");
|
|
11
|
+
const keezLogger = logger_1.logger.child({ _library: 'KeezWrapper', _method: 'GenerateToken' });
|
|
12
|
+
/**
|
|
13
|
+
* Generate a token for the Keez API
|
|
14
|
+
* @returns {AuthResponse} - The token response containing the access token and the expiry time
|
|
15
|
+
* @param params - As defined in the interface
|
|
16
|
+
*/
|
|
17
|
+
async function apiGenerateToken(params) {
|
|
18
|
+
const url = `${params.baseDomain}/idp/connect/token`;
|
|
19
|
+
const formData = new URLSearchParams({
|
|
20
|
+
client_id: `app${params.appId}`,
|
|
21
|
+
client_secret: params.apiSecret,
|
|
22
|
+
grant_type: 'client_credentials',
|
|
23
|
+
scope: 'public-api',
|
|
24
|
+
});
|
|
25
|
+
try {
|
|
26
|
+
const response = await axios_1.default.post(url, formData.toString(), {
|
|
27
|
+
headers: {
|
|
28
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
29
|
+
},
|
|
30
|
+
timeout: constants_1.HTTP_REQUEST_TIMEOUT_MS,
|
|
31
|
+
});
|
|
32
|
+
const responseObject = response.data;
|
|
33
|
+
return {
|
|
34
|
+
access_token: responseObject.access_token,
|
|
35
|
+
expires_in: responseObject.expires_in,
|
|
36
|
+
expires_at: new Date(Date.now() + constants_1.TOKEN_EXPIRY_BUFFER_MS).getTime(),
|
|
37
|
+
token_type: responseObject.token_type,
|
|
38
|
+
scope: responseObject.scope,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const axiosError = error;
|
|
43
|
+
const errorMessage = axiosError.response?.data || axiosError.message;
|
|
44
|
+
keezLogger.error(`Error encountered while authenticating: ${JSON.stringify(errorMessage)}`);
|
|
45
|
+
throw new KeezError_1.KeezAuthError(`Authentication failed: ${JSON.stringify(errorMessage)}`, axiosError.response?.status, error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9hdXRob3Jpc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUF3QkEsNENBbUNDO0FBM0RELGtEQUEwQztBQUMxQyw2Q0FBMEM7QUFFMUMsa0RBQW1EO0FBQ25ELGtEQUFxRjtBQUVyRixNQUFNLFVBQVUsR0FBRyxlQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztBQWF2Rjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUFDLE1BQTJCO0lBQzlELE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsb0JBQW9CLENBQUM7SUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUM7UUFDakMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRTtRQUMvQixhQUFhLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDL0IsVUFBVSxFQUFFLG9CQUFvQjtRQUNoQyxLQUFLLEVBQUUsWUFBWTtLQUN0QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN4RCxPQUFPLEVBQUU7Z0JBQ0wsY0FBYyxFQUFFLG1DQUFtQzthQUN0RDtZQUNELE9BQU8sRUFBRSxtQ0FBdUI7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNyQyxPQUFPO1lBQ0gsWUFBWSxFQUFFLGNBQWMsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNyQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGtDQUFzQixDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ25FLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNyQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7U0FDOUIsQ0FBQztJQUNOLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsTUFBTSxVQUFVLEdBQUcsS0FBbUIsQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3JFLFVBQVUsQ0FBQyxLQUFLLENBQUMsMkNBQTJDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sSUFBSSx5QkFBYSxDQUNuQiwwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUN4RCxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFDM0IsS0FBSyxDQUNSLENBQUM7SUFDTixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQC9oZWxwZXJzL2xvZ2dlcic7XG5pbXBvcnQgeyBBdXRoUmVzcG9uc2UgfSBmcm9tICdAL2R0by9hdXRoUmVzcG9uc2UnO1xuaW1wb3J0IHsgS2VlekF1dGhFcnJvciB9IGZyb20gJ0AvZXJyb3JzL0tlZXpFcnJvcic7XG5pbXBvcnQgeyBIVFRQX1JFUVVFU1RfVElNRU9VVF9NUywgVE9LRU5fRVhQSVJZX0JVRkZFUl9NUyB9IGZyb20gJ0AvY29uZmlnL2NvbnN0YW50cyc7XG5cbmNvbnN0IGtlZXpMb2dnZXIgPSBsb2dnZXIuY2hpbGQoeyBfbGlicmFyeTogJ0tlZXpXcmFwcGVyJywgX21ldGhvZDogJ0dlbmVyYXRlVG9rZW4nIH0pO1xuXG4vKipcbiAqIGJhc2VEb21haW4gLSBUaGUgYmFzZSBkb21haW4gZm9yIHRoZSBBUElcbiAqIGFwcElkIC0gVGhlIGFwcGxpY2F0aW9uIElEXG4gKiBhcGlTZWNyZXQgLSBUaGUgQVBJIHNlY3JldFxuICovXG5pbnRlcmZhY2UgR2VuZXJhdGVUb2tlblBhcmFtcyB7XG4gICAgcmVhZG9ubHkgYmFzZURvbWFpbjogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwcElkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYXBpU2VjcmV0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB0b2tlbiBmb3IgdGhlIEtlZXogQVBJXG4gKiBAcmV0dXJucyB7QXV0aFJlc3BvbnNlfSAtIFRoZSB0b2tlbiByZXNwb25zZSBjb250YWluaW5nIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHRoZSBleHBpcnkgdGltZVxuICogQHBhcmFtIHBhcmFtcyAtIEFzIGRlZmluZWQgaW4gdGhlIGludGVyZmFjZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpR2VuZXJhdGVUb2tlbihwYXJhbXM6IEdlbmVyYXRlVG9rZW5QYXJhbXMpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3BhcmFtcy5iYXNlRG9tYWlufS9pZHAvY29ubmVjdC90b2tlbmA7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgY2xpZW50X2lkOiBgYXBwJHtwYXJhbXMuYXBwSWR9YCxcbiAgICAgICAgY2xpZW50X3NlY3JldDogcGFyYW1zLmFwaVNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycsXG4gICAgICAgIHNjb3BlOiAncHVibGljLWFwaScsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QodXJsLCBmb3JtRGF0YS50b1N0cmluZygpLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IEhUVFBfUkVRVUVTVF9USU1FT1VUX01TLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHJlc3BvbnNlT2JqZWN0LmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIGV4cGlyZXNfaW46IHJlc3BvbnNlT2JqZWN0LmV4cGlyZXNfaW4sXG4gICAgICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpICsgVE9LRU5fRVhQSVJZX0JVRkZFUl9NUykuZ2V0VGltZSgpLFxuICAgICAgICAgICAgdG9rZW5fdHlwZTogcmVzcG9uc2VPYmplY3QudG9rZW5fdHlwZSxcbiAgICAgICAgICAgIHNjb3BlOiByZXNwb25zZU9iamVjdC5zY29wZSxcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBheGlvc0Vycm9yID0gZXJyb3IgYXMgQXhpb3NFcnJvcjtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXhpb3NFcnJvci5yZXNwb25zZT8uZGF0YSB8fCBheGlvc0Vycm9yLm1lc3NhZ2U7XG4gICAgICAgIGtlZXpMb2dnZXIuZXJyb3IoYEVycm9yIGVuY291bnRlcmVkIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke0pTT04uc3RyaW5naWZ5KGVycm9yTWVzc2FnZSl9YCk7XG4gICAgICAgIHRocm93IG5ldyBLZWV6QXV0aEVycm9yKFxuICAgICAgICAgICAgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZDogJHtKU09OLnN0cmluZ2lmeShlcnJvck1lc3NhZ2UpfWAsXG4gICAgICAgICAgICBheGlvc0Vycm9yLnJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.apiCancelInvoice = apiCancelInvoice;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const logger_1 = require("../../helpers/logger");
|
|
9
|
+
const KeezError_1 = require("../../errors/KeezError");
|
|
10
|
+
const constants_1 = require("../../config/constants");
|
|
11
|
+
const keezLogger = logger_1.logger.child({ _library: 'KeezWrapper', _method: 'Invoices' });
|
|
12
|
+
async function apiCancelInvoice(params) {
|
|
13
|
+
const url = `${params.baseDomain}/api/v1.0/public-api/${params.appClientId}/invoices/canceled`;
|
|
14
|
+
const body = {
|
|
15
|
+
externalId: params.invoiceId,
|
|
16
|
+
};
|
|
17
|
+
try {
|
|
18
|
+
await axios_1.default.post(url, body, {
|
|
19
|
+
headers: {
|
|
20
|
+
Authorization: `Bearer ${params.bearerToken}`,
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
},
|
|
23
|
+
timeout: constants_1.HTTP_REQUEST_TIMEOUT_MS,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
const axiosError = error;
|
|
28
|
+
const errorMessage = axiosError.response?.data || axiosError.message;
|
|
29
|
+
keezLogger.error(`Error encountered while canceling invoice (${params.invoiceId}): ${JSON.stringify(errorMessage)}`);
|
|
30
|
+
throw new KeezError_1.KeezApiError(`Failed to cancel invoice: ${JSON.stringify(errorMessage)}`, axiosError.response?.status, error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9pbnZvaWNlcy9jYW5jZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFlQSw0Q0EyQkM7QUExQ0Qsa0RBQTBDO0FBQzFDLDZDQUEwQztBQUMxQyxrREFBa0Q7QUFDbEQsa0RBQTZEO0FBRTdELE1BQU0sVUFBVSxHQUFHLGVBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBVTNFLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUEyQjtJQUM5RCxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLHdCQUF3QixNQUFNLENBQUMsV0FBVyxvQkFBb0IsQ0FBQztJQUUvRixNQUFNLElBQUksR0FBRztRQUNULFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUztLQUMvQixDQUFDO0lBRUYsSUFBSSxDQUFDO1FBQ0QsTUFBTSxlQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7WUFDeEIsT0FBTyxFQUFFO2dCQUNMLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQzdDLGNBQWMsRUFBRSxrQkFBa0I7YUFDckM7WUFDRCxPQUFPLEVBQUUsbUNBQXVCO1NBQ25DLENBQUMsQ0FBQztJQUNQLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsTUFBTSxVQUFVLEdBQUcsS0FBbUIsQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3JFLFVBQVUsQ0FBQyxLQUFLLENBQ1osOENBQThDLE1BQU0sQ0FBQyxTQUFTLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUNyRyxDQUFDO1FBQ0YsTUFBTSxJQUFJLHdCQUFZLENBQ2xCLDZCQUE2QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQzNELFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUMzQixLQUFLLENBQ1IsQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAL2hlbHBlcnMvbG9nZ2VyJztcbmltcG9ydCB7IEtlZXpBcGlFcnJvciB9IGZyb20gJ0AvZXJyb3JzL0tlZXpFcnJvcic7XG5pbXBvcnQgeyBIVFRQX1JFUVVFU1RfVElNRU9VVF9NUyB9IGZyb20gJ0AvY29uZmlnL2NvbnN0YW50cyc7XG5cbmNvbnN0IGtlZXpMb2dnZXIgPSBsb2dnZXIuY2hpbGQoeyBfbGlicmFyeTogJ0tlZXpXcmFwcGVyJywgX21ldGhvZDogJ0ludm9pY2VzJyB9KTtcblxuaW50ZXJmYWNlIENhbmNlbEludm9pY2VQYXJhbXMge1xuICAgIHJlYWRvbmx5IGJhc2VEb21haW46IHN0cmluZztcbiAgICByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwcENsaWVudElkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmVhcmVyVG9rZW46IHN0cmluZztcbiAgICByZWFkb25seSBpbnZvaWNlSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaUNhbmNlbEludm9pY2UocGFyYW1zOiBDYW5jZWxJbnZvaWNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXJsID0gYCR7cGFyYW1zLmJhc2VEb21haW59L2FwaS92MS4wL3B1YmxpYy1hcGkvJHtwYXJhbXMuYXBwQ2xpZW50SWR9L2ludm9pY2VzL2NhbmNlbGVkYDtcblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGV4dGVybmFsSWQ6IHBhcmFtcy5pbnZvaWNlSWQsXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLnBvc3QodXJsLCBib2R5LCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3BhcmFtcy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGltZW91dDogSFRUUF9SRVFVRVNUX1RJTUVPVVRfTVMsXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBlcnJvciBhcyBBeGlvc0Vycm9yO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBheGlvc0Vycm9yLnJlc3BvbnNlPy5kYXRhIHx8IGF4aW9zRXJyb3IubWVzc2FnZTtcbiAgICAgICAga2VlekxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgIGBFcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBjYW5jZWxpbmcgaW52b2ljZSAoJHtwYXJhbXMuaW52b2ljZUlkfSk6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JNZXNzYWdlKX1gXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IG5ldyBLZWV6QXBpRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGNhbmNlbCBpbnZvaWNlOiAke0pTT04uc3RyaW5naWZ5KGVycm9yTWVzc2FnZSl9YCxcbiAgICAgICAgICAgIGF4aW9zRXJyb3IucmVzcG9uc2U/LnN0YXR1cyxcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.apiCreateInvoice = apiCreateInvoice;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const logger_1 = require("../../helpers/logger");
|
|
9
|
+
const KeezError_1 = require("../../errors/KeezError");
|
|
10
|
+
const constants_1 = require("../../config/constants");
|
|
11
|
+
const measureUnit_1 = require("../../config/measureUnit");
|
|
12
|
+
const keezLogger = logger_1.logger.child({
|
|
13
|
+
_library: 'KeezWrapper',
|
|
14
|
+
_method: 'Invoices',
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Helper to get current date in YYYYMMDD format
|
|
18
|
+
*/
|
|
19
|
+
function getCurrentDateNumber() {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
const year = now.getFullYear();
|
|
22
|
+
const month = String(now.getMonth() + constants_1.MONTH_INDEX_OFFSET).padStart(constants_1.DATE_PAD_LENGTH, '0');
|
|
23
|
+
const day = String(now.getDate()).padStart(constants_1.DATE_PAD_LENGTH, '0');
|
|
24
|
+
return parseInt(`${year}${month}${day}`, constants_1.DECIMAL_RADIX);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create an invoice
|
|
28
|
+
* @param params as defined in the interface
|
|
29
|
+
* @returns {Promise<string>} - The external ID of the created invoice
|
|
30
|
+
*/
|
|
31
|
+
async function apiCreateInvoice(params) {
|
|
32
|
+
const url = `${params.baseDomain}/api/v1.0/public-api/${params.appClientId}/invoices`;
|
|
33
|
+
const currentDate = getCurrentDateNumber();
|
|
34
|
+
const body = {
|
|
35
|
+
series: params.invoice.series,
|
|
36
|
+
documentDate: params.invoice.documentDate ?? currentDate,
|
|
37
|
+
dueDate: params.invoice.dueDate ?? currentDate,
|
|
38
|
+
vatOnCollection: params.invoice.vatOnCollection ?? false,
|
|
39
|
+
currencyCode: params.invoice.currencyCode,
|
|
40
|
+
originalNetAmount: params.invoice.amount,
|
|
41
|
+
originalNetAmountCurrency: params.invoice.amount,
|
|
42
|
+
originalVatAmount: constants_1.DEFAULT_VAT_AMOUNT,
|
|
43
|
+
originalVatAmountCurrency: constants_1.DEFAULT_VAT_AMOUNT,
|
|
44
|
+
netAmount: params.invoice.amount,
|
|
45
|
+
netAmountCurrency: params.invoice.amount,
|
|
46
|
+
vatAmount: constants_1.DEFAULT_VAT_AMOUNT,
|
|
47
|
+
vatAmountCurrency: constants_1.DEFAULT_VAT_AMOUNT,
|
|
48
|
+
grossAmount: params.invoice.amount,
|
|
49
|
+
grossAmountCurrency: params.invoice.amount,
|
|
50
|
+
paymentTypeId: params.invoice.paymentType,
|
|
51
|
+
partner: {
|
|
52
|
+
isLegalPerson: params.invoice.partner.isLegalPerson,
|
|
53
|
+
partnerName: params.invoice.partner.partnerName,
|
|
54
|
+
countryCode: params.invoice.partner.countryCode,
|
|
55
|
+
countryName: params.invoice.partner.countryName,
|
|
56
|
+
countyCode: params.invoice.partner.countyCode,
|
|
57
|
+
countyName: params.invoice.partner.countyName,
|
|
58
|
+
cityName: params.invoice.partner.cityName,
|
|
59
|
+
addressDetails: params.invoice.partner.addressDetails,
|
|
60
|
+
},
|
|
61
|
+
invoiceDetails: [
|
|
62
|
+
{
|
|
63
|
+
itemExternalId: params.invoice.itemId,
|
|
64
|
+
measureUnitId: params.invoice.measureUnitId ?? measureUnit_1.MeasureUnit.PIECE,
|
|
65
|
+
quantity: params.invoice.quantity ?? constants_1.DEFAULT_INVOICE_QUANTITY,
|
|
66
|
+
unitPrice: params.invoice.amount,
|
|
67
|
+
originalNetAmount: params.invoice.amount,
|
|
68
|
+
originalNetAmountCurrency: params.invoice.amount,
|
|
69
|
+
originalVatAmount: constants_1.DEFAULT_VAT_AMOUNT,
|
|
70
|
+
originalVatAmountCurrency: constants_1.DEFAULT_VAT_AMOUNT,
|
|
71
|
+
netAmount: params.invoice.amount,
|
|
72
|
+
netAmountCurrency: params.invoice.amount,
|
|
73
|
+
vatAmount: constants_1.DEFAULT_VAT_AMOUNT,
|
|
74
|
+
vatAmountCurrency: constants_1.DEFAULT_VAT_AMOUNT,
|
|
75
|
+
grossAmount: params.invoice.amount,
|
|
76
|
+
grossAmountCurrency: params.invoice.amount,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
try {
|
|
81
|
+
const response = await axios_1.default.post(url, body, {
|
|
82
|
+
headers: {
|
|
83
|
+
Authorization: `Bearer ${params.bearerToken}`,
|
|
84
|
+
'Content-Type': 'application/json',
|
|
85
|
+
},
|
|
86
|
+
timeout: constants_1.HTTP_REQUEST_TIMEOUT_MS,
|
|
87
|
+
});
|
|
88
|
+
return response.data.externalId;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const axiosError = error;
|
|
92
|
+
const errorMessage = axiosError.response?.data?.Message || axiosError.message;
|
|
93
|
+
keezLogger.error(`Error encountered while creating invoice: ${errorMessage}`);
|
|
94
|
+
throw new KeezError_1.KeezApiError(`Failed to create invoice: ${errorMessage}`, axiosError.response?.status, error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9pbnZvaWNlcy9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFrREEsNENBbUVDO0FBckhELGtEQUEwQztBQUMxQyw2Q0FBMEM7QUFFMUMsa0RBQWtEO0FBQ2xELGtEQU80QjtBQUM1QixzREFBbUQ7QUFFbkQsTUFBTSxVQUFVLEdBQUcsZUFBTSxDQUFDLEtBQUssQ0FBQztJQUM1QixRQUFRLEVBQUUsYUFBYTtJQUN2QixPQUFPLEVBQUUsVUFBVTtDQUN0QixDQUFDLENBQUM7QUFpQkg7O0dBRUc7QUFDSCxTQUFTLG9CQUFvQjtJQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLDhCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLDJCQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQywyQkFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSx5QkFBYSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFBMkI7SUFDOUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSx3QkFBd0IsTUFBTSxDQUFDLFdBQVcsV0FBVyxDQUFDO0lBQ3RGLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixFQUFFLENBQUM7SUFFM0MsTUFBTSxJQUFJLEdBQUc7UUFDVCxN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YyxFQUFFLGtCQUFrQjthQUNyQztZQUNELE9BQU8sRUFBRSxtQ0FBdUI7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNiLE1BQU0sVUFBVSxHQUFHLEtBQXlDLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDOUUsVUFBVSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLElBQUksd0JBQVksQ0FBQyw2QkFBNkIsWUFBWSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MsIHsgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0AvaGVscGVycy9sb2dnZXInO1xuaW1wb3J0IHsgSW52b2ljZVJlcXVlc3QgfSBmcm9tICdAL2R0by9jcmVhdGVJbnZvaWNlUmVxdWVzdCc7XG5pbXBvcnQgeyBLZWV6QXBpRXJyb3IgfSBmcm9tICdAL2Vycm9ycy9LZWV6RXJyb3InO1xuaW1wb3J0IHtcbiAgICBIVFRQX1JFUVVFU1RfVElNRU9VVF9NUyxcbiAgICBEQVRFX1BBRF9MRU5HVEgsXG4gICAgTU9OVEhfSU5ERVhfT0ZGU0VULFxuICAgIERFQ0lNQUxfUkFESVgsXG4gICAgREVGQVVMVF9WQVRfQU1PVU5ULFxuICAgIERFRkFVTFRfSU5WT0lDRV9RVUFOVElUWSxcbn0gZnJvbSAnQC9jb25maWcvY29uc3RhbnRzJztcbmltcG9ydCB7IE1lYXN1cmVVbml0IH0gZnJvbSAnQC9jb25maWcvbWVhc3VyZVVuaXQnO1xuXG5jb25zdCBrZWV6TG9nZ2VyID0gbG9nZ2VyLmNoaWxkKHtcbiAgICBfbGlicmFyeTogJ0tlZXpXcmFwcGVyJyxcbiAgICBfbWV0aG9kOiAnSW52b2ljZXMnLFxufSk7XG5cbi8qKlxuICogYmFzZURvbWFpbiAtIFRoZSBiYXNlIGRvbWFpbiBmb3IgdGhlIEFQSVxuICogYXBwSWQgLSBUaGUgYXBwbGljYXRpb24gSURcbiAqIGFwcENsaWVudElkIC0gVGhlIGFwcGxpY2F0aW9uIGNsaWVudCBJRFxuICogYmVhcmVyVG9rZW4gLSBUaGUgYmVhcmVyIHRva2VuIG9idGFpbmVkIGF0IHRoZSBhdXRoZW50aWNhdGlvbiBzdGFnZVxuICogaXRlbUlkIC0gVGhlIGl0ZW0gSURcbiAqL1xuaW50ZXJmYWNlIENyZWF0ZUludm9pY2VQYXJhbXMge1xuICAgIHJlYWRvbmx5IGJhc2VEb21haW46IHN0cmluZztcbiAgICByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwcENsaWVudElkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmVhcmVyVG9rZW46IHN0cmluZztcbiAgICByZWFkb25seSBpbnZvaWNlOiBJbnZvaWNlUmVxdWVzdDtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gZ2V0IGN1cnJlbnQgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVOdW1iZXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHllYXIgPSBub3cuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhub3cuZ2V0TW9udGgoKSArIE1PTlRIX0lOREVYX09GRlNFVCkucGFkU3RhcnQoREFURV9QQURfTEVOR1RILCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhub3cuZ2V0RGF0ZSgpKS5wYWRTdGFydChEQVRFX1BBRF9MRU5HVEgsICcwJyk7XG4gICAgcmV0dXJuIHBhcnNlSW50KGAke3llYXJ9JHttb250aH0ke2RheX1gLCBERUNJTUFMX1JBRElYKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gaW52b2ljZVxuICogQHBhcmFtIHBhcmFtcyBhcyBkZWZpbmVkIGluIHRoZSBpbnRlcmZhY2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IC0gVGhlIGV4dGVybmFsIElEIG9mIHRoZSBjcmVhdGVkIGludm9pY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaUNyZWF0ZUludm9pY2UocGFyYW1zOiBDcmVhdGVJbnZvaWNlUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtwYXJhbXMuYmFzZURvbWFpbn0vYXBpL3YxLjAvcHVibGljLWFwaS8ke3BhcmFtcy5hcHBDbGllbnRJZH0vaW52b2ljZXNgO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZ2V0Q3VycmVudERhdGVOdW1iZXIoKTtcblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIHNlcmllczogcGFyYW1zLmludm9pY2Uuc2VyaWVzLFxuICAgICAgICBkb2N1bWVudERhdGU6IHBhcmFtcy5pbnZvaWNlLmRvY3VtZW50RGF0ZSA/PyBjdXJyZW50RGF0ZSxcbiAgICAgICAgZHVlRGF0ZTogcGFyYW1zLmludm9pY2UuZHVlRGF0ZSA/PyBjdXJyZW50RGF0ZSxcbiAgICAgICAgdmF0T25Db2xsZWN0aW9uOiBwYXJhbXMuaW52b2ljZS52YXRPbkNvbGxlY3Rpb24gPz8gZmFsc2UsXG4gICAgICAgIGN1cnJlbmN5Q29kZTogcGFyYW1zLmludm9pY2UuY3VycmVuY3lDb2RlLFxuICAgICAgICBvcmlnaW5hbE5ldEFtb3VudDogcGFyYW1zLmludm9pY2UuYW1vdW50LFxuICAgICAgICBvcmlnaW5hbE5ldEFtb3VudEN1cnJlbmN5OiBwYXJhbXMuaW52b2ljZS5hbW91bnQsXG4gICAgICAgIG9yaWdpbmFsVmF0QW1vdW50OiBERUZBVUxUX1ZBVF9BTU9VTlQsXG4gICAgICAgIG9yaWdpbmFsVmF0QW1vdW50Q3VycmVuY3k6IERFRkFVTFRfVkFUX0FNT1VOVCxcbiAgICAgICAgbmV0QW1vdW50OiBwYXJhbXMuaW52b2ljZS5hbW91bnQsXG4gICAgICAgIG5ldEFtb3VudEN1cnJlbmN5OiBwYXJhbXMuaW52b2ljZS5hbW91bnQsXG4gICAgICAgIHZhdEFtb3VudDogREVGQVVMVF9WQVRfQU1PVU5ULFxuICAgICAgICB2YXRBbW91bnRDdXJyZW5jeTogREVGQVVMVF9WQVRfQU1PVU5ULFxuICAgICAgICBncm9zc0Ftb3VudDogcGFyYW1zLmludm9pY2UuYW1vdW50LFxuICAgICAgICBncm9zc0Ftb3VudEN1cnJlbmN5OiBwYXJhbXMuaW52b2ljZS5hbW91bnQsXG4gICAgICAgIHBheW1lbnRUeXBlSWQ6IHBhcmFtcy5pbnZvaWNlLnBheW1lbnRUeXBlLFxuICAgICAgICBwYXJ0bmVyOiB7XG4gICAgICAgICAgICBpc0xlZ2FsUGVyc29uOiBwYXJhbXMuaW52b2ljZS5wYXJ0bmVyLmlzTGVnYWxQZXJzb24sXG4gICAgICAgICAgICBwYXJ0bmVyTmFtZTogcGFyYW1zLmludm9pY2UucGFydG5lci5wYXJ0bmVyTmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBwYXJhbXMuaW52b2ljZS5wYXJ0bmVyLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgY291bnRyeU5hbWU6IHBhcmFtcy5pbnZvaWNlLnBhcnRuZXIuY291bnRyeU5hbWUsXG4gICAgICAgICAgICBjb3VudHlDb2RlOiBwYXJhbXMuaW52b2ljZS5wYXJ0bmVyLmNvdW50eUNvZGUsXG4gICAgICAgICAgICBjb3VudHlOYW1lOiBwYXJhbXMuaW52b2ljZS5wYXJ0bmVyLmNvdW50eU5hbWUsXG4gICAgICAgICAgICBjaXR5TmFtZTogcGFyYW1zLmludm9pY2UucGFydG5lci5jaXR5TmFtZSxcbiAgICAgICAgICAgIGFkZHJlc3NEZXRhaWxzOiBwYXJhbXMuaW52b2ljZS5wYXJ0bmVyLmFkZHJlc3NEZXRhaWxzLFxuICAgICAgICB9LFxuICAgICAgICBpbnZvaWNlRGV0YWlsczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW1FeHRlcm5hbElkOiBwYXJhbXMuaW52b2ljZS5pdGVtSWQsXG4gICAgICAgICAgICAgICAgbWVhc3VyZVVuaXRJZDogcGFyYW1zLmludm9pY2UubWVhc3VyZVVuaXRJZCA/PyBNZWFzdXJlVW5pdC5QSUVDRSxcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogcGFyYW1zLmludm9pY2UucXVhbnRpdHkgPz8gREVGQVVMVF9JTlZPSUNFX1FVQU5USVRZLFxuICAgICAgICAgICAgICAgIHVuaXRQcmljZTogcGFyYW1zLmludm9pY2UuYW1vdW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTmV0QW1vdW50OiBwYXJhbXMuaW52b2ljZS5hbW91bnQsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxOZXRBbW91bnRDdXJyZW5jeTogcGFyYW1zLmludm9pY2UuYW1vdW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsVmF0QW1vdW50OiBERUZBVUxUX1ZBVF9BTU9VTlQsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxWYXRBbW91bnRDdXJyZW5jeTogREVGQVVMVF9WQVRfQU1PVU5ULFxuICAgICAgICAgICAgICAgIG5ldEFtb3VudDogcGFyYW1zLmludm9pY2UuYW1vdW50LFxuICAgICAgICAgICAgICAgIG5ldEFtb3VudEN1cnJlbmN5OiBwYXJhbXMuaW52b2ljZS5hbW91bnQsXG4gICAgICAgICAgICAgICAgdmF0QW1vdW50OiBERUZBVUxUX1ZBVF9BTU9VTlQsXG4gICAgICAgICAgICAgICAgdmF0QW1vdW50Q3VycmVuY3k6IERFRkFVTFRfVkFUX0FNT1VOVCxcbiAgICAgICAgICAgICAgICBncm9zc0Ftb3VudDogcGFyYW1zLmludm9pY2UuYW1vdW50LFxuICAgICAgICAgICAgICAgIGdyb3NzQW1vdW50Q3VycmVuY3k6IHBhcmFtcy5pbnZvaWNlLmFtb3VudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCh1cmwsIGJvZHksIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cGFyYW1zLmJlYXJlclRva2VufWAsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aW1lb3V0OiBIVFRQX1JFUVVFU1RfVElNRU9VVF9NUyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZXh0ZXJuYWxJZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBheGlvc0Vycm9yID0gZXJyb3IgYXMgQXhpb3NFcnJvcjx7IE1lc3NhZ2U/OiBzdHJpbmcgfT47XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGF4aW9zRXJyb3IucmVzcG9uc2U/LmRhdGE/Lk1lc3NhZ2UgfHwgYXhpb3NFcnJvci5tZXNzYWdlO1xuICAgICAgICBrZWV6TG9nZ2VyLmVycm9yKGBFcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBjcmVhdGluZyBpbnZvaWNlOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEtlZXpBcGlFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBpbnZvaWNlOiAke2Vycm9yTWVzc2FnZX1gLCBheGlvc0Vycm9yLnJlc3BvbnNlPy5zdGF0dXMsIGVycm9yKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.apiDeleteInvoice = apiDeleteInvoice;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const logger_1 = require("../../helpers/logger");
|
|
9
|
+
const KeezError_1 = require("../../errors/KeezError");
|
|
10
|
+
const constants_1 = require("../../config/constants");
|
|
11
|
+
const keezLogger = logger_1.logger.child({ _library: 'KeezWrapper', _method: 'Invoices' });
|
|
12
|
+
async function apiDeleteInvoice(params) {
|
|
13
|
+
const url = `${params.baseDomain}/api/v1.0/public-api/${params.appClientId}/invoices`;
|
|
14
|
+
try {
|
|
15
|
+
await axios_1.default.delete(url, {
|
|
16
|
+
headers: {
|
|
17
|
+
Authorization: `Bearer ${params.bearerToken}`,
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
},
|
|
20
|
+
data: {
|
|
21
|
+
externalId: params.invoiceId,
|
|
22
|
+
},
|
|
23
|
+
timeout: constants_1.HTTP_REQUEST_TIMEOUT_MS,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
const axiosError = error;
|
|
28
|
+
const errorMessage = axiosError.response?.data || axiosError.message;
|
|
29
|
+
keezLogger.error(`Error encountered while deleting invoice (${params.invoiceId}): ${JSON.stringify(errorMessage)}`);
|
|
30
|
+
throw new KeezError_1.KeezApiError(`Failed to delete invoice: ${JSON.stringify(errorMessage)}`, axiosError.response?.status, error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9pbnZvaWNlcy9kZWxldGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFlQSw0Q0EwQkM7QUF6Q0Qsa0RBQTBDO0FBQzFDLDZDQUEwQztBQUMxQyxrREFBa0Q7QUFDbEQsa0RBQTZEO0FBRTdELE1BQU0sVUFBVSxHQUFHLGVBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBVTNFLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUEyQjtJQUM5RCxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLHdCQUF3QixNQUFNLENBQUMsV0FBVyxXQUFXLENBQUM7SUFFdEYsSUFBSSxDQUFDO1FBQ0QsTUFBTSxlQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNwQixPQUFPLEVBQUU7Z0JBQ0wsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDN0MsY0FBYyxFQUFFLGtCQUFrQjthQUNyQztZQUNELElBQUksRUFBRTtnQkFDRixVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVM7YUFDL0I7WUFDRCxPQUFPLEVBQUUsbUNBQXVCO1NBQ25DLENBQUMsQ0FBQztJQUNQLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsTUFBTSxVQUFVLEdBQUcsS0FBbUIsQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3JFLFVBQVUsQ0FBQyxLQUFLLENBQ1osNkNBQTZDLE1BQU0sQ0FBQyxTQUFTLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUNwRyxDQUFDO1FBQ0YsTUFBTSxJQUFJLHdCQUFZLENBQ2xCLDZCQUE2QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQzNELFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUMzQixLQUFLLENBQ1IsQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAL2hlbHBlcnMvbG9nZ2VyJztcbmltcG9ydCB7IEtlZXpBcGlFcnJvciB9IGZyb20gJ0AvZXJyb3JzL0tlZXpFcnJvcic7XG5pbXBvcnQgeyBIVFRQX1JFUVVFU1RfVElNRU9VVF9NUyB9IGZyb20gJ0AvY29uZmlnL2NvbnN0YW50cyc7XG5cbmNvbnN0IGtlZXpMb2dnZXIgPSBsb2dnZXIuY2hpbGQoeyBfbGlicmFyeTogJ0tlZXpXcmFwcGVyJywgX21ldGhvZDogJ0ludm9pY2VzJyB9KTtcblxuaW50ZXJmYWNlIERlbGV0ZUludm9pY2VQYXJhbXMge1xuICAgIHJlYWRvbmx5IGJhc2VEb21haW46IHN0cmluZztcbiAgICByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwcENsaWVudElkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmVhcmVyVG9rZW46IHN0cmluZztcbiAgICByZWFkb25seSBpbnZvaWNlSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaURlbGV0ZUludm9pY2UocGFyYW1zOiBEZWxldGVJbnZvaWNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXJsID0gYCR7cGFyYW1zLmJhc2VEb21haW59L2FwaS92MS4wL3B1YmxpYy1hcGkvJHtwYXJhbXMuYXBwQ2xpZW50SWR9L2ludm9pY2VzYDtcblxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLmRlbGV0ZSh1cmwsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cGFyYW1zLmJlYXJlclRva2VufWAsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxJZDogcGFyYW1zLmludm9pY2VJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aW1lb3V0OiBIVFRQX1JFUVVFU1RfVElNRU9VVF9NUyxcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgYXhpb3NFcnJvciA9IGVycm9yIGFzIEF4aW9zRXJyb3I7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGF4aW9zRXJyb3IucmVzcG9uc2U/LmRhdGEgfHwgYXhpb3NFcnJvci5tZXNzYWdlO1xuICAgICAgICBrZWV6TG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgYEVycm9yIGVuY291bnRlcmVkIHdoaWxlIGRlbGV0aW5nIGludm9pY2UgKCR7cGFyYW1zLmludm9pY2VJZH0pOiAke0pTT04uc3RyaW5naWZ5KGVycm9yTWVzc2FnZSl9YFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBuZXcgS2VlekFwaUVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBkZWxldGUgaW52b2ljZTogJHtKU09OLnN0cmluZ2lmeShlcnJvck1lc3NhZ2UpfWAsXG4gICAgICAgICAgICBheGlvc0Vycm9yLnJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|