feat: add gui settings field for sso users (#1310)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Bulk SSO account management is now supported, allowing users to update
multiple SSO account IDs at once.
- Connect settings now include SSO account identifiers for streamlined
configuration.
- Expanded array management functionality introduces advanced operations
for managing disk arrays.
- New fields for SSO user IDs have been added to various settings and
queries.

- **Style & Documentation**
- Improved formatting and support for rich HTML in form descriptions
enhance clarity and presentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Eli Bosley <ekbosley@gmail.com>
This commit is contained in:
Pujit Mehrotra
2025-04-03 09:50:12 -04:00
committed by GitHub
parent 1f10b63c8b
commit 5ba3fa67a2
10 changed files with 202 additions and 83 deletions

View File

@@ -160,7 +160,8 @@ export function ApiSettingsInputSchema(): z.ZodObject<Properties<ApiSettingsInpu
extraOrigins: z.array(z.string()).nullish(), extraOrigins: z.array(z.string()).nullish(),
forwardType: WAN_FORWARD_TYPESchema.nullish(), forwardType: WAN_FORWARD_TYPESchema.nullish(),
port: z.number().nullish(), port: z.number().nullish(),
sandbox: z.boolean().nullish() sandbox: z.boolean().nullish(),
ssoUserIds: z.array(z.string()).nullish()
}) })
} }
@@ -362,7 +363,8 @@ export function ConnectSettingsValuesSchema(): z.ZodObject<Properties<ConnectSet
extraOrigins: z.array(z.string()), extraOrigins: z.array(z.string()),
forwardType: WAN_FORWARD_TYPESchema.nullish(), forwardType: WAN_FORWARD_TYPESchema.nullish(),
port: z.number().nullish(), port: z.number().nullish(),
sandbox: z.boolean() sandbox: z.boolean(),
ssoUserIds: z.array(z.string())
}) })
} }

View File

@@ -107,6 +107,8 @@ export type ApiSettingsInput = {
* If false, the GraphQL sandbox will be disabled and only the production API will be available. * If false, the GraphQL sandbox will be disabled and only the production API will be available.
*/ */
sandbox?: InputMaybe<Scalars['Boolean']['input']>; sandbox?: InputMaybe<Scalars['Boolean']['input']>;
/** A list of Unique Unraid Account ID's. */
ssoUserIds?: InputMaybe<Array<Scalars['String']['input']>>;
}; };
export type ArrayType = Node & { export type ArrayType = Node & {
@@ -408,6 +410,8 @@ export type ConnectSettingsValues = {
* If false, the GraphQL sandbox is disabled and only the production API will be available. * If false, the GraphQL sandbox is disabled and only the production API will be available.
*/ */
sandbox: Scalars['Boolean']['output']; sandbox: Scalars['Boolean']['output'];
/** A list of Unique Unraid Account ID's. */
ssoUserIds: Array<Scalars['String']['output']>;
}; };
export type ConnectSignInInput = { export type ConnectSignInInput = {
@@ -2373,6 +2377,7 @@ export type ConnectSettingsValuesResolvers<ContextType = Context, ParentType ext
forwardType?: Resolver<Maybe<ResolversTypes['WAN_FORWARD_TYPE']>, ParentType, ContextType>; forwardType?: Resolver<Maybe<ResolversTypes['WAN_FORWARD_TYPE']>, ParentType, ContextType>;
port?: Resolver<Maybe<ResolversTypes['Port']>, ParentType, ContextType>; port?: Resolver<Maybe<ResolversTypes['Port']>, ParentType, ContextType>;
sandbox?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>; sandbox?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
ssoUserIds?: Resolver<Array<ResolversTypes['String']>, ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}>; }>;

View File

@@ -39,8 +39,6 @@ input SetupRemoteAccessInput {
port: Port port: Port
} }
input EnableDynamicRemoteAccessInput { input EnableDynamicRemoteAccessInput {
url: AccessUrlInput! url: AccessUrlInput!
enabled: Boolean! enabled: Boolean!
@@ -59,59 +57,67 @@ type DynamicRemoteAccessStatus {
} }
""" """
Intersection type of ApiSettings and RemoteAccess Intersection type of ApiSettings and RemoteAccess
""" """
type ConnectSettingsValues { type ConnectSettingsValues {
""" """
If true, the GraphQL sandbox is enabled and available at /graphql. If true, the GraphQL sandbox is enabled and available at /graphql.
If false, the GraphQL sandbox is disabled and only the production API will be available. If false, the GraphQL sandbox is disabled and only the production API will be available.
""" """
sandbox: Boolean! sandbox: Boolean!
""" """
A list of origins allowed to interact with the API. A list of origins allowed to interact with the API.
""" """
extraOrigins: [String!]! extraOrigins: [String!]!
""" """
The type of WAN access used for Remote Access. The type of WAN access used for Remote Access.
""" """
accessType: WAN_ACCESS_TYPE! accessType: WAN_ACCESS_TYPE!
""" """
The type of port forwarding used for Remote Access. The type of port forwarding used for Remote Access.
""" """
forwardType: WAN_FORWARD_TYPE forwardType: WAN_FORWARD_TYPE
""" """
The port used for Remote Access. The port used for Remote Access.
""" """
port: Port port: Port
"""
A list of Unique Unraid Account ID's.
"""
ssoUserIds: [String!]!
} }
""" """
Input should be a subset of ApiSettings that can be updated. Input should be a subset of ApiSettings that can be updated.
Some field combinations may be required or disallowed. Please refer to each field for more information. Some field combinations may be required or disallowed. Please refer to each field for more information.
""" """
input ApiSettingsInput { input ApiSettingsInput {
""" """
If true, the GraphQL sandbox will be enabled and available at /graphql. If true, the GraphQL sandbox will be enabled and available at /graphql.
If false, the GraphQL sandbox will be disabled and only the production API will be available. If false, the GraphQL sandbox will be disabled and only the production API will be available.
""" """
sandbox: Boolean sandbox: Boolean
""" """
A list of origins allowed to interact with the API. A list of origins allowed to interact with the API.
""" """
extraOrigins: [String!] extraOrigins: [String!]
""" """
The type of WAN access to use for Remote Access. The type of WAN access to use for Remote Access.
""" """
accessType: WAN_ACCESS_TYPE accessType: WAN_ACCESS_TYPE
""" """
The type of port forwarding to use for Remote Access. The type of port forwarding to use for Remote Access.
""" """
forwardType: WAN_FORWARD_TYPE forwardType: WAN_FORWARD_TYPE
""" """
The port to use for Remote Access. Not required for UPNP forwardType. Required for STATIC forwardType. The port to use for Remote Access. Not required for UPNP forwardType. Required for STATIC forwardType.
Ignored if accessType is DISABLED or forwardType is UPNP. Ignored if accessType is DISABLED or forwardType is UPNP.
""" """
port: Port port: Port
"""
A list of Unique Unraid Account ID's.
"""
ssoUserIds: [String!]
} }
type ConnectSettings implements Node { type ConnectSettings implements Node {
@@ -140,8 +146,8 @@ type Mutation {
setAdditionalAllowedOrigins(input: AllowedOriginInput!): [String!]! setAdditionalAllowedOrigins(input: AllowedOriginInput!): [String!]!
setupRemoteAccess(input: SetupRemoteAccessInput!): Boolean! setupRemoteAccess(input: SetupRemoteAccessInput!): Boolean!
""" """
Update the API settings. Update the API settings.
Some setting combinations may be required or disallowed. Please refer to each setting for more information. Some setting combinations may be required or disallowed. Please refer to each setting for more information.
""" """
updateApiSettings(input: ApiSettingsInput!): ConnectSettingsValues! updateApiSettings(input: ApiSettingsInput!): ConnectSettingsValues!
} }

View File

@@ -219,6 +219,9 @@ export const config = createSlice({
stateAsArray.push(action.payload); stateAsArray.push(action.payload);
state.remote.ssoSubIds = stateAsArray.join(','); state.remote.ssoSubIds = stateAsArray.join(',');
}, },
setSsoUsers(state, action: PayloadAction<string[]>) {
state.remote.ssoSubIds = action.payload.filter((id) => id).join(',');
},
removeSsoUser(state, action: PayloadAction<string | null>) { removeSsoUser(state, action: PayloadAction<string | null>) {
if (action.payload === null) { if (action.payload === null) {
state.remote.ssoSubIds = ''; state.remote.ssoSubIds = '';
@@ -309,6 +312,7 @@ const { actions, reducer } = config;
export const { export const {
addSsoUser, addSsoUser,
setSsoUsers,
updateUserConfig, updateUserConfig,
updateAccessTokens, updateAccessTokens,
updateAllowedOrigins, updateAllowedOrigins,
@@ -324,6 +328,7 @@ export const {
*/ */
export const configUpdateActionsFlash = isAnyOf( export const configUpdateActionsFlash = isAnyOf(
addSsoUser, addSsoUser,
setSsoUsers,
updateUserConfig, updateUserConfig,
updateAccessTokens, updateAccessTokens,
updateAllowedOrigins, updateAllowedOrigins,

View File

@@ -18,7 +18,7 @@ import {
WAN_FORWARD_TYPE, WAN_FORWARD_TYPE,
} from '@app/graphql/generated/api/types.js'; } from '@app/graphql/generated/api/types.js';
import { setupRemoteAccessThunk } from '@app/store/actions/setup-remote-access.js'; import { setupRemoteAccessThunk } from '@app/store/actions/setup-remote-access.js';
import { updateAllowedOrigins, updateUserConfig } from '@app/store/modules/config.js'; import { setSsoUsers, updateAllowedOrigins, updateUserConfig } from '@app/store/modules/config.js';
import { mergeSettingSlices } from '@app/unraid-api/types/json-forms.js'; import { mergeSettingSlices } from '@app/unraid-api/types/json-forms.js';
import { csvStringToArray } from '@app/utils.js'; import { csvStringToArray } from '@app/utils.js';
@@ -50,11 +50,12 @@ export class ConnectSettingsService {
async getCurrentSettings(): Promise<ConnectSettingsValues> { async getCurrentSettings(): Promise<ConnectSettingsValues> {
const { getters } = await import('@app/store/index.js'); const { getters } = await import('@app/store/index.js');
const { local, api } = getters.config(); const { local, api, remote } = getters.config();
return { return {
...(await this.dynamicRemoteAccessSettings()), ...(await this.dynamicRemoteAccessSettings()),
sandbox: local.sandbox === 'yes', sandbox: local.sandbox === 'yes',
extraOrigins: csvStringToArray(api.extraOrigins), extraOrigins: csvStringToArray(api.extraOrigins),
ssoUserIds: csvStringToArray(remote.ssoSubIds),
}; };
} }
@@ -63,7 +64,7 @@ export class ConnectSettingsService {
* @param settings - The settings to sync * @param settings - The settings to sync
* @returns true if a restart is required, false otherwise * @returns true if a restart is required, false otherwise
*/ */
async syncSettings(settings: Partial<ApiSettingsInput>) { async syncSettings(settings: Partial<ApiSettingsInput>): Promise<boolean> {
let restartRequired = false; let restartRequired = false;
const { getters } = await import('@app/store/index.js'); const { getters } = await import('@app/store/index.js');
const { nginx } = getters.emhttp(); const { nginx } = getters.emhttp();
@@ -86,13 +87,15 @@ export class ConnectSettingsService {
port: settings.port, port: settings.port,
}); });
} }
if (settings.extraOrigins) { if (settings.extraOrigins) {
await this.updateAllowedOrigins(settings.extraOrigins); await this.updateAllowedOrigins(settings.extraOrigins);
} }
if (typeof settings.sandbox === 'boolean') { if (typeof settings.sandbox === 'boolean') {
restartRequired ||= await this.setSandboxMode(settings.sandbox); restartRequired ||= await this.setSandboxMode(settings.sandbox);
} }
if (settings.ssoUserIds) {
restartRequired ||= await this.updateSSOUsers(settings.ssoUserIds);
}
const { writeConfigSync } = await import('@app/store/sync/config-disk-sync.js'); const { writeConfigSync } = await import('@app/store/sync/config-disk-sync.js');
writeConfigSync('flash'); writeConfigSync('flash');
return restartRequired; return restartRequired;
@@ -117,6 +120,32 @@ export class ConnectSettingsService {
return true; return true;
} }
/**
* Updates the SSO users and returns true if a restart is required
* @param userIds - The list of SSO user IDs
* @returns true if a restart is required, false otherwise
*/
private async updateSSOUsers(userIds: string[]): Promise<boolean> {
const { ssoUserIds } = await this.getCurrentSettings();
const currentUserSet = new Set(ssoUserIds);
const newUserSet = new Set(userIds);
if (newUserSet.symmetricDifference(currentUserSet).size === 0) {
// there's no change, so no need to update
return false;
}
// make sure we aren't adding invalid user ids
const uuidRegex =
/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
const invalidUserIds = userIds.filter((id) => !uuidRegex.test(id));
if (invalidUserIds.length > 0) {
throw new GraphQLError(`Invalid SSO user ID's: ${invalidUserIds.join(', ')}`);
}
const { store } = await import('@app/store/index.js');
store.dispatch(setSsoUsers(userIds));
// request a restart if we're there were no sso users before
return currentUserSet.size === 0;
}
private async updateRemoteAccess(input: SetupRemoteAccessInput): Promise<boolean> { private async updateRemoteAccess(input: SetupRemoteAccessInput): Promise<boolean> {
const { store } = await import('@app/store/index.js'); const { store } = await import('@app/store/index.js');
await store.dispatch(setupRemoteAccessThunk(input)).unwrap(); await store.dispatch(setupRemoteAccessThunk(input)).unwrap();
@@ -151,6 +180,7 @@ export class ConnectSettingsService {
await this.remoteAccessSlice(), await this.remoteAccessSlice(),
await this.sandboxSlice(), await this.sandboxSlice(),
this.flashBackupSlice(), this.flashBackupSlice(),
this.ssoUsersSlice(),
// Because CORS is effectively disabled, this setting is no longer necessary // Because CORS is effectively disabled, this setting is no longer necessary
// keeping it here for in case it needs to be re-enabled // keeping it here for in case it needs to be re-enabled
// //
@@ -344,4 +374,32 @@ export class ConnectSettingsService {
], ],
}; };
} }
/**
* Extra origins settings slice
*/
ssoUsersSlice(): SettingSlice {
return {
properties: {
ssoUserIds: {
type: 'array',
items: {
type: 'string',
},
title: 'Unraid API SSO Users',
description: `Provide a list of Unique Unraid Account ID's. Find yours at <a href="https://account.unraid.net/settings" target="_blank">account.unraid.net/settings</a>`,
},
},
elements: [
{
type: 'Control',
scope: '#/properties/ssoUserIds',
options: {
inputType: 'text',
placeholder: 'UUID',
},
},
],
};
}
} }

View File

@@ -69,11 +69,11 @@ export class ConnectResolver implements ConnectResolvers {
const restartRequired = await this.connectSettingsService.syncSettings(settings); const restartRequired = await this.connectSettingsService.syncSettings(settings);
const currentSettings = await this.connectSettingsService.getCurrentSettings(); const currentSettings = await this.connectSettingsService.getCurrentSettings();
if (restartRequired) { if (restartRequired) {
const restartDelayMs = 3_000;
setTimeout(async () => { setTimeout(async () => {
// Send restart out of band to avoid blocking the return of this resolver
this.logger.log('Restarting API'); this.logger.log('Restarting API');
await this.connectService.restartApi(); await this.connectService.restartApi();
}, restartDelayMs); }, 300);
} }
return currentSettings; return currentSettings;
} }

View File

@@ -44,7 +44,7 @@ const placeholder = computed(() => control.value.uischema?.options?.placeholder
<template> <template>
<ControlLayout v-if="control.visible" :label="control.label" :errors="control.errors"> <ControlLayout v-if="control.visible" :label="control.label" :errors="control.errors">
<div class="space-y-4"> <div class="space-y-4">
<p v-if="control.description">{{ control.description }}</p> <p v-if="control.description" v-html="control.description" />
<div v-for="(item, index) in items" :key="index" class="flex gap-2"> <div v-for="(item, index) in items" :key="index" class="flex gap-2">
<Input <Input
:type="inputType" :type="inputType"

View File

@@ -14,6 +14,7 @@ export const getConnectSettingsForm = graphql(/* GraphQL */ `
accessType accessType
forwardType forwardType
port port
ssoUserIds
} }
} }
} }
@@ -28,6 +29,7 @@ export const updateConnectSettings = graphql(/* GraphQL */ `
accessType accessType
forwardType forwardType
port port
ssoUserIds
} }
} }
`); `);

View File

@@ -14,8 +14,8 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-
* Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size
*/ */
type Documents = { type Documents = {
"\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n }\n }\n": typeof types.GetConnectSettingsFormDocument, "\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n }\n }\n": typeof types.GetConnectSettingsFormDocument,
"\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n": typeof types.UpdateConnectSettingsDocument, "\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n": typeof types.UpdateConnectSettingsDocument,
"\n query LogFiles {\n logFiles {\n name\n path\n size\n modifiedAt\n }\n }\n": typeof types.LogFilesDocument, "\n query LogFiles {\n logFiles {\n name\n path\n size\n modifiedAt\n }\n }\n": typeof types.LogFilesDocument,
"\n query LogFileContent($path: String!, $lines: Int, $startLine: Int) {\n logFile(path: $path, lines: $lines, startLine: $startLine) {\n path\n content\n totalLines\n startLine\n }\n }\n": typeof types.LogFileContentDocument, "\n query LogFileContent($path: String!, $lines: Int, $startLine: Int) {\n logFile(path: $path, lines: $lines, startLine: $startLine) {\n path\n content\n totalLines\n startLine\n }\n }\n": typeof types.LogFileContentDocument,
"\n subscription LogFileSubscription($path: String!) {\n logFile(path: $path) {\n path\n content\n totalLines\n }\n }\n": typeof types.LogFileSubscriptionDocument, "\n subscription LogFileSubscription($path: String!) {\n logFile(path: $path) {\n path\n content\n totalLines\n }\n }\n": typeof types.LogFileSubscriptionDocument,
@@ -40,8 +40,8 @@ type Documents = {
"\n mutation setupRemoteAccess($input: SetupRemoteAccessInput!) {\n setupRemoteAccess(input: $input)\n }\n": typeof types.setupRemoteAccessDocument, "\n mutation setupRemoteAccess($input: SetupRemoteAccessInput!) {\n setupRemoteAccess(input: $input)\n }\n": typeof types.setupRemoteAccessDocument,
}; };
const documents: Documents = { const documents: Documents = {
"\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n }\n }\n": types.GetConnectSettingsFormDocument, "\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n }\n }\n": types.GetConnectSettingsFormDocument,
"\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n": types.UpdateConnectSettingsDocument, "\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n": types.UpdateConnectSettingsDocument,
"\n query LogFiles {\n logFiles {\n name\n path\n size\n modifiedAt\n }\n }\n": types.LogFilesDocument, "\n query LogFiles {\n logFiles {\n name\n path\n size\n modifiedAt\n }\n }\n": types.LogFilesDocument,
"\n query LogFileContent($path: String!, $lines: Int, $startLine: Int) {\n logFile(path: $path, lines: $lines, startLine: $startLine) {\n path\n content\n totalLines\n startLine\n }\n }\n": types.LogFileContentDocument, "\n query LogFileContent($path: String!, $lines: Int, $startLine: Int) {\n logFile(path: $path, lines: $lines, startLine: $startLine) {\n path\n content\n totalLines\n startLine\n }\n }\n": types.LogFileContentDocument,
"\n subscription LogFileSubscription($path: String!) {\n logFile(path: $path) {\n path\n content\n totalLines\n }\n }\n": types.LogFileSubscriptionDocument, "\n subscription LogFileSubscription($path: String!) {\n logFile(path: $path) {\n path\n content\n totalLines\n }\n }\n": types.LogFileSubscriptionDocument,
@@ -83,11 +83,11 @@ export function graphql(source: string): unknown;
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n }\n }\n"): (typeof documents)["\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n }\n }\n"]; export function graphql(source: "\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n }\n }\n"): (typeof documents)["\n query GetConnectSettingsForm {\n connect {\n id\n settings {\n id\n dataSchema\n uiSchema\n values {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n"): (typeof documents)["\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n }\n }\n"]; export function graphql(source: "\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n"): (typeof documents)["\n mutation UpdateConnectSettings($input: ApiSettingsInput!) {\n updateApiSettings(input: $input) {\n sandbox\n extraOrigins\n accessType\n forwardType\n port\n ssoUserIds\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

View File

@@ -110,6 +110,8 @@ export type ApiSettingsInput = {
* If false, the GraphQL sandbox will be disabled and only the production API will be available. * If false, the GraphQL sandbox will be disabled and only the production API will be available.
*/ */
sandbox?: InputMaybe<Scalars['Boolean']['input']>; sandbox?: InputMaybe<Scalars['Boolean']['input']>;
/** A list of Unique Unraid Account ID's. */
ssoUserIds?: InputMaybe<Array<Scalars['String']['input']>>;
}; };
export type ArrayType = Node & { export type ArrayType = Node & {
@@ -194,6 +196,13 @@ export enum ArrayDiskFsColor {
YellowOn = 'yellow_on' YellowOn = 'yellow_on'
} }
export type ArrayDiskInput = {
/** Disk ID */
id: Scalars['ID']['input'];
/** The slot for the disk */
slot?: InputMaybe<Scalars['Int']['input']>;
};
export enum ArrayDiskStatus { export enum ArrayDiskStatus {
/** disabled, old disk still present */ /** disabled, old disk still present */
DiskDsbl = 'DISK_DSBL', DiskDsbl = 'DISK_DSBL',
@@ -226,6 +235,49 @@ export enum ArrayDiskType {
Parity = 'Parity' Parity = 'Parity'
} }
export type ArrayMutations = {
__typename?: 'ArrayMutations';
/** Add new disk to array */
addDiskToArray?: Maybe<ArrayType>;
clearArrayDiskStatistics?: Maybe<Scalars['JSON']['output']>;
mountArrayDisk?: Maybe<Disk>;
/** Remove existing disk from array. NOTE: The array must be stopped before running this otherwise it'll throw an error. */
removeDiskFromArray?: Maybe<ArrayType>;
/** Set array state */
setState?: Maybe<ArrayType>;
unmountArrayDisk?: Maybe<Disk>;
};
export type ArrayMutationsaddDiskToArrayArgs = {
input?: InputMaybe<ArrayDiskInput>;
};
export type ArrayMutationsclearArrayDiskStatisticsArgs = {
id: Scalars['ID']['input'];
};
export type ArrayMutationsmountArrayDiskArgs = {
id: Scalars['ID']['input'];
};
export type ArrayMutationsremoveDiskFromArrayArgs = {
input?: InputMaybe<ArrayDiskInput>;
};
export type ArrayMutationssetStateArgs = {
input?: InputMaybe<ArrayStateInput>;
};
export type ArrayMutationsunmountArrayDiskArgs = {
id: Scalars['ID']['input'];
};
export enum ArrayPendingState { export enum ArrayPendingState {
/** Array has no data disks */ /** Array has no data disks */
NoDataDisks = 'no_data_disks', NoDataDisks = 'no_data_disks',
@@ -262,6 +314,18 @@ export enum ArrayState {
TooManyMissingDisks = 'TOO_MANY_MISSING_DISKS' TooManyMissingDisks = 'TOO_MANY_MISSING_DISKS'
} }
export type ArrayStateInput = {
/** Array state */
desiredState: ArrayStateInputState;
};
export enum ArrayStateInputState {
/** Start array */
Start = 'START',
/** Stop array */
Stop = 'STOP'
}
export type Baseboard = { export type Baseboard = {
__typename?: 'Baseboard'; __typename?: 'Baseboard';
assetTag?: Maybe<Scalars['String']['output']>; assetTag?: Maybe<Scalars['String']['output']>;
@@ -349,6 +413,8 @@ export type ConnectSettingsValues = {
* If false, the GraphQL sandbox is disabled and only the production API will be available. * If false, the GraphQL sandbox is disabled and only the production API will be available.
*/ */
sandbox: Scalars['Boolean']['output']; sandbox: Scalars['Boolean']['output'];
/** A list of Unique Unraid Account ID's. */
ssoUserIds: Array<Scalars['String']['output']>;
}; };
export type ConnectSignInInput = { export type ConnectSignInInput = {
@@ -496,6 +562,7 @@ export type Docker = Node & {
__typename?: 'Docker'; __typename?: 'Docker';
containers?: Maybe<Array<DockerContainer>>; containers?: Maybe<Array<DockerContainer>>;
id: Scalars['ID']['output']; id: Scalars['ID']['output'];
mutations: DockerMutations;
networks?: Maybe<Array<DockerNetwork>>; networks?: Maybe<Array<DockerNetwork>>;
}; };
@@ -519,6 +586,22 @@ export type DockerContainer = {
status: Scalars['String']['output']; status: Scalars['String']['output'];
}; };
export type DockerMutations = {
__typename?: 'DockerMutations';
startContainer: DockerContainer;
stopContainer: DockerContainer;
};
export type DockerMutationsstartContainerArgs = {
id: Scalars['ID']['input'];
};
export type DockerMutationsstopContainerArgs = {
id: Scalars['ID']['input'];
};
export type DockerNetwork = { export type DockerNetwork = {
__typename?: 'DockerNetwork'; __typename?: 'DockerNetwork';
attachable: Scalars['Boolean']['output']; attachable: Scalars['Boolean']['output'];
@@ -734,8 +817,6 @@ export type Mount = {
export type Mutation = { export type Mutation = {
__typename?: 'Mutation'; __typename?: 'Mutation';
/** Add new disk to array */
addDiskToArray?: Maybe<ArrayType>;
addPermission: Scalars['Boolean']['output']; addPermission: Scalars['Boolean']['output'];
addRoleForApiKey: Scalars['Boolean']['output']; addRoleForApiKey: Scalars['Boolean']['output'];
addRoleForUser: Scalars['Boolean']['output']; addRoleForUser: Scalars['Boolean']['output'];
@@ -745,9 +826,9 @@ export type Mutation = {
/** Marks a notification as archived. */ /** Marks a notification as archived. */
archiveNotification: Notification; archiveNotification: Notification;
archiveNotifications: NotificationOverview; archiveNotifications: NotificationOverview;
array?: Maybe<ArrayMutations>;
/** Cancel parity check */ /** Cancel parity check */
cancelParityCheck?: Maybe<Scalars['JSON']['output']>; cancelParityCheck?: Maybe<Scalars['JSON']['output']>;
clearArrayDiskStatistics?: Maybe<Scalars['JSON']['output']>;
connectSignIn: Scalars['Boolean']['output']; connectSignIn: Scalars['Boolean']['output'];
connectSignOut: Scalars['Boolean']['output']; connectSignOut: Scalars['Boolean']['output'];
createApiKey: ApiKeyWithSecret; createApiKey: ApiKeyWithSecret;
@@ -759,29 +840,21 @@ export type Mutation = {
deleteUser?: Maybe<User>; deleteUser?: Maybe<User>;
enableDynamicRemoteAccess: Scalars['Boolean']['output']; enableDynamicRemoteAccess: Scalars['Boolean']['output'];
login?: Maybe<Scalars['String']['output']>; login?: Maybe<Scalars['String']['output']>;
mountArrayDisk?: Maybe<Disk>;
/** Pause parity check */ /** Pause parity check */
pauseParityCheck?: Maybe<Scalars['JSON']['output']>; pauseParityCheck?: Maybe<Scalars['JSON']['output']>;
reboot?: Maybe<Scalars['String']['output']>; reboot?: Maybe<Scalars['String']['output']>;
/** Reads each notification to recompute & update the overview. */ /** Reads each notification to recompute & update the overview. */
recalculateOverview: NotificationOverview; recalculateOverview: NotificationOverview;
/** Remove existing disk from array. NOTE: The array must be stopped before running this otherwise it'll throw an error. */
removeDiskFromArray?: Maybe<ArrayType>;
removeRoleFromApiKey: Scalars['Boolean']['output']; removeRoleFromApiKey: Scalars['Boolean']['output'];
/** Resume parity check */ /** Resume parity check */
resumeParityCheck?: Maybe<Scalars['JSON']['output']>; resumeParityCheck?: Maybe<Scalars['JSON']['output']>;
setAdditionalAllowedOrigins: Array<Scalars['String']['output']>; setAdditionalAllowedOrigins: Array<Scalars['String']['output']>;
setupRemoteAccess: Scalars['Boolean']['output']; setupRemoteAccess: Scalars['Boolean']['output'];
shutdown?: Maybe<Scalars['String']['output']>; shutdown?: Maybe<Scalars['String']['output']>;
/** Start array */
startArray?: Maybe<ArrayType>;
/** Start parity check */ /** Start parity check */
startParityCheck?: Maybe<Scalars['JSON']['output']>; startParityCheck?: Maybe<Scalars['JSON']['output']>;
/** Stop array */
stopArray?: Maybe<ArrayType>;
unarchiveAll: NotificationOverview; unarchiveAll: NotificationOverview;
unarchiveNotifications: NotificationOverview; unarchiveNotifications: NotificationOverview;
unmountArrayDisk?: Maybe<Disk>;
/** Marks a notification as unread. */ /** Marks a notification as unread. */
unreadNotification: Notification; unreadNotification: Notification;
/** /**
@@ -792,11 +865,6 @@ export type Mutation = {
}; };
export type MutationaddDiskToArrayArgs = {
input?: InputMaybe<arrayDiskInput>;
};
export type MutationaddPermissionArgs = { export type MutationaddPermissionArgs = {
input: AddPermissionInput; input: AddPermissionInput;
}; };
@@ -832,11 +900,6 @@ export type MutationarchiveNotificationsArgs = {
}; };
export type MutationclearArrayDiskStatisticsArgs = {
id: Scalars['ID']['input'];
};
export type MutationconnectSignInArgs = { export type MutationconnectSignInArgs = {
input: ConnectSignInInput; input: ConnectSignInInput;
}; };
@@ -874,16 +937,6 @@ export type MutationloginArgs = {
}; };
export type MutationmountArrayDiskArgs = {
id: Scalars['ID']['input'];
};
export type MutationremoveDiskFromArrayArgs = {
input?: InputMaybe<arrayDiskInput>;
};
export type MutationremoveRoleFromApiKeyArgs = { export type MutationremoveRoleFromApiKeyArgs = {
input: RemoveRoleFromApiKeyInput; input: RemoveRoleFromApiKeyInput;
}; };
@@ -914,11 +967,6 @@ export type MutationunarchiveNotificationsArgs = {
}; };
export type MutationunmountArrayDiskArgs = {
id: Scalars['ID']['input'];
};
export type MutationunreadNotificationArgs = { export type MutationunreadNotificationArgs = {
id: Scalars['String']['input']; id: Scalars['String']['input'];
}; };
@@ -1826,13 +1874,6 @@ export type addUserInput = {
password: Scalars['String']['input']; password: Scalars['String']['input'];
}; };
export type arrayDiskInput = {
/** Disk ID */
id: Scalars['ID']['input'];
/** The slot for the disk */
slot?: InputMaybe<Scalars['Int']['input']>;
};
export type deleteUserInput = { export type deleteUserInput = {
name: Scalars['String']['input']; name: Scalars['String']['input'];
}; };
@@ -1860,14 +1901,14 @@ export type usersInput = {
export type GetConnectSettingsFormQueryVariables = Exact<{ [key: string]: never; }>; export type GetConnectSettingsFormQueryVariables = Exact<{ [key: string]: never; }>;
export type GetConnectSettingsFormQuery = { __typename?: 'Query', connect: { __typename?: 'Connect', id: string, settings: { __typename?: 'ConnectSettings', id: string, dataSchema: any, uiSchema: any, values: { __typename?: 'ConnectSettingsValues', sandbox: boolean, extraOrigins: Array<string>, accessType: WAN_ACCESS_TYPE, forwardType?: WAN_FORWARD_TYPE | null, port?: number | null } } } }; export type GetConnectSettingsFormQuery = { __typename?: 'Query', connect: { __typename?: 'Connect', id: string, settings: { __typename?: 'ConnectSettings', id: string, dataSchema: any, uiSchema: any, values: { __typename?: 'ConnectSettingsValues', sandbox: boolean, extraOrigins: Array<string>, accessType: WAN_ACCESS_TYPE, forwardType?: WAN_FORWARD_TYPE | null, port?: number | null, ssoUserIds: Array<string> } } } };
export type UpdateConnectSettingsMutationVariables = Exact<{ export type UpdateConnectSettingsMutationVariables = Exact<{
input: ApiSettingsInput; input: ApiSettingsInput;
}>; }>;
export type UpdateConnectSettingsMutation = { __typename?: 'Mutation', updateApiSettings: { __typename?: 'ConnectSettingsValues', sandbox: boolean, extraOrigins: Array<string>, accessType: WAN_ACCESS_TYPE, forwardType?: WAN_FORWARD_TYPE | null, port?: number | null } }; export type UpdateConnectSettingsMutation = { __typename?: 'Mutation', updateApiSettings: { __typename?: 'ConnectSettingsValues', sandbox: boolean, extraOrigins: Array<string>, accessType: WAN_ACCESS_TYPE, forwardType?: WAN_FORWARD_TYPE | null, port?: number | null, ssoUserIds: Array<string> } };
export type LogFilesQueryVariables = Exact<{ [key: string]: never; }>; export type LogFilesQueryVariables = Exact<{ [key: string]: never; }>;
@@ -2016,8 +2057,8 @@ export type setupRemoteAccessMutation = { __typename?: 'Mutation', setupRemoteAc
export const NotificationFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Notification"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"importance"}},{"kind":"Field","name":{"kind":"Name","value":"link"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"timestamp"}},{"kind":"Field","name":{"kind":"Name","value":"formattedTimestamp"}}]}}]} as unknown as DocumentNode<NotificationFragmentFragment, unknown>; export const NotificationFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Notification"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"importance"}},{"kind":"Field","name":{"kind":"Name","value":"link"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"timestamp"}},{"kind":"Field","name":{"kind":"Name","value":"formattedTimestamp"}}]}}]} as unknown as DocumentNode<NotificationFragmentFragment, unknown>;
export const NotificationCountFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationCountFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"NotificationCounts"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"warning"}},{"kind":"Field","name":{"kind":"Name","value":"alert"}}]}}]} as unknown as DocumentNode<NotificationCountFragmentFragment, unknown>; export const NotificationCountFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationCountFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"NotificationCounts"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"warning"}},{"kind":"Field","name":{"kind":"Name","value":"alert"}}]}}]} as unknown as DocumentNode<NotificationCountFragmentFragment, unknown>;
export const PartialCloudFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialCloud"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Cloud"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"apiKey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"valid"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}},{"kind":"Field","name":{"kind":"Name","value":"cloud"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}},{"kind":"Field","name":{"kind":"Name","value":"minigraphql"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}},{"kind":"Field","name":{"kind":"Name","value":"relay"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}}]}}]} as unknown as DocumentNode<PartialCloudFragment, unknown>; export const PartialCloudFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialCloud"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Cloud"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"error"}},{"kind":"Field","name":{"kind":"Name","value":"apiKey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"valid"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}},{"kind":"Field","name":{"kind":"Name","value":"cloud"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}},{"kind":"Field","name":{"kind":"Name","value":"minigraphql"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}},{"kind":"Field","name":{"kind":"Name","value":"relay"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}}]}}]} as unknown as DocumentNode<PartialCloudFragment, unknown>;
export const GetConnectSettingsFormDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetConnectSettingsForm"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"connect"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"settings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSchema"}},{"kind":"Field","name":{"kind":"Name","value":"uiSchema"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sandbox"}},{"kind":"Field","name":{"kind":"Name","value":"extraOrigins"}},{"kind":"Field","name":{"kind":"Name","value":"accessType"}},{"kind":"Field","name":{"kind":"Name","value":"forwardType"}},{"kind":"Field","name":{"kind":"Name","value":"port"}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetConnectSettingsFormQuery, GetConnectSettingsFormQueryVariables>; export const GetConnectSettingsFormDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetConnectSettingsForm"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"connect"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"settings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSchema"}},{"kind":"Field","name":{"kind":"Name","value":"uiSchema"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sandbox"}},{"kind":"Field","name":{"kind":"Name","value":"extraOrigins"}},{"kind":"Field","name":{"kind":"Name","value":"accessType"}},{"kind":"Field","name":{"kind":"Name","value":"forwardType"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"ssoUserIds"}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetConnectSettingsFormQuery, GetConnectSettingsFormQueryVariables>;
export const UpdateConnectSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateConnectSettings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ApiSettingsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateApiSettings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sandbox"}},{"kind":"Field","name":{"kind":"Name","value":"extraOrigins"}},{"kind":"Field","name":{"kind":"Name","value":"accessType"}},{"kind":"Field","name":{"kind":"Name","value":"forwardType"}},{"kind":"Field","name":{"kind":"Name","value":"port"}}]}}]}}]} as unknown as DocumentNode<UpdateConnectSettingsMutation, UpdateConnectSettingsMutationVariables>; export const UpdateConnectSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateConnectSettings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ApiSettingsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateApiSettings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sandbox"}},{"kind":"Field","name":{"kind":"Name","value":"extraOrigins"}},{"kind":"Field","name":{"kind":"Name","value":"accessType"}},{"kind":"Field","name":{"kind":"Name","value":"forwardType"}},{"kind":"Field","name":{"kind":"Name","value":"port"}},{"kind":"Field","name":{"kind":"Name","value":"ssoUserIds"}}]}}]}}]} as unknown as DocumentNode<UpdateConnectSettingsMutation, UpdateConnectSettingsMutationVariables>;
export const LogFilesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"LogFiles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFiles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedAt"}}]}}]}}]} as unknown as DocumentNode<LogFilesQuery, LogFilesQueryVariables>; export const LogFilesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"LogFiles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFiles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedAt"}}]}}]}}]} as unknown as DocumentNode<LogFilesQuery, LogFilesQueryVariables>;
export const LogFileContentDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"LogFileContent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"path"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"lines"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startLine"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFile"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"path"},"value":{"kind":"Variable","name":{"kind":"Name","value":"path"}}},{"kind":"Argument","name":{"kind":"Name","value":"lines"},"value":{"kind":"Variable","name":{"kind":"Name","value":"lines"}}},{"kind":"Argument","name":{"kind":"Name","value":"startLine"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startLine"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"totalLines"}},{"kind":"Field","name":{"kind":"Name","value":"startLine"}}]}}]}}]} as unknown as DocumentNode<LogFileContentQuery, LogFileContentQueryVariables>; export const LogFileContentDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"LogFileContent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"path"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"lines"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startLine"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFile"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"path"},"value":{"kind":"Variable","name":{"kind":"Name","value":"path"}}},{"kind":"Argument","name":{"kind":"Name","value":"lines"},"value":{"kind":"Variable","name":{"kind":"Name","value":"lines"}}},{"kind":"Argument","name":{"kind":"Name","value":"startLine"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startLine"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"totalLines"}},{"kind":"Field","name":{"kind":"Name","value":"startLine"}}]}}]}}]} as unknown as DocumentNode<LogFileContentQuery, LogFileContentQueryVariables>;
export const LogFileSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"LogFileSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"path"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFile"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"path"},"value":{"kind":"Variable","name":{"kind":"Name","value":"path"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"totalLines"}}]}}]}}]} as unknown as DocumentNode<LogFileSubscriptionSubscription, LogFileSubscriptionSubscriptionVariables>; export const LogFileSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"LogFileSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"path"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFile"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"path"},"value":{"kind":"Variable","name":{"kind":"Name","value":"path"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"totalLines"}}]}}]}}]} as unknown as DocumentNode<LogFileSubscriptionSubscription, LogFileSubscriptionSubscriptionVariables>;