@unito/integration-cli 0.64.5 → 0.64.6

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.
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from '../baseCommand';
2
+ import * as GlobalConfiguration from '../resources/globalConfiguration';
3
+ export default class Graph extends BaseCommand<typeof Graph> {
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ operation: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ catch(error: Error): Promise<void>;
10
+ static flags: {
11
+ path: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ port: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ environment: import("@oclif/core/lib/interfaces").OptionFlag<GlobalConfiguration.Environment, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ 'test-account': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ 'credential-payload': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ 'credential-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ 'config-path': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ };
20
+ run(): Promise<void>;
21
+ }
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const crypto_1 = tslib_1.__importDefault(require("crypto"));
5
+ const fs_1 = tslib_1.__importDefault(require("fs"));
6
+ const core_1 = require("@oclif/core");
7
+ const baseCommand_1 = require("../baseCommand");
8
+ const errors_1 = require("../errors");
9
+ const GlobalConfiguration = tslib_1.__importStar(require("../resources/globalConfiguration"));
10
+ const integrations_1 = require("../resources/integrations");
11
+ const configuration_1 = require("../resources/configuration");
12
+ const decryption_1 = require("../resources/decryption");
13
+ const credentials_1 = require("../resources/credentials");
14
+ class Graph extends baseCommand_1.BaseCommand {
15
+ static description = 'Query a running integration graph and print the response';
16
+ static examples = [
17
+ '<%= config.bin %> <%= command.id %> --path=/sobjects/Opportunity/records/abc123',
18
+ '<%= config.bin %> <%= command.id %> get --path=/sobjects/Opportunity --port=9201',
19
+ ];
20
+ static args = {
21
+ operation: core_1.Args.string({
22
+ description: 'Operation to perform on the graph path',
23
+ required: false,
24
+ default: 'get',
25
+ options: ['get', 'getItem', 'getCollection', 'createItem', 'updateItem', 'deleteItem'],
26
+ }),
27
+ };
28
+ async catch(error) {
29
+ /* istanbul ignore if */
30
+ if ((0, errors_1.handleError)(this, error)) {
31
+ this.exit(-1);
32
+ }
33
+ throw error;
34
+ }
35
+ static flags = {
36
+ path: core_1.Flags.string({
37
+ description: 'Graph path to fetch (must start with /), e.g. /sobjects/Opportunity/records/abc123',
38
+ required: true,
39
+ }),
40
+ port: core_1.Flags.integer({
41
+ description: 'Port the integration is running on',
42
+ default: 9200,
43
+ }),
44
+ environment: core_1.Flags.custom({
45
+ description: 'the environment of the platform',
46
+ options: Object.values(GlobalConfiguration.Environment),
47
+ default: GlobalConfiguration.Environment.Production,
48
+ })(),
49
+ 'test-account': core_1.Flags.string({
50
+ description: 'test account to use',
51
+ options: Object.values(configuration_1.CredentialScope),
52
+ default: configuration_1.CredentialScope.DEVELOPMENT,
53
+ }),
54
+ 'credential-payload': core_1.Flags.string({
55
+ description: '(advanced) credential payload to use.',
56
+ exclusive: ['credential-id'],
57
+ }),
58
+ 'credential-id': core_1.Flags.string({
59
+ description: '(advanced) credential to use.',
60
+ exclusive: ['credential-payload'],
61
+ }),
62
+ 'config-path': core_1.Flags.string({
63
+ summary: 'relative path to a custom ".unito.json" file',
64
+ description: `Use a custom configuration file instead of the default '.unito.json'.
65
+
66
+ If you want to force the CLI to use a specific configuration file, you can use this flag to specify the relative
67
+ path from your integration's root folder (with a leading '/').
68
+
69
+ Usage: <%= config.bin %> <%= command.id %> --config-path=/myCustomConfig.json`,
70
+ }),
71
+ output: core_1.Flags.string({
72
+ char: 'o',
73
+ description: 'Write response body to file instead of stdout',
74
+ }),
75
+ };
76
+ async run() {
77
+ (0, integrations_1.validateIsIntegrationDirectory)();
78
+ const { args, flags } = await this.parse(Graph);
79
+ const operation = args.operation ?? 'get';
80
+ if (operation === 'createItem' || operation === 'updateItem' || operation === 'deleteItem') {
81
+ this.error(`Operation "${operation}" is not yet implemented`, { exit: 1 });
82
+ }
83
+ const environment = flags.environment ?? GlobalConfiguration.Environment.Production;
84
+ const configuration = await (0, configuration_1.getConfiguration)(environment, flags['config-path']);
85
+ // Credential resolution — identical to dev.ts
86
+ let credentialPayload = '{}';
87
+ if (flags['credential-id']) {
88
+ const credential = await (0, credentials_1.fetchCredential)(environment, this.config.configDir, flags['credential-id']);
89
+ credentialPayload = JSON.stringify({
90
+ ...credential.payload,
91
+ unitoCredentialId: credential.id,
92
+ unitoUserId: credential.unitoUserId,
93
+ });
94
+ }
95
+ else if (flags['credential-payload']) {
96
+ credentialPayload = flags['credential-payload'];
97
+ }
98
+ else {
99
+ const credentials = configuration.testAccounts?.[flags['test-account']];
100
+ if (credentials) {
101
+ const decryptedEntries = await (0, decryption_1.decryptEntries)(configuration.name, environment, this.config.configDir, credentials);
102
+ if (decryptedEntries.failed.length) {
103
+ throw new errors_1.EntryDecryptionError(decryptedEntries.failed.at(0), environment);
104
+ }
105
+ credentialPayload = JSON.stringify({
106
+ ...decryptedEntries.successful,
107
+ unitoCredentialId: flags['test-account'],
108
+ unitoUserId: flags['test-account'],
109
+ });
110
+ }
111
+ }
112
+ // Load secrets — identical to dev.ts
113
+ const { successful: secrets, failed: failedSecrets } = await (0, decryption_1.decryptEntries)(configuration.name, environment, this.config.configDir, configuration.secrets ?? {});
114
+ if (failedSecrets.length) {
115
+ throw new errors_1.EntryDecryptionError(failedSecrets.at(0), environment);
116
+ }
117
+ // Build Unito request headers.
118
+ // Encoding: base64(JSON.stringify(payload)) — same as integrationDebugger/src/services/crawlerDriver.ts line 424.
119
+ const headers = {
120
+ 'X-Unito-Credentials': Buffer.from(credentialPayload).toString('base64'),
121
+ 'X-Unito-Secrets': Buffer.from(JSON.stringify(secrets)).toString('base64'),
122
+ 'X-Unito-Correlation-Id': crypto_1.default.randomUUID(),
123
+ 'Content-Type': 'application/json',
124
+ };
125
+ const url = `http://localhost:${flags.port}${flags.path}`;
126
+ const response = await fetch(url, { headers });
127
+ if (!response.ok) {
128
+ const body = await response.json().catch(() => undefined);
129
+ if (body !== undefined) {
130
+ this.logToStderr(JSON.stringify(body, null, 2));
131
+ }
132
+ this.error(`HTTP ${response.status} from ${url}`, { exit: response.status });
133
+ }
134
+ const body = (await response.json());
135
+ const json = JSON.stringify(body, null, 2);
136
+ if (flags.output) {
137
+ await fs_1.default.promises.writeFile(flags.output, json, 'utf8');
138
+ }
139
+ else {
140
+ this.log(json);
141
+ }
142
+ }
143
+ }
144
+ exports.default = Graph;
@@ -4,7 +4,9 @@ const tslib_1 = require("tslib");
4
4
  const core_1 = require("@oclif/core");
5
5
  const gradient = tslib_1.__importStar(require("gradient-string"));
6
6
  const updateNotifier_1 = require("./updateNotifier");
7
- const displayLogo = async function () {
7
+ const displayLogo = async function ({ id }) {
8
+ if (id === 'graph')
9
+ return;
8
10
  const gradients = [
9
11
  gradient.atlas,
10
12
  gradient.mind,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const fs_1 = tslib_1.__importDefault(require("fs"));
5
+ const test_1 = require("@oclif/test");
6
+ const sinon_1 = tslib_1.__importDefault(require("sinon"));
7
+ const Configuration = tslib_1.__importStar(require("../../src/resources/configuration"));
8
+ const Decryption = tslib_1.__importStar(require("../../src/resources/decryption"));
9
+ const Integrations = tslib_1.__importStar(require("../../src/resources/integrations"));
10
+ const MOCK_CONFIG = {
11
+ name: 'salesforce-v2',
12
+ testAccounts: {
13
+ development: { token: 'test-token' },
14
+ },
15
+ secrets: {},
16
+ };
17
+ const MOCK_RESPONSE = {
18
+ label: 'Opportunity',
19
+ fields: [{ name: 'Name', type: 'string' }],
20
+ relations: [{ name: 'tasks', semantic: 'subtasks', path: '/sobjects/Task/records?filter=WhatId=abc' }],
21
+ };
22
+ describe('graph', () => {
23
+ beforeEach(() => {
24
+ sinon_1.default.stub(Integrations, 'validateIsIntegrationDirectory');
25
+ sinon_1.default.stub(Decryption, 'decryptEntries').resolves({
26
+ successful: { token: 'test-token' },
27
+ failed: [],
28
+ });
29
+ });
30
+ afterEach(() => sinon_1.default.restore());
31
+ test_1.test
32
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
33
+ .stub(global, 'fetch', stub => stub.resolves({
34
+ ok: true,
35
+ status: 200,
36
+ json: () => Promise.resolve(MOCK_RESPONSE),
37
+ }))
38
+ .stdout()
39
+ .command(['graph', '--path=/sobjects/Opportunity/records/abc123'])
40
+ .it('prints pretty-printed JSON response to stdout', ctx => {
41
+ (0, test_1.expect)(ctx.stdout).to.contain('"label": "Opportunity"');
42
+ (0, test_1.expect)(ctx.stdout).to.contain('"semantic": "subtasks"');
43
+ });
44
+ test_1.test
45
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
46
+ .stub(global, 'fetch', stub => stub.resolves({
47
+ ok: true,
48
+ status: 200,
49
+ json: () => Promise.resolve(MOCK_RESPONSE),
50
+ }))
51
+ .stdout()
52
+ .command(['graph', '--path=/sobjects/Opportunity/records/abc123'])
53
+ .it('calls fetch with the correct default-port URL', () => {
54
+ const fetchStub = global.fetch;
55
+ (0, test_1.expect)(fetchStub.calledOnce).to.be.true;
56
+ const [calledUrl] = fetchStub.firstCall.args;
57
+ (0, test_1.expect)(calledUrl).to.equal('http://localhost:9200/sobjects/Opportunity/records/abc123');
58
+ });
59
+ test_1.test
60
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
61
+ .stub(global, 'fetch', stub => stub.resolves({
62
+ ok: true,
63
+ status: 200,
64
+ json: () => Promise.resolve(MOCK_RESPONSE),
65
+ }))
66
+ .stdout()
67
+ .command(['graph', '--path=/sobjects/Opportunity', '--port=9201'])
68
+ .it('uses custom port when specified', () => {
69
+ const fetchStub = global.fetch;
70
+ const [calledUrl] = fetchStub.firstCall.args;
71
+ (0, test_1.expect)(calledUrl).to.equal('http://localhost:9201/sobjects/Opportunity');
72
+ });
73
+ test_1.test
74
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
75
+ .stub(global, 'fetch', stub => stub.resolves({
76
+ ok: false,
77
+ status: 404,
78
+ json: () => Promise.resolve({ error: 'Not found' }),
79
+ }))
80
+ .stdout()
81
+ .stderr()
82
+ .command(['graph', '--path=/sobjects/NonExistent/records/abc'])
83
+ .catch(err => {
84
+ (0, test_1.expect)(err.message).to.contain('404');
85
+ (0, test_1.expect)(err.oclif?.exit).to.equal(404);
86
+ })
87
+ .it('exits with HTTP status code and prints error body to stderr', ctx => {
88
+ (0, test_1.expect)(ctx.stderr).to.contain('"error": "Not found"');
89
+ });
90
+ test_1.test
91
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
92
+ .stub(global, 'fetch', stub => stub.resolves({
93
+ ok: true,
94
+ status: 200,
95
+ json: () => Promise.resolve(MOCK_RESPONSE),
96
+ }))
97
+ .stdout()
98
+ .command(['graph', '--path=/sobjects/Opportunity'])
99
+ .it('sets base64-encoded X-Unito-Credentials header', () => {
100
+ const fetchStub = global.fetch;
101
+ const [, options] = fetchStub.firstCall.args;
102
+ const decoded = Buffer.from(options.headers['X-Unito-Credentials'], 'base64').toString('utf8');
103
+ const credentials = JSON.parse(decoded);
104
+ (0, test_1.expect)(credentials).to.have.property('token', 'test-token');
105
+ });
106
+ test_1.test
107
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
108
+ .stub(global, 'fetch', stub => stub.resolves({
109
+ ok: true,
110
+ status: 200,
111
+ json: () => Promise.resolve(MOCK_RESPONSE),
112
+ }))
113
+ .stub(fs_1.default.promises, 'writeFile', stub => stub.resolves())
114
+ .stdout()
115
+ .command(['graph', '--path=/sobjects/Opportunity', '--output=/tmp/response.json'])
116
+ .it('writes response to file when --output is provided', ctx => {
117
+ const writeStub = fs_1.default.promises.writeFile;
118
+ (0, test_1.expect)(writeStub.calledOnce).to.be.true;
119
+ const [path, content] = writeStub.firstCall.args;
120
+ (0, test_1.expect)(path).to.equal('/tmp/response.json');
121
+ (0, test_1.expect)(content).to.contain('"label": "Opportunity"');
122
+ (0, test_1.expect)(ctx.stdout).to.equal('');
123
+ });
124
+ test_1.test
125
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
126
+ .stub(global, 'fetch', stub => stub.resolves({
127
+ ok: true,
128
+ status: 200,
129
+ json: () => Promise.resolve(MOCK_RESPONSE),
130
+ }))
131
+ .stdout()
132
+ .command(['graph', '--path=/sobjects/Opportunity'])
133
+ .it('prints to stdout when --output is not provided', ctx => {
134
+ (0, test_1.expect)(ctx.stdout).to.contain('"label": "Opportunity"');
135
+ });
136
+ test_1.test
137
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
138
+ .stub(global, 'fetch', stub => stub.resolves({
139
+ ok: true,
140
+ status: 200,
141
+ json: () => Promise.resolve(MOCK_RESPONSE),
142
+ }))
143
+ .stdout()
144
+ .command(['graph', 'get', '--path=/sobjects/Opportunity'])
145
+ .it('accepts explicit "get" operation arg', ctx => {
146
+ (0, test_1.expect)(ctx.stdout).to.contain('"label": "Opportunity"');
147
+ });
148
+ test_1.test
149
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
150
+ .stub(global, 'fetch', stub => stub.resolves({
151
+ ok: true,
152
+ status: 200,
153
+ json: () => Promise.resolve(MOCK_RESPONSE),
154
+ }))
155
+ .stdout()
156
+ .command(['graph', 'getItem', '--path=/sobjects/Opportunity'])
157
+ .it('treats "getItem" as a get operation', ctx => {
158
+ (0, test_1.expect)(ctx.stdout).to.contain('"label": "Opportunity"');
159
+ });
160
+ test_1.test
161
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
162
+ .stub(global, 'fetch', stub => stub.resolves({
163
+ ok: true,
164
+ status: 200,
165
+ json: () => Promise.resolve(MOCK_RESPONSE),
166
+ }))
167
+ .stdout()
168
+ .command(['graph', 'getCollection', '--path=/sobjects/Opportunity'])
169
+ .it('treats "getCollection" as a get operation', ctx => {
170
+ (0, test_1.expect)(ctx.stdout).to.contain('"label": "Opportunity"');
171
+ });
172
+ for (const op of ['createItem', 'updateItem', 'deleteItem']) {
173
+ test_1.test
174
+ .stub(Configuration, 'getConfiguration', stub => stub.resolves(MOCK_CONFIG))
175
+ .command(['graph', op, '--path=/sobjects/Opportunity'])
176
+ .catch(err => {
177
+ (0, test_1.expect)(err.message).to.contain(`Operation "${op}" is not yet implemented`);
178
+ })
179
+ .it(`rejects "${op}" as not yet implemented`);
180
+ }
181
+ test_1.test
182
+ .stderr()
183
+ .command(['graph', 'put', '--path=/sobjects/Opportunity'])
184
+ .catch(err => {
185
+ (0, test_1.expect)(err.message).to.contain('Expected put to be one of');
186
+ })
187
+ .it('rejects invalid operation arg');
188
+ });
@@ -1 +1 @@
1
- {"root":["../src/baseCommand.ts","../src/configurationTypes.ts","../src/errors.ts","../src/index.ts","../src/commands/activity.ts","../src/commands/dev.ts","../src/commands/encrypt.ts","../src/commands/init.ts","../src/commands/invite.ts","../src/commands/login.ts","../src/commands/oauth2.ts","../src/commands/publish.ts","../src/commands/test.ts","../src/commands/upgrade.ts","../src/hooks/init/displayLogo.ts","../src/hooks/init/updateNotifier.ts","../src/resources/configuration.ts","../src/resources/credentials.ts","../src/resources/decryption.ts","../src/resources/fileSystem.ts","../src/resources/globalConfiguration.ts","../src/resources/integrations.ts","../src/resources/integrationsPlatform.ts","../src/resources/oauth2.ts","../src/resources/template.ts","../src/services/integrationsPlatform.ts","../src/services/integrationsPlatformClient.ts","../src/services/oauth2.ts","../test/errors.test.ts","../test/commands/activity.test.ts","../test/commands/dev.test.ts","../test/commands/encrypt.test.ts","../test/commands/init.test.ts","../test/commands/invite.test.ts","../test/commands/login.test.ts","../test/commands/oauth2.test.ts","../test/commands/publish.test.ts","../test/commands/test.test.ts","../test/commands/upgrade.test.ts","../test/helpers/init.js","../test/helpers/integrations.ts","../test/helpers/styles.ts","../test/hooks/updateNotifier.test.ts","../test/resources/configuration.test.ts","../test/resources/decryption.test.ts","../test/resources/globalConfiguration.test.ts","../test/resources/integrations.test.ts","../test/resources/oauth2.test.ts","../test/resources/template.test.ts","../test/services/integrationsPlatform.test.ts","../test/services/oauth2.test.ts","../scripts/generateTypes.ts","../.eslintrc.js"],"version":"5.9.3"}
1
+ {"root":["../src/baseCommand.ts","../src/configurationTypes.ts","../src/errors.ts","../src/index.ts","../src/commands/activity.ts","../src/commands/dev.ts","../src/commands/encrypt.ts","../src/commands/graph.ts","../src/commands/init.ts","../src/commands/invite.ts","../src/commands/login.ts","../src/commands/oauth2.ts","../src/commands/publish.ts","../src/commands/test.ts","../src/commands/upgrade.ts","../src/hooks/init/displayLogo.ts","../src/hooks/init/updateNotifier.ts","../src/resources/configuration.ts","../src/resources/credentials.ts","../src/resources/decryption.ts","../src/resources/fileSystem.ts","../src/resources/globalConfiguration.ts","../src/resources/integrations.ts","../src/resources/integrationsPlatform.ts","../src/resources/oauth2.ts","../src/resources/template.ts","../src/services/integrationsPlatform.ts","../src/services/integrationsPlatformClient.ts","../src/services/oauth2.ts","../test/errors.test.ts","../test/commands/activity.test.ts","../test/commands/dev.test.ts","../test/commands/encrypt.test.ts","../test/commands/graph.test.ts","../test/commands/init.test.ts","../test/commands/invite.test.ts","../test/commands/login.test.ts","../test/commands/oauth2.test.ts","../test/commands/publish.test.ts","../test/commands/test.test.ts","../test/commands/upgrade.test.ts","../test/helpers/init.js","../test/helpers/integrations.ts","../test/helpers/styles.ts","../test/hooks/updateNotifier.test.ts","../test/resources/configuration.test.ts","../test/resources/decryption.test.ts","../test/resources/globalConfiguration.test.ts","../test/resources/integrations.test.ts","../test/resources/oauth2.test.ts","../test/resources/template.test.ts","../test/services/integrationsPlatform.test.ts","../test/services/oauth2.test.ts","../scripts/generateTypes.ts","../.eslintrc.js"],"version":"5.9.3"}
@@ -253,6 +253,131 @@
253
253
  "encrypt.js"
254
254
  ]
255
255
  },
256
+ "graph": {
257
+ "aliases": [],
258
+ "args": {
259
+ "operation": {
260
+ "default": "get",
261
+ "description": "Operation to perform on the graph path",
262
+ "name": "operation",
263
+ "options": [
264
+ "get",
265
+ "getItem",
266
+ "getCollection",
267
+ "createItem",
268
+ "updateItem",
269
+ "deleteItem"
270
+ ],
271
+ "required": false
272
+ }
273
+ },
274
+ "description": "Query a running integration graph and print the response",
275
+ "examples": [
276
+ "<%= config.bin %> <%= command.id %> --path=/sobjects/Opportunity/records/abc123",
277
+ "<%= config.bin %> <%= command.id %> get --path=/sobjects/Opportunity --port=9201"
278
+ ],
279
+ "flags": {
280
+ "json": {
281
+ "description": "Format output as json.",
282
+ "helpGroup": "GLOBAL",
283
+ "name": "json",
284
+ "allowNo": false,
285
+ "type": "boolean"
286
+ },
287
+ "path": {
288
+ "description": "Graph path to fetch (must start with /), e.g. /sobjects/Opportunity/records/abc123",
289
+ "name": "path",
290
+ "required": true,
291
+ "hasDynamicHelp": false,
292
+ "multiple": false,
293
+ "type": "option"
294
+ },
295
+ "port": {
296
+ "description": "Port the integration is running on",
297
+ "name": "port",
298
+ "default": 9200,
299
+ "hasDynamicHelp": false,
300
+ "multiple": false,
301
+ "type": "option"
302
+ },
303
+ "environment": {
304
+ "description": "the environment of the platform",
305
+ "name": "environment",
306
+ "default": "production",
307
+ "hasDynamicHelp": false,
308
+ "multiple": false,
309
+ "options": [
310
+ "local",
311
+ "staging",
312
+ "production"
313
+ ],
314
+ "type": "option"
315
+ },
316
+ "test-account": {
317
+ "description": "test account to use",
318
+ "name": "test-account",
319
+ "default": "development",
320
+ "hasDynamicHelp": false,
321
+ "multiple": false,
322
+ "options": [
323
+ "development",
324
+ "compliance"
325
+ ],
326
+ "type": "option"
327
+ },
328
+ "credential-payload": {
329
+ "description": "(advanced) credential payload to use.",
330
+ "exclusive": [
331
+ "credential-id"
332
+ ],
333
+ "name": "credential-payload",
334
+ "hasDynamicHelp": false,
335
+ "multiple": false,
336
+ "type": "option"
337
+ },
338
+ "credential-id": {
339
+ "description": "(advanced) credential to use.",
340
+ "exclusive": [
341
+ "credential-payload"
342
+ ],
343
+ "name": "credential-id",
344
+ "hasDynamicHelp": false,
345
+ "multiple": false,
346
+ "type": "option"
347
+ },
348
+ "config-path": {
349
+ "description": "Use a custom configuration file instead of the default '.unito.json'.\n\n If you want to force the CLI to use a specific configuration file, you can use this flag to specify the relative\n path from your integration's root folder (with a leading '/').\n\n Usage: <%= config.bin %> <%= command.id %> --config-path=/myCustomConfig.json",
350
+ "name": "config-path",
351
+ "summary": "relative path to a custom \".unito.json\" file",
352
+ "hasDynamicHelp": false,
353
+ "multiple": false,
354
+ "type": "option"
355
+ },
356
+ "output": {
357
+ "char": "o",
358
+ "description": "Write response body to file instead of stdout",
359
+ "name": "output",
360
+ "hasDynamicHelp": false,
361
+ "multiple": false,
362
+ "type": "option"
363
+ }
364
+ },
365
+ "hasDynamicHelp": false,
366
+ "hiddenAliases": [],
367
+ "id": "graph",
368
+ "pluginAlias": "@unito/integration-cli",
369
+ "pluginName": "@unito/integration-cli",
370
+ "pluginType": "core",
371
+ "strict": true,
372
+ "enableJsonFlag": true,
373
+ "isESM": false,
374
+ "relativePath": [
375
+ "dist",
376
+ "src",
377
+ "commands",
378
+ "graph.js"
379
+ ]
380
+ },
256
381
  "init": {
257
382
  "aliases": [],
258
383
  "args": {},
@@ -748,5 +873,5 @@
748
873
  ]
749
874
  }
750
875
  },
751
- "version": "0.64.5"
876
+ "version": "0.64.6"
752
877
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unito/integration-cli",
3
- "version": "0.64.5",
3
+ "version": "0.64.6",
4
4
  "description": "Integration CLI",
5
5
  "bin": {
6
6
  "integration-cli": "./bin/run"