opal-security 5.0.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,7 +22,7 @@ $ npm install -g opal-security
22
22
  $ opal COMMAND
23
23
  running command...
24
24
  $ opal (--version)
25
- opal-security/5.0.1 darwin-arm64 node-v22.21.1
25
+ opal-security/5.1.0 darwin-arm64 node-v18.20.4
26
26
  $ opal --help [COMMAND]
27
27
  USAGE
28
28
  $ opal COMMAND
@@ -68,7 +68,7 @@ USAGE
68
68
  $ opal autocomplete [SHELL] [-r]
69
69
 
70
70
  ARGUMENTS
71
- [SHELL] shell type
71
+ SHELL shell type
72
72
 
73
73
  FLAGS
74
74
  -r, --refresh-cache Refresh cache (ignores displaying instructions)
@@ -106,7 +106,7 @@ EXAMPLES
106
106
  $ opal aws:identity
107
107
  ```
108
108
 
109
- _See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/aws/identity.ts)_
109
+ _See code: [src/commands/aws/identity.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/aws/identity.ts)_
110
110
 
111
111
  ## `opal clear-auth-config`
112
112
 
@@ -123,7 +123,7 @@ EXAMPLES
123
123
  $ opal clear-auth-config
124
124
  ```
125
125
 
126
- _See code: [src/commands/clear-auth-config.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/clear-auth-config.ts)_
126
+ _See code: [src/commands/clear-auth-config.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/clear-auth-config.ts)_
127
127
 
128
128
  ## `opal curl-example`
129
129
 
@@ -140,7 +140,7 @@ DESCRIPTION
140
140
  Prints out an example cURL command containing the parameters the CLI uses to query the Opal server.
141
141
  ```
142
142
 
143
- _See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/curl-example.ts)_
143
+ _See code: [src/commands/curl-example.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/curl-example.ts)_
144
144
 
145
145
  ## `opal groups get`
146
146
 
@@ -161,7 +161,7 @@ EXAMPLES
161
161
  $ opal groups:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4
162
162
  ```
163
163
 
164
- _See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/groups/get.ts)_
164
+ _See code: [src/commands/groups/get.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/groups/get.ts)_
165
165
 
166
166
  ## `opal help [COMMANDS]`
167
167
 
@@ -172,7 +172,7 @@ USAGE
172
172
  $ opal help [COMMANDS...] [-n]
173
173
 
174
174
  ARGUMENTS
175
- [COMMANDS...] Command to show help for.
175
+ COMMANDS... Command to show help for.
176
176
 
177
177
  FLAGS
178
178
  -n, --nested-commands Include all nested commands in the output.
@@ -208,7 +208,7 @@ EXAMPLES
208
208
  $ opal iam-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --profileName "custom-profile"
209
209
  ```
210
210
 
211
- _See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/iam-roles/start.ts)_
211
+ _See code: [src/commands/iam-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/iam-roles/start.ts)_
212
212
 
213
213
  ## `opal kube-roles start`
214
214
 
@@ -235,7 +235,7 @@ EXAMPLES
235
235
  $ opal kube-roles:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId "arn:aws:iam::712234975475:role/acme-eks-cluster-admin-role"
236
236
  ```
237
237
 
238
- _See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/kube-roles/start.ts)_
238
+ _See code: [src/commands/kube-roles/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/kube-roles/start.ts)_
239
239
 
240
240
  ## `opal login`
241
241
 
@@ -243,11 +243,9 @@ Authenticates you with the Opal server.
243
243
 
244
244
  ```
245
245
  USAGE
246
- $ opal login [-h] [--email <value>] [-d]
246
+ $ opal login [-h] [--email <value>]
247
247
 
248
248
  FLAGS
249
- -d, --device-code Enables the Device Code flow instead of the Authorization Code flow when logging in.
250
- Use the Device Code flow if your environment can't open a browser or listen on a local port.
251
249
  -h, --help Show CLI help.
252
250
  --email=<value> Email address to login with.
253
251
 
@@ -258,7 +256,7 @@ EXAMPLES
258
256
  $ opal login
259
257
  ```
260
258
 
261
- _See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/login.ts)_
259
+ _See code: [src/commands/login.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/login.ts)_
262
260
 
263
261
  ## `opal logout`
264
262
 
@@ -278,7 +276,7 @@ EXAMPLES
278
276
  $ opal logout
279
277
  ```
280
278
 
281
- _See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/logout.ts)_
279
+ _See code: [src/commands/logout.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/logout.ts)_
282
280
 
283
281
  ## `opal postgres-instances start`
284
282
 
@@ -312,7 +310,7 @@ EXAMPLES
312
310
  $ opal postgres-instances:start --id 51f7176b-0464-4a6f-8369-e951e187b398 --accessLevelRemoteId fullaccess --action view
313
311
  ```
314
312
 
315
- _See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/postgres-instances/start.ts)_
313
+ _See code: [src/commands/postgres-instances/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/postgres-instances/start.ts)_
316
314
 
317
315
  ## `opal request create`
318
316
 
@@ -338,7 +336,7 @@ DESCRIPTION
338
336
  Creates an Opal access request via an interactive form
339
337
  ```
340
338
 
341
- _See code: [src/commands/request/create.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/request/create.ts)_
339
+ _See code: [src/commands/request/create.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/request/create.ts)_
342
340
 
343
341
  ## `opal request get`
344
342
 
@@ -362,7 +360,7 @@ EXAMPLES
362
360
  $ opal request get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4 --verbose
363
361
  ```
364
362
 
365
- _See code: [src/commands/request/get.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/request/get.ts)_
363
+ _See code: [src/commands/request/get.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/request/get.ts)_
366
364
 
367
365
  ## `opal request list`
368
366
 
@@ -394,7 +392,7 @@ EXAMPLES
394
392
  $ opal request list --n 5 --pending --verbose
395
393
  ```
396
394
 
397
- _See code: [src/commands/request/list.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/request/list.ts)_
395
+ _See code: [src/commands/request/list.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/request/list.ts)_
398
396
 
399
397
  ## `opal request ls`
400
398
 
@@ -445,7 +443,7 @@ EXAMPLES
445
443
  $ opal resources:get --id 54052a3e-5375-4392-aeaf-0c6c44c131d4
446
444
  ```
447
445
 
448
- _See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/resources/get.ts)_
446
+ _See code: [src/commands/resources/get.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/resources/get.ts)_
449
447
 
450
448
  ## `opal set-auth-config`
451
449
 
@@ -475,7 +473,7 @@ EXAMPLES
475
473
  $ opal set-auth-config --organizationID=org-456 --clientID=abc123 --issuerUrl=https://auth.example.com
476
474
  ```
477
475
 
478
- _See code: [src/commands/set-auth-config.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/set-auth-config.ts)_
476
+ _See code: [src/commands/set-auth-config.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/set-auth-config.ts)_
479
477
 
480
478
  ## `opal set-custom-header`
481
479
 
@@ -496,7 +494,7 @@ EXAMPLES
496
494
  $ opal set-custom-header --header 'cf-access-token: $TOKEN'
497
495
  ```
498
496
 
499
- _See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/set-custom-header.ts)_
497
+ _See code: [src/commands/set-custom-header.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/set-custom-header.ts)_
500
498
 
501
499
  ## `opal set-token`
502
500
 
@@ -516,7 +514,7 @@ EXAMPLES
516
514
  $ opal set-token
517
515
  ```
518
516
 
519
- _See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/set-token.ts)_
517
+ _See code: [src/commands/set-token.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/set-token.ts)_
520
518
 
521
519
  ## `opal set-url [URL]`
522
520
 
@@ -527,7 +525,7 @@ USAGE
527
525
  $ opal set-url [URL] [-h] [--allowSelfSignedCerts]
528
526
 
529
527
  ARGUMENTS
530
- [URL] URL of the Opal server to use. If unspecified, defaults to https://app.opal.dev
528
+ URL URL of the Opal server to use. If unspecified, defaults to https://app.opal.dev
531
529
 
532
530
  FLAGS
533
531
  -h, --help Show CLI help.
@@ -540,7 +538,7 @@ EXAMPLES
540
538
  $ opal set-url
541
539
  ```
542
540
 
543
- _See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/set-url.ts)_
541
+ _See code: [src/commands/set-url.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/set-url.ts)_
544
542
 
545
543
  ## `opal ssh copyFrom`
546
544
 
@@ -568,7 +566,7 @@ EXAMPLES
568
566
  $ opal ssh:copyFrom --src instance/dir --dest my/dir --id 51f7176b-0464-4a6f-8369-e951e187b398
569
567
  ```
570
568
 
571
- _See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/ssh/copyFrom.ts)_
569
+ _See code: [src/commands/ssh/copyFrom.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/ssh/copyFrom.ts)_
572
570
 
573
571
  ## `opal ssh copyTo`
574
572
 
@@ -596,7 +594,7 @@ EXAMPLES
596
594
  $ opal ssh:copyTo --src my/dir --dest instance/dir --id 51f7176b-0464-4a6f-8369-e951e187b398
597
595
  ```
598
596
 
599
- _See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/ssh/copyTo.ts)_
597
+ _See code: [src/commands/ssh/copyTo.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/ssh/copyTo.ts)_
600
598
 
601
599
  ## `opal ssh start`
602
600
 
@@ -619,7 +617,7 @@ EXAMPLES
619
617
  $ opal ssh:start --id 51f7176b-0464-4a6f-8369-e951e187b398
620
618
  ```
621
619
 
622
- _See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/ssh/start.ts)_
620
+ _See code: [src/commands/ssh/start.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/ssh/start.ts)_
623
621
 
624
622
  ## `opal version`
625
623
 
@@ -656,5 +654,5 @@ DESCRIPTION
656
654
  Describes current url set, organization name, and logged in user if applicable.
657
655
  ```
658
656
 
659
- _See code: [src/commands/whoami.ts](https://github.com/opalsecurity/opal-cli/blob/v5.0.1/src/commands/whoami.ts)_
657
+ _See code: [src/commands/whoami.ts](https://github.com/opalsecurity/opal-cli/blob/v5.1.0/src/commands/whoami.ts)_
660
658
  <!-- commandsstop -->
@@ -9,7 +9,6 @@ export default class Login extends Command {
9
9
  static flags: {
10
10
  help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
11
11
  email: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
- "device-code": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
12
  };
14
13
  static args: {};
15
14
  run(): Promise<void>;
@@ -95,7 +95,6 @@ class Login extends Command {
95
95
  let organizationId = existingCreds.organizationID;
96
96
  let organizationName;
97
97
  let clientIDCandidate = (_a = existingCreds.clientID) !== null && _a !== void 0 ? _a : (_b = configData === null || configData === void 0 ? void 0 : configData.creds) === null || _b === void 0 ? void 0 : _b.clientIDCandidate; // configData.creds.clientIDCandidate is pre-4.0, load from here for backwards-compat
98
- const useDeviceCodeFlow = flags["device-code"];
99
98
  // If user starts a new login, remove their existing auth cookie / API token
100
99
  await removeAuthSecret(this);
101
100
  // Only use the previous email + organizationID if email isn't explicitly specified.
@@ -225,67 +224,21 @@ class Login extends Command {
225
224
  scope += " mfa:skip";
226
225
  }
227
226
  let tokens;
228
- if (useDeviceCodeFlow) {
229
- const response = await client.initiateDeviceAuthorization(config, {
230
- audience: "https://opal.dev",
231
- scope,
232
- });
233
- const authURI = response.verification_uri_complete || response.verification_uri;
234
- this.log(`
235
- 🔐 Authentication Required
236
-
237
- To continue, authorize this device:
238
-
239
- Verify this code in your browser
240
-
241
- ${chalk.blue(response.user_code)}
242
-
243
- (Code expires in ${Math.floor(response.expires_in / 60)} minutes)
244
-
245
- ⚠️ Security Check:
246
- • Verify the URL starts with: ${chalk.underline(response.verification_uri)}
247
- • You should see the Opal logo and a device activation dialog
248
- • Never enter this code on any other website
249
- `);
250
- await inquirer.prompt([
251
- {
252
- type: "input",
253
- name: "continue",
254
- message: "Press Enter to open your browser and continue\n",
255
- },
256
- ]);
257
- this.log(`
258
- If your browser doesn't automatically, go to:
259
-
260
- ${authURI}
261
- `);
262
- await open(authURI, { wait: false });
263
- ux.action.start("Waiting for authorization");
264
- try {
265
- tokens = await client.pollDeviceAuthorizationGrant(config, response);
266
- ux.action.stop("✓ Authorized");
267
- }
268
- catch (error) {
269
- ux.action.stop("✗ Failed");
270
- throw error;
271
- }
272
- }
273
- else {
274
- const { port, urlPromise } = await startLocalServer();
275
- const code_verifier = client.randomPKCECodeVerifier();
276
- const code_challenge = await client.calculatePKCECodeChallenge(code_verifier);
277
- const clientState = client.randomState();
278
- const parameters = {
279
- redirect_uri: `http://127.0.0.1:${port}/callback`,
280
- scope,
281
- code_challenge,
282
- code_challenge_method: "S256",
283
- state: clientState,
284
- };
285
- const redirectTo = client
286
- .buildAuthorizationUrl(config, parameters)
287
- .toString();
288
- this.log(`
227
+ const { port, urlPromise } = await startLocalServer();
228
+ const code_verifier = client.randomPKCECodeVerifier();
229
+ const code_challenge = await client.calculatePKCECodeChallenge(code_verifier);
230
+ const clientState = client.randomState();
231
+ const parameters = {
232
+ redirect_uri: `http://127.0.0.1:${port}/callback`,
233
+ scope,
234
+ code_challenge,
235
+ code_challenge_method: "S256",
236
+ state: clientState,
237
+ };
238
+ const redirectTo = client
239
+ .buildAuthorizationUrl(config, parameters)
240
+ .toString();
241
+ this.log(`
289
242
  🔐 Authentication Required
290
243
 
291
244
  To continue, please authorize this application in your browser.
@@ -296,32 +249,31 @@ To continue, please authorize this application in your browser.
296
249
  • After authenticating, you should be redirected to a page that says Authentication Successful!
297
250
  • Never enter your credentials on suspicious-looking pages
298
251
  `);
299
- await inquirer.prompt([
300
- {
301
- type: "input",
302
- name: "continue",
303
- message: "Press Enter to open your browser and continue\n",
304
- },
305
- ]);
306
- this.log(`
252
+ await inquirer.prompt([
253
+ {
254
+ type: "input",
255
+ name: "continue",
256
+ message: "Press Enter to open your browser and continue\n",
257
+ },
258
+ ]);
259
+ this.log(`
307
260
  If your browser doesn't automatically, go to:
308
261
 
309
262
  ${redirectTo}
310
263
  `);
311
- ux.action.start("Waiting for authorization");
312
- try {
313
- await open(redirectTo.toString(), { wait: false });
314
- const url = await urlPromise;
315
- tokens = await client.authorizationCodeGrant(config, new URL(url), {
316
- pkceCodeVerifier: code_verifier,
317
- expectedState: clientState,
318
- });
319
- ux.action.stop("✓ Authorized");
320
- }
321
- catch (error) {
322
- ux.action.stop("✗ Failed");
323
- throw error;
324
- }
264
+ ux.action.start("Waiting for authorization");
265
+ try {
266
+ await open(redirectTo.toString(), { wait: false });
267
+ const url = await urlPromise;
268
+ tokens = await client.authorizationCodeGrant(config, new URL(url), {
269
+ pkceCodeVerifier: code_verifier,
270
+ expectedState: clientState,
271
+ });
272
+ ux.action.stop("✓ Authorized");
273
+ }
274
+ catch (error) {
275
+ ux.action.stop("✗ Failed");
276
+ throw error;
325
277
  }
326
278
  const { error: tokenExchangeError } = await runMutation({
327
279
  command: this,
@@ -378,11 +330,6 @@ Login.flags = {
378
330
  multiple: false,
379
331
  description: "Email address to login with.",
380
332
  }),
381
- "device-code": Flags.boolean({
382
- char: "d",
383
- description: "Enables the Device Code flow instead of the Authorization Code flow when logging in.\n\
384
- Use the Device Code flow if your environment can't open a browser or listen on a local port.",
385
- }),
386
333
  };
387
334
  Login.args = {};
388
335
  export default Login;
@@ -10,13 +10,13 @@ class WhoAmI extends Command {
10
10
  const configData = getOrCreateConfigData(this.config.configDir);
11
11
  const url = configData[urlKey];
12
12
  if (email) {
13
- this.log(`User email: ${email}`);
13
+ this.log(`User email: ${email}`);
14
14
  }
15
15
  if (organizationID) {
16
16
  this.log(`OrganizationID: ${organizationID}`);
17
17
  }
18
18
  if (url) {
19
- this.log(`Server: ${url}`);
19
+ this.log(`Server: ${url}`);
20
20
  }
21
21
  }
22
22
  }
@@ -18,7 +18,7 @@ type Documents = {
18
18
  "\n query HasValidOidcIdToken($oidcProviderType: OIDCProviderType!) {\n hasValidOidcToken(oidcProviderType: $oidcProviderType)\n }\n ": typeof types.HasValidOidcIdTokenDocument;
19
19
  "\n mutation CreateRequest(\n $requestedResources: [RequestedResourceInput!]!\n $requestedGroups: [RequestedGroupInput!]!\n $reason: String!\n $durationInMinutes: Int\n ) {\n createRequest(\n input: {\n requestedResources: $requestedResources\n requestedGroups: $requestedGroups\n reason: $reason\n durationInMinutes: $durationInMinutes\n }\n ) {\n ... on CreateRequestResult {\n request {\n id\n status\n }\n }\n ... on RequestDurationTooLargeError {\n message\n }\n ... on RequestRequiresUserAuthTokenForConnectionError {\n message\n }\n ... on NoReviewersSetForOwnerError {\n message\n ownerId\n }\n ... on NoReviewersSetForResourceError {\n message\n resourceId\n }\n ... on NoReviewersSetForGroupError {\n message\n groupId\n }\n ... on NoManagerSetForRequestingUserError {\n message\n }\n ... on MfaInvalidError {\n message\n }\n ... on BulkRequestTooLargeError {\n message\n }\n ... on ItemCannotBeRequestedError {\n message\n }\n ... on UserCannotRequestAccessForTargetGroupError {\n message\n groupId\n userId\n }\n ... on GroupNestingNotAllowedError {\n message\n fromGroupId\n toGroupId\n }\n ... on TargetUserHasNestedAccessError {\n message\n groupIds\n }\n ... on RequestReasonMissingError {\n message\n }\n ... on RequestFieldValueMissingError {\n message\n fieldName\n }\n ... on LinkedGroupNotRequestableError {\n message\n sourceGroupId\n groupBindingId\n }\n ... on RequestReasonBelowMinLengthError {\n message\n }\n\n }\n }\n": typeof types.CreateRequestDocument;
20
20
  '\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;
21
- "\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 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 resourceType\n }\n group {\n id\n name\n groupType\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n": typeof types.PaginatedEntityDropdownDocument;
22
22
  "\n query GetCatalogItem($uuid: UUID!) {\n catalogItem(id: $uuid) {\n __typename\n ... on Connection {\n id\n displayName\n }\n ... on Resource {\n id\n displayName\n connection {\n id\n displayName\n }\n accessLevels{\n accessLevelName\n accessLevelRemoteId\n }\n }\n ...on Group {\n id\n name\n connection {\n id\n displayName\n }\n accessLevels{\n accessLevelName\n accessLevelRemoteId\n }\n }\n ... on UserFacingError {\n message\n }\n }\n }\n ": typeof types.GetCatalogItemDocument;
23
23
  "\n query RequestDefaults(\n $requestedResources: [RequestConfigurationResourceInput!]!\n $requestedGroups: [RequestConfigurationGroupInput!]!\n ) {\n requestDefaults(input: {\n requestedResources: $requestedResources,\n requestedGroups: $requestedGroups,\n }\n ) {\n ... on RequestDefaults {\n durationOptions {\n durationInMinutes\n label\n }\n recommendedDurationInMinutes\n defaultDurationInMinutes\n maxDurationInMinutes\n requireSupportTicket\n reasonOptional\n requesterIsAdmin\n messages {\n entityId\n level\n code\n }\n }\n }\n }": typeof types.RequestDefaultsDocument;
24
24
  "\n fragment ResourceFields on Resource {\n displayName\n id\n connectionId\n connection {\n name\n connectionType\n }\n }\n": typeof types.ResourceFieldsFragmentDoc;
@@ -29,7 +29,7 @@ type Documents = {
29
29
  "query GetBundle($id: BundleId!) {\n bundle(input: { id: $id }) {\n __typename\n ... on BundleResult {\n bundle {\n name\n id\n items {\n edges {\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n node {\n ... on Resource {\n ...ResourceFields\n isRequestable\n }\n ... on Group {\n ...GroupFields\n isRequestable\n }\n }\n }\n }\n }\n }\n ... on BundleNotFoundError {\n message\n }\n }\n}": typeof types.GetBundleDocument;
30
30
  "\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;
31
31
  "\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;
32
- "\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Resource {\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": typeof types.GetAssociatedItemsDocument;
32
+ "\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Group {\n groupType\n }\n ... on Resource {\n resourceType\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": typeof types.GetAssociatedItemsDocument;
33
33
  };
34
34
  declare const documents: Documents;
35
35
  /**
@@ -72,7 +72,7 @@ export declare function graphql(source: '\n query GetRequestableAppsQuery($sear
72
72
  /**
73
73
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
74
74
  */
75
- export declare function graphql(source: "\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n"): (typeof documents)["\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n"];
75
+ export declare function graphql(source: "\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n resourceType\n }\n group {\n id\n name\n groupType\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n"): (typeof documents)["\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n resourceType\n }\n group {\n id\n name\n groupType\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n"];
76
76
  /**
77
77
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
78
78
  */
@@ -116,6 +116,6 @@ export declare function graphql(source: "\nquery GroupAccessLevels($groupId: Gro
116
116
  /**
117
117
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
118
118
  */
119
- export declare function graphql(source: "\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Resource {\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"): (typeof documents)["\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Resource {\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"];
119
+ export declare function graphql(source: "\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Group {\n groupType\n }\n ... on Resource {\n resourceType\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"): (typeof documents)["\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Group {\n groupType\n }\n ... on Resource {\n resourceType\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n"];
120
120
  export type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode<infer TType, any> ? TType : never;
121
121
  export {};
@@ -7,7 +7,7 @@ const documents = {
7
7
  "\n query HasValidOidcIdToken($oidcProviderType: OIDCProviderType!) {\n hasValidOidcToken(oidcProviderType: $oidcProviderType)\n }\n ": types.HasValidOidcIdTokenDocument,
8
8
  "\n mutation CreateRequest(\n $requestedResources: [RequestedResourceInput!]!\n $requestedGroups: [RequestedGroupInput!]!\n $reason: String!\n $durationInMinutes: Int\n ) {\n createRequest(\n input: {\n requestedResources: $requestedResources\n requestedGroups: $requestedGroups\n reason: $reason\n durationInMinutes: $durationInMinutes\n }\n ) {\n ... on CreateRequestResult {\n request {\n id\n status\n }\n }\n ... on RequestDurationTooLargeError {\n message\n }\n ... on RequestRequiresUserAuthTokenForConnectionError {\n message\n }\n ... on NoReviewersSetForOwnerError {\n message\n ownerId\n }\n ... on NoReviewersSetForResourceError {\n message\n resourceId\n }\n ... on NoReviewersSetForGroupError {\n message\n groupId\n }\n ... on NoManagerSetForRequestingUserError {\n message\n }\n ... on MfaInvalidError {\n message\n }\n ... on BulkRequestTooLargeError {\n message\n }\n ... on ItemCannotBeRequestedError {\n message\n }\n ... on UserCannotRequestAccessForTargetGroupError {\n message\n groupId\n userId\n }\n ... on GroupNestingNotAllowedError {\n message\n fromGroupId\n toGroupId\n }\n ... on TargetUserHasNestedAccessError {\n message\n groupIds\n }\n ... on RequestReasonMissingError {\n message\n }\n ... on RequestFieldValueMissingError {\n message\n fieldName\n }\n ... on LinkedGroupNotRequestableError {\n message\n sourceGroupId\n groupBindingId\n }\n ... on RequestReasonBelowMinLengthError {\n message\n }\n\n }\n }\n": types.CreateRequestDocument,
9
9
  '\n query GetRequestableAppsQuery($searchQuery: String) {\n appsV2(\n filters: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n }\n ) @connection(key: "paginated-app-dropdown") {\n edges {\n node {\n id\n displayName\n ... on Connection {\n connectionType\n }\n ... on Resource {\n resourceType\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n ': types.GetRequestableAppsQueryDocument,
10
- "\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n }\n group {\n id\n name\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n": types.PaginatedEntityDropdownDocument,
10
+ "\n query PaginatedEntityDropdown(\n $id: UUID!\n $searchQuery: String\n) {\n app(id: $id) {\n __typename\n ... on App {\n id\n items(\n input: {\n access: REQUESTABLE\n searchQuery: $searchQuery\n includeOnlyRequestable: true\n }\n ) {\n items {\n key\n resource {\n id\n name\n resourceType\n }\n group {\n id\n name\n groupType\n }\n }\n cursor\n }\n }\n ... on AppNotFoundError {\n message\n }\n }\n}\n": types.PaginatedEntityDropdownDocument,
11
11
  "\n query GetCatalogItem($uuid: UUID!) {\n catalogItem(id: $uuid) {\n __typename\n ... on Connection {\n id\n displayName\n }\n ... on Resource {\n id\n displayName\n connection {\n id\n displayName\n }\n accessLevels{\n accessLevelName\n accessLevelRemoteId\n }\n }\n ...on Group {\n id\n name\n connection {\n id\n displayName\n }\n accessLevels{\n accessLevelName\n accessLevelRemoteId\n }\n }\n ... on UserFacingError {\n message\n }\n }\n }\n ": types.GetCatalogItemDocument,
12
12
  "\n query RequestDefaults(\n $requestedResources: [RequestConfigurationResourceInput!]!\n $requestedGroups: [RequestConfigurationGroupInput!]!\n ) {\n requestDefaults(input: {\n requestedResources: $requestedResources,\n requestedGroups: $requestedGroups,\n }\n ) {\n ... on RequestDefaults {\n durationOptions {\n durationInMinutes\n label\n }\n recommendedDurationInMinutes\n defaultDurationInMinutes\n maxDurationInMinutes\n requireSupportTicket\n reasonOptional\n requesterIsAdmin\n messages {\n entityId\n level\n code\n }\n }\n }\n }": types.RequestDefaultsDocument,
13
13
  "\n fragment ResourceFields on Resource {\n displayName\n id\n connectionId\n connection {\n name\n connectionType\n }\n }\n": types.ResourceFieldsFragmentDoc,
@@ -18,7 +18,7 @@ const documents = {
18
18
  "query GetBundle($id: BundleId!) {\n bundle(input: { id: $id }) {\n __typename\n ... on BundleResult {\n bundle {\n name\n id\n items {\n edges {\n accessLevel {\n accessLevelName\n accessLevelRemoteId\n }\n node {\n ... on Resource {\n ...ResourceFields\n isRequestable\n }\n ... on Group {\n ...GroupFields\n isRequestable\n }\n }\n }\n }\n }\n }\n ... on BundleNotFoundError {\n message\n }\n }\n}": types.GetBundleDocument,
19
19
  "\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,
20
20
  "\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,
21
- "\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Resource {\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": types.GetAssociatedItemsDocument,
21
+ "\n query GetAssociatedItems($resourceId: ResourceId!, $searchQuery: String) {\n resource(input: {\n id: $resourceId\n }) {\n __typename\n ... on ResourceResult {\n __typename\n resource {\n associatedItems(\n first: 200\n filters: {\n searchQuery: {\n contains: $searchQuery\n }\n access: REQUESTABLE\n endUserVisible: true\n entityType: {\n in: [GROUP, RESOURCE]\n }\n }\n ) {\n edges {\n __typename\n ... on ResourceAssociatedItemEdge {\n alias\n node {\n __typename\n id\n name\n ... on Group {\n groupType\n }\n ... on Resource {\n resourceType\n accessLevels(\n filters: {\n skipRemoteAccessLevels: false # azure app roles are remote\n }\n ) {\n __typename\n accessLevelName\n accessLevelRemoteId\n }\n }\n }\n }\n }\n }\n }\n }\n ... on ResourceNotFoundError {\n message\n }\n }\n }\n": types.GetAssociatedItemsDocument,
22
22
  };
23
23
  export function graphql(source) {
24
24
  var _a;