opal-security 3.1.0 → 3.1.1-beta.4a79f20
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 +18 -34
- package/lib/commands/request/create.js +8 -6
- package/lib/commands/request/get.d.ts +6 -1
- package/lib/commands/request/get.js +99 -5
- package/lib/commands/request/list.d.ts +6 -2
- package/lib/commands/request/list.js +87 -6
- package/lib/graphql/gql.d.ts +22 -2
- package/lib/graphql/gql.js +5 -1
- package/lib/graphql/graphql.d.ts +254 -117
- package/lib/graphql/graphql.js +782 -4
- package/lib/lib/requests.d.ts +29 -9
- package/lib/lib/requests.js +255 -56
- package/lib/utils/displays.d.ts +3 -0
- package/lib/utils/displays.js +68 -4
- package/oclif.manifest.json +51 -7
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ $ npm install -g opal-security
|
|
|
22
22
|
$ opal COMMAND
|
|
23
23
|
running command...
|
|
24
24
|
$ opal (--version)
|
|
25
|
-
opal-security/3.1.
|
|
25
|
+
opal-security/3.1.1-beta.4a79f20 linux-x64 node-v20.19.1
|
|
26
26
|
$ opal --help [COMMAND]
|
|
27
27
|
USAGE
|
|
28
28
|
$ opal COMMAND
|
|
@@ -44,7 +44,6 @@ USAGE
|
|
|
44
44
|
* [`opal login`](#opal-login)
|
|
45
45
|
* [`opal logout`](#opal-logout)
|
|
46
46
|
* [`opal postgres-instances start`](#opal-postgres-instances-start)
|
|
47
|
-
* [`opal request ls`](#opal-request-ls)
|
|
48
47
|
* [`opal resources get`](#opal-resources-get)
|
|
49
48
|
* [`opal set-auth-provider`](#opal-set-auth-provider)
|
|
50
49
|
* [`opal set-custom-header`](#opal-set-custom-header)
|
|
@@ -102,7 +101,7 @@ EXAMPLES
|
|
|
102
101
|
$ opal aws:identity
|
|
103
102
|
```
|
|
104
103
|
|
|
105
|
-
_See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
104
|
+
_See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/aws/identity.ts)_
|
|
106
105
|
|
|
107
106
|
## `opal clear-auth-provider`
|
|
108
107
|
|
|
@@ -122,7 +121,7 @@ EXAMPLES
|
|
|
122
121
|
$ opal clear-auth-provider
|
|
123
122
|
```
|
|
124
123
|
|
|
125
|
-
_See code: [src/commands/clear-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
124
|
+
_See code: [src/commands/clear-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/clear-auth-provider.ts)_
|
|
126
125
|
|
|
127
126
|
## `opal curl-example`
|
|
128
127
|
|
|
@@ -139,7 +138,7 @@ DESCRIPTION
|
|
|
139
138
|
Prints out an example cURL command containing the parameters the CLI uses to query the Opal server.
|
|
140
139
|
```
|
|
141
140
|
|
|
142
|
-
_See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
141
|
+
_See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/curl-example.ts)_
|
|
143
142
|
|
|
144
143
|
## `opal groups get`
|
|
145
144
|
|
|
@@ -160,7 +159,7 @@ EXAMPLES
|
|
|
160
159
|
$ opal groups:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4
|
|
161
160
|
```
|
|
162
161
|
|
|
163
|
-
_See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
162
|
+
_See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/groups/get.ts)_
|
|
164
163
|
|
|
165
164
|
## `opal help [COMMANDS]`
|
|
166
165
|
|
|
@@ -210,7 +209,7 @@ EXAMPLES
|
|
|
210
209
|
$ opal iam-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --profileName "custom-profile"
|
|
211
210
|
```
|
|
212
211
|
|
|
213
|
-
_See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
212
|
+
_See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/iam-roles/start.ts)_
|
|
214
213
|
|
|
215
214
|
## `opal kube-roles start`
|
|
216
215
|
|
|
@@ -241,7 +240,7 @@ EXAMPLES
|
|
|
241
240
|
$ opal kube-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId "arn:aws:iam::712234975475:role/acme-eks-cluster-admin-role"
|
|
242
241
|
```
|
|
243
242
|
|
|
244
|
-
_See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
243
|
+
_See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/kube-roles/start.ts)_
|
|
245
244
|
|
|
246
245
|
## `opal login`
|
|
247
246
|
|
|
@@ -262,7 +261,7 @@ EXAMPLES
|
|
|
262
261
|
$ opal login
|
|
263
262
|
```
|
|
264
263
|
|
|
265
|
-
_See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
264
|
+
_See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/login.ts)_
|
|
266
265
|
|
|
267
266
|
## `opal logout`
|
|
268
267
|
|
|
@@ -282,7 +281,7 @@ EXAMPLES
|
|
|
282
281
|
$ opal logout
|
|
283
282
|
```
|
|
284
283
|
|
|
285
|
-
_See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
284
|
+
_See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/logout.ts)_
|
|
286
285
|
|
|
287
286
|
## `opal postgres-instances start`
|
|
288
287
|
|
|
@@ -319,22 +318,7 @@ EXAMPLES
|
|
|
319
318
|
$ opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId fullaccess --action view
|
|
320
319
|
```
|
|
321
320
|
|
|
322
|
-
_See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
323
|
-
|
|
324
|
-
## `opal request ls`
|
|
325
|
-
|
|
326
|
-
Lists access requests
|
|
327
|
-
|
|
328
|
-
```
|
|
329
|
-
USAGE
|
|
330
|
-
$ opal request ls
|
|
331
|
-
|
|
332
|
-
DESCRIPTION
|
|
333
|
-
Lists access requests
|
|
334
|
-
|
|
335
|
-
ALIASES
|
|
336
|
-
$ opal request ls
|
|
337
|
-
```
|
|
321
|
+
_See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/postgres-instances/start.ts)_
|
|
338
322
|
|
|
339
323
|
## `opal resources get`
|
|
340
324
|
|
|
@@ -355,7 +339,7 @@ EXAMPLES
|
|
|
355
339
|
$ opal resources:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4
|
|
356
340
|
```
|
|
357
341
|
|
|
358
|
-
_See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
342
|
+
_See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/resources/get.ts)_
|
|
359
343
|
|
|
360
344
|
## `opal set-auth-provider`
|
|
361
345
|
|
|
@@ -381,7 +365,7 @@ EXAMPLES
|
|
|
381
365
|
$ opal set-auth-provider --clientID 1234asdf --issuerUrl https://auth.example.com
|
|
382
366
|
```
|
|
383
367
|
|
|
384
|
-
_See code: [src/commands/set-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
368
|
+
_See code: [src/commands/set-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/set-auth-provider.ts)_
|
|
385
369
|
|
|
386
370
|
## `opal set-custom-header`
|
|
387
371
|
|
|
@@ -402,7 +386,7 @@ EXAMPLES
|
|
|
402
386
|
$ opal set-custom-header --header 'cf-access-token: $TOKEN'
|
|
403
387
|
```
|
|
404
388
|
|
|
405
|
-
_See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
389
|
+
_See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/set-custom-header.ts)_
|
|
406
390
|
|
|
407
391
|
## `opal set-token`
|
|
408
392
|
|
|
@@ -422,7 +406,7 @@ EXAMPLES
|
|
|
422
406
|
$ opal set-token
|
|
423
407
|
```
|
|
424
408
|
|
|
425
|
-
_See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
409
|
+
_See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/set-token.ts)_
|
|
426
410
|
|
|
427
411
|
## `opal set-url [URL]`
|
|
428
412
|
|
|
@@ -446,7 +430,7 @@ EXAMPLES
|
|
|
446
430
|
$ opal set-url
|
|
447
431
|
```
|
|
448
432
|
|
|
449
|
-
_See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
433
|
+
_See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/set-url.ts)_
|
|
450
434
|
|
|
451
435
|
## `opal ssh copyFrom`
|
|
452
436
|
|
|
@@ -477,7 +461,7 @@ EXAMPLES
|
|
|
477
461
|
$ opal ssh:copyFrom --src instance/dir --dest my/dir --id 51f7176b-0464-4a6f-8369-e951e187b398
|
|
478
462
|
```
|
|
479
463
|
|
|
480
|
-
_See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
464
|
+
_See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/ssh/copyFrom.ts)_
|
|
481
465
|
|
|
482
466
|
## `opal ssh copyTo`
|
|
483
467
|
|
|
@@ -508,7 +492,7 @@ EXAMPLES
|
|
|
508
492
|
$ opal ssh:copyTo --src my/dir --dest instance/dir --id 51f7176b-0464-4a6f-8369-e951e187b398
|
|
509
493
|
```
|
|
510
494
|
|
|
511
|
-
_See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
495
|
+
_See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/ssh/copyTo.ts)_
|
|
512
496
|
|
|
513
497
|
## `opal ssh start`
|
|
514
498
|
|
|
@@ -535,7 +519,7 @@ EXAMPLES
|
|
|
535
519
|
$ opal ssh:start --id 51f7176b-0464-4a6f-8369-e951e187b398
|
|
536
520
|
```
|
|
537
521
|
|
|
538
|
-
_See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.
|
|
522
|
+
_See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4a79f20/src/commands/ssh/start.ts)_
|
|
539
523
|
|
|
540
524
|
## `opal version`
|
|
541
525
|
|
|
@@ -10,24 +10,26 @@ class RequestCreate extends core_1.Command {
|
|
|
10
10
|
await (0, apollo_1.initClient)(this, true);
|
|
11
11
|
const client = await (0, apollo_1.getClient)(this, true);
|
|
12
12
|
(0, utils_1.restrictToDev)(); //TODO: Remove after development is complete
|
|
13
|
-
const
|
|
13
|
+
const metadata = (0, requests_1.createEmptyRequestMetadata)();
|
|
14
14
|
(0, displays_1.headerMessage)(this);
|
|
15
15
|
let shouldProceed = false;
|
|
16
16
|
while (!shouldProceed) {
|
|
17
17
|
// Step 1: Select first round of assets from an app
|
|
18
|
-
await (0, requests_1.selectRequestableItems)(this, client, requestMap);
|
|
18
|
+
await (0, requests_1.selectRequestableItems)(this, client, metadata.requestMap);
|
|
19
19
|
// Step 2: Display the selected items in a tree format
|
|
20
20
|
(0, displays_1.headerMessage)(this);
|
|
21
|
-
this.log((0, displays_1.treeifyRequestMap)(requestMap), "\n");
|
|
21
|
+
this.log((0, displays_1.treeifyRequestMap)(metadata.requestMap), "\n");
|
|
22
22
|
// Step 3: Prompt to add more items, repeat 1-3 if needed
|
|
23
23
|
shouldProceed = await (0, requests_1.doneSelectingAssets)();
|
|
24
24
|
}
|
|
25
|
+
// Step 4: Set Request Defaults
|
|
26
|
+
await (0, requests_1.setRequestDefaults)(this, client, metadata);
|
|
25
27
|
// Step 4: Prompt for request reason
|
|
26
|
-
const { reason } = await (0, requests_1.promptForReason)();
|
|
28
|
+
const { reason } = await (0, requests_1.promptForReason)(metadata);
|
|
27
29
|
// Step 5: Prompt for expiration
|
|
28
|
-
const { expiration } = await (0, requests_1.promptForExpiration)();
|
|
30
|
+
const { expiration } = await (0, requests_1.promptForExpiration)(metadata);
|
|
29
31
|
// Step 6: Display final summary of request
|
|
30
|
-
(0, displays_1.displayFinalRequestSummary)(this, requestMap, reason, expiration);
|
|
32
|
+
(0, displays_1.displayFinalRequestSummary)(this, metadata.requestMap, reason, expiration.label);
|
|
31
33
|
// Step 7: Prompt for final submition
|
|
32
34
|
await (0, requests_1.submitFinalRequest)(this);
|
|
33
35
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Command } from "@oclif/core";
|
|
2
|
-
export default class
|
|
2
|
+
export default class GetRequest extends Command {
|
|
3
3
|
static hidden: boolean;
|
|
4
4
|
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
7
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
5
10
|
run(): Promise<void>;
|
|
6
11
|
}
|
|
@@ -1,13 +1,107 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const core_1 = require("@oclif/core");
|
|
4
|
+
const graphql_1 = require("../../graphql");
|
|
5
|
+
const apollo_1 = require("../../lib/apollo");
|
|
6
|
+
const cmd_1 = require("../../lib/cmd");
|
|
7
|
+
const config_1 = require("../../lib/config");
|
|
8
|
+
const flags_1 = require("../../lib/flags");
|
|
9
|
+
const displays_1 = require("../../utils/displays");
|
|
4
10
|
const utils_1 = require("../../utils/utils");
|
|
5
|
-
|
|
11
|
+
const GET_REQUEST = (0, graphql_1.graphql)(`
|
|
12
|
+
query GetRequest(
|
|
13
|
+
$id: RequestId!
|
|
14
|
+
) {
|
|
15
|
+
request(input: {id: $id}) {
|
|
16
|
+
__typename
|
|
17
|
+
... on RequestResult {
|
|
18
|
+
request {
|
|
19
|
+
id
|
|
20
|
+
createdAt
|
|
21
|
+
status
|
|
22
|
+
requester {
|
|
23
|
+
displayName
|
|
24
|
+
}
|
|
25
|
+
targetUser {
|
|
26
|
+
displayName
|
|
27
|
+
}
|
|
28
|
+
requestedResources {
|
|
29
|
+
resource {
|
|
30
|
+
displayName
|
|
31
|
+
id
|
|
32
|
+
}
|
|
33
|
+
accessLevel {
|
|
34
|
+
accessLevelName
|
|
35
|
+
accessLevelRemoteId
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
durationInMinutes
|
|
39
|
+
requestedGroups {
|
|
40
|
+
group {
|
|
41
|
+
id
|
|
42
|
+
name
|
|
43
|
+
}
|
|
44
|
+
accessLevel {
|
|
45
|
+
accessLevelName
|
|
46
|
+
accessLevelRemoteId
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
reason
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
... on RequestNotFoundError {
|
|
53
|
+
message
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
`);
|
|
58
|
+
class GetRequest extends core_1.Command {
|
|
6
59
|
async run() {
|
|
7
60
|
(0, utils_1.restrictToDev)(); //TODO: Remove after development is complete
|
|
8
|
-
|
|
61
|
+
(0, cmd_1.setMostRecentCommand)(this);
|
|
62
|
+
const configData = (0, config_1.getOrCreateConfigData)(this.config.configDir);
|
|
63
|
+
const client = await (0, apollo_1.getClient)(this, true);
|
|
64
|
+
// Verify id tag was provided
|
|
65
|
+
const { flags } = await this.parse(GetRequest);
|
|
66
|
+
if (!flags.id) {
|
|
67
|
+
this.log("Error: Please provide a group ID using the --id flag.");
|
|
68
|
+
this.log("ex. opal request get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const resp = await client.query({
|
|
72
|
+
query: GET_REQUEST,
|
|
73
|
+
variables: {
|
|
74
|
+
id: flags.id,
|
|
75
|
+
},
|
|
76
|
+
fetchPolicy: "network-only", // to avoid caching
|
|
77
|
+
});
|
|
78
|
+
switch (resp.data.request.__typename) {
|
|
79
|
+
case "RequestResult":
|
|
80
|
+
if (flags.verbose) {
|
|
81
|
+
(0, apollo_1.printResponse)(this, resp);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
(0, displays_1.displayRequestDetails)(this, resp);
|
|
85
|
+
}
|
|
86
|
+
this.log(`\n💡Click to see request details on web: ${configData[config_1.urlKey]}/requests/sent/${flags.id}`);
|
|
87
|
+
return;
|
|
88
|
+
case "RequestNotFoundError":
|
|
89
|
+
this.log(`🚫 Request with id ${flags.id} was not found`);
|
|
90
|
+
return;
|
|
91
|
+
default:
|
|
92
|
+
this.log("🚫 Error retrieving request data");
|
|
93
|
+
}
|
|
9
94
|
}
|
|
10
95
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
96
|
+
GetRequest.hidden = true;
|
|
97
|
+
GetRequest.description = "Lists access requests";
|
|
98
|
+
GetRequest.flags = {
|
|
99
|
+
help: flags_1.SHARED_FLAGS.help,
|
|
100
|
+
id: flags_1.SHARED_FLAGS.id,
|
|
101
|
+
verbose: core_1.Flags.boolean({
|
|
102
|
+
char: "v",
|
|
103
|
+
description: "Enable verbose output",
|
|
104
|
+
default: false,
|
|
105
|
+
}),
|
|
106
|
+
};
|
|
107
|
+
exports.default = GetRequest;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Command } from "@oclif/core";
|
|
2
|
-
export default class
|
|
2
|
+
export default class ListRequests extends Command {
|
|
3
3
|
static hidden: boolean;
|
|
4
4
|
static description: string;
|
|
5
|
-
static
|
|
5
|
+
static flags: {
|
|
6
|
+
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
7
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
pageSize: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
6
10
|
run(): Promise<void>;
|
|
7
11
|
}
|
|
@@ -1,14 +1,95 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const core_1 = require("@oclif/core");
|
|
4
|
+
const graphql_1 = require("../../graphql");
|
|
5
|
+
const apollo_1 = require("../../lib/apollo");
|
|
6
|
+
const cmd_1 = require("../../lib/cmd");
|
|
7
|
+
const config_1 = require("../../lib/config");
|
|
8
|
+
const flags_1 = require("../../lib/flags");
|
|
4
9
|
const utils_1 = require("../../utils/utils");
|
|
5
|
-
|
|
10
|
+
// Add date filters, search query,
|
|
11
|
+
const GET_REQUESTS = (0, graphql_1.graphql)(`
|
|
12
|
+
query GetRequests($pageSize: Int, $showPendingOnly: Boolean!) {
|
|
13
|
+
requests(input: {
|
|
14
|
+
requestType: OUTGOING
|
|
15
|
+
maxNumEntries: $pageSize
|
|
16
|
+
filters: {
|
|
17
|
+
showPendingOnly: $showPendingOnly
|
|
18
|
+
}
|
|
19
|
+
}) {
|
|
20
|
+
__typename
|
|
21
|
+
... on RequestsResult {
|
|
22
|
+
requestType
|
|
23
|
+
requests {
|
|
24
|
+
createdAt
|
|
25
|
+
id
|
|
26
|
+
requester {
|
|
27
|
+
displayName
|
|
28
|
+
}
|
|
29
|
+
targetUser {
|
|
30
|
+
displayName
|
|
31
|
+
}
|
|
32
|
+
reason
|
|
33
|
+
requestedResources {
|
|
34
|
+
resource {
|
|
35
|
+
displayName
|
|
36
|
+
id
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
requestedGroups {
|
|
40
|
+
group {
|
|
41
|
+
name
|
|
42
|
+
id
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
status
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
}`);
|
|
52
|
+
class ListRequests extends core_1.Command {
|
|
6
53
|
async run() {
|
|
7
54
|
(0, utils_1.restrictToDev)(); //TODO: Remove after development is complete
|
|
8
|
-
|
|
55
|
+
(0, cmd_1.setMostRecentCommand)(this);
|
|
56
|
+
const configData = (0, config_1.getOrCreateConfigData)(this.config.configDir);
|
|
57
|
+
const client = await (0, apollo_1.getClient)(this, true);
|
|
58
|
+
let pageSize = 10;
|
|
59
|
+
const showPendingOnly = false;
|
|
60
|
+
const { flags } = await this.parse(ListRequests);
|
|
61
|
+
if (flags.pageSize) {
|
|
62
|
+
if (flags.pageSize < 1) {
|
|
63
|
+
this.error("pageSize must be greater than 0");
|
|
64
|
+
}
|
|
65
|
+
if (flags.pageSize > 100) {
|
|
66
|
+
this.error("pageSize must be less than 100");
|
|
67
|
+
}
|
|
68
|
+
pageSize = flags.pageSize;
|
|
69
|
+
}
|
|
70
|
+
const resp = await client.query({
|
|
71
|
+
query: GET_REQUESTS,
|
|
72
|
+
variables: {
|
|
73
|
+
pageSize: pageSize,
|
|
74
|
+
showPendingOnly: showPendingOnly,
|
|
75
|
+
},
|
|
76
|
+
fetchPolicy: "network-only", // to avoid caching
|
|
77
|
+
});
|
|
78
|
+
//TODO: Make this pretty
|
|
79
|
+
(0, apollo_1.printResponse)(this, resp);
|
|
9
80
|
}
|
|
10
81
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
82
|
+
ListRequests.hidden = true;
|
|
83
|
+
ListRequests.description = "Lists your recent outgoing access requests.\
|
|
84
|
+
\n--pageSize flag sets number of requests to be returned. Defaults to 10 requests.\
|
|
85
|
+
\n--showPendingOnly flag will show only pending requests. Defaults to false.";
|
|
86
|
+
// static aliases = ["request:ls"]; // uncomment when ready for release
|
|
87
|
+
ListRequests.flags = {
|
|
88
|
+
help: flags_1.SHARED_FLAGS.help,
|
|
89
|
+
id: flags_1.SHARED_FLAGS.id,
|
|
90
|
+
pageSize: core_1.Flags.integer({
|
|
91
|
+
multiple: false,
|
|
92
|
+
description: "Sets number of requests to be returned. Defaults to 10 requests.",
|
|
93
|
+
}),
|
|
94
|
+
};
|
|
95
|
+
exports.default = ListRequests;
|
package/lib/graphql/gql.d.ts
CHANGED
|
@@ -13,9 +13,13 @@ import * as types from "./graphql";
|
|
|
13
13
|
*/
|
|
14
14
|
type Documents = {
|
|
15
15
|
"\nquery GetGroup($id: GroupId!) {\n group(input: { id: $id }) {\n __typename\n ... on GroupResult {\n group {\n name\n id\n description\n groupType\n adminOwnerId\n groupLeaders {\n fullName\n email\n id\n }\n connection {\n name\n id\n connectionType\n }\n paginatedGroupUsers {\n totalNumGroupUsers\n groupUsers {\n user {\n fullName\n email\n id\n }\n }\n }\n }\n }\n ... on GroupNotFoundError {\n message\n }\n }\n}": typeof types.GetGroupDocument;
|
|
16
|
+
"\n query GetRequest(\n $id: RequestId!\n) {\n request(input: {id: $id}) {\n __typename\n ... on RequestResult {\n request {\n id\n createdAt\n status\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n requestedResources {\n resource {\n displayName\n id\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n durationInMinutes\n requestedGroups {\n group {\n id\n name\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n reason\n }\n }\n ... on RequestNotFoundError {\n message\n }\n }\n}\n": typeof types.GetRequestDocument;
|
|
17
|
+
"\n query GetRequests($pageSize: Int, $showPendingOnly: Boolean!) {\n requests(input: {\n requestType: OUTGOING\n maxNumEntries: $pageSize\n filters: {\n showPendingOnly: $showPendingOnly\n }\n }) {\n __typename\n ... on RequestsResult {\n requestType\n requests {\n createdAt\n id\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n reason\n requestedResources {\n resource {\n displayName\n id\n }\n }\n requestedGroups {\n group {\n name\n id\n }\n }\n status\n }\n \n }\n \n }\n}": typeof types.GetRequestsDocument;
|
|
16
18
|
"\nquery CheckAuthSessionQuery {\n organizationSettings {\n ... on OrganizationSettingsResult {\n settings {\n id\n }\n }\n }\n}\n": typeof types.CheckAuthSessionQueryDocument;
|
|
17
19
|
'\n query GetRequestableAppsQuery($searchQuery: String) {\n appsV2(\n filters: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n }\n ) @connection(key: "paginated-app-dropdown") {\n edges {\n node {\n id\n displayName\n ... on Connection {\n connectionType\n }\n ... on Resource {\n resourceType\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n ': typeof types.GetRequestableAppsQueryDocument;
|
|
18
|
-
"\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n }\n}\n": typeof types.PaginatedEntityDropdownDocument;
|
|
20
|
+
"\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n": typeof types.PaginatedEntityDropdownDocument;
|
|
21
|
+
"\n query ResourceAccessLevels($resourceId: ResourceId!) {\n accessLevels(input: {\n resourceId: $resourceId,\n onlyMine: false,\n }) {\n __typename\n ... on ResourceAccessLevelsResult {\n accessLevels {\n __typename\n ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": typeof types.ResourceAccessLevelsDocument;
|
|
22
|
+
"\n query RequestDefaults(\n $requestedResources: [RequestConfigurationResourceInput!]!\n $requestedGroups: [RequestConfigurationGroupInput!]!\n ) {\n requestDefaults(input: {\n requestedResources: $requestedResources,\n requestedGroups: $requestedGroups,\n }\n ) {\n durationOptions {\n durationInMinutes\n label\n }\n recommendedDurationInMinutes\n defaultDurationInMinutes\n maxDurationInMinutes\n requireSupportTicket\n reasonOptional\n requesterIsAdmin\n }\n }": typeof types.RequestDefaultsDocument;
|
|
19
23
|
};
|
|
20
24
|
declare const documents: Documents;
|
|
21
25
|
/**
|
|
@@ -35,6 +39,14 @@ export declare function graphql(source: string): unknown;
|
|
|
35
39
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
36
40
|
*/
|
|
37
41
|
export declare function graphql(source: "\nquery GetGroup($id: GroupId!) {\n group(input: { id: $id }) {\n __typename\n ... on GroupResult {\n group {\n name\n id\n description\n groupType\n adminOwnerId\n groupLeaders {\n fullName\n email\n id\n }\n connection {\n name\n id\n connectionType\n }\n paginatedGroupUsers {\n totalNumGroupUsers\n groupUsers {\n user {\n fullName\n email\n id\n }\n }\n }\n }\n }\n ... on GroupNotFoundError {\n message\n }\n }\n}"): (typeof documents)["\nquery GetGroup($id: GroupId!) {\n group(input: { id: $id }) {\n __typename\n ... on GroupResult {\n group {\n name\n id\n description\n groupType\n adminOwnerId\n groupLeaders {\n fullName\n email\n id\n }\n connection {\n name\n id\n connectionType\n }\n paginatedGroupUsers {\n totalNumGroupUsers\n groupUsers {\n user {\n fullName\n email\n id\n }\n }\n }\n }\n }\n ... on GroupNotFoundError {\n message\n }\n }\n}"];
|
|
42
|
+
/**
|
|
43
|
+
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
44
|
+
*/
|
|
45
|
+
export declare function graphql(source: "\n query GetRequest(\n $id: RequestId!\n) {\n request(input: {id: $id}) {\n __typename\n ... on RequestResult {\n request {\n id\n createdAt\n status\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n requestedResources {\n resource {\n displayName\n id\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n durationInMinutes\n requestedGroups {\n group {\n id\n name\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n reason\n }\n }\n ... on RequestNotFoundError {\n message\n }\n }\n}\n"): (typeof documents)["\n query GetRequest(\n $id: RequestId!\n) {\n request(input: {id: $id}) {\n __typename\n ... on RequestResult {\n request {\n id\n createdAt\n status\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n requestedResources {\n resource {\n displayName\n id\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n durationInMinutes\n requestedGroups {\n group {\n id\n name\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n reason\n }\n }\n ... on RequestNotFoundError {\n message\n }\n }\n}\n"];
|
|
46
|
+
/**
|
|
47
|
+
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
48
|
+
*/
|
|
49
|
+
export declare function graphql(source: "\n query GetRequests($pageSize: Int, $showPendingOnly: Boolean!) {\n requests(input: {\n requestType: OUTGOING\n maxNumEntries: $pageSize\n filters: {\n showPendingOnly: $showPendingOnly\n }\n }) {\n __typename\n ... on RequestsResult {\n requestType\n requests {\n createdAt\n id\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n reason\n requestedResources {\n resource {\n displayName\n id\n }\n }\n requestedGroups {\n group {\n name\n id\n }\n }\n status\n }\n \n }\n \n }\n}"): (typeof documents)["\n query GetRequests($pageSize: Int, $showPendingOnly: Boolean!) {\n requests(input: {\n requestType: OUTGOING\n maxNumEntries: $pageSize\n filters: {\n showPendingOnly: $showPendingOnly\n }\n }) {\n __typename\n ... on RequestsResult {\n requestType\n requests {\n createdAt\n id\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n reason\n requestedResources {\n resource {\n displayName\n id\n }\n }\n requestedGroups {\n group {\n name\n id\n }\n }\n status\n }\n \n }\n \n }\n}"];
|
|
38
50
|
/**
|
|
39
51
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
40
52
|
*/
|
|
@@ -46,6 +58,14 @@ export declare function graphql(source: '\n query GetRequestableAppsQuery($sear
|
|
|
46
58
|
/**
|
|
47
59
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
48
60
|
*/
|
|
49
|
-
export declare function graphql(source: "\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n }\n}\n"): (typeof documents)["\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n }\n}\n"];
|
|
61
|
+
export declare function graphql(source: "\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n"): (typeof documents)["\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n"];
|
|
62
|
+
/**
|
|
63
|
+
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
64
|
+
*/
|
|
65
|
+
export declare function graphql(source: "\n query ResourceAccessLevels($resourceId: ResourceId!) {\n accessLevels(input: {\n resourceId: $resourceId,\n onlyMine: false,\n }) {\n __typename\n ... on ResourceAccessLevelsResult {\n accessLevels {\n __typename\n ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"): (typeof documents)["\n query ResourceAccessLevels($resourceId: ResourceId!) {\n accessLevels(input: {\n resourceId: $resourceId,\n onlyMine: false,\n }) {\n __typename\n ... on ResourceAccessLevelsResult {\n accessLevels {\n __typename\n ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"];
|
|
66
|
+
/**
|
|
67
|
+
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
68
|
+
*/
|
|
69
|
+
export declare function graphql(source: "\n query RequestDefaults(\n $requestedResources: [RequestConfigurationResourceInput!]!\n $requestedGroups: [RequestConfigurationGroupInput!]!\n ) {\n requestDefaults(input: {\n requestedResources: $requestedResources,\n requestedGroups: $requestedGroups,\n }\n ) {\n durationOptions {\n durationInMinutes\n label\n }\n recommendedDurationInMinutes\n defaultDurationInMinutes\n maxDurationInMinutes\n requireSupportTicket\n reasonOptional\n requesterIsAdmin\n }\n }"): (typeof documents)["\n query RequestDefaults(\n $requestedResources: [RequestConfigurationResourceInput!]!\n $requestedGroups: [RequestConfigurationGroupInput!]!\n ) {\n requestDefaults(input: {\n requestedResources: $requestedResources,\n requestedGroups: $requestedGroups,\n }\n ) {\n durationOptions {\n durationInMinutes\n label\n }\n recommendedDurationInMinutes\n defaultDurationInMinutes\n maxDurationInMinutes\n requireSupportTicket\n reasonOptional\n requesterIsAdmin\n }\n }"];
|
|
50
70
|
export type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode<infer TType, any> ? TType : never;
|
|
51
71
|
export {};
|
package/lib/graphql/gql.js
CHANGED
|
@@ -5,9 +5,13 @@ exports.graphql = graphql;
|
|
|
5
5
|
const types = require("./graphql");
|
|
6
6
|
const documents = {
|
|
7
7
|
"\nquery GetGroup($id: GroupId!) {\n group(input: { id: $id }) {\n __typename\n ... on GroupResult {\n group {\n name\n id\n description\n groupType\n adminOwnerId\n groupLeaders {\n fullName\n email\n id\n }\n connection {\n name\n id\n connectionType\n }\n paginatedGroupUsers {\n totalNumGroupUsers\n groupUsers {\n user {\n fullName\n email\n id\n }\n }\n }\n }\n }\n ... on GroupNotFoundError {\n message\n }\n }\n}": types.GetGroupDocument,
|
|
8
|
+
"\n query GetRequest(\n $id: RequestId!\n) {\n request(input: {id: $id}) {\n __typename\n ... on RequestResult {\n request {\n id\n createdAt\n status\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n requestedResources {\n resource {\n displayName\n id\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n durationInMinutes\n requestedGroups {\n group {\n id\n name\n }\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n reason\n }\n }\n ... on RequestNotFoundError {\n message\n }\n }\n}\n": types.GetRequestDocument,
|
|
9
|
+
"\n query GetRequests($pageSize: Int, $showPendingOnly: Boolean!) {\n requests(input: {\n requestType: OUTGOING\n maxNumEntries: $pageSize\n filters: {\n showPendingOnly: $showPendingOnly\n }\n }) {\n __typename\n ... on RequestsResult {\n requestType\n requests {\n createdAt\n id\n requester {\n displayName\n }\n targetUser {\n displayName\n }\n reason\n requestedResources {\n resource {\n displayName\n id\n }\n }\n requestedGroups {\n group {\n name\n id\n }\n }\n status\n }\n \n }\n \n }\n}": types.GetRequestsDocument,
|
|
8
10
|
"\nquery CheckAuthSessionQuery {\n organizationSettings {\n ... on OrganizationSettingsResult {\n settings {\n id\n }\n }\n }\n}\n": types.CheckAuthSessionQueryDocument,
|
|
9
11
|
'\n query GetRequestableAppsQuery($searchQuery: String) {\n appsV2(\n filters: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n }\n ) @connection(key: "paginated-app-dropdown") {\n edges {\n node {\n id\n displayName\n ... on Connection {\n connectionType\n }\n ... on Resource {\n resourceType\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n ': types.GetRequestableAppsQueryDocument,
|
|
10
|
-
"\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n }\n}\n": types.PaginatedEntityDropdownDocument,
|
|
12
|
+
"\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n": types.PaginatedEntityDropdownDocument,
|
|
13
|
+
"\n query ResourceAccessLevels($resourceId: ResourceId!) {\n accessLevels(input: {\n resourceId: $resourceId,\n onlyMine: false,\n }) {\n __typename\n ... on ResourceAccessLevelsResult {\n accessLevels {\n __typename\n ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": types.ResourceAccessLevelsDocument,
|
|
14
|
+
"\n query RequestDefaults(\n $requestedResources: [RequestConfigurationResourceInput!]!\n $requestedGroups: [RequestConfigurationGroupInput!]!\n ) {\n requestDefaults(input: {\n requestedResources: $requestedResources,\n requestedGroups: $requestedGroups,\n }\n ) {\n durationOptions {\n durationInMinutes\n label\n }\n recommendedDurationInMinutes\n defaultDurationInMinutes\n maxDurationInMinutes\n requireSupportTicket\n reasonOptional\n requesterIsAdmin\n }\n }": types.RequestDefaultsDocument,
|
|
11
15
|
};
|
|
12
16
|
function graphql(source) {
|
|
13
17
|
var _a;
|