@trayio/cdk-cli 2.19.0 → 2.21.0

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 CHANGED
@@ -19,7 +19,7 @@ $ npm install -g @trayio/cdk-cli
19
19
  $ tray-cdk COMMAND
20
20
  running command...
21
21
  $ tray-cdk (--version|-v)
22
- @trayio/cdk-cli/2.19.0 linux-x64 node-v18.19.0
22
+ @trayio/cdk-cli/2.21.0 linux-x64 node-v18.19.0
23
23
  $ tray-cdk --help [COMMAND]
24
24
  USAGE
25
25
  $ tray-cdk COMMAND
@@ -39,6 +39,7 @@ USAGE
39
39
  * [`tray-cdk help [COMMANDS]`](#tray-cdk-help-commands)
40
40
  * [`tray-cdk import-openapi-spec [OPENAPISPEC] [CONNECTORNAME]`](#tray-cdk-import-openapi-spec-openapispec-connectorname)
41
41
  * [`tray-cdk init [CONNECTORNAME]`](#tray-cdk-init-connectorname)
42
+ * [`tray-cdk permissions list [CONNECTORNAME] [CONNECTORVERSION]`](#tray-cdk-permissions-list-connectorname-connectorversion)
42
43
  * [`tray-cdk share [CONNECTORNAME] [CONNECTORVERSION]`](#tray-cdk-share-connectorname-connectorversion)
43
44
  * [`tray-cdk test [OPERATIONNAME]`](#tray-cdk-test-operationname)
44
45
  * [`tray-cdk version`](#tray-cdk-version)
@@ -192,6 +193,29 @@ DESCRIPTION
192
193
  Initialize a connector project
193
194
  ```
194
195
 
196
+ ## `tray-cdk permissions list [CONNECTORNAME] [CONNECTORVERSION]`
197
+
198
+ Retrieves a list of emails that have access to a connector
199
+
200
+ ```
201
+ USAGE
202
+ $ tray-cdk permissions list [CONNECTORNAME] [CONNECTORVERSION]
203
+
204
+ ARGUMENTS
205
+ CONNECTORNAME The name of the connector
206
+ CONNECTORVERSION The version of the connector
207
+
208
+ DESCRIPTION
209
+ Retrieves a list of emails that have access to a connector
210
+
211
+ EXAMPLES
212
+ $ tray-cdk permissions list
213
+
214
+ $ tray-cdk permissions list my-connector
215
+
216
+ $ tray-cdk permissions list my-connector 1.0
217
+ ```
218
+
195
219
  ## `tray-cdk share [CONNECTORNAME] [CONNECTORVERSION]`
196
220
 
197
221
  Share your connector version with other users in your organization
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAM,MAAM,aAAa,CAAC;AAW1C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IACnD,MAAM,CAAC,WAAW,SAAiC;IAEnD,MAAM,CAAC,IAAI,KAAM;IAEjB,OAAO,CAAC,mBAAmB,CAKzB;IAEI,GAAG;CAyDT"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAM,MAAM,aAAa,CAAC;AAW1C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IACnD,MAAM,CAAC,WAAW,SAAiC;IAEnD,MAAM,CAAC,IAAI,KAAM;IAEjB,OAAO,CAAC,mBAAmB,CAKzB;IAEI,GAAG;CA2DT"}
@@ -73,7 +73,7 @@ class DeployConnector extends core_1.Command {
73
73
  };
74
74
  core_1.ux.action.start('Starting Connector Deployment');
75
75
  const response = yield this.connectorDeployment.deployFromSourceCode(input);
76
- core_1.ux.action.stop();
76
+ core_1.ux.action.stop('Deployment started! This may take a few minutes. Use `tray-cdk deployment-status` to check the status.');
77
77
  if (response.isSuccess) {
78
78
  const { id } = response.value;
79
79
  if (response.value.repeatDeployment === true) {
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-status.d.ts","sourceRoot":"","sources":["../../src/commands/deployment-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,aAAa,CAAC;AAMhD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,OAAO;IACvD,MAAM,CAAC,WAAW,SAAoD;IAEtE,MAAM,CAAC,IAAI;;;;MAiBT;IAEF,OAAO,CAAC,mBAAmB,CAKzB;IAEI,GAAG;CAuDT"}
1
+ {"version":3,"file":"deployment-status.d.ts","sourceRoot":"","sources":["../../src/commands/deployment-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,aAAa,CAAC;AAOhD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,OAAO;IACvD,MAAM,CAAC,WAAW,SAAoD;IAEtE,MAAM,CAAC,IAAI;;;;MAiBT;IAEF,OAAO,CAAC,mBAAmB,CAKzB;IAEI,GAAG;CAyDT"}
@@ -14,6 +14,7 @@ const AxiosHttpClient_1 = require("@trayio/axios/http/AxiosHttpClient");
14
14
  const ConnectorDeploymentHttpClient_1 = require("@trayio/tray-client/connector/deployment/ConnectorDeploymentHttpClient");
15
15
  const ConnectorDeploymentApi_1 = require("@trayio/tray-api/connector/deployment/ConnectorDeploymentApi");
16
16
  const colorizeString_1 = require("../utils/colorizeString");
17
+ const check_env_1 = require("../utils/check-env");
17
18
  class GetDeploymentStatus extends core_1.Command {
18
19
  constructor() {
19
20
  super(...arguments);
@@ -23,6 +24,7 @@ class GetDeploymentStatus extends core_1.Command {
23
24
  }
24
25
  run() {
25
26
  return __awaiter(this, void 0, void 0, function* () {
27
+ (0, check_env_1.checkEnv)();
26
28
  const { args } = yield this.parse(GetDeploymentStatus);
27
29
  const TRAY_API_TOKEN = process.env.TRAY_API_TOKEN;
28
30
  const input = {
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class PermissionsList extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ connectorName: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ connectorVersion: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {};
10
+ private connectorPermissions;
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/permissions/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAa,MAAM,aAAa,CAAC;AAOvD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IACnD,MAAM,CAAC,WAAW,SAC4C;IAG9D,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;;MAWT;IAEF,MAAM,CAAC,KAAK,KAYV;IAEF,OAAO,CAAC,oBAAoB,CAK1B;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoDjC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const core_1 = require("@oclif/core");
16
+ const AxiosHttpClient_1 = require("@trayio/axios/http/AxiosHttpClient");
17
+ const inquirer_1 = __importDefault(require("inquirer"));
18
+ const ConnectorPermissionsHttpClient_1 = require("@trayio/tray-client/connector/permissions/ConnectorPermissionsHttpClient");
19
+ const check_env_1 = require("../../utils/check-env");
20
+ const colorizeString_1 = require("../../utils/colorizeString");
21
+ class PermissionsList extends core_1.Command {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.connectorPermissions = new ConnectorPermissionsHttpClient_1.ConnectorPermissionsHttpClient({
25
+ baseUrl: process.env.TRAY_API_URL,
26
+ }, new AxiosHttpClient_1.AxiosHttpClient());
27
+ }
28
+ run() {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ (0, check_env_1.checkEnv)();
31
+ const { args, flags } = yield this.parse(PermissionsList);
32
+ const TRAY_API_TOKEN = process.env.TRAY_API_TOKEN;
33
+ const promptRes = yield inquirer_1.default.prompt([
34
+ {
35
+ name: 'connectorName',
36
+ message: 'The name of the connector to share',
37
+ type: 'input',
38
+ when: !args.connectorName,
39
+ },
40
+ {
41
+ name: 'connectorVersion',
42
+ message: 'The version of the connector to share',
43
+ type: 'input',
44
+ when: !args.connectorVersion,
45
+ },
46
+ // {
47
+ // name: 'permissionsType',
48
+ // message: 'How would you like to list connector permissions?',
49
+ // type: 'list',
50
+ // choices: [{ name: 'emails' }, { name: 'workspaces' }],
51
+ // when: !flags.email && !flags.workspaces,
52
+ // },
53
+ ]);
54
+ const input = {
55
+ connectorName: args.connectorName || promptRes.connectorName,
56
+ connectorVersion: args.connectorVersion || promptRes.connectorVersion,
57
+ token: TRAY_API_TOKEN,
58
+ };
59
+ core_1.ux.action.start(`Checking the connector deployment status`);
60
+ const response = yield this.connectorPermissions.listSharedEmails(input);
61
+ core_1.ux.action.stop();
62
+ if (response.isSuccess) {
63
+ this.log((0, colorizeString_1.success)(`Success! These are the emails that have access to ${input.connectorName}:`));
64
+ this.log(response.value.emails.join('\n'));
65
+ }
66
+ if (response.isFailure) {
67
+ this.log((0, colorizeString_1.error)(`There was an error when listing connector permissions.`));
68
+ }
69
+ });
70
+ }
71
+ }
72
+ PermissionsList.description = 'Retrieves a list of emails that have access to a connector';
73
+ // 'Retrieves a list of emails and workspaces that have access to a connector';
74
+ PermissionsList.examples = [
75
+ '<%= config.bin %> <%= command.id %>',
76
+ '<%= config.bin %> <%= command.id %> my-connector',
77
+ '<%= config.bin %> <%= command.id %> my-connector 1.0',
78
+ ];
79
+ PermissionsList.args = {
80
+ connectorName: core_1.Args.string({
81
+ name: 'Connector Name',
82
+ required: false,
83
+ description: 'The name of the connector',
84
+ }),
85
+ connectorVersion: core_1.Args.string({
86
+ name: 'Connector Version',
87
+ required: false,
88
+ description: 'The version of the connector',
89
+ }),
90
+ };
91
+ PermissionsList.flags = {
92
+ // email: Flags.string({
93
+ // char: 'e',
94
+ // aliases: ['emails', 'email'],
95
+ // description: 'Retrieve a list of emails that have access to a connector',
96
+ // }),
97
+ // workspaces: Flags.string({
98
+ // char: 'w',
99
+ // aliases: ['workspaces', 'workspace'],
100
+ // description:
101
+ // 'Retrieve a list of workspace IDs that have access to a connector',
102
+ // }),
103
+ };
104
+ exports.default = PermissionsList;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.unit.test.d.ts","sourceRoot":"","sources":["../../../src/commands/permissions/list.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ConnectorPermissionsHttpClient_1 = require("@trayio/tray-client/connector/permissions/ConnectorPermissionsHttpClient");
16
+ const stdout_stderr_1 = require("stdout-stderr");
17
+ const list_1 = __importDefault(require("./list"));
18
+ jest.mock('@trayio/tray-client/connector/permissions/ConnectorPermissionsHttpClient', () => ({
19
+ ConnectorPermissionsHttpClient: jest.fn(),
20
+ }));
21
+ describe('PermissionsList', () => {
22
+ let success = true;
23
+ let failure = false;
24
+ const connectorName = 'some-connector-name';
25
+ const connectorVersion = '1.0';
26
+ const emails = ['some@test.com', 'someOther@test.com'];
27
+ beforeEach(() => {
28
+ ConnectorPermissionsHttpClient_1.ConnectorPermissionsHttpClient.mockImplementation(() => ({
29
+ listSharedEmails: jest.fn().mockReturnValue(Object.assign(Object.assign(Object.assign({ isSuccess: success }, (success && {
30
+ value: {
31
+ emails,
32
+ },
33
+ })), { isFailure: true }), (failure && {
34
+ error: {
35
+ message: 'There was an error listing connector permissions',
36
+ },
37
+ }))),
38
+ }));
39
+ });
40
+ afterAll(() => {
41
+ jest.clearAllMocks();
42
+ });
43
+ it('should list shared emails', () => __awaiter(void 0, void 0, void 0, function* () {
44
+ stdout_stderr_1.stdout.start();
45
+ yield list_1.default.run([connectorName, connectorVersion]);
46
+ stdout_stderr_1.stdout.stop();
47
+ expect(stdout_stderr_1.stdout.output).toEqual(expect.stringContaining(`Success! These are the emails that have access to some-connector-name:`));
48
+ expect(stdout_stderr_1.stdout.output).toEqual(expect.stringContaining(emails.join('\n')));
49
+ }));
50
+ it('should handle error when listing shared emails', () => __awaiter(void 0, void 0, void 0, function* () {
51
+ success = false;
52
+ failure = true;
53
+ stdout_stderr_1.stdout.start();
54
+ yield list_1.default.run([connectorName, connectorVersion]);
55
+ stdout_stderr_1.stdout.stop();
56
+ expect(stdout_stderr_1.stdout.output).toEqual(expect.stringContaining(`There was an error when listing connector permissions.`));
57
+ }));
58
+ });
@@ -75,7 +75,7 @@ describe('Share', () => {
75
75
  connectorName,
76
76
  connectorVersion,
77
77
  emails: ['test.user@tray.io', 'another.user@tray.io'],
78
- token: undefined,
78
+ token: process.env.TRAY_API_TOKEN,
79
79
  });
80
80
  expect(stdout_stderr_1.stdout.output).toEqual(expect.stringContaining('1 permissions added'));
81
81
  }));
@@ -100,7 +100,7 @@ describe('Share', () => {
100
100
  connectorName,
101
101
  connectorVersion,
102
102
  workspaceIds: ['workspace-id', 'another-workspace-id'],
103
- token: undefined,
103
+ token: process.env.TRAY_API_TOKEN,
104
104
  });
105
105
  expect(stdout_stderr_1.stdout.output).toEqual(expect.stringContaining('5 permissions added'));
106
106
  expect(stdout_stderr_1.stdout.output).toEqual(expect.stringContaining('No permissions to add for workspace: 9b31dc75-3217-458b-923a-8a48ff5b5e'));
@@ -8,10 +8,14 @@ describe('checkEnv', () => {
8
8
  process.env = env;
9
9
  });
10
10
  it('should throw an error if TRAY_API_URL is not set', () => {
11
+ process.env = { TRAY_API_URL: undefined };
11
12
  expect(() => subject()).toThrowError('required env TRAY_API_URL is not set');
12
13
  });
13
14
  it('should throw an error if TRAY_API_TOKEN is not set', () => {
14
- process.env = { TRAY_API_URL: 'https://api.tray.io' };
15
+ process.env = {
16
+ TRAY_API_URL: 'https://api.tray.io',
17
+ TRAY_API_TOKEN: undefined,
18
+ };
15
19
  expect(() => subject()).toThrowError('required env TRAY_API_TOKEN is not set');
16
20
  });
17
21
  it('should throw an error if TRAY_API_URL is invalid', () => {
@@ -291,7 +291,44 @@
291
291
  "commands",
292
292
  "test.js"
293
293
  ]
294
+ },
295
+ "permissions:list": {
296
+ "aliases": [],
297
+ "args": {
298
+ "connectorName": {
299
+ "description": "The name of the connector",
300
+ "name": "connectorName",
301
+ "required": false
302
+ },
303
+ "connectorVersion": {
304
+ "description": "The version of the connector",
305
+ "name": "connectorVersion",
306
+ "required": false
307
+ }
308
+ },
309
+ "description": "Retrieves a list of emails that have access to a connector",
310
+ "examples": [
311
+ "<%= config.bin %> <%= command.id %>",
312
+ "<%= config.bin %> <%= command.id %> my-connector",
313
+ "<%= config.bin %> <%= command.id %> my-connector 1.0"
314
+ ],
315
+ "flags": {},
316
+ "hasDynamicHelp": false,
317
+ "hiddenAliases": [],
318
+ "id": "permissions:list",
319
+ "pluginAlias": "@trayio/cdk-cli",
320
+ "pluginName": "@trayio/cdk-cli",
321
+ "pluginType": "core",
322
+ "strict": true,
323
+ "enableJsonFlag": false,
324
+ "isESM": false,
325
+ "relativePath": [
326
+ "dist",
327
+ "commands",
328
+ "permissions",
329
+ "list.js"
330
+ ]
294
331
  }
295
332
  },
296
- "version": "2.19.0"
333
+ "version": "2.21.0"
297
334
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trayio/cdk-cli",
3
- "version": "2.19.0",
3
+ "version": "2.21.0",
4
4
  "description": "A CLI for connector development",
5
5
  "exports": {
6
6
  "./*": "./dist/*.js"
@@ -19,12 +19,12 @@
19
19
  "@oclif/plugin-help": "6.0.12",
20
20
  "@oclif/plugin-version": "2.0.11",
21
21
  "@oclif/test": "3.1.12",
22
- "@trayio/axios": "2.19.0",
23
- "@trayio/cdk-build": "2.19.0",
24
- "@trayio/commons": "2.19.0",
25
- "@trayio/generator": "2.19.0",
26
- "@trayio/tray-client": "2.19.0",
27
- "@trayio/tray-openapi": "2.19.0",
22
+ "@trayio/axios": "2.21.0",
23
+ "@trayio/cdk-build": "2.21.0",
24
+ "@trayio/commons": "2.21.0",
25
+ "@trayio/generator": "2.21.0",
26
+ "@trayio/tray-client": "2.21.0",
27
+ "@trayio/tray-openapi": "2.21.0",
28
28
  "@types/inquirer": "8.2.6",
29
29
  "chalk": "4.1.2",
30
30
  "inquirer": "8.2.5"