opal-security 3.1.1-beta.4600715 → 3.1.1-beta.4ab1987

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -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.4600715 linux-x64 node-v20.19.1
25
+ opal-security/3.1.1-beta.4ab1987 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.4600715/src/commands/aws/identity.ts)_
104
+ _See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/clear-auth-provider.ts)_
124
+ _See code: [src/commands/clear-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/curl-example.ts)_
141
+ _See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/groups/get.ts)_
162
+ _See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/iam-roles/start.ts)_
212
+ _See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/kube-roles/start.ts)_
243
+ _See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/login.ts)_
264
+ _See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/logout.ts)_
284
+ _See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/postgres-instances/start.ts)_
321
+ _See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/resources/get.ts)_
342
+ _See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/set-auth-provider.ts)_
368
+ _See code: [src/commands/set-auth-provider.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/set-custom-header.ts)_
389
+ _See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/set-token.ts)_
409
+ _See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/set-url.ts)_
433
+ _See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/ssh/copyFrom.ts)_
464
+ _See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/ssh/copyTo.ts)_
495
+ _See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/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.4600715/src/commands/ssh/start.ts)_
522
+ _See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v3.1.1-beta.4ab1987/src/commands/ssh/start.ts)_
523
523
 
524
524
  ## `opal version`
525
525
 
@@ -18,7 +18,8 @@ type Documents = {
18
18
  "\nquery CheckAuthSessionQuery {\n organizationSettings {\n ... on OrganizationSettingsResult {\n settings {\n id\n }\n }\n }\n}\n": typeof types.CheckAuthSessionQueryDocument;
19
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;
20
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;
21
+ "\n query ResourceAccessLevels($resourceId: ResourceId!) {\n accessLevels(input: {\n resourceId: $resourceId,\n onlyMine: false,\n }) {\n __typename\n ... on ResourceAccessLevelsResult {\n accessLevels {\n ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": typeof types.ResourceAccessLevelsDocument;
22
+ "\nquery GroupAccessLevels($groupId: GroupId!) {\n groupAccessLevels(\n input: { groupId: $groupId }\n ) {\n ... on GroupAccessLevelsResult {\n groupId\n accessLevels {\n ... on GroupAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n}\n": typeof types.GroupAccessLevelsDocument;
22
23
  "\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;
23
24
  };
24
25
  declare const documents: Documents;
@@ -62,7 +63,11 @@ export declare function graphql(source: "\n query PaginatedEntityDropdown(\n $
62
63
  /**
63
64
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
64
65
  */
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
+ 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 ... 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 ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"];
67
+ /**
68
+ * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
69
+ */
70
+ export declare function graphql(source: "\nquery GroupAccessLevels($groupId: GroupId!) {\n groupAccessLevels(\n input: { groupId: $groupId }\n ) {\n ... on GroupAccessLevelsResult {\n groupId\n accessLevels {\n ... on GroupAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n}\n"): (typeof documents)["\nquery GroupAccessLevels($groupId: GroupId!) {\n groupAccessLevels(\n input: { groupId: $groupId }\n ) {\n ... on GroupAccessLevelsResult {\n groupId\n accessLevels {\n ... on GroupAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n}\n"];
66
71
  /**
67
72
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
68
73
  */
@@ -10,7 +10,8 @@ const documents = {
10
10
  "\nquery CheckAuthSessionQuery {\n organizationSettings {\n ... on OrganizationSettingsResult {\n settings {\n id\n }\n }\n }\n}\n": types.CheckAuthSessionQueryDocument,
11
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,
12
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,
13
+ "\n query ResourceAccessLevels($resourceId: ResourceId!) {\n accessLevels(input: {\n resourceId: $resourceId,\n onlyMine: false,\n }) {\n __typename\n ... on ResourceAccessLevelsResult {\n accessLevels {\n ... on ResourceAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": types.ResourceAccessLevelsDocument,
14
+ "\nquery GroupAccessLevels($groupId: GroupId!) {\n groupAccessLevels(\n input: { groupId: $groupId }\n ) {\n ... on GroupAccessLevelsResult {\n groupId\n accessLevels {\n ... on GroupAccessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n}\n": types.GroupAccessLevelsDocument,
14
15
  "\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,
15
16
  };
16
17
  function graphql(source) {
@@ -11629,7 +11629,7 @@ export type ResourceAccessLevelsQuery = {
11629
11629
  accessLevels: {
11630
11630
  __typename: "ResourceAccessLevelsResult";
11631
11631
  accessLevels: Array<{
11632
- __typename: "ResourceAccessLevel";
11632
+ __typename?: "ResourceAccessLevel";
11633
11633
  accessLevelName: string;
11634
11634
  accessLevelRemoteId: string;
11635
11635
  }>;
@@ -11638,6 +11638,23 @@ export type ResourceAccessLevelsQuery = {
11638
11638
  message: string;
11639
11639
  };
11640
11640
  };
11641
+ export type GroupAccessLevelsQueryVariables = Exact<{
11642
+ groupId: Scalars["GroupId"]["input"];
11643
+ }>;
11644
+ export type GroupAccessLevelsQuery = {
11645
+ __typename?: "Query";
11646
+ groupAccessLevels: {
11647
+ __typename?: "GroupAccessLevelsResult";
11648
+ groupId: string;
11649
+ accessLevels?: Array<{
11650
+ __typename?: "GroupAccessLevel";
11651
+ accessLevelName: string;
11652
+ accessLevelRemoteId: string;
11653
+ }> | null;
11654
+ } | {
11655
+ __typename?: "GroupNotFoundError";
11656
+ };
11657
+ };
11641
11658
  export type RequestDefaultsQueryVariables = Exact<{
11642
11659
  requestedResources: Array<RequestConfigurationResourceInput> | RequestConfigurationResourceInput;
11643
11660
  requestedGroups: Array<RequestConfigurationGroupInput> | RequestConfigurationGroupInput;
@@ -11666,4 +11683,5 @@ export declare const CheckAuthSessionQueryDocument: DocumentNode<CheckAuthSessio
11666
11683
  export declare const GetRequestableAppsQueryDocument: DocumentNode<GetRequestableAppsQueryQuery, GetRequestableAppsQueryQueryVariables>;
11667
11684
  export declare const PaginatedEntityDropdownDocument: DocumentNode<PaginatedEntityDropdownQuery, PaginatedEntityDropdownQueryVariables>;
11668
11685
  export declare const ResourceAccessLevelsDocument: DocumentNode<ResourceAccessLevelsQuery, ResourceAccessLevelsQueryVariables>;
11686
+ export declare const GroupAccessLevelsDocument: DocumentNode<GroupAccessLevelsQuery, GroupAccessLevelsQueryVariables>;
11669
11687
  export declare const RequestDefaultsDocument: DocumentNode<RequestDefaultsQuery, RequestDefaultsQueryVariables>;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GroupUserSource = exports.GroupUserSortByField = exports.GroupType = exports.GroupResourceSource = exports.GroupBindingsSortByField = exports.GroupBindingSuggestionsSortByField = exports.GeneralSettingType = exports.FiltersMatchMode = exports.FilterRule = 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.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 = exports.HealthStatus = void 0;
5
- exports.RequestDefaultsDocument = exports.ResourceAccessLevelsDocument = exports.PaginatedEntityDropdownDocument = exports.GetRequestableAppsQueryDocument = exports.CheckAuthSessionQueryDocument = exports.GetRequestsDocument = 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 = exports.TaskTrigger = void 0;
5
+ exports.RequestDefaultsDocument = exports.GroupAccessLevelsDocument = exports.ResourceAccessLevelsDocument = exports.PaginatedEntityDropdownDocument = exports.GetRequestableAppsQueryDocument = exports.CheckAuthSessionQueryDocument = exports.GetRequestsDocument = 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 = exports.TaskTrigger = void 0;
6
6
  var AwsIdentityCenterImportSetting;
7
7
  (function (AwsIdentityCenterImportSetting) {
8
8
  AwsIdentityCenterImportSetting["All"] = "ALL";
@@ -2667,10 +2667,6 @@ exports.ResourceAccessLevelsDocument = {
2667
2667
  selectionSet: {
2668
2668
  kind: "SelectionSet",
2669
2669
  selections: [
2670
- {
2671
- kind: "Field",
2672
- name: { kind: "Name", value: "__typename" },
2673
- },
2674
2670
  {
2675
2671
  kind: "InlineFragment",
2676
2672
  typeCondition: {
@@ -2730,6 +2726,119 @@ exports.ResourceAccessLevelsDocument = {
2730
2726
  },
2731
2727
  ],
2732
2728
  };
2729
+ exports.GroupAccessLevelsDocument = {
2730
+ kind: "Document",
2731
+ definitions: [
2732
+ {
2733
+ kind: "OperationDefinition",
2734
+ operation: "query",
2735
+ name: { kind: "Name", value: "GroupAccessLevels" },
2736
+ variableDefinitions: [
2737
+ {
2738
+ kind: "VariableDefinition",
2739
+ variable: {
2740
+ kind: "Variable",
2741
+ name: { kind: "Name", value: "groupId" },
2742
+ },
2743
+ type: {
2744
+ kind: "NonNullType",
2745
+ type: {
2746
+ kind: "NamedType",
2747
+ name: { kind: "Name", value: "GroupId" },
2748
+ },
2749
+ },
2750
+ },
2751
+ ],
2752
+ selectionSet: {
2753
+ kind: "SelectionSet",
2754
+ selections: [
2755
+ {
2756
+ kind: "Field",
2757
+ name: { kind: "Name", value: "groupAccessLevels" },
2758
+ arguments: [
2759
+ {
2760
+ kind: "Argument",
2761
+ name: { kind: "Name", value: "input" },
2762
+ value: {
2763
+ kind: "ObjectValue",
2764
+ fields: [
2765
+ {
2766
+ kind: "ObjectField",
2767
+ name: { kind: "Name", value: "groupId" },
2768
+ value: {
2769
+ kind: "Variable",
2770
+ name: { kind: "Name", value: "groupId" },
2771
+ },
2772
+ },
2773
+ ],
2774
+ },
2775
+ },
2776
+ ],
2777
+ selectionSet: {
2778
+ kind: "SelectionSet",
2779
+ selections: [
2780
+ {
2781
+ kind: "InlineFragment",
2782
+ typeCondition: {
2783
+ kind: "NamedType",
2784
+ name: { kind: "Name", value: "GroupAccessLevelsResult" },
2785
+ },
2786
+ selectionSet: {
2787
+ kind: "SelectionSet",
2788
+ selections: [
2789
+ {
2790
+ kind: "Field",
2791
+ name: { kind: "Name", value: "groupId" },
2792
+ },
2793
+ {
2794
+ kind: "Field",
2795
+ name: { kind: "Name", value: "accessLevels" },
2796
+ selectionSet: {
2797
+ kind: "SelectionSet",
2798
+ selections: [
2799
+ {
2800
+ kind: "InlineFragment",
2801
+ typeCondition: {
2802
+ kind: "NamedType",
2803
+ name: {
2804
+ kind: "Name",
2805
+ value: "GroupAccessLevel",
2806
+ },
2807
+ },
2808
+ selectionSet: {
2809
+ kind: "SelectionSet",
2810
+ selections: [
2811
+ {
2812
+ kind: "Field",
2813
+ name: {
2814
+ kind: "Name",
2815
+ value: "accessLevelName",
2816
+ },
2817
+ },
2818
+ {
2819
+ kind: "Field",
2820
+ name: {
2821
+ kind: "Name",
2822
+ value: "accessLevelRemoteId",
2823
+ },
2824
+ },
2825
+ ],
2826
+ },
2827
+ },
2828
+ ],
2829
+ },
2830
+ },
2831
+ ],
2832
+ },
2833
+ },
2834
+ ],
2835
+ },
2836
+ },
2837
+ ],
2838
+ },
2839
+ },
2840
+ ],
2841
+ };
2733
2842
  exports.RequestDefaultsDocument = {
2734
2843
  kind: "Document",
2735
2844
  definitions: [
@@ -7,6 +7,7 @@ interface AppNode {
7
7
  }
8
8
  interface AssetNode {
9
9
  assetName: string;
10
+ type: string;
10
11
  roles?: Record<string, RoleNode>;
11
12
  }
12
13
  interface RoleNode {
@@ -12,6 +12,7 @@ exports.submitFinalRequest = submitFinalRequest;
12
12
  const inquirer = require("inquirer");
13
13
  const graphql_1 = require("../graphql");
14
14
  inquirer.registerPrompt("autocomplete", require("inquirer-autocomplete-prompt"));
15
+ const { AutoComplete } = require("enquirer");
15
16
  function createEmptyRequestMetadata() {
16
17
  // Initialize with empty defaults
17
18
  const requestDefaults = {
@@ -81,10 +82,11 @@ async function queryRequestableApps(cmd, client, input) {
81
82
  }
82
83
  const label = `${edge.node.displayName} (${type})`;
83
84
  return {
84
- name: label,
85
+ message: label,
85
86
  value: {
86
87
  id: edge.node.id,
87
88
  name: label,
89
+ toString: () => label,
88
90
  },
89
91
  };
90
92
  });
@@ -147,16 +149,17 @@ async function queryRequestableAssets(cmd, client, appId, input) {
147
149
  switch (resp.data.app.__typename) {
148
150
  case "App":
149
151
  return (_d = (_c = (_b = (_a = resp.data) === null || _a === void 0 ? void 0 : _a.app) === null || _b === void 0 ? void 0 : _b.items) === null || _c === void 0 ? void 0 : _c.items) === null || _d === void 0 ? void 0 : _d.map((item) => {
150
- var _a, _b, _c, _d, _e, _f;
152
+ var _a, _b, _c, _d, _e, _f, _g, _h;
151
153
  const name = ((_a = item.resource) === null || _a === void 0 ? void 0 : _a.name) || ((_b = item.group) === null || _b === void 0 ? void 0 : _b.name);
152
154
  const id = ((_c = item.resource) === null || _c === void 0 ? void 0 : _c.id) || ((_d = item.group) === null || _d === void 0 ? void 0 : _d.id);
153
155
  const type = ((_e = item.resource) === null || _e === void 0 ? void 0 : _e.__typename) || ((_f = item.group) === null || _f === void 0 ? void 0 : _f.__typename);
154
156
  const label = `${name} (${type})`;
155
157
  return {
156
- name: label,
158
+ message: label,
157
159
  value: {
158
160
  name: label,
159
161
  id: id,
162
+ type: ((_g = item.resource) === null || _g === void 0 ? void 0 : _g.__typename) || ((_h = item.group) === null || _h === void 0 ? void 0 : _h.__typename),
160
163
  },
161
164
  };
162
165
  });
@@ -182,7 +185,6 @@ const RESOURCE_ROLES_QUERY = (0, graphql_1.graphql)(`
182
185
  __typename
183
186
  ... on ResourceAccessLevelsResult {
184
187
  accessLevels {
185
- __typename
186
188
  ... on ResourceAccessLevel {
187
189
  accessLevelName
188
190
  accessLevelRemoteId
@@ -195,34 +197,82 @@ const RESOURCE_ROLES_QUERY = (0, graphql_1.graphql)(`
195
197
  }
196
198
  }
197
199
  `);
198
- async function queryResourceRoles(cmd, client, resourceId) {
199
- var _a, _b, _c, _d, _e;
200
+ const GROUP_ROLES_QUERY = (0, graphql_1.graphql)(`
201
+ query GroupAccessLevels($groupId: GroupId!) {
202
+ groupAccessLevels(
203
+ input: { groupId: $groupId }
204
+ ) {
205
+ ... on GroupAccessLevelsResult {
206
+ groupId
207
+ accessLevels {
208
+ ... on GroupAccessLevel {
209
+ accessLevelName
210
+ accessLevelRemoteId
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ `);
217
+ async function queryAssetRoles(cmd, client, assetType, assetId) {
218
+ var _a, _b, _c, _d, _e, _f, _g, _h;
200
219
  try {
201
- const resp = await client.query({
202
- query: RESOURCE_ROLES_QUERY,
203
- variables: {
204
- resourceId: resourceId,
205
- },
206
- fetchPolicy: "network-only", // to avoid caching
207
- });
208
- // no fall through doesn't consider process.exit();
209
- let x;
210
- switch (resp.data.accessLevels.__typename) {
211
- case "ResourceAccessLevelsResult":
212
- return (_c = (_b = (_a = resp.data) === null || _a === void 0 ? void 0 : _a.accessLevels) === null || _b === void 0 ? void 0 : _b.accessLevels) === null || _c === void 0 ? void 0 : _c.map((role) => {
213
- return {
214
- name: role.accessLevelName,
215
- value: {
216
- name: role.accessLevelName,
217
- id: role.accessLevelRemoteId,
218
- },
219
- };
220
+ switch (assetType) {
221
+ case "Resource": {
222
+ const resp = await client.query({
223
+ query: RESOURCE_ROLES_QUERY,
224
+ variables: {
225
+ resourceId: assetId,
226
+ },
227
+ fetchPolicy: "network-only", // to avoid caching
220
228
  });
221
- case "ResourceNotFoundError":
222
- x = cmd.error((_e = (_d = resp.data) === null || _d === void 0 ? void 0 : _d.accessLevels) === null || _e === void 0 ? void 0 : _e.message);
223
- break;
224
- default:
225
- cmd.error(resp.error || "Unknown error occurred.");
229
+ // no fall through doesn't consider process.exit();
230
+ let x;
231
+ switch (resp.data.accessLevels.__typename) {
232
+ case "ResourceAccessLevelsResult":
233
+ return (_c = (_b = (_a = resp.data) === null || _a === void 0 ? void 0 : _a.accessLevels) === null || _b === void 0 ? void 0 : _b.accessLevels) === null || _c === void 0 ? void 0 : _c.map((role) => {
234
+ return {
235
+ name: role.accessLevelName,
236
+ value: {
237
+ name: role.accessLevelName,
238
+ id: role.accessLevelRemoteId,
239
+ },
240
+ };
241
+ });
242
+ case "ResourceNotFoundError":
243
+ x = cmd.error((_e = (_d = resp.data) === null || _d === void 0 ? void 0 : _d.accessLevels) === null || _e === void 0 ? void 0 : _e.message);
244
+ break;
245
+ default:
246
+ cmd.error(resp.error || "Unknown error occurred.");
247
+ }
248
+ return;
249
+ }
250
+ case "Group": {
251
+ const resp = await client.query({
252
+ query: GROUP_ROLES_QUERY,
253
+ variables: {
254
+ groupId: assetId,
255
+ },
256
+ fetchPolicy: "network-only", // to avoid caching
257
+ });
258
+ // no fall through doesn't consider process.exit();
259
+ let x;
260
+ switch (resp.data.groupAccessLevels.__typename) {
261
+ case "GroupAccessLevelsResult":
262
+ return (_h = (_g = (_f = resp.data) === null || _f === void 0 ? void 0 : _f.groupAccessLevels) === null || _g === void 0 ? void 0 : _g.accessLevels) === null || _h === void 0 ? void 0 : _h.map((role) => {
263
+ return {
264
+ name: role.accessLevelName,
265
+ value: {
266
+ name: role.accessLevelName,
267
+ id: role.accessLevelRemoteId,
268
+ },
269
+ };
270
+ });
271
+ default:
272
+ x = cmd.error(resp.error || "Unknown error occurred.");
273
+ }
274
+ return;
275
+ }
226
276
  }
227
277
  }
228
278
  catch (error) {
@@ -273,18 +323,18 @@ async function queryRequestDefaults(cmd, client, requestedResources, requestedGr
273
323
  }
274
324
  // Helper functions
275
325
  async function selectRequestableItems(cmd, client, requestMap) {
276
- const { App } = await inquirer.prompt([
277
- {
278
- name: "App",
279
- message: "Select an app:",
280
- type: "autocomplete",
281
- source: async (answers, input) => {
282
- var _a;
283
- return (_a = (await queryRequestableApps(cmd, client, input))) !== null && _a !== void 0 ? _a : [];
284
- },
285
- pageSize: 15,
326
+ const initialChoices = (await queryRequestableApps(cmd, client, "")) || [];
327
+ const appPrompt = new AutoComplete({
328
+ name: "App",
329
+ message: "Select an app:",
330
+ limit: 15,
331
+ choices: initialChoices,
332
+ async suggest(input) {
333
+ const filteredChoices = await queryRequestableApps(cmd, client, input || "");
334
+ return filteredChoices || initialChoices;
286
335
  },
287
- ]);
336
+ });
337
+ const App = await appPrompt.run();
288
338
  // Set the app in the requestMap and call choose assets step
289
339
  if (!(App.id in requestMap)) {
290
340
  requestMap[App.id] = {
@@ -295,13 +345,16 @@ async function selectRequestableItems(cmd, client, requestMap) {
295
345
  await chooseAssets(cmd, client, App.id, requestMap);
296
346
  }
297
347
  async function chooseAssets(cmd, client, appId, requestMap) {
298
- var _a;
299
- const { Assets } = await inquirer.prompt({
348
+ const initialChoices = queryRequestableAssets(cmd, client, appId, "") || [];
349
+ const assetPrompt = new AutoComplete({
300
350
  name: "Assets",
301
- type: "checkbox",
302
- pageSize: 15,
303
- message: "Select one or more items:",
304
- choices: (_a = (await queryRequestableAssets(cmd, client, appId, undefined))) !== null && _a !== void 0 ? _a : [],
351
+ message: "Select one or more assets:",
352
+ limit: 15,
353
+ multiple: true,
354
+ async choices(input) {
355
+ const filteredChoices = await queryRequestableAssets(cmd, client, appId, input);
356
+ return filteredChoices || initialChoices;
357
+ },
305
358
  validate: (answer) => {
306
359
  if (answer.length < 1) {
307
360
  return "You must select at least one item.";
@@ -309,14 +362,16 @@ async function chooseAssets(cmd, client, appId, requestMap) {
309
362
  return true;
310
363
  },
311
364
  });
365
+ const Assets = await assetPrompt.run();
312
366
  const entry = requestMap[appId];
313
367
  for (const asset of Assets) {
314
368
  if (entry === undefined) {
315
- throw new Error(`App ${appId} not found in requestMap`);
369
+ throw new Error(`Error formatting app ${appId} in request`);
316
370
  }
317
371
  if (!(asset.id in entry.assets)) {
318
372
  entry.assets[asset.id] = {
319
373
  assetName: asset.name,
374
+ type: asset.type,
320
375
  roles: {},
321
376
  };
322
377
  }
@@ -325,7 +380,9 @@ async function chooseAssets(cmd, client, appId, requestMap) {
325
380
  }
326
381
  async function chooseRoles(cmd, client, appId, assetId, requestMap) {
327
382
  var _a;
328
- const resourceRoles = (_a = (await queryResourceRoles(cmd, client, assetId))) !== null && _a !== void 0 ? _a : [];
383
+ const entry = requestMap[appId];
384
+ const assetEntry = entry === null || entry === void 0 ? void 0 : entry.assets[assetId];
385
+ const resourceRoles = (_a = (await queryAssetRoles(cmd, client, assetEntry.type, assetId))) !== null && _a !== void 0 ? _a : [];
329
386
  if (resourceRoles !== undefined &&
330
387
  (resourceRoles.length === 0 ||
331
388
  (resourceRoles.length === 1 && resourceRoles[0].name === ""))) {
@@ -343,8 +400,6 @@ async function chooseRoles(cmd, client, appId, assetId, requestMap) {
343
400
  return true;
344
401
  },
345
402
  });
346
- const entry = requestMap[appId];
347
- const assetEntry = entry === null || entry === void 0 ? void 0 : entry.assets[assetId];
348
403
  if (entry === undefined || assetEntry === undefined) {
349
404
  throw new Error(`App ${appId} or Asset ${assetId} not found in requestMap`);
350
405
  }
@@ -971,5 +971,5 @@
971
971
  ]
972
972
  }
973
973
  },
974
- "version": "3.1.1-beta.4600715"
974
+ "version": "3.1.1-beta.4ab1987"
975
975
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "opal-security",
3
3
  "description": "Opal allows you to centrally manage access to all of your sensitive systems.",
4
- "version": "3.1.1-beta.4600715",
4
+ "version": "3.1.1-beta.4ab1987",
5
5
  "author": "Stephen Cobbe",
6
6
  "bin": {
7
7
  "opal": "./bin/run"
@@ -16,6 +16,7 @@
16
16
  "argon2": "^0.40.1",
17
17
  "chalk": "^2.4.2",
18
18
  "cli-table3": "^0.6.5",
19
+ "enquirer": "^2.4.1",
19
20
  "graphql": "^15.5.0",
20
21
  "inquirer": "^8.2.6",
21
22
  "inquirer-autocomplete-prompt": "^2.0.1",