storno-cli 1.0.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 (188) hide show
  1. package/LICENSE +53 -0
  2. package/README.md +257 -0
  3. package/TOOLS.md +3309 -0
  4. package/dist/client.d.ts +42 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +162 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/config.d.ts +22 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +30 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +37 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +172 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/tools/accounting-export.d.ts +14 -0
  17. package/dist/tools/accounting-export.d.ts.map +1 -0
  18. package/dist/tools/accounting-export.js +97 -0
  19. package/dist/tools/accounting-export.js.map +1 -0
  20. package/dist/tools/admin.d.ts +8 -0
  21. package/dist/tools/admin.d.ts.map +1 -0
  22. package/dist/tools/admin.js +98 -0
  23. package/dist/tools/admin.js.map +1 -0
  24. package/dist/tools/anaf.d.ts +8 -0
  25. package/dist/tools/anaf.d.ts.map +1 -0
  26. package/dist/tools/anaf.js +115 -0
  27. package/dist/tools/anaf.js.map +1 -0
  28. package/dist/tools/api-keys.d.ts +8 -0
  29. package/dist/tools/api-keys.d.ts.map +1 -0
  30. package/dist/tools/api-keys.js +29 -0
  31. package/dist/tools/api-keys.js.map +1 -0
  32. package/dist/tools/auth.d.ts +8 -0
  33. package/dist/tools/auth.d.ts.map +1 -0
  34. package/dist/tools/auth.js +187 -0
  35. package/dist/tools/auth.js.map +1 -0
  36. package/dist/tools/backup.d.ts +62 -0
  37. package/dist/tools/backup.d.ts.map +1 -0
  38. package/dist/tools/backup.js +167 -0
  39. package/dist/tools/backup.js.map +1 -0
  40. package/dist/tools/bank-accounts.d.ts +14 -0
  41. package/dist/tools/bank-accounts.d.ts.map +1 -0
  42. package/dist/tools/bank-accounts.js +140 -0
  43. package/dist/tools/bank-accounts.js.map +1 -0
  44. package/dist/tools/borderou.d.ts +14 -0
  45. package/dist/tools/borderou.d.ts.map +1 -0
  46. package/dist/tools/borderou.js +233 -0
  47. package/dist/tools/borderou.js.map +1 -0
  48. package/dist/tools/clients.d.ts +14 -0
  49. package/dist/tools/clients.d.ts.map +1 -0
  50. package/dist/tools/clients.js +353 -0
  51. package/dist/tools/clients.js.map +1 -0
  52. package/dist/tools/companies.d.ts +8 -0
  53. package/dist/tools/companies.d.ts.map +1 -0
  54. package/dist/tools/companies.js +211 -0
  55. package/dist/tools/companies.js.map +1 -0
  56. package/dist/tools/company-registry.d.ts +31 -0
  57. package/dist/tools/company-registry.d.ts.map +1 -0
  58. package/dist/tools/company-registry.js +51 -0
  59. package/dist/tools/company-registry.js.map +1 -0
  60. package/dist/tools/cpv-codes.d.ts +17 -0
  61. package/dist/tools/cpv-codes.d.ts.map +1 -0
  62. package/dist/tools/cpv-codes.js +28 -0
  63. package/dist/tools/cpv-codes.js.map +1 -0
  64. package/dist/tools/dashboard.d.ts +23 -0
  65. package/dist/tools/dashboard.d.ts.map +1 -0
  66. package/dist/tools/dashboard.js +37 -0
  67. package/dist/tools/dashboard.js.map +1 -0
  68. package/dist/tools/defaults.d.ts +14 -0
  69. package/dist/tools/defaults.d.ts.map +1 -0
  70. package/dist/tools/defaults.js +29 -0
  71. package/dist/tools/defaults.js.map +1 -0
  72. package/dist/tools/delivery-notes.d.ts +185 -0
  73. package/dist/tools/delivery-notes.d.ts.map +1 -0
  74. package/dist/tools/delivery-notes.js +525 -0
  75. package/dist/tools/delivery-notes.js.map +1 -0
  76. package/dist/tools/document-series.d.ts +54 -0
  77. package/dist/tools/document-series.d.ts.map +1 -0
  78. package/dist/tools/document-series.js +171 -0
  79. package/dist/tools/document-series.js.map +1 -0
  80. package/dist/tools/efactura-messages.d.ts +34 -0
  81. package/dist/tools/efactura-messages.d.ts.map +1 -0
  82. package/dist/tools/efactura-messages.js +51 -0
  83. package/dist/tools/efactura-messages.js.map +1 -0
  84. package/dist/tools/einvoice.d.ts +8 -0
  85. package/dist/tools/einvoice.d.ts.map +1 -0
  86. package/dist/tools/einvoice.js +170 -0
  87. package/dist/tools/einvoice.js.map +1 -0
  88. package/dist/tools/email-templates.d.ts +14 -0
  89. package/dist/tools/email-templates.d.ts.map +1 -0
  90. package/dist/tools/email-templates.js +104 -0
  91. package/dist/tools/email-templates.js.map +1 -0
  92. package/dist/tools/exchange-rates.d.ts +14 -0
  93. package/dist/tools/exchange-rates.d.ts.map +1 -0
  94. package/dist/tools/exchange-rates.js +55 -0
  95. package/dist/tools/exchange-rates.js.map +1 -0
  96. package/dist/tools/exports.d.ts +14 -0
  97. package/dist/tools/exports.d.ts.map +1 -0
  98. package/dist/tools/exports.js +25 -0
  99. package/dist/tools/exports.js.map +1 -0
  100. package/dist/tools/import.d.ts +14 -0
  101. package/dist/tools/import.d.ts.map +1 -0
  102. package/dist/tools/import.js +221 -0
  103. package/dist/tools/import.js.map +1 -0
  104. package/dist/tools/invitations.d.ts +8 -0
  105. package/dist/tools/invitations.d.ts.map +1 -0
  106. package/dist/tools/invitations.js +70 -0
  107. package/dist/tools/invitations.js.map +1 -0
  108. package/dist/tools/invoices.d.ts +14 -0
  109. package/dist/tools/invoices.d.ts.map +1 -0
  110. package/dist/tools/invoices.js +1191 -0
  111. package/dist/tools/invoices.js.map +1 -0
  112. package/dist/tools/licensing.d.ts +8 -0
  113. package/dist/tools/licensing.d.ts.map +1 -0
  114. package/dist/tools/licensing.js +90 -0
  115. package/dist/tools/licensing.js.map +1 -0
  116. package/dist/tools/members.d.ts +8 -0
  117. package/dist/tools/members.d.ts.map +1 -0
  118. package/dist/tools/members.js +79 -0
  119. package/dist/tools/members.js.map +1 -0
  120. package/dist/tools/nc-codes.d.ts +17 -0
  121. package/dist/tools/nc-codes.d.ts.map +1 -0
  122. package/dist/tools/nc-codes.js +28 -0
  123. package/dist/tools/nc-codes.js.map +1 -0
  124. package/dist/tools/notifications.d.ts +8 -0
  125. package/dist/tools/notifications.d.ts.map +1 -0
  126. package/dist/tools/notifications.js +111 -0
  127. package/dist/tools/notifications.js.map +1 -0
  128. package/dist/tools/oauth2-clients.d.ts +8 -0
  129. package/dist/tools/oauth2-clients.d.ts.map +1 -0
  130. package/dist/tools/oauth2-clients.js +147 -0
  131. package/dist/tools/oauth2-clients.js.map +1 -0
  132. package/dist/tools/payments.d.ts +17 -0
  133. package/dist/tools/payments.d.ts.map +1 -0
  134. package/dist/tools/payments.js +109 -0
  135. package/dist/tools/payments.js.map +1 -0
  136. package/dist/tools/pdf-template-config.d.ts +14 -0
  137. package/dist/tools/pdf-template-config.d.ts.map +1 -0
  138. package/dist/tools/pdf-template-config.js +131 -0
  139. package/dist/tools/pdf-template-config.js.map +1 -0
  140. package/dist/tools/products.d.ts +40 -0
  141. package/dist/tools/products.d.ts.map +1 -0
  142. package/dist/tools/products.js +73 -0
  143. package/dist/tools/products.js.map +1 -0
  144. package/dist/tools/proforma-invoices.d.ts +198 -0
  145. package/dist/tools/proforma-invoices.d.ts.map +1 -0
  146. package/dist/tools/proforma-invoices.js +378 -0
  147. package/dist/tools/proforma-invoices.js.map +1 -0
  148. package/dist/tools/receipts.d.ts +166 -0
  149. package/dist/tools/receipts.d.ts.map +1 -0
  150. package/dist/tools/receipts.js +397 -0
  151. package/dist/tools/receipts.js.map +1 -0
  152. package/dist/tools/recurring-invoices.d.ts +187 -0
  153. package/dist/tools/recurring-invoices.d.ts.map +1 -0
  154. package/dist/tools/recurring-invoices.js +305 -0
  155. package/dist/tools/recurring-invoices.js.map +1 -0
  156. package/dist/tools/reports.d.ts +48 -0
  157. package/dist/tools/reports.d.ts.map +1 -0
  158. package/dist/tools/reports.js +200 -0
  159. package/dist/tools/reports.js.map +1 -0
  160. package/dist/tools/storage-config.d.ts +8 -0
  161. package/dist/tools/storage-config.d.ts.map +1 -0
  162. package/dist/tools/storage-config.js +117 -0
  163. package/dist/tools/storage-config.js.map +1 -0
  164. package/dist/tools/suppliers.d.ts +14 -0
  165. package/dist/tools/suppliers.d.ts.map +1 -0
  166. package/dist/tools/suppliers.js +205 -0
  167. package/dist/tools/suppliers.js.map +1 -0
  168. package/dist/tools/system.d.ts +8 -0
  169. package/dist/tools/system.d.ts.map +1 -0
  170. package/dist/tools/system.js +24 -0
  171. package/dist/tools/system.js.map +1 -0
  172. package/dist/tools/vat-rates.d.ts +14 -0
  173. package/dist/tools/vat-rates.d.ts.map +1 -0
  174. package/dist/tools/vat-rates.js +145 -0
  175. package/dist/tools/vat-rates.js.map +1 -0
  176. package/dist/tools/webhooks.d.ts +8 -0
  177. package/dist/tools/webhooks.d.ts.map +1 -0
  178. package/dist/tools/webhooks.js +305 -0
  179. package/dist/tools/webhooks.js.map +1 -0
  180. package/dist/utils/errors.d.ts +18 -0
  181. package/dist/utils/errors.d.ts.map +1 -0
  182. package/dist/utils/errors.js +45 -0
  183. package/dist/utils/errors.js.map +1 -0
  184. package/dist/utils/pagination.d.ts +9 -0
  185. package/dist/utils/pagination.d.ts.map +1 -0
  186. package/dist/utils/pagination.js +10 -0
  187. package/dist/utils/pagination.js.map +1 -0
  188. package/package.json +52 -0
@@ -0,0 +1,167 @@
1
+ import { z } from 'zod';
2
+ import { apiRequest } from '../client.js';
3
+ import { formatResponse, notAuthenticated, noCompanySelected } from '../utils/errors.js';
4
+ import { getConfig } from '../config.js';
5
+ function getCompanyId(params) {
6
+ return params.companyId || getConfig().companyId;
7
+ }
8
+ export const tools = [
9
+ {
10
+ name: 'backup_create',
11
+ description: 'Create a new backup job for the active company. The backup is processed asynchronously and includes all company data (invoices, clients, products, settings). Optionally include uploaded files (PDFs, XMLs). Returns a job ID to check status.',
12
+ inputSchema: z.object({
13
+ includeFiles: z
14
+ .boolean()
15
+ .optional()
16
+ .describe('Include uploaded files (PDFs, XMLs) in backup (default: true)'),
17
+ companyId: z
18
+ .string()
19
+ .optional()
20
+ .describe('Company UUID override (uses active company if not set)'),
21
+ }),
22
+ handler: async (params) => {
23
+ if (!getConfig().token)
24
+ return notAuthenticated();
25
+ const companyId = getCompanyId(params);
26
+ if (!companyId)
27
+ return noCompanySelected();
28
+ const body = {};
29
+ if (params.includeFiles !== undefined)
30
+ body.includeFiles = params.includeFiles;
31
+ const result = await apiRequest('/api/v1/backup', {
32
+ method: 'POST',
33
+ companyId,
34
+ body,
35
+ });
36
+ return formatResponse(result);
37
+ },
38
+ },
39
+ {
40
+ name: 'backup_status',
41
+ description: 'Get the status of a backup job. Returns progress percentage, current step, and download URL when complete. Statuses: pending, processing, completed, failed.',
42
+ inputSchema: z.object({
43
+ id: z.string().describe('Backup job ID'),
44
+ companyId: z
45
+ .string()
46
+ .optional()
47
+ .describe('Company UUID override (uses active company if not set)'),
48
+ }),
49
+ handler: async (params) => {
50
+ if (!getConfig().token)
51
+ return notAuthenticated();
52
+ const companyId = getCompanyId(params);
53
+ if (!companyId)
54
+ return noCompanySelected();
55
+ const { id } = params;
56
+ const result = await apiRequest(`/api/v1/backup/${id}/status`, { companyId });
57
+ return formatResponse(result);
58
+ },
59
+ },
60
+ {
61
+ name: 'backup_download',
62
+ description: 'Download a completed backup as a ZIP file. Returns base64-encoded binary data. The backup must be in "completed" status.',
63
+ inputSchema: z.object({
64
+ id: z.string().describe('Backup job ID'),
65
+ companyId: z
66
+ .string()
67
+ .optional()
68
+ .describe('Company UUID override (uses active company if not set)'),
69
+ }),
70
+ handler: async (params) => {
71
+ if (!getConfig().token)
72
+ return notAuthenticated();
73
+ const companyId = getCompanyId(params);
74
+ if (!companyId)
75
+ return noCompanySelected();
76
+ const { id } = params;
77
+ const result = await apiRequest(`/api/v1/backup/${id}/download`, {
78
+ companyId,
79
+ binary: true,
80
+ });
81
+ return formatResponse(result);
82
+ },
83
+ },
84
+ {
85
+ name: 'backup_restore',
86
+ description: 'Upload a backup ZIP file to restore company data. The restore runs asynchronously. Use backup_restore_status to check progress. WARNING: if purgeExisting is true, all current company data will be deleted before restoring.',
87
+ inputSchema: z.object({
88
+ filePath: z.string().describe('Absolute path to the backup ZIP file to restore'),
89
+ purgeExisting: z
90
+ .boolean()
91
+ .optional()
92
+ .describe('Delete all existing company data before restoring (default: false)'),
93
+ companyId: z
94
+ .string()
95
+ .optional()
96
+ .describe('Company UUID override (uses active company if not set)'),
97
+ }),
98
+ handler: async (params) => {
99
+ if (!getConfig().token)
100
+ return notAuthenticated();
101
+ const companyId = getCompanyId(params);
102
+ if (!companyId)
103
+ return noCompanySelected();
104
+ const { filePath, purgeExisting } = params;
105
+ const formFields = {};
106
+ if (purgeExisting !== undefined)
107
+ formFields.purgeExisting = String(purgeExisting);
108
+ const result = await apiRequest('/api/v1/backup/restore', {
109
+ method: 'POST',
110
+ companyId,
111
+ filePath,
112
+ formFields,
113
+ });
114
+ return formatResponse(result);
115
+ },
116
+ },
117
+ {
118
+ name: 'backup_restore_status',
119
+ description: 'Get the status of a restore job. Returns progress percentage and current step. Same as backup_status but specifically for restore jobs.',
120
+ inputSchema: z.object({
121
+ id: z.string().describe('Restore job ID'),
122
+ companyId: z
123
+ .string()
124
+ .optional()
125
+ .describe('Company UUID override (uses active company if not set)'),
126
+ }),
127
+ handler: async (params) => {
128
+ if (!getConfig().token)
129
+ return notAuthenticated();
130
+ const companyId = getCompanyId(params);
131
+ if (!companyId)
132
+ return noCompanySelected();
133
+ const { id } = params;
134
+ const result = await apiRequest(`/api/v1/backup/restore/${id}/status`, { companyId });
135
+ return formatResponse(result);
136
+ },
137
+ },
138
+ {
139
+ name: 'backup_history',
140
+ description: 'List recent backup jobs for the active company. Returns job ID, status, creation date, file size, and whether files were included.',
141
+ inputSchema: z.object({
142
+ limit: z
143
+ .number()
144
+ .int()
145
+ .optional()
146
+ .describe('Number of results (max 50, default: 20)'),
147
+ companyId: z
148
+ .string()
149
+ .optional()
150
+ .describe('Company UUID override (uses active company if not set)'),
151
+ }),
152
+ handler: async (params) => {
153
+ if (!getConfig().token)
154
+ return notAuthenticated();
155
+ const companyId = getCompanyId(params);
156
+ if (!companyId)
157
+ return noCompanySelected();
158
+ const { limit } = params;
159
+ const result = await apiRequest('/api/v1/backup/history', {
160
+ companyId,
161
+ query: { limit },
162
+ });
163
+ return formatResponse(result);
164
+ },
165
+ },
166
+ ];
167
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/tools/backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const tools: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{
6
+ companyId: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ companyId?: string | undefined;
9
+ }, {
10
+ companyId?: string | undefined;
11
+ }>;
12
+ handler: (params: Record<string, unknown>) => Promise<string>;
13
+ }[];
14
+ //# sourceMappingURL=bank-accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bank-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/bank-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,KAAK;;;;;;;;;;sBAWU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;GAgIpE,CAAC"}
@@ -0,0 +1,140 @@
1
+ import { z } from 'zod';
2
+ import { apiRequest } from '../client.js';
3
+ import { formatResponse, notAuthenticated, noCompanySelected } from '../utils/errors.js';
4
+ import { getConfig } from '../config.js';
5
+ function getCompanyId(params) {
6
+ return params.companyId || getConfig().companyId;
7
+ }
8
+ export const tools = [
9
+ {
10
+ name: 'bank_accounts_list',
11
+ description: 'List all bank accounts configured for the active company. Returns IBAN, bank name, currency, and which account is the default per currency. Bank accounts appear on invoices as payment instructions.',
12
+ inputSchema: z.object({
13
+ companyId: z
14
+ .string()
15
+ .optional()
16
+ .describe('Company UUID override (uses active company if not set)'),
17
+ }),
18
+ handler: async (params) => {
19
+ if (!getConfig().token)
20
+ return notAuthenticated();
21
+ const companyId = getCompanyId(params);
22
+ if (!companyId)
23
+ return noCompanySelected();
24
+ const result = await apiRequest('/api/v1/bank-accounts', { companyId });
25
+ return formatResponse(result);
26
+ },
27
+ },
28
+ {
29
+ name: 'bank_accounts_create',
30
+ description: 'Add a new bank account to the active company. IBAN must be in valid format and unique within the company. If isDefault is true, any existing default account for that currency is demoted. The first account for a currency automatically becomes the default.',
31
+ inputSchema: z.object({
32
+ companyId: z
33
+ .string()
34
+ .optional()
35
+ .describe('Company UUID override (uses active company if not set)'),
36
+ iban: z
37
+ .string()
38
+ .describe('International Bank Account Number in valid IBAN format (e.g., "RO49AAAA1B31007593840000")'),
39
+ bankName: z
40
+ .string()
41
+ .optional()
42
+ .describe('Name of the bank (e.g., "BCR", "Banca Transilvania", "ING Bank")'),
43
+ currency: z
44
+ .string()
45
+ .optional()
46
+ .describe('Currency code ISO 4217 (default: "RON"). Use "EUR" for Euro accounts.'),
47
+ isDefault: z
48
+ .boolean()
49
+ .optional()
50
+ .describe('Set as default account for this currency (default: false)'),
51
+ }),
52
+ handler: async (params) => {
53
+ if (!getConfig().token)
54
+ return notAuthenticated();
55
+ const companyId = getCompanyId(params);
56
+ if (!companyId)
57
+ return noCompanySelected();
58
+ const { companyId: _cid, ...rest } = params;
59
+ const body = {};
60
+ const fields = ['iban', 'bankName', 'currency', 'isDefault'];
61
+ for (const field of fields) {
62
+ if (rest[field] !== undefined)
63
+ body[field] = rest[field];
64
+ }
65
+ const result = await apiRequest('/api/v1/bank-accounts', {
66
+ method: 'POST',
67
+ companyId,
68
+ body,
69
+ });
70
+ return formatResponse(result);
71
+ },
72
+ },
73
+ {
74
+ name: 'bank_accounts_update',
75
+ description: 'Update an existing bank account. Can update IBAN, bank name, currency, or default status. If setting isDefault to true, any existing default for that currency is demoted. At least one field must be provided.',
76
+ inputSchema: z.object({
77
+ uuid: z.string().describe('Bank account UUID to update'),
78
+ companyId: z
79
+ .string()
80
+ .optional()
81
+ .describe('Company UUID override (uses active company if not set)'),
82
+ iban: z.string().optional().describe('New IBAN (must be valid and unique within company)'),
83
+ bankName: z
84
+ .string()
85
+ .nullable()
86
+ .optional()
87
+ .describe('Bank name (pass null to clear)'),
88
+ currency: z.string().optional().describe('Currency code ISO 4217'),
89
+ isDefault: z
90
+ .boolean()
91
+ .optional()
92
+ .describe('Set as default account for this currency'),
93
+ }),
94
+ handler: async (params) => {
95
+ if (!getConfig().token)
96
+ return notAuthenticated();
97
+ const companyId = getCompanyId(params);
98
+ if (!companyId)
99
+ return noCompanySelected();
100
+ const { uuid, companyId: _cid, ...rest } = params;
101
+ const body = {};
102
+ const fields = ['iban', 'bankName', 'currency', 'isDefault'];
103
+ for (const field of fields) {
104
+ if (rest[field] !== undefined)
105
+ body[field] = rest[field];
106
+ }
107
+ const result = await apiRequest(`/api/v1/bank-accounts/${uuid}`, {
108
+ method: 'PATCH',
109
+ companyId,
110
+ body,
111
+ });
112
+ return formatResponse(result);
113
+ },
114
+ },
115
+ {
116
+ name: 'bank_accounts_delete',
117
+ description: 'Permanently delete a bank account. Cannot delete the last bank account for a company or the default account (set another as default first). Existing invoices that referenced this account retain the IBAN in their stored data.',
118
+ inputSchema: z.object({
119
+ uuid: z.string().describe('Bank account UUID to delete'),
120
+ companyId: z
121
+ .string()
122
+ .optional()
123
+ .describe('Company UUID override (uses active company if not set)'),
124
+ }),
125
+ handler: async (params) => {
126
+ if (!getConfig().token)
127
+ return notAuthenticated();
128
+ const companyId = getCompanyId(params);
129
+ if (!companyId)
130
+ return noCompanySelected();
131
+ const { uuid } = params;
132
+ const result = await apiRequest(`/api/v1/bank-accounts/${uuid}`, {
133
+ method: 'DELETE',
134
+ companyId,
135
+ });
136
+ return formatResponse(result);
137
+ },
138
+ },
139
+ ];
140
+ //# sourceMappingURL=bank-accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bank-accounts.js","sourceRoot":"","sources":["../../src/tools/bank-accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const tools: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{
6
+ companyId: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ companyId?: string | undefined;
9
+ }, {
10
+ companyId?: string | undefined;
11
+ }>;
12
+ handler: (params: Record<string, unknown>) => Promise<string>;
13
+ }[];
14
+ //# sourceMappingURL=borderou.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderou.d.ts","sourceRoot":"","sources":["../../src/tools/borderou.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,KAAK;;;;;;;;;;sBAWU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;GA6OpE,CAAC"}
@@ -0,0 +1,233 @@
1
+ import { z } from 'zod';
2
+ import { apiRequest } from '../client.js';
3
+ import { formatResponse, notAuthenticated, noCompanySelected } from '../utils/errors.js';
4
+ import { getConfig } from '../config.js';
5
+ function getCompanyId(params) {
6
+ return params.companyId || getConfig().companyId;
7
+ }
8
+ export const tools = [
9
+ {
10
+ name: 'borderou_providers',
11
+ description: 'List available borderou (bank statement) providers. Returns supported banks and file formats for bank statement import and reconciliation.',
12
+ inputSchema: z.object({
13
+ companyId: z
14
+ .string()
15
+ .optional()
16
+ .describe('Company UUID override (uses active company if not set)'),
17
+ }),
18
+ handler: async (params) => {
19
+ if (!getConfig().token)
20
+ return notAuthenticated();
21
+ const companyId = getCompanyId(params);
22
+ if (!companyId)
23
+ return noCompanySelected();
24
+ const result = await apiRequest('/api/v1/borderou/providers', { companyId });
25
+ return formatResponse(result);
26
+ },
27
+ },
28
+ {
29
+ name: 'borderou_upload',
30
+ description: 'Upload a bank statement or borderou file (CSV, XLSX, XLS) for transaction import and reconciliation. Parses the file, creates transactions, and runs automatic matching against existing invoices.',
31
+ inputSchema: z.object({
32
+ filePath: z.string().describe('Absolute path to the file to upload (CSV, XLSX, or XLS)'),
33
+ sourceType: z
34
+ .enum(['borderou', 'bank_statement'])
35
+ .describe('Type of upload: "borderou" for payment lists, "bank_statement" for bank exports'),
36
+ provider: z.string().describe('Bank or provider name (from borderou_providers)'),
37
+ currency: z.string().optional().describe('Currency code (default: RON)'),
38
+ bordereauNumber: z.string().optional().describe('Borderou reference number'),
39
+ bankAccountId: z.string().optional().describe('Bank account UUID (for bank_statement type)'),
40
+ companyId: z
41
+ .string()
42
+ .optional()
43
+ .describe('Company UUID override (uses active company if not set)'),
44
+ }),
45
+ handler: async (params) => {
46
+ if (!getConfig().token)
47
+ return notAuthenticated();
48
+ const companyId = getCompanyId(params);
49
+ if (!companyId)
50
+ return noCompanySelected();
51
+ const { filePath, sourceType, provider, currency, bordereauNumber, bankAccountId } = params;
52
+ const formFields = { sourceType, provider };
53
+ if (currency)
54
+ formFields.currency = currency;
55
+ if (bordereauNumber)
56
+ formFields.bordereauNumber = bordereauNumber;
57
+ if (bankAccountId)
58
+ formFields.bankAccountId = bankAccountId;
59
+ const result = await apiRequest('/api/v1/borderou/upload', {
60
+ method: 'POST',
61
+ companyId,
62
+ filePath,
63
+ formFields,
64
+ });
65
+ return formatResponse(result);
66
+ },
67
+ },
68
+ {
69
+ name: 'borderou_transactions',
70
+ description: 'List borderou transactions with pagination. Returns imported bank statement transactions with matching status, amounts, and linked invoice/proforma references.',
71
+ inputSchema: z.object({
72
+ page: z.number().int().optional().describe('Page number (default: 1)'),
73
+ limit: z.number().int().optional().describe('Items per page (default: 20)'),
74
+ companyId: z
75
+ .string()
76
+ .optional()
77
+ .describe('Company UUID override (uses active company if not set)'),
78
+ }),
79
+ handler: async (params) => {
80
+ if (!getConfig().token)
81
+ return notAuthenticated();
82
+ const companyId = getCompanyId(params);
83
+ if (!companyId)
84
+ return noCompanySelected();
85
+ const { page, limit } = params;
86
+ const result = await apiRequest('/api/v1/borderou/transactions', {
87
+ companyId,
88
+ query: { page, limit },
89
+ });
90
+ return formatResponse(result);
91
+ },
92
+ },
93
+ {
94
+ name: 'borderou_transaction_get',
95
+ description: 'Get detailed information about a specific borderou transaction including matched invoice/proforma details.',
96
+ inputSchema: z.object({
97
+ id: z.string().describe('Transaction ID'),
98
+ companyId: z
99
+ .string()
100
+ .optional()
101
+ .describe('Company UUID override (uses active company if not set)'),
102
+ }),
103
+ handler: async (params) => {
104
+ if (!getConfig().token)
105
+ return notAuthenticated();
106
+ const companyId = getCompanyId(params);
107
+ if (!companyId)
108
+ return noCompanySelected();
109
+ const { id } = params;
110
+ const result = await apiRequest(`/api/v1/borderou/transactions/${id}`, { companyId });
111
+ return formatResponse(result);
112
+ },
113
+ },
114
+ {
115
+ name: 'borderou_transaction_update',
116
+ description: 'Update a borderou transaction match. Link or unlink the transaction to an invoice or proforma invoice for reconciliation.',
117
+ inputSchema: z.object({
118
+ id: z.string().describe('Transaction ID'),
119
+ clientId: z.string().optional().describe('Client UUID to match'),
120
+ invoiceId: z.string().optional().describe('Invoice UUID to match'),
121
+ proformaInvoiceId: z.string().optional().describe('Proforma invoice UUID to match'),
122
+ amount: z.number().optional().describe('Override matched amount'),
123
+ documentType: z
124
+ .enum(['invoice', 'proforma'])
125
+ .optional()
126
+ .describe('Document type for matching'),
127
+ companyId: z
128
+ .string()
129
+ .optional()
130
+ .describe('Company UUID override (uses active company if not set)'),
131
+ }),
132
+ handler: async (params) => {
133
+ if (!getConfig().token)
134
+ return notAuthenticated();
135
+ const companyId = getCompanyId(params);
136
+ if (!companyId)
137
+ return noCompanySelected();
138
+ const { id, companyId: _cid, ...rest } = params;
139
+ const body = {};
140
+ for (const [key, value] of Object.entries(rest)) {
141
+ if (value !== undefined)
142
+ body[key] = value;
143
+ }
144
+ const result = await apiRequest(`/api/v1/borderou/transactions/${id}`, {
145
+ method: 'PUT',
146
+ companyId,
147
+ body,
148
+ });
149
+ return formatResponse(result);
150
+ },
151
+ },
152
+ {
153
+ name: 'borderou_transaction_available_invoices',
154
+ description: 'Get invoices or proforma invoices available to match against a borderou transaction. Search by number, client name, or amount.',
155
+ inputSchema: z.object({
156
+ id: z.string().describe('Transaction ID'),
157
+ search: z.string().optional().describe('Search by invoice number, client name, or amount'),
158
+ type: z
159
+ .enum(['invoice', 'proforma'])
160
+ .optional()
161
+ .describe('Filter by document type (default: both)'),
162
+ companyId: z
163
+ .string()
164
+ .optional()
165
+ .describe('Company UUID override (uses active company if not set)'),
166
+ }),
167
+ handler: async (params) => {
168
+ if (!getConfig().token)
169
+ return notAuthenticated();
170
+ const companyId = getCompanyId(params);
171
+ if (!companyId)
172
+ return noCompanySelected();
173
+ const { id, search, type } = params;
174
+ const result = await apiRequest(`/api/v1/borderou/transactions/${id}/available-invoices`, { companyId, query: { search, type } });
175
+ return formatResponse(result);
176
+ },
177
+ },
178
+ {
179
+ name: 'borderou_transactions_save',
180
+ description: 'Save and persist selected borderou transaction matches. Creates payment records for matched transactions and updates invoice payment status.',
181
+ inputSchema: z.object({
182
+ transactionIds: z
183
+ .array(z.string())
184
+ .describe('Array of transaction IDs to save'),
185
+ companyId: z
186
+ .string()
187
+ .optional()
188
+ .describe('Company UUID override (uses active company if not set)'),
189
+ }),
190
+ handler: async (params) => {
191
+ if (!getConfig().token)
192
+ return notAuthenticated();
193
+ const companyId = getCompanyId(params);
194
+ if (!companyId)
195
+ return noCompanySelected();
196
+ const { transactionIds } = params;
197
+ const result = await apiRequest('/api/v1/borderou/transactions/save', {
198
+ method: 'POST',
199
+ companyId,
200
+ body: { transactionIds },
201
+ });
202
+ return formatResponse(result);
203
+ },
204
+ },
205
+ {
206
+ name: 'borderou_transactions_rematch',
207
+ description: 'Re-run the automatic matching algorithm on selected borderou transactions. Useful after adding new invoices or updating client data.',
208
+ inputSchema: z.object({
209
+ transactionIds: z
210
+ .array(z.string())
211
+ .describe('Array of transaction IDs to re-match'),
212
+ companyId: z
213
+ .string()
214
+ .optional()
215
+ .describe('Company UUID override (uses active company if not set)'),
216
+ }),
217
+ handler: async (params) => {
218
+ if (!getConfig().token)
219
+ return notAuthenticated();
220
+ const companyId = getCompanyId(params);
221
+ if (!companyId)
222
+ return noCompanySelected();
223
+ const { transactionIds } = params;
224
+ const result = await apiRequest('/api/v1/borderou/transactions/re-match', {
225
+ method: 'POST',
226
+ companyId,
227
+ body: { transactionIds },
228
+ });
229
+ return formatResponse(result);
230
+ },
231
+ },
232
+ ];
233
+ //# sourceMappingURL=borderou.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderou.js","sourceRoot":"","sources":["../../src/tools/borderou.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const tools: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{
6
+ companyId: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ companyId?: string | undefined;
9
+ }, {
10
+ companyId?: string | undefined;
11
+ }>;
12
+ handler: (params: Record<string, unknown>) => Promise<string>;
13
+ }[];
14
+ //# sourceMappingURL=clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/tools/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,KAAK;;;;;;;;;;sBAsUU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;GAkCpE,CAAC"}