@aderis-erp/cli 1.0.14 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -8
- package/dist/commands/access-groups.d.ts +0 -1
- package/dist/commands/access-groups.js +22 -78
- package/dist/commands/account-transaction-allocations.d.ts +0 -1
- package/dist/commands/account-transaction-allocations.js +22 -78
- package/dist/commands/account-transactions.d.ts +0 -1
- package/dist/commands/account-transactions.js +28 -82
- package/dist/commands/accounts.d.ts +0 -1
- package/dist/commands/accounts.js +24 -80
- package/dist/commands/agent-platform.d.ts +0 -1
- package/dist/commands/agent-platform.js +24 -79
- package/dist/commands/analytics.d.ts +39 -0
- package/dist/commands/analytics.js +1113 -0
- package/dist/commands/{documents.d.ts → api-keys.d.ts} +1 -2
- package/dist/commands/api-keys.js +1117 -0
- package/dist/commands/audit-log.d.ts +0 -1
- package/dist/commands/audit-log.js +22 -78
- package/dist/commands/auth/login.d.ts +9 -0
- package/dist/commands/auth/login.js +83 -21
- package/dist/commands/auth/logout.d.ts +6 -0
- package/dist/commands/auth/logout.js +23 -6
- package/dist/commands/auth/status.js +46 -23
- package/dist/commands/auth/tenant.js +15 -9
- package/dist/commands/auth.d.ts +0 -1
- package/dist/commands/auth.js +37 -51
- package/dist/commands/bank-accounts.d.ts +0 -1
- package/dist/commands/bank-accounts.js +22 -78
- package/dist/commands/bank-integrations.d.ts +0 -1
- package/dist/commands/bank-integrations.js +22 -78
- package/dist/commands/business-partners.d.ts +1 -1
- package/dist/commands/business-partners.js +38 -84
- package/dist/commands/chat.d.ts +0 -1
- package/dist/commands/chat.js +22 -78
- package/dist/commands/config/add.d.ts +12 -0
- package/dist/commands/config/add.js +97 -17
- package/dist/commands/config/current.js +12 -4
- package/dist/commands/config/list.js +12 -4
- package/dist/commands/config/set-api-key.d.ts +10 -0
- package/dist/commands/config/set-api-key.js +49 -0
- package/dist/commands/config/use.js +3 -4
- package/dist/commands/credit-card-accounts.d.ts +0 -1
- package/dist/commands/credit-card-accounts.js +22 -78
- package/dist/commands/delivery-notes.d.ts +0 -1
- package/dist/commands/delivery-notes.js +29 -84
- package/dist/commands/dunning-configs.d.ts +0 -1
- package/dist/commands/dunning-configs.js +22 -78
- package/dist/commands/dunning-reminders.d.ts +0 -1
- package/dist/commands/dunning-reminders.js +22 -78
- package/dist/commands/dunning-runs.d.ts +0 -1
- package/dist/commands/dunning-runs.js +22 -78
- package/dist/commands/email-transactions.d.ts +0 -1
- package/dist/commands/email-transactions.js +22 -78
- package/dist/commands/employees.d.ts +0 -1
- package/dist/commands/employees.js +24 -80
- package/dist/commands/entity-configurations.d.ts +0 -1
- package/dist/commands/entity-configurations.js +22 -78
- package/dist/commands/event-processor-mappings.d.ts +0 -1
- package/dist/commands/event-processor-mappings.js +22 -78
- package/dist/commands/{files-internal.d.ts → files.d.ts} +1 -2
- package/dist/commands/{files-internal.js → files.js} +40 -90
- package/dist/commands/health.d.ts +0 -1
- package/dist/commands/health.js +22 -78
- package/dist/commands/inbox.d.ts +0 -1
- package/dist/commands/inbox.js +22 -78
- package/dist/commands/integrations.d.ts +0 -1
- package/dist/commands/integrations.js +22 -78
- package/dist/commands/item-categories.d.ts +0 -1
- package/dist/commands/item-categories.js +22 -78
- package/dist/commands/items.d.ts +0 -1
- package/dist/commands/items.js +24 -80
- package/dist/commands/journal-lines.d.ts +0 -1
- package/dist/commands/journal-lines.js +22 -78
- package/dist/commands/journals.d.ts +1 -1
- package/dist/commands/journals.js +29 -81
- package/dist/commands/ledgers.d.ts +0 -1
- package/dist/commands/ledgers.js +26 -79
- package/dist/commands/nango-integrations.d.ts +39 -0
- package/dist/commands/nango-integrations.js +1115 -0
- package/dist/commands/office-locations.d.ts +0 -1
- package/dist/commands/office-locations.js +22 -78
- package/dist/commands/payment-methods.d.ts +0 -1
- package/dist/commands/payment-methods.js +22 -78
- package/dist/commands/payment-runs.d.ts +0 -1
- package/dist/commands/payment-runs.js +24 -79
- package/dist/commands/payment-terms.d.ts +0 -1
- package/dist/commands/payment-terms.js +22 -78
- package/dist/commands/payments.d.ts +0 -1
- package/dist/commands/payments.js +22 -78
- package/dist/commands/price-lists.d.ts +0 -1
- package/dist/commands/price-lists.js +22 -78
- package/dist/commands/processor-mappings.d.ts +0 -1
- package/dist/commands/processor-mappings.js +22 -78
- package/dist/commands/processors.d.ts +0 -1
- package/dist/commands/processors.js +22 -78
- package/dist/commands/purchase-order-types.d.ts +0 -1
- package/dist/commands/purchase-order-types.js +22 -78
- package/dist/commands/purchase-orders.d.ts +1 -1
- package/dist/commands/purchase-orders.js +35 -84
- package/dist/commands/reports.d.ts +0 -1
- package/dist/commands/reports.js +23 -79
- package/dist/commands/salary-types.d.ts +0 -1
- package/dist/commands/salary-types.js +22 -78
- package/dist/commands/sales-invoices.d.ts +0 -1
- package/dist/commands/sales-invoices.js +38 -89
- package/dist/commands/sales-orders.d.ts +0 -1
- package/dist/commands/sales-orders.js +26 -82
- package/dist/commands/saved-views.d.ts +0 -1
- package/dist/commands/saved-views.js +22 -78
- package/dist/commands/scheduled-processor-mappings.d.ts +0 -1
- package/dist/commands/scheduled-processor-mappings.js +22 -78
- package/dist/commands/schedules.d.ts +0 -1
- package/dist/commands/schedules.js +22 -78
- package/dist/commands/switch.js +14 -7
- package/dist/commands/tag-configurations.d.ts +39 -0
- package/dist/commands/{documents.js → tag-configurations.js} +40 -96
- package/dist/commands/tags.d.ts +0 -1
- package/dist/commands/tags.js +22 -78
- package/dist/commands/tax-codes.d.ts +0 -1
- package/dist/commands/tax-codes.js +22 -78
- package/dist/commands/tax-matrix.d.ts +0 -1
- package/dist/commands/tax-matrix.js +22 -78
- package/dist/commands/tenants.d.ts +0 -1
- package/dist/commands/tenants.js +24 -79
- package/dist/commands/text-templates.d.ts +0 -1
- package/dist/commands/text-templates.js +22 -78
- package/dist/commands/tools.d.ts +0 -1
- package/dist/commands/tools.js +22 -78
- package/dist/commands/vat-declarations.d.ts +1 -1
- package/dist/commands/vat-declarations.js +28 -79
- package/dist/commands/vendor-invoices.d.ts +0 -1
- package/dist/commands/vendor-invoices.js +31 -86
- package/dist/commands/webhooks.d.ts +0 -1
- package/dist/commands/webhooks.js +22 -78
- package/dist/commands/workflows.d.ts +0 -1
- package/dist/commands/workflows.js +22 -78
- package/dist/lib/api-client.js +8 -6
- package/dist/lib/auth/constants.d.ts +11 -0
- package/dist/lib/auth/constants.js +11 -0
- package/dist/lib/auth/errors.d.ts +17 -0
- package/dist/lib/auth/errors.js +22 -0
- package/dist/lib/auth/flow.d.ts +27 -0
- package/dist/lib/auth/flow.js +163 -0
- package/dist/lib/auth/guards.d.ts +5 -0
- package/dist/lib/auth/guards.js +14 -0
- package/dist/lib/auth/http.d.ts +16 -0
- package/dist/lib/auth/http.js +49 -0
- package/dist/lib/auth/index.d.ts +49 -0
- package/dist/lib/auth/index.js +217 -0
- package/dist/lib/auth/keycloak-provider.d.ts +75 -0
- package/dist/lib/auth/keycloak-provider.js +215 -0
- package/dist/lib/auth/pages.d.ts +25 -0
- package/dist/lib/auth/pages.js +123 -0
- package/dist/lib/auth/pkce.d.ts +11 -0
- package/dist/lib/auth/pkce.js +17 -0
- package/dist/lib/auth/tokens.d.ts +54 -0
- package/dist/lib/auth/tokens.js +104 -0
- package/dist/lib/auth/types.d.ts +57 -0
- package/dist/lib/auth/types.js +1 -0
- package/dist/lib/auth/validated-url.d.ts +6 -0
- package/dist/lib/auth/validated-url.js +53 -0
- package/dist/lib/base-api-command.js +6 -4
- package/dist/lib/config.d.ts +44 -4
- package/dist/lib/config.js +55 -19
- package/oclif.manifest.json +1181 -330
- package/package.json +3 -2
- package/dist/lib/auth.d.ts +0 -35
- package/dist/lib/auth.js +0 -566
package/dist/commands/ledgers.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Command, Args, Flags } from '@oclif/core';
|
|
2
2
|
import { apiRequest, ApiError, normalizeSortBy } from '../lib/api-client.js';
|
|
3
|
-
import { getCurrentContext, getContext, getBaseUrls } from '../lib/config.js';
|
|
3
|
+
import { getCurrentContext, getContext, getBaseUrls, hasCredentials, missingCredentialsMessage } from '../lib/config.js';
|
|
4
4
|
// Add 'import' action if both create and update exist
|
|
5
5
|
const HAS_IMPORT = true;
|
|
6
6
|
const HAS_EXPORT = true;
|
|
7
7
|
const HAS_CAMT053 = false;
|
|
8
8
|
const NESTED_IMPORTS = ["notes", "closings"];
|
|
9
|
-
const SUBCOMMANDS = [...["list", "create", "get", "update", "delete", "list-notes", "create-notes", "get-notes", "update-notes", "delete-notes", "list-closings", "create-closings", "get-closings", "update-closings", "closings-close", "closings-reopen"], ...(HAS_IMPORT ? ['import'] : []), ...(HAS_EXPORT ? ['export'] : []), ...NESTED_IMPORTS.map(n => `import-${n}`)];
|
|
9
|
+
const SUBCOMMANDS = [...["list", "create", "get", "update", "delete", "list-notes", "create-notes", "get-notes", "update-notes", "delete-notes", "list-closings", "create-closings", "get-closings", "update-closings", "closings-close", "closings-reopen", "list-posting-runs", "create-posting-runs", "posting-runs"], ...(HAS_IMPORT ? ['import'] : []), ...(HAS_EXPORT ? ['export'] : []), ...NESTED_IMPORTS.map(n => `import-${n}`)];
|
|
10
10
|
const ENDPOINTS = {
|
|
11
11
|
'list': { method: 'GET', path: '/v1/ledgers', summary: 'List all ledgers', pathParams: [], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
12
12
|
'create': { method: 'POST', path: '/v1/ledgers', summary: 'Create a new ledger', pathParams: [], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: ['notes'] },
|
|
@@ -24,6 +24,9 @@ const ENDPOINTS = {
|
|
|
24
24
|
'update-closings': { method: 'PATCH', path: '/v1/ledgers/{ledgerId}/closings/{id}', summary: 'Update closing description', pathParams: ['ledgerId', 'id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
25
25
|
'closings-close': { method: 'POST', path: '/v1/ledgers/{ledgerId}/closings/{id}/close', summary: 'Transition closing to CLOSED. Computes netPnl from POSTED journals. Valid from DRAFT or REOPENED.', pathParams: ['ledgerId', 'id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
26
26
|
'closings-reopen': { method: 'POST', path: '/v1/ledgers/{ledgerId}/closings/{id}/reopen', summary: 'Transition closing to REOPENED. netPnl snapshot is preserved. Valid from CLOSED only.', pathParams: ['ledgerId', 'id'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
27
|
+
'list-posting-runs': { method: 'GET', path: '/v1/ledgers/{ledgerId}/posting-runs', summary: 'List posting runs for a ledger', pathParams: ['ledgerId'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
28
|
+
'create-posting-runs': { method: 'POST', path: '/v1/ledgers/{ledgerId}/posting-runs', summary: 'Post every APPROVED journal in a date range', pathParams: ['ledgerId'], hasBody: true, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
29
|
+
'posting-runs': { method: 'GET', path: '/v1/ledgers/{ledgerId}/posting-runs/{id}', summary: 'Get a posting run by ID', pathParams: ['ledgerId', 'id'], hasBody: false, isMultipart: false, isBinaryResponse: false, bodyArrayFields: [] },
|
|
27
30
|
};
|
|
28
31
|
export default class Ledgers extends Command {
|
|
29
32
|
static description = 'Manage ledgers';
|
|
@@ -40,7 +43,7 @@ export default class Ledgers extends Command {
|
|
|
40
43
|
id: Args.string({ description: 'Resource ID (for get, update, delete operations)', required: false }),
|
|
41
44
|
};
|
|
42
45
|
static flags = {
|
|
43
|
-
context: Flags.string({ char: 'c', description: 'Context to use' }),
|
|
46
|
+
context: Flags.string({ char: 'c', aliases: ['config'], env: 'ADERIS_CONTEXT', description: 'Context to use for this command, overriding the current context (alias: --config)' }),
|
|
44
47
|
output: Flags.string({ char: 'o', description: 'Output format (default: table for import, json for other commands)', options: ['json', 'table', 'csv'] }),
|
|
45
48
|
table: Flags.boolean({ char: 't', description: 'Output as table (shortcut for --output table)' }),
|
|
46
49
|
csv: Flags.boolean({ description: 'Output as CSV (shortcut for --output csv)' }),
|
|
@@ -56,7 +59,7 @@ export default class Ledgers extends Command {
|
|
|
56
59
|
'sort-by': Flags.string({ description: 'Sort field(s), comma-separated. Direction (:ASC/:DESC) is optional; date-like fields default to DESC, others to ASC.' }),
|
|
57
60
|
filter: Flags.string({ description: 'Filter (e.g. --filter status=ACTIVE). Operators: in:A,B, like:%, gt:, lt:, null:', multiple: true }),
|
|
58
61
|
query: Flags.string({ description: 'Additional query params as JSON' }),
|
|
59
|
-
fields: Flags.string({ description: 'Comma-separated list of fields to
|
|
62
|
+
fields: Flags.string({ description: 'Comma-separated list of fields to return, applied by the API (e.g. --fields=id,name,status)' }),
|
|
60
63
|
sanitize: Flags.boolean({ description: 'Remove null values, audit fields, and duplicate UUIDs from output' }),
|
|
61
64
|
'show-http-request': Flags.boolean({ description: 'Show HTTP request details (method, URL, body)' }),
|
|
62
65
|
};
|
|
@@ -114,9 +117,9 @@ export default class Ledgers extends Command {
|
|
|
114
117
|
}
|
|
115
118
|
const context = flags.context ? getContext(flags.context) : getCurrentContext();
|
|
116
119
|
if (!context)
|
|
117
|
-
this.error('No context configured. Run: aderis auth login --new');
|
|
118
|
-
if (!context
|
|
119
|
-
this.error(
|
|
120
|
+
this.error(flags.context ? `Context "${flags.context}" not found. List contexts with: aderis config list` : 'No context configured. Run: aderis auth login --new');
|
|
121
|
+
if (!hasCredentials(context))
|
|
122
|
+
this.error(missingCredentialsMessage(context));
|
|
120
123
|
const queryParams = {};
|
|
121
124
|
if (flags.page)
|
|
122
125
|
queryParams.page = flags.page;
|
|
@@ -128,6 +131,8 @@ export default class Ledgers extends Command {
|
|
|
128
131
|
queryParams.search = flags.search;
|
|
129
132
|
if (flags['sort-by'])
|
|
130
133
|
queryParams.sortBy = normalizeSortBy(flags['sort-by']);
|
|
134
|
+
if (flags.fields)
|
|
135
|
+
queryParams.fields = flags.fields;
|
|
131
136
|
if (flags.query) {
|
|
132
137
|
try {
|
|
133
138
|
Object.assign(queryParams, JSON.parse(flags.query));
|
|
@@ -330,11 +335,6 @@ export default class Ledgers extends Command {
|
|
|
330
335
|
output = obj[arrayKeys[0]];
|
|
331
336
|
}
|
|
332
337
|
}
|
|
333
|
-
// Filter fields if --fields flag is provided
|
|
334
|
-
if (flags.fields) {
|
|
335
|
-
const fieldList = flags.fields.split(',').map(f => f.trim());
|
|
336
|
-
output = this.filterFields(output, fieldList);
|
|
337
|
-
}
|
|
338
338
|
// Sanitize output if requested
|
|
339
339
|
if (flags.sanitize) {
|
|
340
340
|
output = this.sanitizeOutput(output);
|
|
@@ -359,9 +359,9 @@ export default class Ledgers extends Command {
|
|
|
359
359
|
async runImport(flags) {
|
|
360
360
|
const context = flags.context ? getContext(flags.context) : getCurrentContext();
|
|
361
361
|
if (!context)
|
|
362
|
-
this.error('No context configured. Run: aderis auth login --new');
|
|
363
|
-
if (!context
|
|
364
|
-
this.error(
|
|
362
|
+
this.error(flags.context ? `Context "${flags.context}" not found. List contexts with: aderis config list` : 'No context configured. Run: aderis auth login --new');
|
|
363
|
+
if (!hasCredentials(context))
|
|
364
|
+
this.error(missingCredentialsMessage(context));
|
|
365
365
|
// Get data from file, --data, or --set flags
|
|
366
366
|
let items = [];
|
|
367
367
|
if (flags.file) {
|
|
@@ -571,9 +571,9 @@ export default class Ledgers extends Command {
|
|
|
571
571
|
async runExport(flags) {
|
|
572
572
|
const context = flags.context ? getContext(flags.context) : getCurrentContext();
|
|
573
573
|
if (!context)
|
|
574
|
-
this.error('No context configured. Run: aderis auth login --new');
|
|
575
|
-
if (!context
|
|
576
|
-
this.error(
|
|
574
|
+
this.error(flags.context ? `Context "${flags.context}" not found. List contexts with: aderis config list` : 'No context configured. Run: aderis auth login --new');
|
|
575
|
+
if (!hasCredentials(context))
|
|
576
|
+
this.error(missingCredentialsMessage(context));
|
|
577
577
|
const listEndpoint = ENDPOINTS['list'];
|
|
578
578
|
if (!listEndpoint)
|
|
579
579
|
this.error('Export requires a list endpoint');
|
|
@@ -589,6 +589,8 @@ export default class Ledgers extends Command {
|
|
|
589
589
|
baseParams.sortBy = normalizeSortBy(flags['sort-by']);
|
|
590
590
|
if (flags.include)
|
|
591
591
|
baseParams.include = flags.include;
|
|
592
|
+
if (flags.fields)
|
|
593
|
+
baseParams.fields = flags.fields;
|
|
592
594
|
if (flags.query) {
|
|
593
595
|
try {
|
|
594
596
|
Object.assign(baseParams, JSON.parse(flags.query));
|
|
@@ -643,12 +645,7 @@ export default class Ledgers extends Command {
|
|
|
643
645
|
}
|
|
644
646
|
}
|
|
645
647
|
process.stderr.write(' done\n');
|
|
646
|
-
// Filter fields if specified
|
|
647
648
|
let output = allItems;
|
|
648
|
-
if (flags.fields) {
|
|
649
|
-
const fieldList = flags.fields.split(',').map(f => f.trim());
|
|
650
|
-
output = this.filterFields(allItems, fieldList);
|
|
651
|
-
}
|
|
652
649
|
// Sanitize output if requested
|
|
653
650
|
if (flags.sanitize) {
|
|
654
651
|
output = this.sanitizeOutput(output);
|
|
@@ -665,9 +662,9 @@ export default class Ledgers extends Command {
|
|
|
665
662
|
async runCamt053Import(flags) {
|
|
666
663
|
const context = flags.context ? getContext(flags.context) : getCurrentContext();
|
|
667
664
|
if (!context)
|
|
668
|
-
this.error('No context configured. Run: aderis auth login --new');
|
|
669
|
-
if (!context
|
|
670
|
-
this.error(
|
|
665
|
+
this.error(flags.context ? `Context "${flags.context}" not found. List contexts with: aderis config list` : 'No context configured. Run: aderis auth login --new');
|
|
666
|
+
if (!hasCredentials(context))
|
|
667
|
+
this.error(missingCredentialsMessage(context));
|
|
671
668
|
if (!flags.file) {
|
|
672
669
|
this.error('CAMT.053 import requires --file (-f) flag with path to XML file');
|
|
673
670
|
}
|
|
@@ -755,9 +752,9 @@ export default class Ledgers extends Command {
|
|
|
755
752
|
}
|
|
756
753
|
const context = flags.context ? getContext(flags.context) : getCurrentContext();
|
|
757
754
|
if (!context)
|
|
758
|
-
this.error('No context configured. Run: aderis auth login --new');
|
|
759
|
-
if (!context
|
|
760
|
-
this.error(
|
|
755
|
+
this.error(flags.context ? `Context "${flags.context}" not found. List contexts with: aderis config list` : 'No context configured. Run: aderis auth login --new');
|
|
756
|
+
if (!hasCredentials(context))
|
|
757
|
+
this.error(missingCredentialsMessage(context));
|
|
761
758
|
// Get data from file, --data, or --set flags
|
|
762
759
|
let items = [];
|
|
763
760
|
if (flags.file) {
|
|
@@ -977,56 +974,6 @@ export default class Ledgers extends Command {
|
|
|
977
974
|
return `\$${op}`;
|
|
978
975
|
return opRe.test(rest) ? `\$${op}:${this.parseFilterValue(rest)}` : `\$${op}:${rest}`;
|
|
979
976
|
}
|
|
980
|
-
filterFields(data, fields) {
|
|
981
|
-
const isUnsafeKey = (k) => k === '__proto__' || k === 'constructor' || k === 'prototype';
|
|
982
|
-
const pick = (obj, keys) => {
|
|
983
|
-
// Group keys by their first segment so sibling sub-paths
|
|
984
|
-
// (e.g. 'items.amount' + 'items._type') resolve in one recursive pass
|
|
985
|
-
// and don't clobber each other on merge.
|
|
986
|
-
const directKeys = new Set();
|
|
987
|
-
const nestedKeys = new Map();
|
|
988
|
-
for (const key of keys) {
|
|
989
|
-
if (key.split('.').some(isUnsafeKey))
|
|
990
|
-
continue;
|
|
991
|
-
if (key.includes('.')) {
|
|
992
|
-
const [first, ...rest] = key.split('.');
|
|
993
|
-
if (isUnsafeKey(first))
|
|
994
|
-
continue;
|
|
995
|
-
const list = nestedKeys.get(first);
|
|
996
|
-
if (list) {
|
|
997
|
-
list.push(rest.join('.'));
|
|
998
|
-
}
|
|
999
|
-
else {
|
|
1000
|
-
nestedKeys.set(first, [rest.join('.')]);
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
else {
|
|
1004
|
-
directKeys.add(key);
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
const result = {};
|
|
1008
|
-
for (const key of directKeys) {
|
|
1009
|
-
if (key in obj)
|
|
1010
|
-
result[key] = obj[key];
|
|
1011
|
-
}
|
|
1012
|
-
for (const [first, restKeys] of nestedKeys) {
|
|
1013
|
-
const val = obj[first];
|
|
1014
|
-
if (!val || typeof val !== 'object')
|
|
1015
|
-
continue;
|
|
1016
|
-
if (Array.isArray(val)) {
|
|
1017
|
-
result[first] = val.map(item => pick(item, restKeys));
|
|
1018
|
-
}
|
|
1019
|
-
else {
|
|
1020
|
-
result[first] = pick(val, restKeys);
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1023
|
-
return result;
|
|
1024
|
-
};
|
|
1025
|
-
if (Array.isArray(data)) {
|
|
1026
|
-
return data.map(item => pick(item, fields));
|
|
1027
|
-
}
|
|
1028
|
-
return pick(data, fields);
|
|
1029
|
-
}
|
|
1030
977
|
sanitizeOutput(data) {
|
|
1031
978
|
const auditFields = ['_type', 'tenantId', 'createdAt', 'updatedAt', 'createdBy', 'updatedBy'];
|
|
1032
979
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class NangoIntegrations extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: never[];
|
|
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 sanitizeOutput;
|
|
35
|
+
private getColumns;
|
|
36
|
+
private getValue;
|
|
37
|
+
private printTable;
|
|
38
|
+
private printCsv;
|
|
39
|
+
}
|