@aderis-erp/cli 1.0.3 → 1.0.4

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 (169) hide show
  1. package/README.md +6 -0
  2. package/dist/commands/access-groups 3.d.ts +40 -0
  3. package/dist/commands/access-groups 3.js +1072 -0
  4. package/dist/commands/access-groups.d.ts +1 -0
  5. package/dist/commands/access-groups.js +79 -23
  6. package/dist/commands/account-transactions.d.ts +1 -0
  7. package/dist/commands/account-transactions.js +91 -35
  8. package/dist/commands/accounts 2.d.ts +41 -0
  9. package/dist/commands/accounts 2.js +1078 -0
  10. package/dist/commands/accounts.d.ts +1 -0
  11. package/dist/commands/accounts.js +84 -28
  12. package/dist/commands/agent-runs.d.ts +1 -0
  13. package/dist/commands/agent-runs.js +80 -22
  14. package/dist/commands/async-endpoints-internal 3.d.ts +40 -0
  15. package/dist/commands/async-endpoints-internal 3.js +1062 -0
  16. package/dist/commands/async-endpoints-internal.d.ts +1 -0
  17. package/dist/commands/async-endpoints-internal.js +77 -21
  18. package/dist/commands/audit-log 3.d.ts +40 -0
  19. package/dist/commands/audit-log 3.js +1066 -0
  20. package/dist/commands/audit-log.d.ts +1 -0
  21. package/dist/commands/audit-log.js +77 -21
  22. package/dist/commands/bank-accounts.d.ts +1 -0
  23. package/dist/commands/bank-accounts.js +91 -35
  24. package/dist/commands/bank-integrations.d.ts +1 -0
  25. package/dist/commands/bank-integrations.js +92 -36
  26. package/dist/commands/business-partners 3.d.ts +41 -0
  27. package/dist/commands/business-partners 3.js +1078 -0
  28. package/dist/commands/business-partners---contacts 3.d.ts +42 -0
  29. package/dist/commands/business-partners---contacts 3.js +1072 -0
  30. package/dist/commands/business-partners---contacts.d.ts +1 -0
  31. package/dist/commands/business-partners---contacts.js +84 -28
  32. package/dist/commands/business-partners.d.ts +1 -0
  33. package/dist/commands/business-partners.js +84 -28
  34. package/dist/commands/credit-card-accounts 3.d.ts +42 -0
  35. package/dist/commands/credit-card-accounts 3.js +1084 -0
  36. package/dist/commands/credit-card-accounts.d.ts +1 -0
  37. package/dist/commands/credit-card-accounts.js +89 -33
  38. package/dist/commands/documents.d.ts +1 -0
  39. package/dist/commands/documents.js +80 -24
  40. package/dist/commands/dunning-configs 3.d.ts +40 -0
  41. package/dist/commands/dunning-configs 3.js +1072 -0
  42. package/dist/commands/dunning-configs.d.ts +1 -0
  43. package/dist/commands/dunning-configs.js +79 -23
  44. package/dist/commands/dunning-reminders.d.ts +1 -0
  45. package/dist/commands/dunning-reminders.js +82 -26
  46. package/dist/commands/dunning-runs 3.d.ts +40 -0
  47. package/dist/commands/dunning-runs 3.js +1061 -0
  48. package/dist/commands/dunning-runs.d.ts +1 -0
  49. package/dist/commands/dunning-runs.js +75 -19
  50. package/dist/commands/employees.d.ts +1 -0
  51. package/dist/commands/employees.js +106 -50
  52. package/dist/commands/event-processor-mappings 3.d.ts +40 -0
  53. package/dist/commands/event-processor-mappings 3.js +1071 -0
  54. package/dist/commands/event-processor-mappings.d.ts +1 -0
  55. package/dist/commands/event-processor-mappings.js +79 -23
  56. package/dist/commands/files-internal 3.d.ts +40 -0
  57. package/dist/commands/files-internal 3.js +1073 -0
  58. package/dist/commands/files-internal.d.ts +1 -0
  59. package/dist/commands/files-internal.js +83 -27
  60. package/dist/commands/health 3.d.ts +40 -0
  61. package/dist/commands/health 3.js +1067 -0
  62. package/dist/commands/health.d.ts +1 -0
  63. package/dist/commands/health.js +79 -23
  64. package/dist/commands/inbox 3.d.ts +40 -0
  65. package/dist/commands/inbox 3.js +1065 -0
  66. package/dist/commands/inbox.d.ts +1 -0
  67. package/dist/commands/inbox.js +79 -23
  68. package/dist/commands/integrations 3.d.ts +41 -0
  69. package/dist/commands/integrations 3.js +1067 -0
  70. package/dist/commands/integrations.d.ts +1 -0
  71. package/dist/commands/integrations.js +77 -21
  72. package/dist/commands/item-categories 3.d.ts +40 -0
  73. package/dist/commands/item-categories 3.js +1072 -0
  74. package/dist/commands/item-categories.d.ts +1 -0
  75. package/dist/commands/item-categories.js +79 -23
  76. package/dist/commands/items 3.d.ts +40 -0
  77. package/dist/commands/items 3.js +1072 -0
  78. package/dist/commands/items.d.ts +1 -0
  79. package/dist/commands/items.js +79 -23
  80. package/dist/commands/journal-lines.d.ts +1 -0
  81. package/dist/commands/journal-lines.js +75 -19
  82. package/dist/commands/journals 3.d.ts +42 -0
  83. package/dist/commands/journals 3.js +1088 -0
  84. package/dist/commands/journals.d.ts +1 -0
  85. package/dist/commands/journals.js +93 -37
  86. package/dist/commands/ledgers.d.ts +1 -0
  87. package/dist/commands/ledgers.js +90 -34
  88. package/dist/commands/office-locations 3.d.ts +40 -0
  89. package/dist/commands/office-locations 3.js +1072 -0
  90. package/dist/commands/office-locations.d.ts +1 -0
  91. package/dist/commands/office-locations.js +79 -23
  92. package/dist/commands/payment-method-ledger-mappings 3.d.ts +41 -0
  93. package/dist/commands/payment-method-ledger-mappings 3.js +1066 -0
  94. package/dist/commands/payment-method-ledger-mappings.d.ts +1 -0
  95. package/dist/commands/payment-method-ledger-mappings.js +79 -23
  96. package/dist/commands/payment-methods 3.d.ts +40 -0
  97. package/dist/commands/payment-methods 3.js +1072 -0
  98. package/dist/commands/payment-methods.d.ts +1 -0
  99. package/dist/commands/payment-methods.js +79 -23
  100. package/dist/commands/payment-runs 3.d.ts +42 -0
  101. package/dist/commands/payment-runs 3.js +1087 -0
  102. package/dist/commands/payment-runs.d.ts +1 -0
  103. package/dist/commands/payment-runs.js +92 -36
  104. package/dist/commands/payment-terms 3.d.ts +40 -0
  105. package/dist/commands/payment-terms 3.js +1073 -0
  106. package/dist/commands/payment-terms.d.ts +1 -0
  107. package/dist/commands/payment-terms.js +80 -24
  108. package/dist/commands/price-lists 3.d.ts +41 -0
  109. package/dist/commands/price-lists 3.js +1078 -0
  110. package/dist/commands/price-lists.d.ts +1 -0
  111. package/dist/commands/price-lists.js +84 -28
  112. package/dist/commands/processor-mappings 2.d.ts +40 -0
  113. package/dist/commands/processor-mappings 2.js +1070 -0
  114. package/dist/commands/processor-mappings.d.ts +1 -0
  115. package/dist/commands/processor-mappings.js +78 -22
  116. package/dist/commands/processors.d.ts +1 -0
  117. package/dist/commands/processors.js +83 -27
  118. package/dist/commands/reconciliation 3.d.ts +40 -0
  119. package/dist/commands/reconciliation 3.js +1069 -0
  120. package/dist/commands/reconciliation.d.ts +1 -0
  121. package/dist/commands/reconciliation.js +80 -24
  122. package/dist/commands/reports.d.ts +1 -0
  123. package/dist/commands/reports.js +80 -21
  124. package/dist/commands/salary-types 3.d.ts +40 -0
  125. package/dist/commands/salary-types 3.js +1072 -0
  126. package/dist/commands/salary-types.d.ts +1 -0
  127. package/dist/commands/salary-types.js +79 -23
  128. package/dist/commands/sales-invoices 3.d.ts +43 -0
  129. package/dist/commands/sales-invoices 3.js +1100 -0
  130. package/dist/commands/sales-invoices.d.ts +1 -0
  131. package/dist/commands/sales-invoices.js +104 -48
  132. package/dist/commands/sales-orders 3.d.ts +43 -0
  133. package/dist/commands/sales-orders 3.js +1098 -0
  134. package/dist/commands/sales-orders.d.ts +1 -0
  135. package/dist/commands/sales-orders.js +102 -46
  136. package/dist/commands/tags 3.d.ts +40 -0
  137. package/dist/commands/tags 3.js +1072 -0
  138. package/dist/commands/tags.d.ts +1 -0
  139. package/dist/commands/tags.js +79 -23
  140. package/dist/commands/tax-codes 3.d.ts +40 -0
  141. package/dist/commands/tax-codes 3.js +1075 -0
  142. package/dist/commands/tax-codes.d.ts +1 -0
  143. package/dist/commands/tax-codes.js +82 -26
  144. package/dist/commands/tax-matrix.d.ts +1 -0
  145. package/dist/commands/tax-matrix.js +79 -23
  146. package/dist/commands/tenants.d.ts +1 -0
  147. package/dist/commands/tenants.js +79 -23
  148. package/dist/commands/text-templates 3.d.ts +40 -0
  149. package/dist/commands/text-templates 3.js +1072 -0
  150. package/dist/commands/text-templates.d.ts +1 -0
  151. package/dist/commands/text-templates.js +79 -23
  152. package/dist/commands/tools.d.ts +1 -0
  153. package/dist/commands/tools.js +76 -20
  154. package/dist/commands/vendor-invoices.d.ts +1 -0
  155. package/dist/commands/vendor-invoices.js +108 -52
  156. package/dist/commands/webhooks 3.d.ts +40 -0
  157. package/dist/commands/webhooks 3.js +1074 -0
  158. package/dist/commands/webhooks.d.ts +1 -0
  159. package/dist/commands/webhooks.js +81 -25
  160. package/dist/commands/workflows.d.ts +1 -0
  161. package/dist/commands/workflows.js +77 -21
  162. package/dist/lib/api-client.d.ts +5 -1
  163. package/dist/lib/api-client.js +19 -5
  164. package/dist/lib/auth.js +17 -0
  165. package/dist/lib/config.js +1 -1
  166. package/oclif.manifest.json +6099 -711
  167. package/package.json +1 -1
  168. package/dist/index 2.js +0 -1
  169. package/dist/index.d 2.ts +0 -1
@@ -30,6 +30,7 @@ export default class AsyncEndpointsInternal extends Command {
30
30
  private runExport;
31
31
  private runCamt053Import;
32
32
  private runNestedImport;
33
+ private parseFilterValue;
33
34
  private filterFields;
34
35
  private sanitizeOutput;
35
36
  private getColumns;
@@ -6,10 +6,10 @@ const HAS_IMPORT = false;
6
6
  const HAS_EXPORT = false;
7
7
  const HAS_CAMT053 = false;
8
8
  const NESTED_IMPORTS = [];
9
- const SUBCOMMANDS = [...["webhook-events", "processor-jobs"], ...(HAS_IMPORT ? ['import'] : []), ...(HAS_EXPORT ? ['export'] : []), ...NESTED_IMPORTS.map(n => `import-${n}`)];
9
+ const SUBCOMMANDS = [...["processor-jobs", "webhook-events"], ...(HAS_IMPORT ? ['import'] : []), ...(HAS_EXPORT ? ['export'] : []), ...NESTED_IMPORTS.map(n => `import-${n}`)];
10
10
  const ENDPOINTS = {
11
- 'webhook-events': { method: 'POST', path: '/v1/pubsub/webhook-events', summary: '[INTERNAL] Async push endpoint for webhook event delivery', pathParams: [], hasBody: false, isMultipart: false },
12
- 'processor-jobs': { method: 'POST', path: '/v1/pubsub/processor-jobs', summary: '[INTERNAL] Async push endpoint for processor-job.v1 envelopes', pathParams: [], hasBody: false, isMultipart: false },
11
+ 'processor-jobs': { method: 'POST', path: '/v1/pubsub/processor-jobs', summary: '[INTERNAL] Async push endpoint for processor-job.v1 envelopes', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
12
+ 'webhook-events': { method: 'POST', path: '/v1/pubsub/webhook-events', summary: '[INTERNAL] Async push endpoint for webhook event delivery', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
13
13
  };
14
14
  export default class AsyncEndpointsInternal extends Command {
15
15
  static description = 'Manage async endpoints internal';
@@ -120,15 +120,7 @@ export default class AsyncEndpointsInternal extends Command {
120
120
  if (eqIndex === -1)
121
121
  this.error(`Invalid --filter format: ${f}. Use: --filter key=value`);
122
122
  const key = f.slice(0, eqIndex);
123
- let value = f.slice(eqIndex + 1);
124
- // Check for operator prefix (with or without $)
125
- const opMatch = value.match(/^\$?(eq|ne|in|like|gt|gte|lt|lte|null):/);
126
- if (opMatch) {
127
- value = `\$${opMatch[1]}:${value.slice(opMatch[0].length)}`;
128
- }
129
- else {
130
- value = `\$eq:${value}`;
131
- }
123
+ const value = this.parseFilterValue(f.slice(eqIndex + 1));
132
124
  const filterKey = `filter.${key}`;
133
125
  if (filterKey in queryParams) {
134
126
  // Multiple filters on same field: collect as array
@@ -161,7 +153,9 @@ export default class AsyncEndpointsInternal extends Command {
161
153
  data = form;
162
154
  }
163
155
  else if (endpoint.hasBody) {
164
- if (flags.file) {
156
+ // For binary-response endpoints, --file is the output path, not a JSON
157
+ // input file — skip the read-as-body branch.
158
+ if (flags.file && !endpoint.isBinaryResponse) {
165
159
  const fsModule = await import('node:fs');
166
160
  try {
167
161
  data = JSON.parse(fsModule.readFileSync(flags.file, 'utf-8'));
@@ -183,6 +177,7 @@ export default class AsyncEndpointsInternal extends Command {
183
177
  if (!data)
184
178
  data = {};
185
179
  const body = data;
180
+ const arrayFields = new Set(endpoint.bodyArrayFields);
186
181
  for (const pair of flags.set) {
187
182
  const eqIndex = pair.indexOf('=');
188
183
  if (eqIndex === -1)
@@ -194,6 +189,19 @@ export default class AsyncEndpointsInternal extends Command {
194
189
  value = JSON.parse(value);
195
190
  }
196
191
  catch { /* keep as string */ }
192
+ // For top-level keys typed as array in the API schema, split bare
193
+ // comma-separated input (e.g. "1171,1170" -> ["1171","1170"]) and
194
+ // wrap a lone scalar in a single-element array. Skips when --set
195
+ // already provided a JSON array.
196
+ const isArrayField = !key.includes('.') && arrayFields.has(key);
197
+ if (isArrayField && !Array.isArray(value)) {
198
+ if (typeof value === 'string') {
199
+ value = value.split(',').map(v => v.trim()).filter(v => v.length > 0);
200
+ }
201
+ else if (value !== undefined && value !== null) {
202
+ value = [value];
203
+ }
204
+ }
197
205
  // Support nested keys like "address.city"
198
206
  const keys = key.split('.');
199
207
  if (keys.some(k => k === '__proto__' || k === 'constructor' || k === 'prototype')) {
@@ -244,6 +252,26 @@ export default class AsyncEndpointsInternal extends Command {
244
252
  process.stderr.write('\n');
245
253
  }
246
254
  try {
255
+ // Binary response: download to file
256
+ if (endpoint.isBinaryResponse) {
257
+ if (!flags.file) {
258
+ this.error(`Endpoint returns a binary file. Specify the output path with -f / --file (e.g. -f report.xlsx).`);
259
+ }
260
+ const binResponse = await apiRequest(endpoint.method, apiPath, {
261
+ params: Object.keys(queryParams).length > 0 ? queryParams : undefined,
262
+ data,
263
+ contextName: flags.context,
264
+ binary: true,
265
+ });
266
+ const fsModule = await import('node:fs');
267
+ const binData = binResponse.data;
268
+ const buffer = Buffer.isBuffer(binData)
269
+ ? binData
270
+ : Buffer.from(binData);
271
+ fsModule.writeFileSync(flags.file, buffer);
272
+ this.log(`Saved ${buffer.length} bytes to ${flags.file}`);
273
+ return;
274
+ }
247
275
  const response = await apiRequest(endpoint.method, apiPath, {
248
276
  params: Object.keys(queryParams).length > 0 ? queryParams : undefined,
249
277
  data,
@@ -334,6 +362,7 @@ export default class AsyncEndpointsInternal extends Command {
334
362
  }
335
363
  else if (flags.set && flags.set.length > 0) {
336
364
  const item = {};
365
+ const arrayFields = new Set(ENDPOINTS['create']?.bodyArrayFields ?? []);
337
366
  for (const pair of flags.set) {
338
367
  const eqIndex = pair.indexOf('=');
339
368
  if (eqIndex === -1)
@@ -344,6 +373,15 @@ export default class AsyncEndpointsInternal extends Command {
344
373
  value = JSON.parse(value);
345
374
  }
346
375
  catch { /* keep as string */ }
376
+ const isArrayField = !key.includes('.') && arrayFields.has(key);
377
+ if (isArrayField && !Array.isArray(value)) {
378
+ if (typeof value === 'string') {
379
+ value = value.split(',').map(v => v.trim()).filter(v => v.length > 0);
380
+ }
381
+ else if (value !== undefined && value !== null) {
382
+ value = [value];
383
+ }
384
+ }
347
385
  const keys = key.split('.');
348
386
  if (keys.some(k => k === '__proto__' || k === 'constructor' || k === 'prototype')) {
349
387
  this.error(`Invalid --set key: ${key}`);
@@ -493,14 +531,7 @@ export default class AsyncEndpointsInternal extends Command {
493
531
  if (eqIndex === -1)
494
532
  this.error(`Invalid --filter format: ${f}. Use: --filter key=value`);
495
533
  const key = f.slice(0, eqIndex);
496
- let value = f.slice(eqIndex + 1);
497
- const opMatch = value.match(/^\$?(eq|ne|in|like|gt|gte|lt|lte|null):/);
498
- if (opMatch) {
499
- value = `\$${opMatch[1]}:${value.slice(opMatch[0].length)}`;
500
- }
501
- else {
502
- value = `\$eq:${value}`;
503
- }
534
+ const value = this.parseFilterValue(f.slice(eqIndex + 1));
504
535
  const filterKey = `filter.${key}`;
505
536
  if (filterKey in baseParams) {
506
537
  const existing = baseParams[filterKey];
@@ -677,6 +708,7 @@ export default class AsyncEndpointsInternal extends Command {
677
708
  }
678
709
  else if (flags.set && flags.set.length > 0) {
679
710
  const item = {};
711
+ const arrayFields = new Set(ENDPOINTS[`create-${suffix}`]?.bodyArrayFields ?? []);
680
712
  for (const pair of flags.set) {
681
713
  const eqIndex = pair.indexOf('=');
682
714
  if (eqIndex === -1)
@@ -687,6 +719,15 @@ export default class AsyncEndpointsInternal extends Command {
687
719
  value = JSON.parse(value);
688
720
  }
689
721
  catch { /* keep as string */ }
722
+ const isArrayField = !key.includes('.') && arrayFields.has(key);
723
+ if (isArrayField && !Array.isArray(value)) {
724
+ if (typeof value === 'string') {
725
+ value = value.split(',').map(v => v.trim()).filter(v => v.length > 0);
726
+ }
727
+ else if (value !== undefined && value !== null) {
728
+ value = [value];
729
+ }
730
+ }
690
731
  const keys = key.split('.');
691
732
  if (keys.some(k => k === '__proto__' || k === 'constructor' || k === 'prototype')) {
692
733
  this.error(`Invalid --set key: ${key}`);
@@ -806,6 +847,21 @@ export default class AsyncEndpointsInternal extends Command {
806
847
  this.log('');
807
848
  this.log(`Summary: ${created} created, ${updated} updated, ${errors.length} failed`);
808
849
  }
850
+ parseFilterValue(value) {
851
+ // Recognises the nestjs-paginate operator set (with or without the leading $)
852
+ // and recursively unwraps chained operators like 'not:null' -> '$not:$null'
853
+ // or 'not:like:John' -> '$not:$like:John'. Falls back to '$eq:<value>' when
854
+ // no operator prefix is present.
855
+ const opRe = /^\$?(and|or|not|eq|gt|gte|in|null|lt|lte|btw|ne|ilike|like|sw|contains)(?::|$)/;
856
+ const m = value.match(opRe);
857
+ if (!m)
858
+ return `\$eq:${value}`;
859
+ const op = m[1];
860
+ const rest = value.slice(m[0].length);
861
+ if (rest === '')
862
+ return `\$${op}`;
863
+ return opRe.test(rest) ? `\$${op}:${this.parseFilterValue(rest)}` : `\$${op}:${rest}`;
864
+ }
809
865
  filterFields(data, fields) {
810
866
  const isUnsafeKey = (k) => k === '__proto__' || k === 'constructor' || k === 'prototype';
811
867
  const pick = (obj, keys) => {
@@ -0,0 +1,40 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class AuditLog extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ action: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ table: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ csv: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ set: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ page: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ limit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ include: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'sort-by': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ filter: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ query: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ fields: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ sanitize: import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ 'show-http-request': import("@oclif/core/interfaces").BooleanFlag<boolean>;
27
+ };
28
+ run(): Promise<void>;
29
+ private runImport;
30
+ private runExport;
31
+ private runCamt053Import;
32
+ private runNestedImport;
33
+ private parseFilterValue;
34
+ private filterFields;
35
+ private sanitizeOutput;
36
+ private getColumns;
37
+ private getValue;
38
+ private printTable;
39
+ private printCsv;
40
+ }