@aderis-erp/cli 1.0.4 → 1.0.7

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 (122) hide show
  1. package/dist/commands/access-groups.js +5 -5
  2. package/dist/commands/{access-groups 3.d.ts → account-transaction-allocations.d.ts} +1 -1
  3. package/dist/commands/{async-endpoints-internal.js → account-transaction-allocations.js} +19 -15
  4. package/dist/commands/account-transactions.js +5 -5
  5. package/dist/commands/accounts.js +5 -5
  6. package/dist/commands/agent-runs.js +5 -5
  7. package/dist/commands/audit-log.js +5 -5
  8. package/dist/commands/auth/login.js +1 -2
  9. package/dist/commands/auth/tenant.d.ts +1 -1
  10. package/dist/commands/auth/tenant.js +11 -11
  11. package/dist/commands/auth.js +1 -1
  12. package/dist/commands/bank-accounts.js +5 -5
  13. package/dist/commands/bank-integrations.js +5 -5
  14. package/dist/commands/business-partners---contacts.js +5 -5
  15. package/dist/commands/business-partners.js +5 -5
  16. package/dist/commands/credit-card-accounts.js +5 -5
  17. package/dist/commands/documents.js +5 -5
  18. package/dist/commands/dunning-configs.js +5 -5
  19. package/dist/commands/dunning-reminders.js +5 -5
  20. package/dist/commands/dunning-runs.js +5 -5
  21. package/dist/commands/employees.js +5 -5
  22. package/dist/commands/event-processor-mappings.js +5 -5
  23. package/dist/commands/files-internal.js +5 -5
  24. package/dist/commands/health.js +5 -5
  25. package/dist/commands/inbox.js +5 -5
  26. package/dist/commands/integrations.js +5 -5
  27. package/dist/commands/item-categories.js +5 -5
  28. package/dist/commands/items.js +5 -5
  29. package/dist/commands/journal-lines.js +5 -5
  30. package/dist/commands/journals.js +5 -5
  31. package/dist/commands/ledgers.js +5 -5
  32. package/dist/commands/office-locations.js +5 -5
  33. package/dist/commands/payment-method-ledger-mappings.js +5 -5
  34. package/dist/commands/payment-methods.js +5 -5
  35. package/dist/commands/payment-runs.js +5 -5
  36. package/dist/commands/payment-terms.js +5 -5
  37. package/dist/commands/price-lists.js +5 -5
  38. package/dist/commands/processor-mappings.js +5 -5
  39. package/dist/commands/processors.js +5 -5
  40. package/dist/commands/reconciliation.js +5 -5
  41. package/dist/commands/reports.js +5 -5
  42. package/dist/commands/salary-types.js +5 -5
  43. package/dist/commands/sales-invoices.js +5 -5
  44. package/dist/commands/sales-orders.js +5 -5
  45. package/dist/commands/tags.js +5 -5
  46. package/dist/commands/tax-codes.js +5 -5
  47. package/dist/commands/tax-matrix.js +5 -5
  48. package/dist/commands/tenants.js +5 -5
  49. package/dist/commands/text-templates.js +5 -5
  50. package/dist/commands/tools.js +5 -5
  51. package/dist/commands/{price-lists 3.d.ts → vat-declaration.d.ts} +2 -2
  52. package/dist/commands/{webhooks 3.js → vat-declaration.js} +30 -25
  53. package/dist/commands/vendor-invoices.js +5 -5
  54. package/dist/commands/webhooks.js +5 -5
  55. package/dist/commands/workflows.js +5 -5
  56. package/dist/lib/api-client.d.ts +3 -2
  57. package/dist/lib/api-client.js +4 -0
  58. package/dist/lib/auth.js +1 -0
  59. package/oclif.manifest.json +695 -5906
  60. package/package.json +15 -13
  61. package/dist/commands/access-groups 3.js +0 -1072
  62. package/dist/commands/accounts 2.d.ts +0 -41
  63. package/dist/commands/accounts 2.js +0 -1078
  64. package/dist/commands/async-endpoints-internal 3.d.ts +0 -40
  65. package/dist/commands/async-endpoints-internal 3.js +0 -1062
  66. package/dist/commands/async-endpoints-internal.d.ts +0 -40
  67. package/dist/commands/audit-log 3.d.ts +0 -40
  68. package/dist/commands/audit-log 3.js +0 -1066
  69. package/dist/commands/business-partners 3.d.ts +0 -41
  70. package/dist/commands/business-partners 3.js +0 -1078
  71. package/dist/commands/business-partners---contacts 3.d.ts +0 -42
  72. package/dist/commands/business-partners---contacts 3.js +0 -1072
  73. package/dist/commands/credit-card-accounts 3.d.ts +0 -42
  74. package/dist/commands/credit-card-accounts 3.js +0 -1084
  75. package/dist/commands/dunning-configs 3.d.ts +0 -40
  76. package/dist/commands/dunning-configs 3.js +0 -1072
  77. package/dist/commands/dunning-runs 3.d.ts +0 -40
  78. package/dist/commands/dunning-runs 3.js +0 -1061
  79. package/dist/commands/event-processor-mappings 3.d.ts +0 -40
  80. package/dist/commands/event-processor-mappings 3.js +0 -1071
  81. package/dist/commands/files-internal 3.d.ts +0 -40
  82. package/dist/commands/files-internal 3.js +0 -1073
  83. package/dist/commands/health 3.d.ts +0 -40
  84. package/dist/commands/health 3.js +0 -1067
  85. package/dist/commands/inbox 3.d.ts +0 -40
  86. package/dist/commands/inbox 3.js +0 -1065
  87. package/dist/commands/integrations 3.d.ts +0 -41
  88. package/dist/commands/integrations 3.js +0 -1067
  89. package/dist/commands/item-categories 3.d.ts +0 -40
  90. package/dist/commands/item-categories 3.js +0 -1072
  91. package/dist/commands/items 3.d.ts +0 -40
  92. package/dist/commands/items 3.js +0 -1072
  93. package/dist/commands/journals 3.d.ts +0 -42
  94. package/dist/commands/journals 3.js +0 -1088
  95. package/dist/commands/office-locations 3.d.ts +0 -40
  96. package/dist/commands/office-locations 3.js +0 -1072
  97. package/dist/commands/payment-method-ledger-mappings 3.d.ts +0 -41
  98. package/dist/commands/payment-method-ledger-mappings 3.js +0 -1066
  99. package/dist/commands/payment-methods 3.d.ts +0 -40
  100. package/dist/commands/payment-methods 3.js +0 -1072
  101. package/dist/commands/payment-runs 3.d.ts +0 -42
  102. package/dist/commands/payment-runs 3.js +0 -1087
  103. package/dist/commands/payment-terms 3.d.ts +0 -40
  104. package/dist/commands/payment-terms 3.js +0 -1073
  105. package/dist/commands/price-lists 3.js +0 -1078
  106. package/dist/commands/processor-mappings 2.d.ts +0 -40
  107. package/dist/commands/processor-mappings 2.js +0 -1070
  108. package/dist/commands/reconciliation 3.d.ts +0 -40
  109. package/dist/commands/reconciliation 3.js +0 -1069
  110. package/dist/commands/salary-types 3.d.ts +0 -40
  111. package/dist/commands/salary-types 3.js +0 -1072
  112. package/dist/commands/sales-invoices 3.d.ts +0 -43
  113. package/dist/commands/sales-invoices 3.js +0 -1100
  114. package/dist/commands/sales-orders 3.d.ts +0 -43
  115. package/dist/commands/sales-orders 3.js +0 -1098
  116. package/dist/commands/tags 3.d.ts +0 -40
  117. package/dist/commands/tags 3.js +0 -1072
  118. package/dist/commands/tax-codes 3.d.ts +0 -40
  119. package/dist/commands/tax-codes 3.js +0 -1075
  120. package/dist/commands/text-templates 3.d.ts +0 -40
  121. package/dist/commands/text-templates 3.js +0 -1072
  122. package/dist/commands/webhooks 3.d.ts +0 -40
@@ -6,25 +6,27 @@ const HAS_IMPORT = true;
6
6
  const HAS_EXPORT = true;
7
7
  const HAS_CAMT053 = false;
8
8
  const NESTED_IMPORTS = [];
9
- const SUBCOMMANDS = [...["list", "create", "events", "events-relations", "get", "update", "delete"], ...(HAS_IMPORT ? ['import'] : []), ...(HAS_EXPORT ? ['export'] : []), ...NESTED_IMPORTS.map(n => `import-${n}`)];
9
+ const SUBCOMMANDS = [...["list", "create", "preview", "get", "update", "regenerate", "replace", "fields-contributions", "fields-contributions-export"], ...(HAS_IMPORT ? ['import'] : []), ...(HAS_EXPORT ? ['export'] : []), ...NESTED_IMPORTS.map(n => `import-${n}`)];
10
10
  const ENDPOINTS = {
11
- 'list': { method: 'GET', path: '/v1/webhooks', summary: 'List all webhook subscriptions', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
12
- 'create': { method: 'POST', path: '/v1/webhooks', summary: 'Create a new webhook subscription', pathParams: [], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: ['tenantIds'] },
13
- 'events': { method: 'GET', path: '/v1/webhooks/events', summary: 'Get available event types', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
14
- 'events-relations': { method: 'GET', path: '/v1/webhooks/events/{eventType}/relations', summary: 'Get valid relations for an event type', pathParams: ['eventType'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
15
- 'get': { method: 'GET', path: '/v1/webhooks/{id}', summary: 'Get a webhook subscription by ID', pathParams: ['id'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
16
- 'update': { method: 'PATCH', path: '/v1/webhooks/{id}', summary: 'Update a webhook subscription', pathParams: ['id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: ['tenantIds'] },
17
- 'delete': { method: 'DELETE', path: '/v1/webhooks/{id}', summary: 'Delete a webhook subscription', pathParams: ['id'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
11
+ 'list': { method: 'GET', path: '/v1/vat-declaration', summary: 'List VAT reports (paginated)', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
12
+ 'create': { method: 'POST', path: '/v1/vat-declaration', summary: 'Create a VAT declaration report (always async-accepted)', pathParams: [], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
13
+ 'preview': { method: 'GET', path: '/v1/vat-declaration/preview', summary: 'Preview the in-scope counts and late entries for a candidate period', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
14
+ 'get': { method: 'GET', path: '/v1/vat-declaration/{id}', summary: 'Get a VAT report by id (this is the polling endpoint for async generation)', pathParams: ['id'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
15
+ 'update': { method: 'PATCH', path: '/v1/vat-declaration/{id}', summary: 'Update manualAdjustments and/or generalInfo on a DRAFT report', pathParams: ['id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: ['manualAdjustments'] },
16
+ 'regenerate': { method: 'POST', path: '/v1/vat-declaration/{id}/regenerate', summary: 'Re-run the full generation pipeline on a DRAFT report', pathParams: ['id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
17
+ 'replace': { method: 'POST', path: '/v1/vat-declaration/{id}/replace', summary: 'Create a corrective DRAFT (Berichtigungsabrechnung) from a FILED report', pathParams: ['id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
18
+ 'fields-contributions': { method: 'GET', path: '/v1/vat-declaration/{id}/fields/{fieldId}/contributions', summary: 'Drill into the contributions for a single Ziffer', pathParams: ['id', 'fieldId'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
19
+ 'fields-contributions-export': { method: 'GET', path: '/v1/vat-declaration/{id}/fields/{fieldId}/contributions/export', summary: 'Export the drill-down result set as an Excel workbook', pathParams: ['id', 'fieldId'], hasBody: false, isMultipart: false, isBinaryResponse: true, bodyArrayFields: [] },
18
20
  };
19
- export default class Webhooks extends Command {
20
- static description = 'Manage webhooks';
21
+ export default class VatDeclaration extends Command {
22
+ static description = 'Manage vat declaration';
21
23
  static examples = [
22
- '<%= config.bin %> webhooks list',
23
- '<%= config.bin %> webhooks get <id>',
24
- '<%= config.bin %> webhooks create --data \'{...}\'',
25
- '<%= config.bin %> webhooks update <id> --set field=value',
26
- '<%= config.bin %> webhooks import --file data.json',
27
- '<%= config.bin %> webhooks export --csv > webhooks.csv',
24
+ '<%= config.bin %> vat-declaration list',
25
+ '<%= config.bin %> vat-declaration get <id>',
26
+ '<%= config.bin %> vat-declaration create --data \'{...}\'',
27
+ '<%= config.bin %> vat-declaration update <id> --set field=value',
28
+ '<%= config.bin %> vat-declaration import --file data.json',
29
+ '<%= config.bin %> vat-declaration export --csv > vat-declaration.csv',
28
30
  ];
29
31
  static args = {
30
32
  action: Args.string({ description: 'Action: ' + SUBCOMMANDS.join(', '), required: true }),
@@ -38,6 +40,7 @@ export default class Webhooks extends Command {
38
40
  data: Flags.string({ char: 'd', description: 'JSON data for request body' }),
39
41
  file: Flags.string({ char: 'f', description: 'Read request body from file' }),
40
42
  set: Flags.string({ char: 's', description: 'Set individual field (e.g. --set firstName=John)', multiple: true }),
43
+ 'field-id': Flags.string({ description: 'Path param: fieldId' }),
41
44
  page: Flags.string({ description: 'Page number' }),
42
45
  limit: Flags.string({ description: 'Items per page' }),
43
46
  include: Flags.string({ description: 'Relations to include' }),
@@ -50,7 +53,7 @@ export default class Webhooks extends Command {
50
53
  'show-http-request': Flags.boolean({ description: 'Show HTTP request details (method, URL, body)' }),
51
54
  };
52
55
  async run() {
53
- const { args, flags } = await this.parse(Webhooks);
56
+ const { args, flags } = await this.parse(VatDeclaration);
54
57
  // Handle import action specially
55
58
  if (args.action === 'import') {
56
59
  if (!HAS_IMPORT)
@@ -83,11 +86,6 @@ export default class Webhooks extends Command {
83
86
  const endpoint = ENDPOINTS[args.action];
84
87
  if (!endpoint)
85
88
  this.error(`Unknown action: ${args.action}. Available: ${SUBCOMMANDS.join(', ')}`);
86
- const context = flags.context ? getContext(flags.context) : getCurrentContext();
87
- if (!context)
88
- this.error('No context configured. Run: aderis auth login --new');
89
- if (!context.tokens)
90
- this.error('Not logged in. Run: aderis auth login');
91
89
  let apiPath = endpoint.path;
92
90
  for (let i = 0; i < endpoint.pathParams.length; i++) {
93
91
  const param = endpoint.pathParams[i];
@@ -96,7 +94,7 @@ export default class Webhooks extends Command {
96
94
  // First path param always comes from positional argument
97
95
  value = args.id;
98
96
  if (!value)
99
- this.error('Missing required argument: id. Usage: aderis webhooks <action> <id>');
97
+ this.error('Missing required argument: id. Usage: aderis vat-declaration <action> <id>');
100
98
  }
101
99
  else {
102
100
  const flagName = param.replace(/\./g, '-').replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');
@@ -106,6 +104,11 @@ export default class Webhooks extends Command {
106
104
  }
107
105
  apiPath = apiPath.replace(`{${param}}`, String(value));
108
106
  }
107
+ const context = flags.context ? getContext(flags.context) : getCurrentContext();
108
+ if (!context)
109
+ this.error('No context configured. Run: aderis auth login --new');
110
+ if (!context.tokens)
111
+ this.error('Not logged in. Run: aderis auth login');
109
112
  const queryParams = {};
110
113
  if (flags.page)
111
114
  queryParams.page = flags.page;
@@ -165,7 +168,9 @@ export default class Webhooks extends Command {
165
168
  data = form;
166
169
  }
167
170
  else if (endpoint.hasBody) {
168
- if (flags.file) {
171
+ // For binary-response endpoints, --file is the output path, not a JSON
172
+ // input file — skip the read-as-body branch.
173
+ if (flags.file && !endpoint.isBinaryResponse) {
169
174
  const fsModule = await import('node:fs');
170
175
  try {
171
176
  data = JSON.parse(fsModule.readFileSync(flags.file, 'utf-8'));
@@ -688,7 +693,7 @@ export default class Webhooks extends Command {
688
693
  }
689
694
  async runNestedImport(suffix, parentId, flags) {
690
695
  if (!parentId) {
691
- this.error(`Missing required argument: id. Usage: aderis webhooks import-${suffix} <parent-id> --file data.json`);
696
+ this.error(`Missing required argument: id. Usage: aderis vat-declaration import-${suffix} <parent-id> --file data.json`);
692
697
  }
693
698
  const context = flags.context ? getContext(flags.context) : getCurrentContext();
694
699
  if (!context)
@@ -114,11 +114,6 @@ export default class VendorInvoices extends Command {
114
114
  const endpoint = ENDPOINTS[args.action];
115
115
  if (!endpoint)
116
116
  this.error(`Unknown action: ${args.action}. Available: ${SUBCOMMANDS.join(', ')}`);
117
- const context = flags.context ? getContext(flags.context) : getCurrentContext();
118
- if (!context)
119
- this.error('No context configured. Run: aderis auth login --new');
120
- if (!context.tokens)
121
- this.error('Not logged in. Run: aderis auth login');
122
117
  let apiPath = endpoint.path;
123
118
  for (let i = 0; i < endpoint.pathParams.length; i++) {
124
119
  const param = endpoint.pathParams[i];
@@ -137,6 +132,11 @@ export default class VendorInvoices extends Command {
137
132
  }
138
133
  apiPath = apiPath.replace(`{${param}}`, String(value));
139
134
  }
135
+ const context = flags.context ? getContext(flags.context) : getCurrentContext();
136
+ if (!context)
137
+ this.error('No context configured. Run: aderis auth login --new');
138
+ if (!context.tokens)
139
+ this.error('Not logged in. Run: aderis auth login');
140
140
  const queryParams = {};
141
141
  if (flags.page)
142
142
  queryParams.page = flags.page;
@@ -83,11 +83,6 @@ export default class Webhooks extends Command {
83
83
  const endpoint = ENDPOINTS[args.action];
84
84
  if (!endpoint)
85
85
  this.error(`Unknown action: ${args.action}. Available: ${SUBCOMMANDS.join(', ')}`);
86
- const context = flags.context ? getContext(flags.context) : getCurrentContext();
87
- if (!context)
88
- this.error('No context configured. Run: aderis auth login --new');
89
- if (!context.tokens)
90
- this.error('Not logged in. Run: aderis auth login');
91
86
  let apiPath = endpoint.path;
92
87
  for (let i = 0; i < endpoint.pathParams.length; i++) {
93
88
  const param = endpoint.pathParams[i];
@@ -106,6 +101,11 @@ export default class Webhooks extends Command {
106
101
  }
107
102
  apiPath = apiPath.replace(`{${param}}`, String(value));
108
103
  }
104
+ const context = flags.context ? getContext(flags.context) : getCurrentContext();
105
+ if (!context)
106
+ this.error('No context configured. Run: aderis auth login --new');
107
+ if (!context.tokens)
108
+ this.error('Not logged in. Run: aderis auth login');
109
109
  const queryParams = {};
110
110
  if (flags.page)
111
111
  queryParams.page = flags.page;
@@ -75,11 +75,6 @@ export default class Workflows extends Command {
75
75
  const endpoint = ENDPOINTS[args.action];
76
76
  if (!endpoint)
77
77
  this.error(`Unknown action: ${args.action}. Available: ${SUBCOMMANDS.join(', ')}`);
78
- const context = flags.context ? getContext(flags.context) : getCurrentContext();
79
- if (!context)
80
- this.error('No context configured. Run: aderis auth login --new');
81
- if (!context.tokens)
82
- this.error('Not logged in. Run: aderis auth login');
83
78
  let apiPath = endpoint.path;
84
79
  for (let i = 0; i < endpoint.pathParams.length; i++) {
85
80
  const param = endpoint.pathParams[i];
@@ -98,6 +93,11 @@ export default class Workflows extends Command {
98
93
  }
99
94
  apiPath = apiPath.replace(`{${param}}`, String(value));
100
95
  }
96
+ const context = flags.context ? getContext(flags.context) : getCurrentContext();
97
+ if (!context)
98
+ this.error('No context configured. Run: aderis auth login --new');
99
+ if (!context.tokens)
100
+ this.error('Not logged in. Run: aderis auth login');
101
101
  const queryParams = {};
102
102
  if (flags.page)
103
103
  queryParams.page = flags.page;
@@ -25,10 +25,10 @@ export declare class ApiError extends Error {
25
25
  data?: unknown | undefined;
26
26
  constructor(message: string, status: number, data?: unknown | undefined);
27
27
  }
28
- export declare function createApiClient(contextName?: string, options?: {
28
+ export declare function createApiClient(contextName?: string, options?: boolean | {
29
29
  acceptAny?: boolean;
30
30
  binary?: boolean;
31
- } | boolean): Promise<AxiosInstance>;
31
+ }): Promise<AxiosInstance>;
32
32
  export declare function apiRequest<T = unknown>(method: string, path: string, options?: {
33
33
  acceptAny?: boolean;
34
34
  binary?: boolean;
@@ -36,6 +36,7 @@ export declare function apiRequest<T = unknown>(method: string, path: string, op
36
36
  contextName?: string;
37
37
  data?: unknown;
38
38
  params?: Record<string, unknown>;
39
+ responseType?: 'arraybuffer' | 'json' | 'stream' | 'text';
39
40
  }): Promise<ApiResponse<T>>;
40
41
  export declare function apiGet<T = unknown>(path: string, params?: Record<string, unknown>, contextName?: string): Promise<ApiResponse<T>>;
41
42
  export declare function apiPost<T = unknown>(path: string, data?: unknown, contextName?: string): Promise<ApiResponse<T>>;
@@ -109,6 +109,10 @@ export async function apiRequest(method, path, options = {}) {
109
109
  if (options.contentType) {
110
110
  config.headers = { ...config.headers, 'Content-Type': options.contentType };
111
111
  }
112
+ // Override responseType if specified (takes precedence over client-level default)
113
+ if (options.responseType) {
114
+ config.responseType = options.responseType;
115
+ }
112
116
  const response = await client.request(config);
113
117
  return {
114
118
  data: response.data,
package/dist/lib/auth.js CHANGED
@@ -160,6 +160,7 @@ export async function login(context, options = {}) {
160
160
  const authorizationUrl = buildAuthorizeUrl(context, pkce, state, options);
161
161
  return new Promise((resolve, reject) => {
162
162
  const connections = new Set();
163
+ // eslint-disable-next-line prefer-const -- assigned after server creation; closure captures the reference safely
163
164
  let timeoutId;
164
165
  const server = http.createServer(async (req, res) => {
165
166
  const url = new URL(req.url || '', `http://localhost:${CALLBACK_PORT}`);