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.
Files changed (111) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +366 -0
  3. package/dist/coverage/lcov-report/block-navigation.js +71 -0
  4. package/dist/coverage/lcov-report/prettify.js +478 -0
  5. package/dist/coverage/lcov-report/sorter.js +177 -0
  6. package/dist/eslint.config.js +56 -0
  7. package/dist/jest.config.cjs +13 -0
  8. package/dist/jest.config.js +13 -0
  9. package/dist/src/api/__tests__/index.test.js +52 -0
  10. package/dist/src/api/authorise.js +48 -0
  11. package/dist/src/api/invoices/cancel.js +33 -0
  12. package/dist/src/api/invoices/create.js +97 -0
  13. package/dist/src/api/invoices/delete.js +33 -0
  14. package/dist/src/api/invoices/downloadPdf.js +31 -0
  15. package/dist/src/api/invoices/getAll.js +84 -0
  16. package/dist/src/api/invoices/sendMail.js +59 -0
  17. package/dist/src/api/invoices/submitEfactura.js +34 -0
  18. package/dist/src/api/invoices/update.js +61 -0
  19. package/dist/src/api/invoices/validate.js +39 -0
  20. package/dist/src/api/invoices/view.js +93 -0
  21. package/dist/src/api/items/create.js +42 -0
  22. package/dist/src/api/items/getAll.js +74 -0
  23. package/dist/src/api/items/getById.js +46 -0
  24. package/dist/src/api/items/index.js +14 -0
  25. package/dist/src/api/items/patch.js +49 -0
  26. package/dist/src/api/items/update.js +41 -0
  27. package/dist/src/config/constants.js +23 -0
  28. package/dist/src/config/constructorParam.js +3 -0
  29. package/dist/src/config/measureUnit.js +22 -0
  30. package/dist/src/config/paymentType.js +17 -0
  31. package/dist/src/config/paymentType.js.js +16 -0
  32. package/dist/src/dto/allInvoicesResponse.js +3 -0
  33. package/dist/src/dto/authResponse.js +3 -0
  34. package/dist/src/dto/common/index.js +3 -0
  35. package/dist/src/dto/common/paginationParams.js +3 -0
  36. package/dist/src/dto/createInvoiceRequest.js +3 -0
  37. package/dist/src/dto/invoiceResponse.js +3 -0
  38. package/dist/src/dto/invoices/index.js +3 -0
  39. package/dist/src/dto/invoices/invoiceFilterParams.js +3 -0
  40. package/dist/src/dto/invoices/invoiceRequestV2.js +3 -0
  41. package/dist/src/dto/invoices/sendInvoiceParams.js +3 -0
  42. package/dist/src/dto/items/allItemsResponse.js +3 -0
  43. package/dist/src/dto/items/index.js +3 -0
  44. package/dist/src/dto/items/itemRequest.js +3 -0
  45. package/dist/src/dto/items/itemResponse.js +3 -0
  46. package/dist/src/errors/KeezError.js +27 -0
  47. package/dist/src/helpers/logger.js +15 -0
  48. package/dist/src/index.js +15 -0
  49. package/dist/src/keezApi.js +283 -0
  50. package/dist/tests/additional-coverage.test.js +351 -0
  51. package/dist/tests/edge-cases.test.js +353 -0
  52. package/dist/tests/error-handling.test.js +224 -0
  53. package/dist/tests/filter-params.test.js +267 -0
  54. package/dist/tests/index.test.js +493 -0
  55. package/dist/tests/invoices-extended.test.js +168 -0
  56. package/dist/tests/items.test.js +142 -0
  57. package/dist/types/coverage/lcov-report/block-navigation.d.ts +1 -0
  58. package/dist/types/coverage/lcov-report/prettify.d.ts +0 -0
  59. package/dist/types/coverage/lcov-report/sorter.d.ts +1 -0
  60. package/dist/types/eslint.config.d.ts +2 -0
  61. package/dist/types/jest.config.d.cts +9 -0
  62. package/dist/types/jest.config.d.ts +9 -0
  63. package/dist/types/src/api/__tests__/index.test.d.ts +1 -0
  64. package/dist/types/src/api/authorise.d.ts +18 -0
  65. package/dist/types/src/api/invoices/cancel.d.ts +9 -0
  66. package/dist/types/src/api/invoices/create.d.ts +22 -0
  67. package/dist/types/src/api/invoices/delete.d.ts +9 -0
  68. package/dist/types/src/api/invoices/downloadPdf.d.ts +8 -0
  69. package/dist/types/src/api/invoices/getAll.d.ts +22 -0
  70. package/dist/types/src/api/invoices/sendMail.d.ts +24 -0
  71. package/dist/types/src/api/invoices/submitEfactura.d.ts +9 -0
  72. package/dist/types/src/api/invoices/update.d.ts +11 -0
  73. package/dist/types/src/api/invoices/validate.d.ts +21 -0
  74. package/dist/types/src/api/invoices/view.d.ts +22 -0
  75. package/dist/types/src/api/items/create.d.ts +10 -0
  76. package/dist/types/src/api/items/getAll.d.ts +10 -0
  77. package/dist/types/src/api/items/getById.d.ts +10 -0
  78. package/dist/types/src/api/items/index.d.ts +5 -0
  79. package/dist/types/src/api/items/patch.d.ts +11 -0
  80. package/dist/types/src/api/items/update.d.ts +11 -0
  81. package/dist/types/src/config/constants.d.ts +13 -0
  82. package/dist/types/src/config/constructorParam.d.ts +6 -0
  83. package/dist/types/src/config/measureUnit.d.ts +17 -0
  84. package/dist/types/src/config/paymentType.d.ts +12 -0
  85. package/dist/types/src/config/paymentType.js.d.ts +11 -0
  86. package/dist/types/src/dto/allInvoicesResponse.d.ts +21 -0
  87. package/dist/types/src/dto/authResponse.d.ts +7 -0
  88. package/dist/types/src/dto/common/index.d.ts +1 -0
  89. package/dist/types/src/dto/common/paginationParams.d.ts +4 -0
  90. package/dist/types/src/dto/createInvoiceRequest.d.ts +34 -0
  91. package/dist/types/src/dto/invoiceResponse.d.ts +48 -0
  92. package/dist/types/src/dto/invoices/index.d.ts +3 -0
  93. package/dist/types/src/dto/invoices/invoiceFilterParams.d.ts +8 -0
  94. package/dist/types/src/dto/invoices/invoiceRequestV2.d.ts +23 -0
  95. package/dist/types/src/dto/invoices/sendInvoiceParams.d.ts +5 -0
  96. package/dist/types/src/dto/items/allItemsResponse.d.ts +13 -0
  97. package/dist/types/src/dto/items/index.d.ts +3 -0
  98. package/dist/types/src/dto/items/itemRequest.d.ts +34 -0
  99. package/dist/types/src/dto/items/itemResponse.d.ts +15 -0
  100. package/dist/types/src/errors/KeezError.d.ts +11 -0
  101. package/dist/types/src/helpers/logger.d.ts +2 -0
  102. package/dist/types/src/index.d.ts +11 -0
  103. package/dist/types/src/keezApi.d.ts +114 -0
  104. package/dist/types/tests/additional-coverage.test.d.ts +1 -0
  105. package/dist/types/tests/edge-cases.test.d.ts +1 -0
  106. package/dist/types/tests/error-handling.test.d.ts +1 -0
  107. package/dist/types/tests/filter-params.test.d.ts +1 -0
  108. package/dist/types/tests/index.test.d.ts +1 -0
  109. package/dist/types/tests/invoices-extended.test.d.ts +1 -0
  110. package/dist/types/tests/items.test.d.ts +1 -0
  111. package/package.json +66 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const nock = require("nock");
4
+ const keezApi_1 = require("../src/keezApi");
5
+ const paymentType_1 = require("../src/config/paymentType");
6
+ describe('Keez API Invoices Extended', () => {
7
+ let keezApi;
8
+ const baseDomain = 'https://staging.keez.ro';
9
+ const clientEid = 'test-client-eid';
10
+ beforeAll(() => {
11
+ keezApi = new keezApi_1.KeezApi({
12
+ application_id: 'test-app-id',
13
+ client_eid: clientEid,
14
+ secret: 'test-secret',
15
+ live: false,
16
+ });
17
+ });
18
+ beforeEach(() => {
19
+ // Mock the auth token generation
20
+ nock(baseDomain)
21
+ .post('/idp/connect/token')
22
+ .reply(200, {
23
+ access_token: 'test-token',
24
+ expires_in: 3600,
25
+ token_type: 'Bearer',
26
+ scope: 'public-api',
27
+ });
28
+ });
29
+ afterEach(() => {
30
+ nock.cleanAll();
31
+ });
32
+ describe('getAllInvoices with filters', () => {
33
+ it('should fetch invoices with status filter', async () => {
34
+ const mockInvoices = {
35
+ first: 0,
36
+ last: 1,
37
+ recordsCount: 1,
38
+ data: [
39
+ {
40
+ externalId: 'inv-1',
41
+ series: 'INV',
42
+ number: 1,
43
+ documentDate: 20230101,
44
+ dueDate: 20230115,
45
+ status: 'VALIDATED',
46
+ clientName: 'Test Client',
47
+ partnerName: 'Test Partner',
48
+ currencyCode: 'RON',
49
+ referenceCurrencyCode: 'RON',
50
+ netAmount: 100,
51
+ vatAmount: 19,
52
+ grossAmount: 119,
53
+ },
54
+ ],
55
+ };
56
+ nock(baseDomain)
57
+ .get(`/api/v1.0/public-api/${clientEid}/invoices`)
58
+ .query({ status: 'VALIDATED' })
59
+ .reply(200, mockInvoices);
60
+ const result = await keezApi.getAllInvoices({ status: 'VALIDATED' });
61
+ expect(result.data).toHaveLength(1);
62
+ expect(result.data[0].status).toBe('VALIDATED');
63
+ });
64
+ it('should fetch invoices with pagination', async () => {
65
+ const mockInvoices = {
66
+ first: 10,
67
+ last: 19,
68
+ recordsCount: 50,
69
+ data: [],
70
+ };
71
+ nock(baseDomain)
72
+ .get(`/api/v1.0/public-api/${clientEid}/invoices`)
73
+ .query({ offset: '10', count: '10' })
74
+ .reply(200, mockInvoices);
75
+ const result = await keezApi.getAllInvoices({ offset: 10, count: 10 });
76
+ expect(result.first).toBe(10);
77
+ });
78
+ });
79
+ describe('sendInvoice with extended params', () => {
80
+ it('should send invoice with simple email', async () => {
81
+ nock(baseDomain)
82
+ .post('/api/v1.0/public-api/invoices/delivery')
83
+ .reply(200);
84
+ const result = await keezApi.sendInvoice('test@example.com', 'inv-123');
85
+ expect(result).toBe('SENT');
86
+ });
87
+ it('should send invoice with CC and BCC', async () => {
88
+ nock(baseDomain)
89
+ .post('/api/v1.0/public-api/invoices/delivery')
90
+ .reply(200);
91
+ const result = await keezApi.sendInvoice({
92
+ to: 'main@example.com',
93
+ cc: ['cc1@example.com', 'cc2@example.com'],
94
+ bcc: ['bcc@example.com'],
95
+ }, 'inv-123');
96
+ expect(result).toBe('SENT');
97
+ });
98
+ });
99
+ describe('updateInvoice', () => {
100
+ it('should update an existing invoice', async () => {
101
+ nock(baseDomain)
102
+ .put(`/api/v1.0/public-api/${clientEid}/invoices/inv-123`)
103
+ .reply(200);
104
+ await expect(keezApi.updateInvoice('inv-123', {
105
+ series: 'INV',
106
+ documentDate: 20230101,
107
+ dueDate: 20230115,
108
+ currencyCode: 'RON',
109
+ paymentType: paymentType_1.PaymentType.BANK_TRANSFER,
110
+ partner: {
111
+ isLegalPerson: false,
112
+ partnerName: 'Updated Partner',
113
+ identificationNumber: '123456',
114
+ countryCode: 'RO',
115
+ countryName: 'Romania',
116
+ countyCode: 'B',
117
+ countyName: 'Bucuresti',
118
+ cityName: 'Bucuresti',
119
+ addressDetails: 'Test Address',
120
+ },
121
+ items: [
122
+ {
123
+ itemExternalId: 'item-1',
124
+ measureUnitId: 1,
125
+ quantity: 2,
126
+ unitPrice: 100,
127
+ },
128
+ ],
129
+ })).resolves.toBeUndefined();
130
+ });
131
+ });
132
+ describe('deleteInvoice', () => {
133
+ it('should delete an invoice', async () => {
134
+ nock(baseDomain)
135
+ .delete(`/api/v1.0/public-api/${clientEid}/invoices`)
136
+ .reply(200);
137
+ await expect(keezApi.deleteInvoice('inv-123')).resolves.toBeUndefined();
138
+ });
139
+ });
140
+ describe('submitInvoiceToEfactura', () => {
141
+ it('should submit invoice to eFactura', async () => {
142
+ nock(baseDomain)
143
+ .post(`/api/v1.0/public-api/${clientEid}/invoices/efactura/submitted`)
144
+ .reply(200, { uploadIndex: 'upload-123' });
145
+ const result = await keezApi.submitInvoiceToEfactura('inv-123');
146
+ expect(result).toBe('upload-123');
147
+ });
148
+ });
149
+ describe('cancelInvoice', () => {
150
+ it('should cancel an invoice', async () => {
151
+ nock(baseDomain)
152
+ .post(`/api/v1.0/public-api/${clientEid}/invoices/canceled`)
153
+ .reply(200);
154
+ await expect(keezApi.cancelInvoice('inv-123')).resolves.toBeUndefined();
155
+ });
156
+ });
157
+ describe('downloadInvoicePdf', () => {
158
+ it('should download invoice PDF', async () => {
159
+ const pdfBuffer = Buffer.from('PDF content');
160
+ nock(baseDomain)
161
+ .get('/api/v1.0/public-api/invoices/inv-123/pdf')
162
+ .reply(200, pdfBuffer);
163
+ const result = await keezApi.downloadInvoicePdf('inv-123');
164
+ expect(result).toBeInstanceOf(Buffer);
165
+ });
166
+ });
167
+ });
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZXMtZXh0ZW5kZWQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Rlc3RzL2ludm9pY2VzLWV4dGVuZGVkLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBOEI7QUFDOUIsdUNBQW9DO0FBQ3BDLHNEQUFtRDtBQUVuRCxRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLElBQUksT0FBZ0IsQ0FBQztJQUNyQixNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztJQUM3QyxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUVwQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQztZQUNsQixjQUFjLEVBQUUsYUFBYTtZQUM3QixVQUFVLEVBQUUsU0FBUztZQUNyQixNQUFNLEVBQUUsYUFBYTtZQUNyQixJQUFJLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNaLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2FBQzFCLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDUixZQUFZLEVBQUUsWUFBWTtZQUMxQixVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsUUFBUTtZQUNwQixLQUFLLEVBQUUsWUFBWTtTQUN0QixDQUFDLENBQUM7SUFDWCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDWCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0RCxNQUFNLFlBQVksR0FBRztnQkFDakIs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QztpQkFDWCxJQUFJLENBQUMsd0JBQXdCLFNBQVMsb0JBQW9CLENBQUM7aUJBQzNELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVoQixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN6QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTdDLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ1gsR0FBRyxDQUFDLDJDQUEyQyxDQUFDO2lCQUNoRCxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBLZWV6QXBpIH0gZnJvbSAnQC9rZWV6QXBpJztcbmltcG9ydCB7IFBheW1lbnRUeXBlIH0gZnJvbSAnQC9jb25maWcvcGF5bWVudFR5cGUnO1xuXG5kZXNjcmliZSgnS2VleiBBUEkgSW52b2ljZXMgRXh0ZW5kZWQnLCAoKSA9PiB7XG4gICAgbGV0IGtlZXpBcGk6IEtlZXpBcGk7XG4gICAgY29uc3QgYmFzZURvbWFpbiA9ICdodHRwczovL3N0YWdpbmcua2Vlei5ybyc7XG4gICAgY29uc3QgY2xpZW50RWlkID0gJ3Rlc3QtY2xpZW50LWVpZCc7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgICBrZWV6QXBpID0gbmV3IEtlZXpBcGkoe1xuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6ICd0ZXN0LWFwcC1pZCcsXG4gICAgICAgICAgICBjbGllbnRfZWlkOiBjbGllbnRFaWQsXG4gICAgICAgICAgICBzZWNyZXQ6ICd0ZXN0LXNlY3JldCcsXG4gICAgICAgICAgICBsaXZlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gTW9jayB0aGUgYXV0aCB0b2tlbiBnZW5lcmF0aW9uXG4gICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgIC5wb3N0KCcvaWRwL2Nvbm5lY3QvdG9rZW4nKVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IDM2MDAsXG4gICAgICAgICAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgICAgICAgICAgc2NvcGU6ICdwdWJsaWMtYXBpJyxcbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFsbEludm9pY2VzIHdpdGggZmlsdGVycycsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmZXRjaCBpbnZvaWNlcyB3aXRoIHN0YXR1cyBmaWx0ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2NrSW52b2ljZXMgPSB7XG4gICAgICAgICAgICAgICAgZmlyc3Q6IDAsXG4gICAgICAgICAgICAgICAgbGFzdDogMSxcbiAgICAgICAgICAgICAgICByZWNvcmRzQ291bnQ6IDEsXG4gICAgICAgICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbElkOiAnaW52LTEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzOiAnSU5WJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RGF0ZTogMjAyMzAxMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkdWVEYXRlOiAyMDIzMDExNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ1ZBTElEQVRFRCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnROYW1lOiAnVGVzdCBDbGllbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydG5lck5hbWU6ICdUZXN0IFBhcnRuZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlOiAnUk9OJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUN1cnJlbmN5Q29kZTogJ1JPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXRBbW91bnQ6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhdEFtb3VudDogMTksXG4gICAgICAgICAgICAgICAgICAgICAgICBncm9zc0Ftb3VudDogMTE5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBub2NrKGJhc2VEb21haW4pXG4gICAgICAgICAgICAgICAgLmdldChgL2FwaS92MS4wL3B1YmxpYy1hcGkvJHtjbGllbnRFaWR9L2ludm9pY2VzYClcbiAgICAgICAgICAgICAgICAucXVlcnkoeyBzdGF0dXM6ICdWQUxJREFURUQnIH0pXG4gICAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgbW9ja0ludm9pY2VzKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2VlekFwaS5nZXRBbGxJbnZvaWNlcyh7IHN0YXR1czogJ1ZBTElEQVRFRCcgfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LmRhdGEpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQuZGF0YVswXS5zdGF0dXMpLnRvQmUoJ1ZBTElEQVRFRCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZldGNoIGludm9pY2VzIHdpdGggcGFnaW5hdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tJbnZvaWNlcyA9IHtcbiAgICAgICAgICAgICAgICBmaXJzdDogMTAsXG4gICAgICAgICAgICAgICAgbGFzdDogMTksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0NvdW50OiA1MCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgICAgICAuZ2V0KGAvYXBpL3YxLjAvcHVibGljLWFwaS8ke2NsaWVudEVpZH0vaW52b2ljZXNgKVxuICAgICAgICAgICAgICAgIC5xdWVyeSh7IG9mZnNldDogJzEwJywgY291bnQ6ICcxMCcgfSlcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwLCBtb2NrSW52b2ljZXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrZWV6QXBpLmdldEFsbEludm9pY2VzKHsgb2Zmc2V0OiAxMCwgY291bnQ6IDEwIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5maXJzdCkudG9CZSgxMCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NlbmRJbnZvaWNlIHdpdGggZXh0ZW5kZWQgcGFyYW1zJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHNlbmQgaW52b2ljZSB3aXRoIHNpbXBsZSBlbWFpbCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgICAgICAucG9zdCgnL2FwaS92MS4wL3B1YmxpYy1hcGkvaW52b2ljZXMvZGVsaXZlcnknKVxuICAgICAgICAgICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrZWV6QXBpLnNlbmRJbnZvaWNlKCd0ZXN0QGV4YW1wbGUuY29tJywgJ2ludi0xMjMnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ1NFTlQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBzZW5kIGludm9pY2Ugd2l0aCBDQyBhbmQgQkNDJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbm9jayhiYXNlRG9tYWluKVxuICAgICAgICAgICAgICAgIC5wb3N0KCcvYXBpL3YxLjAvcHVibGljLWFwaS9pbnZvaWNlcy9kZWxpdmVyeScpXG4gICAgICAgICAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGtlZXpBcGkuc2VuZEludm9pY2UoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0bzogJ21haW5AZXhhbXBsZS5jb20nLFxuICAgICAgICAgICAgICAgICAgICBjYzogWydjYzFAZXhhbXBsZS5jb20nLCAnY2MyQGV4YW1wbGUuY29tJ10sXG4gICAgICAgICAgICAgICAgICAgIGJjYzogWydiY2NAZXhhbXBsZS5jb20nXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdpbnYtMTIzJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdTRU5UJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VwZGF0ZUludm9pY2UnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIGFuIGV4aXN0aW5nIGludm9pY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBub2NrKGJhc2VEb21haW4pXG4gICAgICAgICAgICAgICAgLnB1dChgL2FwaS92MS4wL3B1YmxpYy1hcGkvJHtjbGllbnRFaWR9L2ludm9pY2VzL2ludi0xMjNgKVxuICAgICAgICAgICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICAgICAgICBhd2FpdCBleHBlY3Qoa2VlekFwaS51cGRhdGVJbnZvaWNlKCdpbnYtMTIzJywge1xuICAgICAgICAgICAgICAgIHNlcmllczogJ0lOVicsXG4gICAgICAgICAgICAgICAgZG9jdW1lbnREYXRlOiAyMDIzMDEwMSxcbiAgICAgICAgICAgICAgICBkdWVEYXRlOiAyMDIzMDExNSxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6ICdST04nLFxuICAgICAgICAgICAgICAgIHBheW1lbnRUeXBlOiBQYXltZW50VHlwZS5CQU5LX1RSQU5TRkVSLFxuICAgICAgICAgICAgICAgIHBhcnRuZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaXNMZWdhbFBlcnNvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHBhcnRuZXJOYW1lOiAnVXBkYXRlZCBQYXJ0bmVyJyxcbiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmljYXRpb25OdW1iZXI6ICcxMjM0NTYnLFxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogJ1JPJyxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeU5hbWU6ICdSb21hbmlhJyxcbiAgICAgICAgICAgICAgICAgICAgY291bnR5Q29kZTogJ0InLFxuICAgICAgICAgICAgICAgICAgICBjb3VudHlOYW1lOiAnQnVjdXJlc3RpJyxcbiAgICAgICAgICAgICAgICAgICAgY2l0eU5hbWU6ICdCdWN1cmVzdGknLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzRGV0YWlsczogJ1Rlc3QgQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRXh0ZXJuYWxJZDogJ2l0ZW0tMScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlVW5pdElkOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bml0UHJpY2U6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSkpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGVsZXRlSW52b2ljZScsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBkZWxldGUgYW4gaW52b2ljZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgICAgICAuZGVsZXRlKGAvYXBpL3YxLjAvcHVibGljLWFwaS8ke2NsaWVudEVpZH0vaW52b2ljZXNgKVxuICAgICAgICAgICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICAgICAgICBhd2FpdCBleHBlY3Qoa2VlekFwaS5kZWxldGVJbnZvaWNlKCdpbnYtMTIzJykpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc3VibWl0SW52b2ljZVRvRWZhY3R1cmEnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgc3VibWl0IGludm9pY2UgdG8gZUZhY3R1cmEnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBub2NrKGJhc2VEb21haW4pXG4gICAgICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjEuMC9wdWJsaWMtYXBpLyR7Y2xpZW50RWlkfS9pbnZvaWNlcy9lZmFjdHVyYS9zdWJtaXR0ZWRgKVxuICAgICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdXBsb2FkSW5kZXg6ICd1cGxvYWQtMTIzJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2VlekFwaS5zdWJtaXRJbnZvaWNlVG9FZmFjdHVyYSgnaW52LTEyMycpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndXBsb2FkLTEyMycpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjYW5jZWxJbnZvaWNlJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGNhbmNlbCBhbiBpbnZvaWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbm9jayhiYXNlRG9tYWluKVxuICAgICAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YxLjAvcHVibGljLWFwaS8ke2NsaWVudEVpZH0vaW52b2ljZXMvY2FuY2VsZWRgKVxuICAgICAgICAgICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICAgICAgICBhd2FpdCBleHBlY3Qoa2VlekFwaS5jYW5jZWxJbnZvaWNlKCdpbnYtMTIzJykpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG93bmxvYWRJbnZvaWNlUGRmJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGRvd25sb2FkIGludm9pY2UgUERGJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGRmQnVmZmVyID0gQnVmZmVyLmZyb20oJ1BERiBjb250ZW50Jyk7XG5cbiAgICAgICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgICAgICAuZ2V0KCcvYXBpL3YxLjAvcHVibGljLWFwaS9pbnZvaWNlcy9pbnYtMTIzL3BkZicpXG4gICAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgcGRmQnVmZmVyKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2VlekFwaS5kb3dubG9hZEludm9pY2VQZGYoJ2ludi0xMjMnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVJbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const nock = require("nock");
4
+ const keezApi_1 = require("../src/keezApi");
5
+ const measureUnit_1 = require("../src/config/measureUnit");
6
+ describe('Keez API Items', () => {
7
+ let keezApi;
8
+ const baseDomain = 'https://staging.keez.ro';
9
+ const clientEid = 'test-client-eid';
10
+ beforeAll(() => {
11
+ keezApi = new keezApi_1.KeezApi({
12
+ application_id: 'test-app-id',
13
+ client_eid: clientEid,
14
+ secret: 'test-secret',
15
+ live: false,
16
+ });
17
+ });
18
+ beforeEach(() => {
19
+ // Mock the auth token generation
20
+ nock(baseDomain)
21
+ .post('/idp/connect/token')
22
+ .reply(200, {
23
+ access_token: 'test-token',
24
+ expires_in: 3600,
25
+ token_type: 'Bearer',
26
+ scope: 'public-api',
27
+ });
28
+ });
29
+ afterEach(() => {
30
+ nock.cleanAll();
31
+ });
32
+ describe('getAllItems', () => {
33
+ it('should fetch all items without filters', async () => {
34
+ const mockItems = {
35
+ first: 0,
36
+ last: 1,
37
+ recordsCount: 2,
38
+ data: [
39
+ {
40
+ externalId: 'item-1',
41
+ itemName: 'Test Item 1',
42
+ itemCode: 'TI001',
43
+ itemDescription: 'Test description',
44
+ measureUnitId: 1,
45
+ measureUnitName: 'Bucata',
46
+ unitPrice: 100,
47
+ vatPercent: 19,
48
+ vatCategoryCode: 'S',
49
+ vatExemptionReason: '',
50
+ isActive: true,
51
+ createdAt: 1700000000000,
52
+ updatedAt: 1700000000000,
53
+ },
54
+ ],
55
+ };
56
+ nock(baseDomain)
57
+ .get(`/api/v1.0/public-api/${clientEid}/items`)
58
+ .reply(200, mockItems);
59
+ const result = await keezApi.getAllItems();
60
+ expect(result.recordsCount).toBe(2);
61
+ expect(result.data).toHaveLength(1);
62
+ expect(result.data[0].itemName).toBe('Test Item 1');
63
+ });
64
+ it('should fetch items with pagination', async () => {
65
+ const mockItems = {
66
+ first: 10,
67
+ last: 19,
68
+ recordsCount: 50,
69
+ data: [],
70
+ };
71
+ nock(baseDomain)
72
+ .get(`/api/v1.0/public-api/${clientEid}/items`)
73
+ .query({ offset: '10', count: '10' })
74
+ .reply(200, mockItems);
75
+ const result = await keezApi.getAllItems({ offset: 10, count: 10 });
76
+ expect(result.first).toBe(10);
77
+ });
78
+ });
79
+ describe('getItemByExternalId', () => {
80
+ it('should fetch a single item by ID', async () => {
81
+ const mockItem = {
82
+ externalId: 'item-123',
83
+ itemName: 'Test Item',
84
+ itemCode: 'TI001',
85
+ itemDescription: 'Test description',
86
+ measureUnitId: 1,
87
+ measureUnitName: 'Bucata',
88
+ unitPrice: 100,
89
+ vatPercent: 19,
90
+ vatCategoryCode: 'S',
91
+ vatExemptionReason: '',
92
+ isActive: true,
93
+ createdAt: 1700000000000,
94
+ updatedAt: 1700000000000,
95
+ };
96
+ nock(baseDomain)
97
+ .get(`/api/v1.0/public-api/${clientEid}/items/item-123`)
98
+ .reply(200, mockItem);
99
+ const result = await keezApi.getItemByExternalId('item-123');
100
+ expect(result.externalId).toBe('item-123');
101
+ expect(result.itemName).toBe('Test Item');
102
+ });
103
+ });
104
+ describe('createItem', () => {
105
+ it('should create a new item', async () => {
106
+ nock(baseDomain)
107
+ .post(`/api/v1.0/public-api/${clientEid}/items`)
108
+ .reply(201, { externalId: 'new-item-id' });
109
+ const result = await keezApi.createItem({
110
+ itemName: 'New Item',
111
+ measureUnitId: measureUnit_1.MeasureUnit.PIECE,
112
+ unitPrice: 50,
113
+ vatPercent: 19,
114
+ });
115
+ expect(result).toBe('new-item-id');
116
+ });
117
+ });
118
+ describe('updateItem', () => {
119
+ it('should update an existing item', async () => {
120
+ nock(baseDomain)
121
+ .put(`/api/v1.0/public-api/${clientEid}/items/item-123`)
122
+ .reply(200);
123
+ await expect(keezApi.updateItem('item-123', {
124
+ itemName: 'Updated Item',
125
+ measureUnitId: measureUnit_1.MeasureUnit.PIECE,
126
+ unitPrice: 75,
127
+ vatPercent: 19,
128
+ })).resolves.toBeUndefined();
129
+ });
130
+ });
131
+ describe('patchItem', () => {
132
+ it('should partially update an item', async () => {
133
+ nock(baseDomain)
134
+ .patch(`/api/v1.0/public-api/${clientEid}/items/item-123`)
135
+ .reply(200);
136
+ await expect(keezApi.patchItem('item-123', {
137
+ unitPrice: 80,
138
+ })).resolves.toBeUndefined();
139
+ });
140
+ });
141
+ });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Rlc3RzL2l0ZW1zLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBOEI7QUFDOUIsdUNBQW9DO0FBQ3BDLHNEQUFtRDtBQUVuRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzVCLElBQUksT0FBZ0IsQ0FBQztJQUNyQixNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztJQUM3QyxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUVwQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQztZQUNsQixjQUFjLEVBQUUsYUFBYTtZQUM3QixVQUFVLEVBQUUsU0FBUztZQUNyQixNQUFNLEVBQUUsYUFBYTtZQUNyQixJQUFJLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNaLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2FBQzFCLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDUixZQUFZLEVBQUUsWUFBWTtZQUMxQixVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsUUFBUTtZQUNwQixLQUFLLEVBQUUsWUFBWTtTQUN0QixDQUFDLENBQUM7SUFDWCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDWCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUN6QixFQUFFLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDcEQsTUFBTSxTQUFTLEdBQUc7Z0JBQ2QsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxFQUFFO29CQUNGO3dCQUNJLFVBQVUsRUFBRSxRQUFRO3dCQUNwQixRQUFRLEVBQUUsYUFBYTt3QkFDdkIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLGVBQWUsRUFBRSxrQkFBa0I7d0JBQ25DLGFBQWEsRUFBRSxDQUFDO3dCQUNoQixlQUFlLEVBQUUsUUFBUTt3QkFDekIsU0FBUyxFQUFFLEdBQUc7d0JBQ2QsVUFBVSxFQUFFLEVBQUU7d0JBQ2QsZUFBZSxFQUFFLEdBQUc7d0JBQ3BCLGtCQUFrQixFQUFFLEVBQUU7d0JBQ3RCLFFBQVEsRUFBRSxJQUFJO3dCQUNkLFNBQVMsRUFBRSxhQUFhO3dCQUN4QixTQUFTLEVBQUUsYUFBYTtxQkFDM0I7aUJBQ0o7YUFDSixDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDWCxHQUFHLENBQUMsd0JBQXdCLFNBQVMsUUFBUSxDQUFDO2lCQUM5QyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRCxNQUFNLFNBQVMsR0FBRztnQkFDZCxLQUFLLEVBQUUsRUFBRTtnQkFDVCxJQUFJLEVBQUUsRUFBRTtnQkFDUixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxFQUFFLEVBQUU7YUFDWCxDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDWCxHQUFHLENBQUMsd0JBQXdCLFNBQVMsUUFBUSxDQUFDO2lCQUM5QyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDcEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUUzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5QyxNQUFNLFFBQVEsR0FBRztnQkFDYixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixlQUFlLEVBQUUsa0JBQWtCO2dCQUNuQyxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLFNBQVMsRUFBRSxHQUFHO2dCQUNkLFVBQVUsRUFBRSxFQUFFO2dCQUNkLGVBQWUsRUFBRSxHQUFHO2dCQUNwQixrQkFBa0IsRUFBRSxFQUFFO2dCQUN0QixRQUFRLEVBQUUsSUFBSTtnQkFDZCxTQUFTLEVBQUUsYUFBYTtnQkFDeEIsU0FBUyxFQUFFLGFBQWE7YUFDM0IsQ0FBQztZQUVGLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ1gsR0FBRyxDQUFDLHdCQUF3QixTQUFTLGlCQUFpQixDQUFDO2lCQUN2RCxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRTFCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUN4QixFQUFFLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDWCxJQUFJLENBQUMsd0JBQXdCLFNBQVMsUUFBUSxDQUFDO2lCQUMvQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFFL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUNwQyxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsYUFBYSxFQUFFLHlCQUFXLENBQUMsS0FBSztnQkFDaEMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsVUFBVSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDeEIsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ1gsR0FBRyxDQUFDLHdCQUF3QixTQUFTLGlCQUFpQixDQUFDO2lCQUN2RCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFaEIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hDLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixhQUFhLEVBQUUseUJBQVcsQ0FBQyxLQUFLO2dCQUNoQyxTQUFTLEVBQUUsRUFBRTtnQkFDYixVQUFVLEVBQUUsRUFBRTthQUNqQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3ZCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNYLEtBQUssQ0FBQyx3QkFBd0IsU0FBUyxpQkFBaUIsQ0FBQztpQkFDekQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWhCLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO2dCQUN2QyxTQUFTLEVBQUUsRUFBRTthQUNoQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBLZWV6QXBpIH0gZnJvbSAnQC9rZWV6QXBpJztcbmltcG9ydCB7IE1lYXN1cmVVbml0IH0gZnJvbSAnQC9jb25maWcvbWVhc3VyZVVuaXQnO1xuXG5kZXNjcmliZSgnS2VleiBBUEkgSXRlbXMnLCAoKSA9PiB7XG4gICAgbGV0IGtlZXpBcGk6IEtlZXpBcGk7XG4gICAgY29uc3QgYmFzZURvbWFpbiA9ICdodHRwczovL3N0YWdpbmcua2Vlei5ybyc7XG4gICAgY29uc3QgY2xpZW50RWlkID0gJ3Rlc3QtY2xpZW50LWVpZCc7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgICBrZWV6QXBpID0gbmV3IEtlZXpBcGkoe1xuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6ICd0ZXN0LWFwcC1pZCcsXG4gICAgICAgICAgICBjbGllbnRfZWlkOiBjbGllbnRFaWQsXG4gICAgICAgICAgICBzZWNyZXQ6ICd0ZXN0LXNlY3JldCcsXG4gICAgICAgICAgICBsaXZlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gTW9jayB0aGUgYXV0aCB0b2tlbiBnZW5lcmF0aW9uXG4gICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgIC5wb3N0KCcvaWRwL2Nvbm5lY3QvdG9rZW4nKVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IDM2MDAsXG4gICAgICAgICAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgICAgICAgICAgc2NvcGU6ICdwdWJsaWMtYXBpJyxcbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFsbEl0ZW1zJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGZldGNoIGFsbCBpdGVtcyB3aXRob3V0IGZpbHRlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2NrSXRlbXMgPSB7XG4gICAgICAgICAgICAgICAgZmlyc3Q6IDAsXG4gICAgICAgICAgICAgICAgbGFzdDogMSxcbiAgICAgICAgICAgICAgICByZWNvcmRzQ291bnQ6IDIsXG4gICAgICAgICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbElkOiAnaXRlbS0xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiAnVGVzdCBJdGVtIDEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvZGU6ICdUSTAwMScsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGVzY3JpcHRpb246ICdUZXN0IGRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVVbml0SWQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlVW5pdE5hbWU6ICdCdWNhdGEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pdFByaWNlOiAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXRQZXJjZW50OiAxOSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhdENhdGVnb3J5Q29kZTogJ1MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmF0RXhlbXB0aW9uUmVhc29uOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0OiAxNzAwMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiAxNzAwMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBub2NrKGJhc2VEb21haW4pXG4gICAgICAgICAgICAgICAgLmdldChgL2FwaS92MS4wL3B1YmxpYy1hcGkvJHtjbGllbnRFaWR9L2l0ZW1zYClcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwLCBtb2NrSXRlbXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrZWV6QXBpLmdldEFsbEl0ZW1zKCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNDb3VudCkudG9CZSgyKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQuZGF0YSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5kYXRhWzBdLml0ZW1OYW1lKS50b0JlKCdUZXN0IEl0ZW0gMScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZldGNoIGl0ZW1zIHdpdGggcGFnaW5hdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tJdGVtcyA9IHtcbiAgICAgICAgICAgICAgICBmaXJzdDogMTAsXG4gICAgICAgICAgICAgICAgbGFzdDogMTksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0NvdW50OiA1MCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG5vY2soYmFzZURvbWFpbilcbiAgICAgICAgICAgICAgICAuZ2V0KGAvYXBpL3YxLjAvcHVibGljLWFwaS8ke2NsaWVudEVpZH0vaXRlbXNgKVxuICAgICAgICAgICAgICAgIC5xdWVyeSh7IG9mZnNldDogJzEwJywgY291bnQ6ICcxMCcgfSlcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwLCBtb2NrSXRlbXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrZWV6QXBpLmdldEFsbEl0ZW1zKHsgb2Zmc2V0OiAxMCwgY291bnQ6IDEwIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5maXJzdCkudG9CZSgxMCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEl0ZW1CeUV4dGVybmFsSWQnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgZmV0Y2ggYSBzaW5nbGUgaXRlbSBieSBJRCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tJdGVtID0ge1xuICAgICAgICAgICAgICAgIGV4dGVybmFsSWQ6ICdpdGVtLTEyMycsXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6ICdUZXN0IEl0ZW0nLFxuICAgICAgICAgICAgICAgIGl0ZW1Db2RlOiAnVEkwMDEnLFxuICAgICAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbjogJ1Rlc3QgZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgIG1lYXN1cmVVbml0SWQ6IDEsXG4gICAgICAgICAgICAgICAgbWVhc3VyZVVuaXROYW1lOiAnQnVjYXRhJyxcbiAgICAgICAgICAgICAgICB1bml0UHJpY2U6IDEwMCxcbiAgICAgICAgICAgICAgICB2YXRQZXJjZW50OiAxOSxcbiAgICAgICAgICAgICAgICB2YXRDYXRlZ29yeUNvZGU6ICdTJyxcbiAgICAgICAgICAgICAgICB2YXRFeGVtcHRpb25SZWFzb246ICcnLFxuICAgICAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogMTcwMDAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IDE3MDAwMDAwMDAwMDAsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBub2NrKGJhc2VEb21haW4pXG4gICAgICAgICAgICAgICAgLmdldChgL2FwaS92MS4wL3B1YmxpYy1hcGkvJHtjbGllbnRFaWR9L2l0ZW1zL2l0ZW0tMTIzYClcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwLCBtb2NrSXRlbSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGtlZXpBcGkuZ2V0SXRlbUJ5RXh0ZXJuYWxJZCgnaXRlbS0xMjMnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQuZXh0ZXJuYWxJZCkudG9CZSgnaXRlbS0xMjMnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQuaXRlbU5hbWUpLnRvQmUoJ1Rlc3QgSXRlbScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGVJdGVtJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIG5ldyBpdGVtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbm9jayhiYXNlRG9tYWluKVxuICAgICAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YxLjAvcHVibGljLWFwaS8ke2NsaWVudEVpZH0vaXRlbXNgKVxuICAgICAgICAgICAgICAgIC5yZXBseSgyMDEsIHsgZXh0ZXJuYWxJZDogJ25ldy1pdGVtLWlkJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2VlekFwaS5jcmVhdGVJdGVtKHtcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogJ05ldyBJdGVtJyxcbiAgICAgICAgICAgICAgICBtZWFzdXJlVW5pdElkOiBNZWFzdXJlVW5pdC5QSUVDRSxcbiAgICAgICAgICAgICAgICB1bml0UHJpY2U6IDUwLFxuICAgICAgICAgICAgICAgIHZhdFBlcmNlbnQ6IDE5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ25ldy1pdGVtLWlkJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VwZGF0ZUl0ZW0nLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBub2NrKGJhc2VEb21haW4pXG4gICAgICAgICAgICAgICAgLnB1dChgL2FwaS92MS4wL3B1YmxpYy1hcGkvJHtjbGllbnRFaWR9L2l0ZW1zL2l0ZW0tMTIzYClcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgICAgICAgYXdhaXQgZXhwZWN0KGtlZXpBcGkudXBkYXRlSXRlbSgnaXRlbS0xMjMnLCB7XG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6ICdVcGRhdGVkIEl0ZW0nLFxuICAgICAgICAgICAgICAgIG1lYXN1cmVVbml0SWQ6IE1lYXN1cmVVbml0LlBJRUNFLFxuICAgICAgICAgICAgICAgIHVuaXRQcmljZTogNzUsXG4gICAgICAgICAgICAgICAgdmF0UGVyY2VudDogMTksXG4gICAgICAgICAgICB9KSkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXRjaEl0ZW0nLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgcGFydGlhbGx5IHVwZGF0ZSBhbiBpdGVtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbm9jayhiYXNlRG9tYWluKVxuICAgICAgICAgICAgICAgIC5wYXRjaChgL2FwaS92MS4wL3B1YmxpYy1hcGkvJHtjbGllbnRFaWR9L2l0ZW1zL2l0ZW0tMTIzYClcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgICAgICAgYXdhaXQgZXhwZWN0KGtlZXpBcGkucGF0Y2hJdGVtKCdpdGVtLTEyMycsIHtcbiAgICAgICAgICAgICAgICB1bml0UHJpY2U6IDgwLFxuICAgICAgICAgICAgfSkpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1 @@
1
+ declare function jumpToCode(event: any): void;
File without changes
@@ -0,0 +1 @@
1
+ declare function addSorting(): void;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").FlatConfig.ConfigArray;
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ export let transform: {
2
+ '^.+\\.(t|j)s$': string;
3
+ };
4
+ export let testRegex: string;
5
+ export let modulePathIgnorePatterns: string[];
6
+ export let moduleFileExtensions: string[];
7
+ export let moduleNameMapper: {
8
+ '^@/(.*)$': string;
9
+ };
@@ -0,0 +1,9 @@
1
+ export let transform: {
2
+ '^.+\\.(t|j)s$': string;
3
+ };
4
+ export let testRegex: string;
5
+ export let modulePathIgnorePatterns: string[];
6
+ export let moduleFileExtensions: string[];
7
+ export let moduleNameMapper: {
8
+ '^@/(.*)$': string;
9
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import { AuthResponse } from '../../../src/dto/authResponse';
2
+ /**
3
+ * baseDomain - The base domain for the API
4
+ * appId - The application ID
5
+ * apiSecret - The API secret
6
+ */
7
+ interface GenerateTokenParams {
8
+ readonly baseDomain: string;
9
+ readonly appId: string;
10
+ readonly apiSecret: string;
11
+ }
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
+ export declare function apiGenerateToken(params: GenerateTokenParams): Promise<AuthResponse>;
18
+ export {};
@@ -0,0 +1,9 @@
1
+ interface CancelInvoiceParams {
2
+ readonly baseDomain: string;
3
+ readonly appId: string;
4
+ readonly appClientId: string;
5
+ readonly bearerToken: string;
6
+ readonly invoiceId: string;
7
+ }
8
+ export declare function apiCancelInvoice(params: CancelInvoiceParams): Promise<void>;
9
+ export {};
@@ -0,0 +1,22 @@
1
+ import { InvoiceRequest } from '../../../../src/dto/createInvoiceRequest';
2
+ /**
3
+ * baseDomain - The base domain for the API
4
+ * appId - The application ID
5
+ * appClientId - The application client ID
6
+ * bearerToken - The bearer token obtained at the authentication stage
7
+ * itemId - The item ID
8
+ */
9
+ interface CreateInvoiceParams {
10
+ readonly baseDomain: string;
11
+ readonly appId: string;
12
+ readonly appClientId: string;
13
+ readonly bearerToken: string;
14
+ readonly invoice: InvoiceRequest;
15
+ }
16
+ /**
17
+ * Create an invoice
18
+ * @param params as defined in the interface
19
+ * @returns {Promise<string>} - The external ID of the created invoice
20
+ */
21
+ export declare function apiCreateInvoice(params: CreateInvoiceParams): Promise<string>;
22
+ export {};
@@ -0,0 +1,9 @@
1
+ interface DeleteInvoiceParams {
2
+ readonly baseDomain: string;
3
+ readonly appId: string;
4
+ readonly appClientId: string;
5
+ readonly bearerToken: string;
6
+ readonly invoiceId: string;
7
+ }
8
+ export declare function apiDeleteInvoice(params: DeleteInvoiceParams): Promise<void>;
9
+ export {};
@@ -0,0 +1,8 @@
1
+ interface DownloadPdfParams {
2
+ readonly baseDomain: string;
3
+ readonly appId: string;
4
+ readonly bearerToken: string;
5
+ readonly invoiceId: string;
6
+ }
7
+ export declare function apiDownloadInvoicePdf(params: DownloadPdfParams): Promise<Buffer>;
8
+ export {};
@@ -0,0 +1,22 @@
1
+ import { AllInvoicesResponse } from '../../../../src/dto/allInvoicesResponse';
2
+ import { InvoiceFilterParams } from '../../../../src/dto/invoices';
3
+ /**
4
+ * baseDomain - The base domain for the API
5
+ * appId - The application ID
6
+ * appClientId - The application client ID
7
+ * bearerToken - The bearer token obtained at the authentication stage
8
+ * filterParams - Optional filter parameters
9
+ */
10
+ interface GetAllInvoicesParams {
11
+ readonly baseDomain: string;
12
+ readonly appId: string;
13
+ readonly appClientId: string;
14
+ readonly bearerToken: string;
15
+ readonly filterParams?: InvoiceFilterParams;
16
+ }
17
+ /**
18
+ * Get all invoices
19
+ * @param params - As defined in the interface
20
+ */
21
+ export declare function apiGetAllInvoices(params: GetAllInvoicesParams): Promise<AllInvoicesResponse>;
22
+ export {};
@@ -0,0 +1,24 @@
1
+ import { SendInvoiceEmailParams } from '../../../../src/dto/invoices';
2
+ /**
3
+ * appId - The application ID
4
+ * baseDomain - The base domain for the API
5
+ * bearerToken - The bearer token obtained at the authentication stage
6
+ * clientMail - The client email (for backward compatibility)
7
+ * emailParams - Extended email parameters with CC/BCC support
8
+ * invoiceId - The invoice ID
9
+ */
10
+ interface SendInvoiceParams {
11
+ readonly appId: string;
12
+ readonly baseDomain: string;
13
+ readonly bearerToken: string;
14
+ readonly clientMail?: string;
15
+ readonly emailParams?: SendInvoiceEmailParams;
16
+ readonly invoiceId: string;
17
+ }
18
+ /**
19
+ * Send an invoice by external ID
20
+ * @param params - as defined in the interface
21
+ * @returns {Promise<string>} - Returns 'SENT' on success
22
+ */
23
+ export declare function apiSendInvoice(params: SendInvoiceParams): Promise<string>;
24
+ export {};
@@ -0,0 +1,9 @@
1
+ interface SubmitEfacturaParams {
2
+ readonly baseDomain: string;
3
+ readonly appId: string;
4
+ readonly appClientId: string;
5
+ readonly bearerToken: string;
6
+ readonly invoiceId: string;
7
+ }
8
+ export declare function apiSubmitEfactura(params: SubmitEfacturaParams): Promise<string>;
9
+ export {};
@@ -0,0 +1,11 @@
1
+ import { InvoiceRequestV2 } from '../../../../src/dto/invoices';
2
+ interface UpdateInvoiceParams {
3
+ readonly baseDomain: string;
4
+ readonly appId: string;
5
+ readonly appClientId: string;
6
+ readonly bearerToken: string;
7
+ readonly invoiceId: string;
8
+ readonly invoice: InvoiceRequestV2;
9
+ }
10
+ export declare function apiUpdateInvoice(params: UpdateInvoiceParams): Promise<void>;
11
+ export {};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * appId - The application ID
3
+ * appClientId - The application client ID
4
+ * baseDomain - The base domain for the API
5
+ * bearerToken - The bearer token obtained at the authentication stage
6
+ * invoiceId - The invoice ID
7
+ */
8
+ interface ValidateInvoiceParams {
9
+ readonly appId: string;
10
+ readonly appClientId: string;
11
+ readonly baseDomain: string;
12
+ readonly bearerToken: string;
13
+ readonly invoiceId: string;
14
+ }
15
+ /**
16
+ * Validate an invoice by external ID
17
+ * @param params - as defined in the interface
18
+ * @returns {Promise<string>} - Returns 'VALIDATED' on success
19
+ */
20
+ export declare function apiValidateInvoice(params: ValidateInvoiceParams): Promise<string>;
21
+ export {};
@@ -0,0 +1,22 @@
1
+ import { InvoiceResponse } from '../../../../src/dto/invoiceResponse';
2
+ /**
3
+ * baseDomain - The base domain for the API
4
+ * appId - The application ID
5
+ * appClientId - The application client ID
6
+ * bearerToken - The bearer token obtained at the authentication stage
7
+ * invoiceId - The invoice ID
8
+ */
9
+ interface ViewInvoiceParams {
10
+ readonly baseDomain: string;
11
+ readonly appId: string;
12
+ readonly appClientId: string;
13
+ readonly bearerToken: string;
14
+ readonly invoiceId: string;
15
+ }
16
+ /**
17
+ * Get an invoice by external ID
18
+ * @param params as defined in the interface
19
+ * @returns {Promise<InvoiceResponse>} - The invoice details
20
+ */
21
+ export declare function apiGetInvoiceByExternalId(params: ViewInvoiceParams): Promise<InvoiceResponse>;
22
+ export {};
@@ -0,0 +1,10 @@
1
+ import { CreateItemRequest } from '../../../../src/dto/items';
2
+ interface CreateItemParams {
3
+ readonly baseDomain: string;
4
+ readonly appId: string;
5
+ readonly appClientId: string;
6
+ readonly bearerToken: string;
7
+ readonly item: CreateItemRequest;
8
+ }
9
+ export declare function apiCreateItem(params: CreateItemParams): Promise<string>;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ import { AllItemsResponse, ItemFilterParams } from '../../../../src/dto/items';
2
+ interface GetAllItemsParams {
3
+ readonly baseDomain: string;
4
+ readonly appId: string;
5
+ readonly appClientId: string;
6
+ readonly bearerToken: string;
7
+ readonly filterParams?: ItemFilterParams;
8
+ }
9
+ export declare function apiGetAllItems(params: GetAllItemsParams): Promise<AllItemsResponse>;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ import { ItemResponse } from '../../../../src/dto/items';
2
+ interface GetItemByIdParams {
3
+ readonly baseDomain: string;
4
+ readonly appId: string;
5
+ readonly appClientId: string;
6
+ readonly bearerToken: string;
7
+ readonly itemId: string;
8
+ }
9
+ export declare function apiGetItemById(params: GetItemByIdParams): Promise<ItemResponse>;
10
+ export {};
@@ -0,0 +1,5 @@
1
+ export { apiGetAllItems } from './getAll';
2
+ export { apiGetItemById } from './getById';
3
+ export { apiCreateItem } from './create';
4
+ export { apiUpdateItem } from './update';
5
+ export { apiPatchItem } from './patch';
@@ -0,0 +1,11 @@
1
+ import { PatchItemRequest } from '../../../../src/dto/items';
2
+ interface PatchItemParams {
3
+ readonly baseDomain: string;
4
+ readonly appId: string;
5
+ readonly appClientId: string;
6
+ readonly bearerToken: string;
7
+ readonly itemId: string;
8
+ readonly item: PatchItemRequest;
9
+ }
10
+ export declare function apiPatchItem(params: PatchItemParams): Promise<void>;
11
+ export {};