opal-security 3.1.1-beta.65d1a96 → 3.1.1-beta.e5e99da
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 -18
- package/lib/commands/request/create.js +8 -6
- package/lib/graphql/gql.d.ts +5 -0
- package/lib/graphql/gql.js +1 -0
- package/lib/graphql/graphql.d.ts +86 -25
- package/lib/graphql/graphql.js +142 -2
- package/lib/lib/requests.d.ts +28 -8
- package/lib/lib/requests.js +142 -17
- package/lib/utils/displays.js +3 -3
- package/oclif.manifest.json +64 -64
- package/package.json +1 -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.1-beta.
|
|
25
|
+
opal-security/3.1.1-beta.e5e99da linux-x64 node-v20.19.1
|
|
26
26
|
$ opal --help [COMMAND]
|
|
27
27
|
USAGE
|
|
28
28
|
$ opal COMMAND
|
|
@@ -101,7 +101,7 @@ EXAMPLES
|
|
|
101
101
|
$ opal aws:identity
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
_See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
104
|
+
_See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/aws/identity.ts)_
|
|
105
105
|
|
|
106
106
|
## `opal clear-auth-provider`
|
|
107
107
|
|
|
@@ -121,7 +121,7 @@ EXAMPLES
|
|
|
121
121
|
$ opal clear-auth-provider
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
_See code: [src/commands/clear-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
124
|
+
_See code: [src/commands/clear-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/clear-auth-provider.ts)_
|
|
125
125
|
|
|
126
126
|
## `opal curl-example`
|
|
127
127
|
|
|
@@ -138,7 +138,7 @@ DESCRIPTION
|
|
|
138
138
|
Prints out an example cURL command containing the parameters the CLI uses to query the Opal server.
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
_See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
141
|
+
_See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/curl-example.ts)_
|
|
142
142
|
|
|
143
143
|
## `opal groups get`
|
|
144
144
|
|
|
@@ -159,7 +159,7 @@ EXAMPLES
|
|
|
159
159
|
$ opal groups:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
-
_See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
162
|
+
_See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/groups/get.ts)_
|
|
163
163
|
|
|
164
164
|
## `opal help [COMMANDS]`
|
|
165
165
|
|
|
@@ -209,7 +209,7 @@ EXAMPLES
|
|
|
209
209
|
$ opal iam-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --profileName "custom-profile"
|
|
210
210
|
```
|
|
211
211
|
|
|
212
|
-
_See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
212
|
+
_See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/iam-roles/start.ts)_
|
|
213
213
|
|
|
214
214
|
## `opal kube-roles start`
|
|
215
215
|
|
|
@@ -240,7 +240,7 @@ EXAMPLES
|
|
|
240
240
|
$ opal kube-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId "arn:aws:iam::712234975475:role/acme-eks-cluster-admin-role"
|
|
241
241
|
```
|
|
242
242
|
|
|
243
|
-
_See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
243
|
+
_See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/kube-roles/start.ts)_
|
|
244
244
|
|
|
245
245
|
## `opal login`
|
|
246
246
|
|
|
@@ -261,7 +261,7 @@ EXAMPLES
|
|
|
261
261
|
$ opal login
|
|
262
262
|
```
|
|
263
263
|
|
|
264
|
-
_See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
264
|
+
_See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/login.ts)_
|
|
265
265
|
|
|
266
266
|
## `opal logout`
|
|
267
267
|
|
|
@@ -281,7 +281,7 @@ EXAMPLES
|
|
|
281
281
|
$ opal logout
|
|
282
282
|
```
|
|
283
283
|
|
|
284
|
-
_See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
284
|
+
_See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/logout.ts)_
|
|
285
285
|
|
|
286
286
|
## `opal postgres-instances start`
|
|
287
287
|
|
|
@@ -318,7 +318,7 @@ EXAMPLES
|
|
|
318
318
|
$ opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId fullaccess --action view
|
|
319
319
|
```
|
|
320
320
|
|
|
321
|
-
_See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
321
|
+
_See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/postgres-instances/start.ts)_
|
|
322
322
|
|
|
323
323
|
## `opal resources get`
|
|
324
324
|
|
|
@@ -339,7 +339,7 @@ EXAMPLES
|
|
|
339
339
|
$ opal resources:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4
|
|
340
340
|
```
|
|
341
341
|
|
|
342
|
-
_See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
342
|
+
_See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/resources/get.ts)_
|
|
343
343
|
|
|
344
344
|
## `opal set-auth-provider`
|
|
345
345
|
|
|
@@ -365,7 +365,7 @@ EXAMPLES
|
|
|
365
365
|
$ opal set-auth-provider --clientID 1234asdf --issuerUrl https://auth.example.com
|
|
366
366
|
```
|
|
367
367
|
|
|
368
|
-
_See code: [src/commands/set-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
368
|
+
_See code: [src/commands/set-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/set-auth-provider.ts)_
|
|
369
369
|
|
|
370
370
|
## `opal set-custom-header`
|
|
371
371
|
|
|
@@ -386,7 +386,7 @@ EXAMPLES
|
|
|
386
386
|
$ opal set-custom-header --header 'cf-access-token: $TOKEN'
|
|
387
387
|
```
|
|
388
388
|
|
|
389
|
-
_See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
389
|
+
_See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/set-custom-header.ts)_
|
|
390
390
|
|
|
391
391
|
## `opal set-token`
|
|
392
392
|
|
|
@@ -406,7 +406,7 @@ EXAMPLES
|
|
|
406
406
|
$ opal set-token
|
|
407
407
|
```
|
|
408
408
|
|
|
409
|
-
_See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
409
|
+
_See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/set-token.ts)_
|
|
410
410
|
|
|
411
411
|
## `opal set-url [URL]`
|
|
412
412
|
|
|
@@ -430,7 +430,7 @@ EXAMPLES
|
|
|
430
430
|
$ opal set-url
|
|
431
431
|
```
|
|
432
432
|
|
|
433
|
-
_See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
433
|
+
_See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/set-url.ts)_
|
|
434
434
|
|
|
435
435
|
## `opal ssh copyFrom`
|
|
436
436
|
|
|
@@ -461,7 +461,7 @@ EXAMPLES
|
|
|
461
461
|
$ opal ssh:copyFrom --src instance/dir --dest my/dir --id 51f7176b-0464-4a6f-8369-e951e187b398
|
|
462
462
|
```
|
|
463
463
|
|
|
464
|
-
_See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
464
|
+
_See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/ssh/copyFrom.ts)_
|
|
465
465
|
|
|
466
466
|
## `opal ssh copyTo`
|
|
467
467
|
|
|
@@ -492,7 +492,7 @@ EXAMPLES
|
|
|
492
492
|
$ opal ssh:copyTo --src my/dir --dest instance/dir --id 51f7176b-0464-4a6f-8369-e951e187b398
|
|
493
493
|
```
|
|
494
494
|
|
|
495
|
-
_See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
495
|
+
_See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/ssh/copyTo.ts)_
|
|
496
496
|
|
|
497
497
|
## `opal ssh start`
|
|
498
498
|
|
|
@@ -519,7 +519,7 @@ EXAMPLES
|
|
|
519
519
|
$ opal ssh:start --id 51f7176b-0464-4a6f-8369-e951e187b398
|
|
520
520
|
```
|
|
521
521
|
|
|
522
|
-
_See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.
|
|
522
|
+
_See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.e5e99da/src/commands/ssh/start.ts)_
|
|
523
523
|
|
|
524
524
|
## `opal version`
|
|
525
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
|
}
|
package/lib/graphql/gql.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ type Documents = {
|
|
|
18
18
|
'\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;
|
|
19
19
|
"\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;
|
|
20
20
|
"\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;
|
|
21
|
+
"\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;
|
|
21
22
|
};
|
|
22
23
|
declare const documents: Documents;
|
|
23
24
|
/**
|
|
@@ -57,5 +58,9 @@ export declare function graphql(source: "\n query PaginatedEntityDropdown(\n $
|
|
|
57
58
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
58
59
|
*/
|
|
59
60
|
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"];
|
|
61
|
+
/**
|
|
62
|
+
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
|
63
|
+
*/
|
|
64
|
+
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 }"];
|
|
60
65
|
export type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode<infer TType, any> ? TType : never;
|
|
61
66
|
export {};
|
package/lib/graphql/gql.js
CHANGED
|
@@ -10,6 +10,7 @@ const documents = {
|
|
|
10
10
|
'\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,
|
|
11
11
|
"\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,
|
|
12
12
|
"\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,
|
|
13
|
+
"\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,
|
|
13
14
|
};
|
|
14
15
|
function graphql(source) {
|
|
15
16
|
var _a;
|
package/lib/graphql/graphql.d.ts
CHANGED
|
@@ -571,6 +571,7 @@ export type AccessLevelsFiltersInput = {
|
|
|
571
571
|
};
|
|
572
572
|
export declare enum AccessOption {
|
|
573
573
|
All = "ALL",
|
|
574
|
+
Manageable = "MANAGEABLE",
|
|
574
575
|
Mine = "MINE",
|
|
575
576
|
Requestable = "REQUESTABLE",
|
|
576
577
|
/** @deprecated no longer supported */
|
|
@@ -626,6 +627,7 @@ export type AccessReview = Node & RolePermissionTargetEntity & {
|
|
|
626
627
|
stoppedByUserId?: Maybe<Scalars["UserId"]["output"]>;
|
|
627
628
|
stoppedDate?: Maybe<Scalars["Time"]["output"]>;
|
|
628
629
|
timeZone: Scalars["String"]["output"];
|
|
630
|
+
updatedAt: Scalars["Time"]["output"];
|
|
629
631
|
usersToReview: UserConnection;
|
|
630
632
|
};
|
|
631
633
|
export type AccessReviewUsersToReviewArgs = {
|
|
@@ -1477,7 +1479,11 @@ export type AccessReviewUsersResult = {
|
|
|
1477
1479
|
accessReviewUsers: Array<AccessReviewUser>;
|
|
1478
1480
|
};
|
|
1479
1481
|
export type AccessReviewsInput = {
|
|
1480
|
-
|
|
1482
|
+
/**
|
|
1483
|
+
* status filter: by default, accessReviews will return ALL access reviews for
|
|
1484
|
+
* the org, otherwise it will only return access reviews with the given status
|
|
1485
|
+
*/
|
|
1486
|
+
status?: InputMaybe<AccessReviewStatus>;
|
|
1481
1487
|
};
|
|
1482
1488
|
export type AccessReviewsOutput = AccessReviewsResult;
|
|
1483
1489
|
export type AccessReviewsResult = {
|
|
@@ -1499,6 +1505,11 @@ export declare enum AccessRuleStatus {
|
|
|
1499
1505
|
Paused = "PAUSED",
|
|
1500
1506
|
PausedByFailsafe = "PAUSED_BY_FAILSAFE"
|
|
1501
1507
|
}
|
|
1508
|
+
export type AccessScope = {
|
|
1509
|
+
createdAfter?: InputMaybe<Scalars["Time"]["input"]>;
|
|
1510
|
+
expiresAfter?: InputMaybe<Scalars["Time"]["input"]>;
|
|
1511
|
+
vulnerabilities?: InputMaybe<Array<RecommendationsSubscoreType>>;
|
|
1512
|
+
};
|
|
1502
1513
|
export type AccessStats = {
|
|
1503
1514
|
managerAccessCount?: Maybe<Scalars["Int"]["output"]>;
|
|
1504
1515
|
teamAccessCount?: Maybe<Scalars["Int"]["output"]>;
|
|
@@ -3749,6 +3760,13 @@ export type DenyRequestResult = {
|
|
|
3749
3760
|
__typename?: "DenyRequestResult";
|
|
3750
3761
|
request: Request;
|
|
3751
3762
|
};
|
|
3763
|
+
export type DirectRoleAssignmentsInput = {
|
|
3764
|
+
after?: InputMaybe<Scalars["String"]["input"]>;
|
|
3765
|
+
first?: InputMaybe<Scalars["Int"]["input"]>;
|
|
3766
|
+
scope: RoleAssignmentScope;
|
|
3767
|
+
sortBy?: InputMaybe<RoleAssignmentsSortBy>;
|
|
3768
|
+
source?: UiSource;
|
|
3769
|
+
};
|
|
3752
3770
|
export type DismissGroupBindingSuggestionsInput = {
|
|
3753
3771
|
ids: Array<Scalars["GroupBindingSuggestionId"]["input"]>;
|
|
3754
3772
|
};
|
|
@@ -3833,6 +3851,15 @@ export type EntityIdTupleInput = {
|
|
|
3833
3851
|
entityId: Scalars["UUID"]["input"];
|
|
3834
3852
|
entityType: EntityType;
|
|
3835
3853
|
};
|
|
3854
|
+
export type EntityScope = {
|
|
3855
|
+
entityIDs?: InputMaybe<Array<Scalars["EntityId"]["input"]>>;
|
|
3856
|
+
entitySubtypes?: InputMaybe<EntitySubtypes>;
|
|
3857
|
+
entityTypes?: InputMaybe<Array<EntityType>>;
|
|
3858
|
+
};
|
|
3859
|
+
export type EntitySubtypes = {
|
|
3860
|
+
groupTypes?: InputMaybe<Array<GroupType>>;
|
|
3861
|
+
resourceTypes?: InputMaybe<Array<ResourceType>>;
|
|
3862
|
+
};
|
|
3836
3863
|
export declare enum EntityType {
|
|
3837
3864
|
AccessLevel = "ACCESS_LEVEL",
|
|
3838
3865
|
AccessReview = "ACCESS_REVIEW",
|
|
@@ -4295,6 +4322,7 @@ export declare enum EventType {
|
|
|
4295
4322
|
RoleAssignmentsDeleted = "ROLE_ASSIGNMENTS_DELETED",
|
|
4296
4323
|
RoleAssignmentsUpdated = "ROLE_ASSIGNMENTS_UPDATED",
|
|
4297
4324
|
SessionsCreatedForResources = "SESSIONS_CREATED_FOR_RESOURCES",
|
|
4325
|
+
SoonToExpireNotification = "SOON_TO_EXPIRE_NOTIFICATION",
|
|
4298
4326
|
ThirdPartyIntegrationCreated = "THIRD_PARTY_INTEGRATION_CREATED",
|
|
4299
4327
|
ThirdPartyIntegrationDeleted = "THIRD_PARTY_INTEGRATION_DELETED",
|
|
4300
4328
|
ToxicSetViolationsCreated = "TOXIC_SET_VIOLATIONS_CREATED",
|
|
@@ -4488,7 +4516,6 @@ export declare enum GeneralSettingType {
|
|
|
4488
4516
|
AutoMergeUsersByEmail = "AUTO_MERGE_USERS_BY_EMAIL",
|
|
4489
4517
|
DisableNonAdminLogins = "DISABLE_NON_ADMIN_LOGINS",
|
|
4490
4518
|
GlobalRequesterRole = "GLOBAL_REQUESTER_ROLE",
|
|
4491
|
-
LogRocketDisabled = "LOG_ROCKET_DISABLED",
|
|
4492
4519
|
NestedGroups = "NESTED_GROUPS",
|
|
4493
4520
|
RequireManagerCc = "REQUIRE_MANAGER_CC",
|
|
4494
4521
|
RequireOpalMfaForLogins = "REQUIRE_OPAL_MFA_FOR_LOGINS",
|
|
@@ -5108,6 +5135,7 @@ export type GroupUser = {
|
|
|
5108
5135
|
__typename?: "GroupUser";
|
|
5109
5136
|
access?: Maybe<GroupUserAccess>;
|
|
5110
5137
|
accessLevel?: Maybe<GroupAccessLevel>;
|
|
5138
|
+
accessStats?: Maybe<AccessStats>;
|
|
5111
5139
|
group?: Maybe<Group>;
|
|
5112
5140
|
groupId: Scalars["GroupId"]["output"];
|
|
5113
5141
|
lastUsedAt?: Maybe<Scalars["Time"]["output"]>;
|
|
@@ -5923,6 +5951,7 @@ export type Mutation = {
|
|
|
5923
5951
|
createEventFilter: CreateEventFilterOutput;
|
|
5924
5952
|
createEventStream: CreateEventStreamOutput;
|
|
5925
5953
|
createFirstPartyToken: CreateFirstPartyTokenOutput;
|
|
5954
|
+
/** @deprecated Use createItems instead. */
|
|
5926
5955
|
createGroup: CreateGroupOutput;
|
|
5927
5956
|
createGroupBindings: CreateGroupBindingsOutput;
|
|
5928
5957
|
createIdpConnection: CreateIdpConnectionOutput;
|
|
@@ -6069,7 +6098,6 @@ export type Mutation = {
|
|
|
6069
6098
|
updateResourceCustomAccessLevel: UpdateResourceCustomAccessLevelOutput;
|
|
6070
6099
|
updateResourceUserReviewers: UpdateResourceUserReviewersOutput;
|
|
6071
6100
|
updateResourceUsers: UpdateResourceUsersOutput;
|
|
6072
|
-
updateResourceVisibilityGroups: UpdateResourceVisibilityGroupsOutput;
|
|
6073
6101
|
/** @deprecated Use bulkUpdateItems instead. */
|
|
6074
6102
|
updateResources: UpdateResourcesOutput;
|
|
6075
6103
|
updateRoleAssignments: UpdateRoleAssignmentsOutput;
|
|
@@ -6566,9 +6594,6 @@ export type MutationUpdateResourceUserReviewersArgs = {
|
|
|
6566
6594
|
export type MutationUpdateResourceUsersArgs = {
|
|
6567
6595
|
input: UpdateResourceUsersInput;
|
|
6568
6596
|
};
|
|
6569
|
-
export type MutationUpdateResourceVisibilityGroupsArgs = {
|
|
6570
|
-
input: UpdateResourceVisibilityGroupsInput;
|
|
6571
|
-
};
|
|
6572
6597
|
export type MutationUpdateResourcesArgs = {
|
|
6573
6598
|
input: UpdateResourcesInput;
|
|
6574
6599
|
};
|
|
@@ -7194,6 +7219,10 @@ export type PrincipalEdge = Edge & {
|
|
|
7194
7219
|
cursor: Scalars["String"]["output"];
|
|
7195
7220
|
node: Principal;
|
|
7196
7221
|
};
|
|
7222
|
+
export type PrincipalScope = {
|
|
7223
|
+
principalIDs?: InputMaybe<Array<Scalars["PrincipalId"]["input"]>>;
|
|
7224
|
+
principalTypes?: InputMaybe<Array<EntityType>>;
|
|
7225
|
+
};
|
|
7197
7226
|
export type PrincipalSearchOptions = {
|
|
7198
7227
|
excludeUsersWithoutPosition: Scalars["Boolean"]["input"];
|
|
7199
7228
|
};
|
|
@@ -7213,9 +7242,11 @@ export type PrincipalsResult = {
|
|
|
7213
7242
|
};
|
|
7214
7243
|
export type PropagationStatus = {
|
|
7215
7244
|
__typename?: "PropagationStatus";
|
|
7245
|
+
accessLevelRemoteId: Scalars["AccessLevelRemoteId"]["output"];
|
|
7246
|
+
entityId: Scalars["EntityId"]["output"];
|
|
7216
7247
|
errorMessage?: Maybe<Scalars["String"]["output"]>;
|
|
7217
7248
|
lastSynced: Scalars["Time"]["output"];
|
|
7218
|
-
|
|
7249
|
+
principalId: Scalars["EntityId"]["output"];
|
|
7219
7250
|
statusCode: PropagationStatusCode;
|
|
7220
7251
|
taskType: PropagationTaskType;
|
|
7221
7252
|
};
|
|
@@ -7410,6 +7441,7 @@ export type Query = {
|
|
|
7410
7441
|
countFilteredGroups: CountFilteredGroupsOutput;
|
|
7411
7442
|
countFilteredResources: CountFilteredResourcesOutput;
|
|
7412
7443
|
currentUserStats: CurrentUserStatsOutput;
|
|
7444
|
+
directRoleAssignments: RoleAssignmentConnection;
|
|
7413
7445
|
entitiesForRiskScoreRange: EntitiesForRiskScoreRangeResult;
|
|
7414
7446
|
entityForRemediation: RecommendationsEntity;
|
|
7415
7447
|
event: EventOutput;
|
|
@@ -7682,6 +7714,9 @@ export type QueryCountFilteredGroupsArgs = {
|
|
|
7682
7714
|
export type QueryCountFilteredResourcesArgs = {
|
|
7683
7715
|
input: CountFilteredResourcesInput;
|
|
7684
7716
|
};
|
|
7717
|
+
export type QueryDirectRoleAssignmentsArgs = {
|
|
7718
|
+
input?: InputMaybe<DirectRoleAssignmentsInput>;
|
|
7719
|
+
};
|
|
7685
7720
|
export type QueryEntitiesForRiskScoreRangeArgs = {
|
|
7686
7721
|
maxRiskScore: Scalars["Int"]["input"];
|
|
7687
7722
|
minRiskScore: Scalars["Int"]["input"];
|
|
@@ -8450,7 +8485,7 @@ export type RequestDefaults = {
|
|
|
8450
8485
|
export type RequestDefaultsInput = {
|
|
8451
8486
|
requestedGroups: Array<RequestConfigurationGroupInput>;
|
|
8452
8487
|
requestedResources: Array<RequestConfigurationResourceInput>;
|
|
8453
|
-
targetUserId
|
|
8488
|
+
targetUserId?: InputMaybe<Scalars["UserId"]["input"]>;
|
|
8454
8489
|
};
|
|
8455
8490
|
export type RequestDurationTooLargeError = Error & {
|
|
8456
8491
|
__typename?: "RequestDurationTooLargeError";
|
|
@@ -8464,6 +8499,12 @@ export type RequestFieldValueMissingError = Error & {
|
|
|
8464
8499
|
requestTemplateID: Scalars["RequestTemplateId"]["output"];
|
|
8465
8500
|
resourceIds?: Maybe<Array<Scalars["ResourceId"]["output"]>>;
|
|
8466
8501
|
};
|
|
8502
|
+
export type RequestFilters = {
|
|
8503
|
+
endDate?: InputMaybe<EndDateFilter>;
|
|
8504
|
+
searchQuery?: InputMaybe<Scalars["String"]["input"]>;
|
|
8505
|
+
showPendingOnly?: Scalars["Boolean"]["input"];
|
|
8506
|
+
startDate?: InputMaybe<StartDateFilter>;
|
|
8507
|
+
};
|
|
8467
8508
|
export type RequestInput = {
|
|
8468
8509
|
id: Scalars["RequestId"]["input"];
|
|
8469
8510
|
};
|
|
@@ -8655,11 +8696,10 @@ export type RequestedResourceInput = {
|
|
|
8655
8696
|
};
|
|
8656
8697
|
export type RequestsInput = {
|
|
8657
8698
|
cursor?: InputMaybe<Scalars["String"]["input"]>;
|
|
8699
|
+
filters?: RequestFilters;
|
|
8658
8700
|
maxNumEntries?: InputMaybe<Scalars["Int"]["input"]>;
|
|
8659
8701
|
requestType?: InputMaybe<RequestType>;
|
|
8660
|
-
|
|
8661
|
-
showPendingOnly?: InputMaybe<Scalars["Boolean"]["input"]>;
|
|
8662
|
-
sortBy?: InputMaybe<RequestsSortBy>;
|
|
8702
|
+
sortBy?: RequestsSortBy;
|
|
8663
8703
|
};
|
|
8664
8704
|
export type RequestsOutput = RequestsResult;
|
|
8665
8705
|
export type RequestsResult = {
|
|
@@ -9397,6 +9437,12 @@ export type RoleAssignmentRiskFactor = {
|
|
|
9397
9437
|
reason?: Maybe<Scalars["String"]["output"]>;
|
|
9398
9438
|
riskFactor: RecommendationsSubscoreType;
|
|
9399
9439
|
};
|
|
9440
|
+
export type RoleAssignmentScope = {
|
|
9441
|
+
accessScope: AccessScope;
|
|
9442
|
+
entityScope: EntityScope;
|
|
9443
|
+
principalScope: PrincipalScope;
|
|
9444
|
+
searchQuery?: InputMaybe<Scalars["String"]["input"]>;
|
|
9445
|
+
};
|
|
9400
9446
|
export type RoleAssignmentSearchScope = {
|
|
9401
9447
|
entityScope?: InputMaybe<RoleAssignmentEntityScope>;
|
|
9402
9448
|
entityTypeScope?: InputMaybe<RoleAssignmentEntityTypeScope>;
|
|
@@ -9440,7 +9486,8 @@ export declare enum RoleAssignmentsSortByField {
|
|
|
9440
9486
|
FirstGrantedAt = "FIRST_GRANTED_AT",
|
|
9441
9487
|
LastUsedAt = "LAST_USED_AT",
|
|
9442
9488
|
PrincipalName = "PRINCIPAL_NAME",
|
|
9443
|
-
Role = "ROLE"
|
|
9489
|
+
Role = "ROLE",
|
|
9490
|
+
VulnerabilityCount = "VULNERABILITY_COUNT"
|
|
9444
9491
|
}
|
|
9445
9492
|
export declare enum RolePermission {
|
|
9446
9493
|
AssignReviewers = "ASSIGN_REVIEWERS",
|
|
@@ -9453,6 +9500,7 @@ export declare enum RolePermission {
|
|
|
9453
9500
|
EditSyncSettings = "EDIT_SYNC_SETTINGS",
|
|
9454
9501
|
EditTags = "EDIT_TAGS",
|
|
9455
9502
|
Export = "EXPORT",
|
|
9503
|
+
Import = "IMPORT",
|
|
9456
9504
|
Read = "READ",
|
|
9457
9505
|
ReadAssignments = "READ_ASSIGNMENTS",
|
|
9458
9506
|
SendReminders = "SEND_REMINDERS",
|
|
@@ -9830,6 +9878,9 @@ export type StartAccessReviewStatsResult = {
|
|
|
9830
9878
|
__typename?: "StartAccessReviewStatsResult";
|
|
9831
9879
|
startAccessReviewStats?: Maybe<StartAccessReviewStats>;
|
|
9832
9880
|
};
|
|
9881
|
+
export type StartDateFilter = {
|
|
9882
|
+
date: Scalars["String"]["input"];
|
|
9883
|
+
};
|
|
9833
9884
|
export type StartSyncInput = {
|
|
9834
9885
|
accessReviewId?: InputMaybe<Scalars["AccessReviewId"]["input"]>;
|
|
9835
9886
|
connectionId?: InputMaybe<Scalars["ConnectionId"]["input"]>;
|
|
@@ -10803,16 +10854,7 @@ export type UpdateResourceUsersOutput = ResourceNotFoundError | UpdateResourceUs
|
|
|
10803
10854
|
export type UpdateResourceUsersResult = {
|
|
10804
10855
|
__typename?: "UpdateResourceUsersResult";
|
|
10805
10856
|
resourceUsers?: Maybe<Array<ResourceUser>>;
|
|
10806
|
-
|
|
10807
|
-
export type UpdateResourceVisibilityGroupsInput = {
|
|
10808
|
-
resourceId: Scalars["ResourceId"]["input"];
|
|
10809
|
-
visibility: Visibility;
|
|
10810
|
-
visibilityGroupsIds: Array<Scalars["GroupId"]["input"]>;
|
|
10811
|
-
};
|
|
10812
|
-
export type UpdateResourceVisibilityGroupsOutput = ConfigurationVisibilityGroupNotFoundError | GroupNotFoundError | InvalidUpdateResourceVisibilityGroupError | ResourceNotFoundError | UpdateResourceVisibilityGroupsResult;
|
|
10813
|
-
export type UpdateResourceVisibilityGroupsResult = {
|
|
10814
|
-
__typename?: "UpdateResourceVisibilityGroupsResult";
|
|
10815
|
-
resource: Resource;
|
|
10857
|
+
taskId?: Maybe<Scalars["PushTaskId"]["output"]>;
|
|
10816
10858
|
};
|
|
10817
10859
|
export type UpdateResourcesInput = {
|
|
10818
10860
|
commonMetadata?: InputMaybe<CommonMetadataInput>;
|
|
@@ -11387,9 +11429,6 @@ export declare enum RequestDecisionLevel {
|
|
|
11387
11429
|
Admin = "ADMIN",
|
|
11388
11430
|
Regular = "REGULAR"
|
|
11389
11431
|
}
|
|
11390
|
-
export type StartDateFilter = {
|
|
11391
|
-
date: Scalars["String"]["input"];
|
|
11392
|
-
};
|
|
11393
11432
|
export type UpdateScopedRoleAssignmentsInput = {
|
|
11394
11433
|
newDurationInMinutes?: InputMaybe<NullableInt>;
|
|
11395
11434
|
scope?: InputMaybe<RoleAssignmentSearchScope>;
|
|
@@ -11579,9 +11618,31 @@ export type ResourceAccessLevelsQuery = {
|
|
|
11579
11618
|
message: string;
|
|
11580
11619
|
};
|
|
11581
11620
|
};
|
|
11621
|
+
export type RequestDefaultsQueryVariables = Exact<{
|
|
11622
|
+
requestedResources: Array<RequestConfigurationResourceInput> | RequestConfigurationResourceInput;
|
|
11623
|
+
requestedGroups: Array<RequestConfigurationGroupInput> | RequestConfigurationGroupInput;
|
|
11624
|
+
}>;
|
|
11625
|
+
export type RequestDefaultsQuery = {
|
|
11626
|
+
__typename?: "Query";
|
|
11627
|
+
requestDefaults: {
|
|
11628
|
+
__typename?: "RequestDefaults";
|
|
11629
|
+
recommendedDurationInMinutes?: number | null;
|
|
11630
|
+
defaultDurationInMinutes: number;
|
|
11631
|
+
maxDurationInMinutes?: number | null;
|
|
11632
|
+
requireSupportTicket: boolean;
|
|
11633
|
+
reasonOptional: boolean;
|
|
11634
|
+
requesterIsAdmin: boolean;
|
|
11635
|
+
durationOptions: Array<{
|
|
11636
|
+
__typename?: "DurationOption";
|
|
11637
|
+
durationInMinutes: number;
|
|
11638
|
+
label: string;
|
|
11639
|
+
}>;
|
|
11640
|
+
};
|
|
11641
|
+
};
|
|
11582
11642
|
export declare const GetGroupDocument: DocumentNode<GetGroupQuery, GetGroupQueryVariables>;
|
|
11583
11643
|
export declare const GetRequestDocument: DocumentNode<GetRequestQuery, GetRequestQueryVariables>;
|
|
11584
11644
|
export declare const CheckAuthSessionQueryDocument: DocumentNode<CheckAuthSessionQueryQuery, CheckAuthSessionQueryQueryVariables>;
|
|
11585
11645
|
export declare const GetRequestableAppsQueryDocument: DocumentNode<GetRequestableAppsQueryQuery, GetRequestableAppsQueryQueryVariables>;
|
|
11586
11646
|
export declare const PaginatedEntityDropdownDocument: DocumentNode<PaginatedEntityDropdownQuery, PaginatedEntityDropdownQueryVariables>;
|
|
11587
11647
|
export declare const ResourceAccessLevelsDocument: DocumentNode<ResourceAccessLevelsQuery, ResourceAccessLevelsQueryVariables>;
|
|
11648
|
+
export declare const RequestDefaultsDocument: DocumentNode<RequestDefaultsQuery, RequestDefaultsQueryVariables>;
|
package/lib/graphql/graphql.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HealthStatus = exports.GroupUserSource = exports.GroupUserSortByField = exports.GroupType = exports.GroupResourceSource = exports.GroupBindingsSortByField = exports.GroupBindingSuggestionsSortByField = exports.GeneralSettingType = exports.FiltersMatchMode = exports.FactorType = exports.EventType = exports.EventSeverity = exports.ErrorNotificationSettingType = exports.EntityType = exports.ConnectionValidationStatus = exports.ConnectionValidationSeverity = exports.ConnectionType = exports.BundlesSortByField = exports.BundleItemsSortByField = exports.AuthType = exports.AuthSessionStatus = exports.AuthFlowType = exports.AssociatedItemsSortByField = exports.AssignmentsSortByField = exports.AppsSortByField = exports.AppType = exports.AppItemsSortByField = exports.AppCategory = exports.ApiAuthType = exports.ApiAccessLevel = exports.AldwinRole = exports.AccessType = exports.AccessRuleStatus = exports.AccessReviewUserWarningType = exports.AccessReviewType = exports.AccessReviewTab = exports.AccessReviewSummaryStatus = exports.AccessReviewStatus = exports.AccessReviewReviewerAssignmentPolicy = exports.AccessReviewItemsSortByField = exports.AccessReviewItemStatus = exports.AccessReviewItemOutcome = exports.AccessReviewGroupResourceVisibilityPolicy = exports.AccessReviewGroupItemKind = exports.AccessReviewEndUserView = exports.AccessReviewAssignedStatus = exports.AccessReviewAction = exports.AccessOption = exports.AccessChangeType = exports.AwsIdentityCenterImportSetting = void 0;
|
|
4
4
|
exports.TaskTrigger = exports.TagsSortByField = exports.TagFilterMatchMode = exports.SyncType = exports.SyncTaskStatus = exports.SubEventsSortByField = exports.StringFormatType = exports.SortDirection = exports.ServiceType = exports.SearchType = exports.RolePermissionTargetType = exports.RolePermission = exports.RoleAssignmentsSortByField = exports.RoleAssignmentSource = exports.RiskLevel = exports.ReviewerUserStatus = exports.ReviewerAction = exports.ReviewStageOperator = exports.ResourceUserSource = exports.ResourceUserSortByField = exports.ResourceType = exports.RequestsSortByField = exports.RequestType = exports.RequestTemplateCustomFieldType = exports.RequestStatus = exports.RequestMessageLevel = exports.RequestMessageCode = exports.RequestApprovalType = exports.RecommendationsSubscoreType = exports.RecommendationsMetricType = exports.RecommendationsFeedbackType = exports.RecommendationsEntityType = exports.PubsubPublishMessageType = exports.PubsubPublishMessageStatusCode = exports.PubsubPublishConnectionType = exports.ProvisionSource = exports.PropagationTaskType = exports.PropagationStatusCode = exports.OwnersSortByField = exports.OrganizationType = exports.OidcProviderType = exports.NotificationType = exports.MessageChannelType = exports.MfaProvider = exports.IntegrationType = exports.ImportSetting = exports.IdpConnectionUserAttributeUseAs = exports.IdpConnectionType = exports.IdentityCategory = exports.HrIdpStatus = void 0;
|
|
5
|
-
exports.ResourceAccessLevelsDocument = exports.PaginatedEntityDropdownDocument = exports.GetRequestableAppsQueryDocument = exports.CheckAuthSessionQueryDocument = exports.GetRequestDocument = exports.GetGroupDocument = exports.RequestDecisionLevel = exports.WebhookPubsubPublishConnectionAuthType = exports.WebhookPubsubPublishConnectionApiKeyLocation = exports.Visibility = exports.VerifyFactorStatus = exports.UsersSortByField = exports.UserProductRole = exports.UserErrorType = exports.UsageAttributionType = exports.UiSource = exports.TimePeriod = exports.TimeBucket = exports.ThirdPartyProvider = void 0;
|
|
5
|
+
exports.RequestDefaultsDocument = exports.ResourceAccessLevelsDocument = exports.PaginatedEntityDropdownDocument = exports.GetRequestableAppsQueryDocument = exports.CheckAuthSessionQueryDocument = exports.GetRequestDocument = exports.GetGroupDocument = exports.RequestDecisionLevel = exports.WebhookPubsubPublishConnectionAuthType = exports.WebhookPubsubPublishConnectionApiKeyLocation = exports.Visibility = exports.VerifyFactorStatus = exports.UsersSortByField = exports.UserProductRole = exports.UserErrorType = exports.UsageAttributionType = exports.UiSource = exports.TimePeriod = exports.TimeBucket = exports.ThirdPartyProvider = void 0;
|
|
6
6
|
var AwsIdentityCenterImportSetting;
|
|
7
7
|
(function (AwsIdentityCenterImportSetting) {
|
|
8
8
|
AwsIdentityCenterImportSetting["All"] = "ALL";
|
|
@@ -18,6 +18,7 @@ var AccessChangeType;
|
|
|
18
18
|
var AccessOption;
|
|
19
19
|
(function (AccessOption) {
|
|
20
20
|
AccessOption["All"] = "ALL";
|
|
21
|
+
AccessOption["Manageable"] = "MANAGEABLE";
|
|
21
22
|
AccessOption["Mine"] = "MINE";
|
|
22
23
|
AccessOption["Requestable"] = "REQUESTABLE";
|
|
23
24
|
/** @deprecated no longer supported */
|
|
@@ -653,6 +654,7 @@ var EventType;
|
|
|
653
654
|
EventType["RoleAssignmentsDeleted"] = "ROLE_ASSIGNMENTS_DELETED";
|
|
654
655
|
EventType["RoleAssignmentsUpdated"] = "ROLE_ASSIGNMENTS_UPDATED";
|
|
655
656
|
EventType["SessionsCreatedForResources"] = "SESSIONS_CREATED_FOR_RESOURCES";
|
|
657
|
+
EventType["SoonToExpireNotification"] = "SOON_TO_EXPIRE_NOTIFICATION";
|
|
656
658
|
EventType["ThirdPartyIntegrationCreated"] = "THIRD_PARTY_INTEGRATION_CREATED";
|
|
657
659
|
EventType["ThirdPartyIntegrationDeleted"] = "THIRD_PARTY_INTEGRATION_DELETED";
|
|
658
660
|
EventType["ToxicSetViolationsCreated"] = "TOXIC_SET_VIOLATIONS_CREATED";
|
|
@@ -700,7 +702,6 @@ var GeneralSettingType;
|
|
|
700
702
|
GeneralSettingType["AutoMergeUsersByEmail"] = "AUTO_MERGE_USERS_BY_EMAIL";
|
|
701
703
|
GeneralSettingType["DisableNonAdminLogins"] = "DISABLE_NON_ADMIN_LOGINS";
|
|
702
704
|
GeneralSettingType["GlobalRequesterRole"] = "GLOBAL_REQUESTER_ROLE";
|
|
703
|
-
GeneralSettingType["LogRocketDisabled"] = "LOG_ROCKET_DISABLED";
|
|
704
705
|
GeneralSettingType["NestedGroups"] = "NESTED_GROUPS";
|
|
705
706
|
GeneralSettingType["RequireManagerCc"] = "REQUIRE_MANAGER_CC";
|
|
706
707
|
GeneralSettingType["RequireOpalMfaForLogins"] = "REQUIRE_OPAL_MFA_FOR_LOGINS";
|
|
@@ -1184,6 +1185,7 @@ var RoleAssignmentsSortByField;
|
|
|
1184
1185
|
RoleAssignmentsSortByField["LastUsedAt"] = "LAST_USED_AT";
|
|
1185
1186
|
RoleAssignmentsSortByField["PrincipalName"] = "PRINCIPAL_NAME";
|
|
1186
1187
|
RoleAssignmentsSortByField["Role"] = "ROLE";
|
|
1188
|
+
RoleAssignmentsSortByField["VulnerabilityCount"] = "VULNERABILITY_COUNT";
|
|
1187
1189
|
})(RoleAssignmentsSortByField || (exports.RoleAssignmentsSortByField = RoleAssignmentsSortByField = {}));
|
|
1188
1190
|
var RolePermission;
|
|
1189
1191
|
(function (RolePermission) {
|
|
@@ -1197,6 +1199,7 @@ var RolePermission;
|
|
|
1197
1199
|
RolePermission["EditSyncSettings"] = "EDIT_SYNC_SETTINGS";
|
|
1198
1200
|
RolePermission["EditTags"] = "EDIT_TAGS";
|
|
1199
1201
|
RolePermission["Export"] = "EXPORT";
|
|
1202
|
+
RolePermission["Import"] = "IMPORT";
|
|
1200
1203
|
RolePermission["Read"] = "READ";
|
|
1201
1204
|
RolePermission["ReadAssignments"] = "READ_ASSIGNMENTS";
|
|
1202
1205
|
RolePermission["SendReminders"] = "SEND_REMINDERS";
|
|
@@ -2408,3 +2411,140 @@ exports.ResourceAccessLevelsDocument = {
|
|
|
2408
2411
|
},
|
|
2409
2412
|
],
|
|
2410
2413
|
};
|
|
2414
|
+
exports.RequestDefaultsDocument = {
|
|
2415
|
+
kind: "Document",
|
|
2416
|
+
definitions: [
|
|
2417
|
+
{
|
|
2418
|
+
kind: "OperationDefinition",
|
|
2419
|
+
operation: "query",
|
|
2420
|
+
name: { kind: "Name", value: "RequestDefaults" },
|
|
2421
|
+
variableDefinitions: [
|
|
2422
|
+
{
|
|
2423
|
+
kind: "VariableDefinition",
|
|
2424
|
+
variable: {
|
|
2425
|
+
kind: "Variable",
|
|
2426
|
+
name: { kind: "Name", value: "requestedResources" },
|
|
2427
|
+
},
|
|
2428
|
+
type: {
|
|
2429
|
+
kind: "NonNullType",
|
|
2430
|
+
type: {
|
|
2431
|
+
kind: "ListType",
|
|
2432
|
+
type: {
|
|
2433
|
+
kind: "NonNullType",
|
|
2434
|
+
type: {
|
|
2435
|
+
kind: "NamedType",
|
|
2436
|
+
name: {
|
|
2437
|
+
kind: "Name",
|
|
2438
|
+
value: "RequestConfigurationResourceInput",
|
|
2439
|
+
},
|
|
2440
|
+
},
|
|
2441
|
+
},
|
|
2442
|
+
},
|
|
2443
|
+
},
|
|
2444
|
+
},
|
|
2445
|
+
{
|
|
2446
|
+
kind: "VariableDefinition",
|
|
2447
|
+
variable: {
|
|
2448
|
+
kind: "Variable",
|
|
2449
|
+
name: { kind: "Name", value: "requestedGroups" },
|
|
2450
|
+
},
|
|
2451
|
+
type: {
|
|
2452
|
+
kind: "NonNullType",
|
|
2453
|
+
type: {
|
|
2454
|
+
kind: "ListType",
|
|
2455
|
+
type: {
|
|
2456
|
+
kind: "NonNullType",
|
|
2457
|
+
type: {
|
|
2458
|
+
kind: "NamedType",
|
|
2459
|
+
name: {
|
|
2460
|
+
kind: "Name",
|
|
2461
|
+
value: "RequestConfigurationGroupInput",
|
|
2462
|
+
},
|
|
2463
|
+
},
|
|
2464
|
+
},
|
|
2465
|
+
},
|
|
2466
|
+
},
|
|
2467
|
+
},
|
|
2468
|
+
],
|
|
2469
|
+
selectionSet: {
|
|
2470
|
+
kind: "SelectionSet",
|
|
2471
|
+
selections: [
|
|
2472
|
+
{
|
|
2473
|
+
kind: "Field",
|
|
2474
|
+
name: { kind: "Name", value: "requestDefaults" },
|
|
2475
|
+
arguments: [
|
|
2476
|
+
{
|
|
2477
|
+
kind: "Argument",
|
|
2478
|
+
name: { kind: "Name", value: "input" },
|
|
2479
|
+
value: {
|
|
2480
|
+
kind: "ObjectValue",
|
|
2481
|
+
fields: [
|
|
2482
|
+
{
|
|
2483
|
+
kind: "ObjectField",
|
|
2484
|
+
name: { kind: "Name", value: "requestedResources" },
|
|
2485
|
+
value: {
|
|
2486
|
+
kind: "Variable",
|
|
2487
|
+
name: { kind: "Name", value: "requestedResources" },
|
|
2488
|
+
},
|
|
2489
|
+
},
|
|
2490
|
+
{
|
|
2491
|
+
kind: "ObjectField",
|
|
2492
|
+
name: { kind: "Name", value: "requestedGroups" },
|
|
2493
|
+
value: {
|
|
2494
|
+
kind: "Variable",
|
|
2495
|
+
name: { kind: "Name", value: "requestedGroups" },
|
|
2496
|
+
},
|
|
2497
|
+
},
|
|
2498
|
+
],
|
|
2499
|
+
},
|
|
2500
|
+
},
|
|
2501
|
+
],
|
|
2502
|
+
selectionSet: {
|
|
2503
|
+
kind: "SelectionSet",
|
|
2504
|
+
selections: [
|
|
2505
|
+
{
|
|
2506
|
+
kind: "Field",
|
|
2507
|
+
name: { kind: "Name", value: "durationOptions" },
|
|
2508
|
+
selectionSet: {
|
|
2509
|
+
kind: "SelectionSet",
|
|
2510
|
+
selections: [
|
|
2511
|
+
{
|
|
2512
|
+
kind: "Field",
|
|
2513
|
+
name: { kind: "Name", value: "durationInMinutes" },
|
|
2514
|
+
},
|
|
2515
|
+
{ kind: "Field", name: { kind: "Name", value: "label" } },
|
|
2516
|
+
],
|
|
2517
|
+
},
|
|
2518
|
+
},
|
|
2519
|
+
{
|
|
2520
|
+
kind: "Field",
|
|
2521
|
+
name: { kind: "Name", value: "recommendedDurationInMinutes" },
|
|
2522
|
+
},
|
|
2523
|
+
{
|
|
2524
|
+
kind: "Field",
|
|
2525
|
+
name: { kind: "Name", value: "defaultDurationInMinutes" },
|
|
2526
|
+
},
|
|
2527
|
+
{
|
|
2528
|
+
kind: "Field",
|
|
2529
|
+
name: { kind: "Name", value: "maxDurationInMinutes" },
|
|
2530
|
+
},
|
|
2531
|
+
{
|
|
2532
|
+
kind: "Field",
|
|
2533
|
+
name: { kind: "Name", value: "requireSupportTicket" },
|
|
2534
|
+
},
|
|
2535
|
+
{
|
|
2536
|
+
kind: "Field",
|
|
2537
|
+
name: { kind: "Name", value: "reasonOptional" },
|
|
2538
|
+
},
|
|
2539
|
+
{
|
|
2540
|
+
kind: "Field",
|
|
2541
|
+
name: { kind: "Name", value: "requesterIsAdmin" },
|
|
2542
|
+
},
|
|
2543
|
+
],
|
|
2544
|
+
},
|
|
2545
|
+
},
|
|
2546
|
+
],
|
|
2547
|
+
},
|
|
2548
|
+
},
|
|
2549
|
+
],
|
|
2550
|
+
};
|
package/lib/lib/requests.d.ts
CHANGED
|
@@ -1,22 +1,42 @@
|
|
|
1
1
|
import type { NormalizedCacheObject } from "@apollo/client/core";
|
|
2
2
|
import type { ApolloClient } from "@apollo/client/core/ApolloClient";
|
|
3
3
|
import type { Command } from "@oclif/core/lib/command";
|
|
4
|
-
|
|
4
|
+
interface AppNode {
|
|
5
5
|
appName: string;
|
|
6
|
-
assets:
|
|
6
|
+
assets: Record<string, AssetNode>;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
interface AssetNode {
|
|
9
9
|
assetName: string;
|
|
10
|
-
roles?:
|
|
10
|
+
roles?: Record<string, RoleNode>;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
interface RoleNode {
|
|
13
13
|
roleName: string;
|
|
14
14
|
}
|
|
15
|
-
export type RequestMap =
|
|
15
|
+
export type RequestMap = Record<string, AppNode>;
|
|
16
|
+
interface DurationOption {
|
|
17
|
+
durationInMinutes: number;
|
|
18
|
+
label: string;
|
|
19
|
+
}
|
|
20
|
+
interface RequestDefaults {
|
|
21
|
+
durationOptions?: DurationOption[];
|
|
22
|
+
recommendedDurationInMinutes?: number | null;
|
|
23
|
+
defaultDurationInMinutes?: number;
|
|
24
|
+
maxDurationInMinutes?: number | null;
|
|
25
|
+
requireSupportTicket?: boolean;
|
|
26
|
+
reasonOptional?: boolean;
|
|
27
|
+
requesterIsAdmin?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface RequestMetadata {
|
|
30
|
+
requestMap: RequestMap;
|
|
31
|
+
requestDefaults: RequestDefaults;
|
|
32
|
+
}
|
|
33
|
+
export declare function createEmptyRequestMetadata(): RequestMetadata;
|
|
16
34
|
export declare function selectRequestableItems(cmd: Command, client: ApolloClient<NormalizedCacheObject>, requestMap: RequestMap): Promise<void>;
|
|
17
35
|
export declare function chooseAssets(cmd: Command, client: ApolloClient<NormalizedCacheObject>, appId: string, requestMap: RequestMap): Promise<void>;
|
|
18
36
|
export declare function chooseRoles(cmd: Command, client: ApolloClient<NormalizedCacheObject>, appId: string, assetId: string, requestMap: RequestMap): Promise<void>;
|
|
19
37
|
export declare function doneSelectingAssets(): Promise<boolean>;
|
|
20
|
-
export declare function
|
|
21
|
-
export declare function
|
|
38
|
+
export declare function setRequestDefaults(cmd: Command, client: ApolloClient<NormalizedCacheObject>, metadata: RequestMetadata): Promise<void>;
|
|
39
|
+
export declare function promptForReason(metadata: RequestMetadata): Promise<any>;
|
|
40
|
+
export declare function promptForExpiration(metadata: RequestMetadata): Promise<any>;
|
|
22
41
|
export declare function submitFinalRequest(cmd: Command): Promise<void>;
|
|
42
|
+
export {};
|
package/lib/lib/requests.js
CHANGED
|
@@ -1,15 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmptyRequestMetadata = createEmptyRequestMetadata;
|
|
3
4
|
exports.selectRequestableItems = selectRequestableItems;
|
|
4
5
|
exports.chooseAssets = chooseAssets;
|
|
5
6
|
exports.chooseRoles = chooseRoles;
|
|
6
7
|
exports.doneSelectingAssets = doneSelectingAssets;
|
|
8
|
+
exports.setRequestDefaults = setRequestDefaults;
|
|
7
9
|
exports.promptForReason = promptForReason;
|
|
8
10
|
exports.promptForExpiration = promptForExpiration;
|
|
9
11
|
exports.submitFinalRequest = submitFinalRequest;
|
|
10
12
|
const inquirer = require("inquirer");
|
|
11
13
|
const graphql_1 = require("../graphql");
|
|
12
14
|
inquirer.registerPrompt("autocomplete", require("inquirer-autocomplete-prompt"));
|
|
15
|
+
function createEmptyRequestMetadata() {
|
|
16
|
+
// Initialize with empty defaults
|
|
17
|
+
const requestDefaults = {
|
|
18
|
+
durationOptions: [],
|
|
19
|
+
recommendedDurationInMinutes: undefined,
|
|
20
|
+
defaultDurationInMinutes: undefined,
|
|
21
|
+
maxDurationInMinutes: undefined,
|
|
22
|
+
requireSupportTicket: false,
|
|
23
|
+
reasonOptional: false,
|
|
24
|
+
requesterIsAdmin: false,
|
|
25
|
+
};
|
|
26
|
+
// Initialize with empty map
|
|
27
|
+
const requestMap = {};
|
|
28
|
+
return {
|
|
29
|
+
requestMap,
|
|
30
|
+
requestDefaults,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
13
33
|
// Queries and Mutations
|
|
14
34
|
// TODO: add pagination ability from CLI. (Load more...) option
|
|
15
35
|
const GET_REQUESTABLE_APPS_QUERY = (0, graphql_1.graphql)(`
|
|
@@ -211,6 +231,46 @@ async function queryResourceRoles(cmd, client, resourceId) {
|
|
|
211
231
|
}
|
|
212
232
|
}
|
|
213
233
|
}
|
|
234
|
+
const REQUEST_DEFAULTS_QUERY = (0, graphql_1.graphql)(`
|
|
235
|
+
query RequestDefaults(
|
|
236
|
+
$requestedResources: [RequestConfigurationResourceInput!]!
|
|
237
|
+
$requestedGroups: [RequestConfigurationGroupInput!]!
|
|
238
|
+
) {
|
|
239
|
+
requestDefaults(input: {
|
|
240
|
+
requestedResources: $requestedResources,
|
|
241
|
+
requestedGroups: $requestedGroups,
|
|
242
|
+
}
|
|
243
|
+
) {
|
|
244
|
+
durationOptions {
|
|
245
|
+
durationInMinutes
|
|
246
|
+
label
|
|
247
|
+
}
|
|
248
|
+
recommendedDurationInMinutes
|
|
249
|
+
defaultDurationInMinutes
|
|
250
|
+
maxDurationInMinutes
|
|
251
|
+
requireSupportTicket
|
|
252
|
+
reasonOptional
|
|
253
|
+
requesterIsAdmin
|
|
254
|
+
}
|
|
255
|
+
}`);
|
|
256
|
+
async function queryRequestDefaults(cmd, client, requestedResources, requestedGroups) {
|
|
257
|
+
try {
|
|
258
|
+
const resp = await client.query({
|
|
259
|
+
query: REQUEST_DEFAULTS_QUERY,
|
|
260
|
+
variables: {
|
|
261
|
+
requestedResources: requestedResources,
|
|
262
|
+
requestedGroups: requestedGroups,
|
|
263
|
+
},
|
|
264
|
+
fetchPolicy: "network-only", // to avoid caching
|
|
265
|
+
});
|
|
266
|
+
return resp.data.requestDefaults;
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
if (error instanceof Error || typeof error === "string") {
|
|
270
|
+
cmd.error(error);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
214
274
|
// Helper functions
|
|
215
275
|
async function selectRequestableItems(cmd, client, requestMap) {
|
|
216
276
|
const { App } = await inquirer.prompt([
|
|
@@ -226,11 +286,11 @@ async function selectRequestableItems(cmd, client, requestMap) {
|
|
|
226
286
|
},
|
|
227
287
|
]);
|
|
228
288
|
// Set the app in the requestMap and call choose assets step
|
|
229
|
-
if (!
|
|
230
|
-
requestMap
|
|
289
|
+
if (!(App.id in requestMap)) {
|
|
290
|
+
requestMap[App.id] = {
|
|
231
291
|
appName: App.name,
|
|
232
|
-
assets:
|
|
233
|
-
}
|
|
292
|
+
assets: {},
|
|
293
|
+
};
|
|
234
294
|
}
|
|
235
295
|
await chooseAssets(cmd, client, App.id, requestMap);
|
|
236
296
|
}
|
|
@@ -249,22 +309,22 @@ async function chooseAssets(cmd, client, appId, requestMap) {
|
|
|
249
309
|
return true;
|
|
250
310
|
},
|
|
251
311
|
});
|
|
252
|
-
const entry = requestMap
|
|
312
|
+
const entry = requestMap[appId];
|
|
253
313
|
for (const asset of Assets) {
|
|
254
314
|
if (entry === undefined) {
|
|
255
315
|
throw new Error(`App ${appId} not found in requestMap`);
|
|
256
316
|
}
|
|
257
|
-
if (!
|
|
258
|
-
entry.assets
|
|
317
|
+
if (!(asset.id in entry.assets)) {
|
|
318
|
+
entry.assets[asset.id] = {
|
|
259
319
|
assetName: asset.name,
|
|
260
|
-
roles:
|
|
261
|
-
}
|
|
320
|
+
roles: {},
|
|
321
|
+
};
|
|
262
322
|
}
|
|
263
323
|
await chooseRoles(cmd, client, appId, asset.id, requestMap);
|
|
264
324
|
}
|
|
265
325
|
}
|
|
266
326
|
async function chooseRoles(cmd, client, appId, assetId, requestMap) {
|
|
267
|
-
var _a
|
|
327
|
+
var _a;
|
|
268
328
|
const resourceRoles = (_a = (await queryResourceRoles(cmd, client, assetId))) !== null && _a !== void 0 ? _a : [];
|
|
269
329
|
if (resourceRoles !== undefined &&
|
|
270
330
|
(resourceRoles.length === 0 ||
|
|
@@ -283,15 +343,18 @@ async function chooseRoles(cmd, client, appId, assetId, requestMap) {
|
|
|
283
343
|
return true;
|
|
284
344
|
},
|
|
285
345
|
});
|
|
286
|
-
const entry = requestMap
|
|
287
|
-
const assetEntry = entry === null || entry === void 0 ? void 0 : entry.assets
|
|
346
|
+
const entry = requestMap[appId];
|
|
347
|
+
const assetEntry = entry === null || entry === void 0 ? void 0 : entry.assets[assetId];
|
|
288
348
|
if (entry === undefined || assetEntry === undefined) {
|
|
289
349
|
throw new Error(`App ${appId} or Asset ${assetId} not found in requestMap`);
|
|
290
350
|
}
|
|
351
|
+
if (!assetEntry.roles) {
|
|
352
|
+
assetEntry.roles = {};
|
|
353
|
+
}
|
|
291
354
|
for (const role of roles) {
|
|
292
|
-
|
|
355
|
+
assetEntry.roles[role.id] = {
|
|
293
356
|
roleName: role.name,
|
|
294
|
-
}
|
|
357
|
+
};
|
|
295
358
|
}
|
|
296
359
|
}
|
|
297
360
|
async function doneSelectingAssets() {
|
|
@@ -307,22 +370,84 @@ async function doneSelectingAssets() {
|
|
|
307
370
|
]);
|
|
308
371
|
return submitOrAdd === submitMessage;
|
|
309
372
|
}
|
|
310
|
-
async function
|
|
373
|
+
async function setRequestDefaults(cmd, client, metadata) {
|
|
374
|
+
const requestMap = metadata.requestMap;
|
|
375
|
+
const requestedResources = [];
|
|
376
|
+
const requestedGroups = [];
|
|
377
|
+
for (const appNode of Object.values(requestMap)) {
|
|
378
|
+
for (const [assetId, assetNode] of Object.entries(appNode.assets)) {
|
|
379
|
+
if (assetNode.roles !== undefined) {
|
|
380
|
+
for (const roleId of Object.keys(assetNode.roles)) {
|
|
381
|
+
requestedResources.push({
|
|
382
|
+
resourceId: assetId,
|
|
383
|
+
accessLevelRemoteId: roleId,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
try {
|
|
390
|
+
const requestDefaults = await queryRequestDefaults(cmd, client, requestedResources, requestedGroups);
|
|
391
|
+
if ((requestDefaults === null || requestDefaults === void 0 ? void 0 : requestDefaults.__typename) === "RequestDefaults") {
|
|
392
|
+
metadata.requestDefaults.durationOptions =
|
|
393
|
+
requestDefaults.durationOptions;
|
|
394
|
+
metadata.requestDefaults.recommendedDurationInMinutes =
|
|
395
|
+
requestDefaults.recommendedDurationInMinutes;
|
|
396
|
+
metadata.requestDefaults.defaultDurationInMinutes =
|
|
397
|
+
requestDefaults.defaultDurationInMinutes;
|
|
398
|
+
metadata.requestDefaults.maxDurationInMinutes =
|
|
399
|
+
requestDefaults.maxDurationInMinutes;
|
|
400
|
+
metadata.requestDefaults.requireSupportTicket =
|
|
401
|
+
requestDefaults.requireSupportTicket;
|
|
402
|
+
metadata.requestDefaults.reasonOptional = requestDefaults.reasonOptional;
|
|
403
|
+
metadata.requestDefaults.requesterIsAdmin =
|
|
404
|
+
requestDefaults.requesterIsAdmin;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
catch (_a) {
|
|
408
|
+
cmd.error("Error fetching request defaults.");
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
async function promptForReason(metadata) {
|
|
311
412
|
return await inquirer.prompt([
|
|
312
413
|
{
|
|
313
414
|
name: "reason",
|
|
314
415
|
message: "I need access to this because...",
|
|
315
416
|
type: "input",
|
|
417
|
+
validate: (answer) => {
|
|
418
|
+
if (metadata.requestDefaults.reasonOptional && answer.length < 1) {
|
|
419
|
+
return "A reason for requesting these assets is required.";
|
|
420
|
+
}
|
|
421
|
+
return true;
|
|
422
|
+
},
|
|
316
423
|
},
|
|
317
424
|
]);
|
|
318
425
|
}
|
|
319
|
-
async function promptForExpiration() {
|
|
426
|
+
async function promptForExpiration(metadata) {
|
|
427
|
+
var _a, _b;
|
|
428
|
+
const durations = ((_b = (_a = metadata.requestDefaults) === null || _a === void 0 ? void 0 : _a.durationOptions) === null || _b === void 0 ? void 0 : _b.map((option) => {
|
|
429
|
+
return {
|
|
430
|
+
name: option.durationInMinutes ===
|
|
431
|
+
metadata.requestDefaults.recommendedDurationInMinutes
|
|
432
|
+
? `${option.label} (Recommended)`
|
|
433
|
+
: option.label,
|
|
434
|
+
value: {
|
|
435
|
+
label: option.label,
|
|
436
|
+
durationInMinutes: option.durationInMinutes,
|
|
437
|
+
},
|
|
438
|
+
};
|
|
439
|
+
})) || [];
|
|
440
|
+
// TODO: Sort durations by minutes
|
|
441
|
+
// durations = durations.sort(
|
|
442
|
+
// durations.filter((option) => option.value.durationInMinutes),
|
|
443
|
+
// );
|
|
320
444
|
return await inquirer.prompt([
|
|
321
445
|
{
|
|
322
446
|
name: "expiration",
|
|
323
447
|
message: "When should access expire?",
|
|
324
448
|
type: "list",
|
|
325
|
-
choices:
|
|
449
|
+
choices: durations,
|
|
450
|
+
pageSize: 15,
|
|
326
451
|
},
|
|
327
452
|
]);
|
|
328
453
|
}
|
package/lib/utils/displays.js
CHANGED
|
@@ -32,17 +32,17 @@ function treeifyRequestMap(requestMap) {
|
|
|
32
32
|
const requestTree = {};
|
|
33
33
|
// Create a tree structure from the requestMap
|
|
34
34
|
// Iterate over apps
|
|
35
|
-
for (const appNode of
|
|
35
|
+
for (const [_appId, appNode] of Object.entries(requestMap)) {
|
|
36
36
|
const appKey = `🔧${appNode.appName}`;
|
|
37
37
|
requestTree[appKey] = {}; // Initialize the app key
|
|
38
38
|
// Iterate over assets
|
|
39
|
-
for (const assetNode of appNode.assets
|
|
39
|
+
for (const [_assetId, assetNode] of Object.entries(appNode.assets)) {
|
|
40
40
|
const assetKey = `📦${assetNode.assetName}`;
|
|
41
41
|
if (assetNode.roles !== undefined) {
|
|
42
42
|
// If no roles were previously selected
|
|
43
43
|
requestTree[appKey][assetKey] = {}; // Initialize the asset key
|
|
44
44
|
// Iterate over roles
|
|
45
|
-
for (const roleNode of assetNode.roles
|
|
45
|
+
for (const [_roleId, roleNode] of Object.entries(assetNode.roles)) {
|
|
46
46
|
requestTree[appKey][assetKey][roleNode.roleName] = null; // Initialize the role key
|
|
47
47
|
}
|
|
48
48
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -452,15 +452,14 @@
|
|
|
452
452
|
"start.js"
|
|
453
453
|
]
|
|
454
454
|
},
|
|
455
|
-
"
|
|
455
|
+
"kube-roles:start": {
|
|
456
456
|
"aliases": [],
|
|
457
457
|
"args": {},
|
|
458
|
-
"description": "Starts a session to
|
|
458
|
+
"description": "Starts a session to assume a Kubernetes cluster IAM role.",
|
|
459
459
|
"examples": [
|
|
460
|
-
"opal
|
|
461
|
-
"opal
|
|
462
|
-
"opal
|
|
463
|
-
"opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId fullaccess --action view"
|
|
460
|
+
"opal kube-roles:start",
|
|
461
|
+
"opal kube-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398",
|
|
462
|
+
"opal kube-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId \"arn:aws:iam::712234975475:role/acme-eks-cluster-admin-role\""
|
|
464
463
|
],
|
|
465
464
|
"flags": {
|
|
466
465
|
"help": {
|
|
@@ -500,22 +499,11 @@
|
|
|
500
499
|
"name": "refresh",
|
|
501
500
|
"allowNo": false,
|
|
502
501
|
"type": "boolean"
|
|
503
|
-
},
|
|
504
|
-
"action": {
|
|
505
|
-
"description": "Method of connecting to the database.\n- psql: Start psql session in shell\n- view: View connection configuration details",
|
|
506
|
-
"name": "action",
|
|
507
|
-
"hasDynamicHelp": false,
|
|
508
|
-
"multiple": false,
|
|
509
|
-
"options": [
|
|
510
|
-
"psql",
|
|
511
|
-
"view"
|
|
512
|
-
],
|
|
513
|
-
"type": "option"
|
|
514
502
|
}
|
|
515
503
|
},
|
|
516
504
|
"hasDynamicHelp": false,
|
|
517
505
|
"hiddenAliases": [],
|
|
518
|
-
"id": "
|
|
506
|
+
"id": "kube-roles:start",
|
|
519
507
|
"pluginAlias": "opal-security",
|
|
520
508
|
"pluginName": "opal-security",
|
|
521
509
|
"pluginType": "core",
|
|
@@ -525,18 +513,19 @@
|
|
|
525
513
|
"relativePath": [
|
|
526
514
|
"lib",
|
|
527
515
|
"commands",
|
|
528
|
-
"
|
|
516
|
+
"kube-roles",
|
|
529
517
|
"start.js"
|
|
530
518
|
]
|
|
531
519
|
},
|
|
532
|
-
"
|
|
520
|
+
"postgres-instances:start": {
|
|
533
521
|
"aliases": [],
|
|
534
522
|
"args": {},
|
|
535
|
-
"description": "Starts a session to
|
|
523
|
+
"description": "Starts a session to connect to a Postgres database.",
|
|
536
524
|
"examples": [
|
|
537
|
-
"opal
|
|
538
|
-
"opal
|
|
539
|
-
"opal
|
|
525
|
+
"opal postgres-instances:start",
|
|
526
|
+
"opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398",
|
|
527
|
+
"opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId fullaccess",
|
|
528
|
+
"opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId fullaccess --action view"
|
|
540
529
|
],
|
|
541
530
|
"flags": {
|
|
542
531
|
"help": {
|
|
@@ -576,51 +565,22 @@
|
|
|
576
565
|
"name": "refresh",
|
|
577
566
|
"allowNo": false,
|
|
578
567
|
"type": "boolean"
|
|
579
|
-
}
|
|
580
|
-
},
|
|
581
|
-
"hasDynamicHelp": false,
|
|
582
|
-
"hiddenAliases": [],
|
|
583
|
-
"id": "kube-roles:start",
|
|
584
|
-
"pluginAlias": "opal-security",
|
|
585
|
-
"pluginName": "opal-security",
|
|
586
|
-
"pluginType": "core",
|
|
587
|
-
"strict": true,
|
|
588
|
-
"enableJsonFlag": false,
|
|
589
|
-
"isESM": false,
|
|
590
|
-
"relativePath": [
|
|
591
|
-
"lib",
|
|
592
|
-
"commands",
|
|
593
|
-
"kube-roles",
|
|
594
|
-
"start.js"
|
|
595
|
-
]
|
|
596
|
-
},
|
|
597
|
-
"resources:get": {
|
|
598
|
-
"aliases": [],
|
|
599
|
-
"args": {},
|
|
600
|
-
"description": "Get resource info for a particular resource.",
|
|
601
|
-
"examples": [
|
|
602
|
-
"opal resources:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4"
|
|
603
|
-
],
|
|
604
|
-
"flags": {
|
|
605
|
-
"help": {
|
|
606
|
-
"char": "h",
|
|
607
|
-
"description": "Show CLI help.",
|
|
608
|
-
"name": "help",
|
|
609
|
-
"allowNo": false,
|
|
610
|
-
"type": "boolean"
|
|
611
568
|
},
|
|
612
|
-
"
|
|
613
|
-
"
|
|
614
|
-
"
|
|
615
|
-
"name": "id",
|
|
569
|
+
"action": {
|
|
570
|
+
"description": "Method of connecting to the database.\n- psql: Start psql session in shell\n- view: View connection configuration details",
|
|
571
|
+
"name": "action",
|
|
616
572
|
"hasDynamicHelp": false,
|
|
617
573
|
"multiple": false,
|
|
574
|
+
"options": [
|
|
575
|
+
"psql",
|
|
576
|
+
"view"
|
|
577
|
+
],
|
|
618
578
|
"type": "option"
|
|
619
579
|
}
|
|
620
580
|
},
|
|
621
581
|
"hasDynamicHelp": false,
|
|
622
582
|
"hiddenAliases": [],
|
|
623
|
-
"id": "
|
|
583
|
+
"id": "postgres-instances:start",
|
|
624
584
|
"pluginAlias": "opal-security",
|
|
625
585
|
"pluginName": "opal-security",
|
|
626
586
|
"pluginType": "core",
|
|
@@ -630,8 +590,8 @@
|
|
|
630
590
|
"relativePath": [
|
|
631
591
|
"lib",
|
|
632
592
|
"commands",
|
|
633
|
-
"
|
|
634
|
-
"
|
|
593
|
+
"postgres-instances",
|
|
594
|
+
"start.js"
|
|
635
595
|
]
|
|
636
596
|
},
|
|
637
597
|
"request:create": {
|
|
@@ -716,6 +676,46 @@
|
|
|
716
676
|
"list.js"
|
|
717
677
|
]
|
|
718
678
|
},
|
|
679
|
+
"resources:get": {
|
|
680
|
+
"aliases": [],
|
|
681
|
+
"args": {},
|
|
682
|
+
"description": "Get resource info for a particular resource.",
|
|
683
|
+
"examples": [
|
|
684
|
+
"opal resources:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4"
|
|
685
|
+
],
|
|
686
|
+
"flags": {
|
|
687
|
+
"help": {
|
|
688
|
+
"char": "h",
|
|
689
|
+
"description": "Show CLI help.",
|
|
690
|
+
"name": "help",
|
|
691
|
+
"allowNo": false,
|
|
692
|
+
"type": "boolean"
|
|
693
|
+
},
|
|
694
|
+
"id": {
|
|
695
|
+
"char": "i",
|
|
696
|
+
"description": "The Opal ID of the resource. You can find this from the URL, e.g. https://opal.dev/resources/[ID]",
|
|
697
|
+
"name": "id",
|
|
698
|
+
"hasDynamicHelp": false,
|
|
699
|
+
"multiple": false,
|
|
700
|
+
"type": "option"
|
|
701
|
+
}
|
|
702
|
+
},
|
|
703
|
+
"hasDynamicHelp": false,
|
|
704
|
+
"hiddenAliases": [],
|
|
705
|
+
"id": "resources:get",
|
|
706
|
+
"pluginAlias": "opal-security",
|
|
707
|
+
"pluginName": "opal-security",
|
|
708
|
+
"pluginType": "core",
|
|
709
|
+
"strict": true,
|
|
710
|
+
"enableJsonFlag": false,
|
|
711
|
+
"isESM": false,
|
|
712
|
+
"relativePath": [
|
|
713
|
+
"lib",
|
|
714
|
+
"commands",
|
|
715
|
+
"resources",
|
|
716
|
+
"get.js"
|
|
717
|
+
]
|
|
718
|
+
},
|
|
719
719
|
"ssh:copyFrom": {
|
|
720
720
|
"aliases": [],
|
|
721
721
|
"args": {},
|
|
@@ -923,5 +923,5 @@
|
|
|
923
923
|
]
|
|
924
924
|
}
|
|
925
925
|
},
|
|
926
|
-
"version": "3.1.1-beta.
|
|
926
|
+
"version": "3.1.1-beta.e5e99da"
|
|
927
927
|
}
|
package/package.json
CHANGED