diff --git a/codegen.json b/codegen.json index f8d59351943..1874bb6f837 100644 --- a/codegen.json +++ b/codegen.json @@ -1,16 +1,17 @@ { - "schema": "packages/server/utils/githubSchema.graphql", - "documents": "packages/server/utils/githubQueries/*.graphql", + "config": { + "content": "// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck" + }, "generates": { "packages/server/types/githubTypes.ts": { - "plugins": [ - "typescript", - "typescript-operations", - "add" - ], - "config": { - "content": "// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck" - } + "schema": "packages/server/utils/githubSchema.graphql", + "documents": "packages/server/utils/githubQueries/*.graphql", + "plugins": ["typescript", "typescript-operations", "add"] + }, + "packages/server/types/gitlabTypes.ts": { + "schema": "packages/server/graphql/nestedSchema/GitLab/gitlabSchema.graphql", + "documents": "packages/server/graphql/nestedSchema/GitLab/queries/*.graphql", + "plugins": ["typescript", "typescript-operations", "add"] } } } diff --git a/packages/client/components/GitLabProviderLogo.tsx b/packages/client/components/GitLabProviderLogo.tsx new file mode 100644 index 00000000000..62f5f933b23 --- /dev/null +++ b/packages/client/components/GitLabProviderLogo.tsx @@ -0,0 +1,10 @@ +import styled from '@emotion/styled' +import logo from '../styles/theme/images/graphics/gitlab-icon-rgb.svg' + +const GitLabProviderLogo = styled('div')({ + background: `url("${logo}")`, + height: 48, + width: 48 +}) + +export default GitLabProviderLogo diff --git a/packages/client/components/GitLabSVG.tsx b/packages/client/components/GitLabSVG.tsx new file mode 100644 index 00000000000..ee2d4044cbc --- /dev/null +++ b/packages/client/components/GitLabSVG.tsx @@ -0,0 +1,39 @@ +import React from 'react' + +const GitLabSVG = React.memo(() => { + return ( + + + + + + + + + + + + + + ) +}) + +export default GitLabSVG diff --git a/packages/client/hooks/useMenu.ts b/packages/client/hooks/useMenu.ts index 9102c6c724e..e551f169145 100644 --- a/packages/client/hooks/useMenu.ts +++ b/packages/client/hooks/useMenu.ts @@ -33,7 +33,15 @@ const useMenu = ( if (originCoords) { ;(originRef as any).current = {getBoundingClientRect: () => originCoords} as RectElement } - const {portal, closePortal, togglePortal, portalStatus, setPortalStatus, openPortal} = usePortal({ + const { + portal, + closePortal, + openPortal, + portalStatus, + terminatePortal, + togglePortal, + setPortalStatus + } = usePortal({ id, onOpen, onClose, @@ -60,14 +68,15 @@ const useMenu = ( ) const menuProps = {portalStatus, closePortal, isDropdown} return { - togglePortal, - originRef, - menuPortal, - menuProps, loadingDelay, loadingWidth, + menuPortal, + menuProps, + openPortal, + originRef, portalStatus, - openPortal + terminatePortal, + togglePortal } } diff --git a/packages/client/modules/demo/DemoUser.ts b/packages/client/modules/demo/DemoUser.ts index 82841f69519..412cad1ff1e 100644 --- a/packages/client/modules/demo/DemoUser.ts +++ b/packages/client/modules/demo/DemoUser.ts @@ -8,7 +8,8 @@ export default class DemoUser { createdAt = new Date().toJSON() email: string featureFlags = { - jira: false + gitlab: false, + video: false } facilitatorUserId: string facilitatorName: string diff --git a/packages/client/modules/teamDashboard/components/ProviderList/ProviderList.tsx b/packages/client/modules/teamDashboard/components/ProviderList/ProviderList.tsx index 8b90ce6de7c..5bf1dca0354 100644 --- a/packages/client/modules/teamDashboard/components/ProviderList/ProviderList.tsx +++ b/packages/client/modules/teamDashboard/components/ProviderList/ProviderList.tsx @@ -6,6 +6,7 @@ import graphql from 'babel-plugin-relay/macro' import SettingsWrapper from '../../../../components/Settings/SettingsWrapper' import AtlassianProviderRow from '../ProviderRow/AtlassianProviderRow' import GitHubProviderRow from '../ProviderRow/GitHubProviderRow' +import GitLabProviderRow from '../ProviderRow/GitLabProviderRow' import MattermostProviderRow from '../ProviderRow/MattermostProviderRow' import SlackProviderRow from '../ProviderRow/SlackProviderRow' @@ -21,10 +22,14 @@ const StyledWrapper = styled(SettingsWrapper)({ const ProviderList = (props: Props) => { const {viewer, retry, teamId} = props + const { + featureFlags: {gitlab: allowGitlab} + } = viewer return ( + {allowGitlab && } @@ -36,8 +41,13 @@ export default createFragmentContainer(ProviderList, { fragment ProviderList_viewer on User { ...AtlassianProviderRow_viewer ...GitHubProviderRow_viewer + ...GitLabProviderRow_viewer ...MattermostProviderRow_viewer ...SlackProviderRow_viewer + + featureFlags { + gitlab + } } ` }) diff --git a/packages/client/modules/teamDashboard/components/ProviderRow/GitLabConfigMenu.tsx b/packages/client/modules/teamDashboard/components/ProviderRow/GitLabConfigMenu.tsx new file mode 100644 index 00000000000..81dc0a57a35 --- /dev/null +++ b/packages/client/modules/teamDashboard/components/ProviderRow/GitLabConfigMenu.tsx @@ -0,0 +1,37 @@ +import React from 'react' +import useAtmosphere from '../../../../hooks/useAtmosphere' +import {MenuProps} from '../../../../hooks/useMenu' +import {MenuMutationProps} from '../../../../hooks/useMutationProps' +import RemoveIntegrationTokenMutation from '../../../../mutations/RemoveIntegrationTokenMutation' +import Menu from '../../../../components/Menu' +import MenuItem from '../../../../components/MenuItem' + +interface Props { + menuProps: MenuProps + mutationProps: MenuMutationProps + providerId: string + teamId: string + terminatePortal: () => void +} + +const GitLabConfigMenu = (props: Props) => { + const {menuProps, mutationProps, providerId, teamId, terminatePortal} = props + const {onError, onCompleted, submitMutation, submitting} = mutationProps + const atmosphere = useAtmosphere() + + const removeGitLabAuth = () => { + if (submitting) return + submitMutation() + RemoveIntegrationTokenMutation(atmosphere, {providerId, teamId}, {onCompleted, onError}) + // Our parent component does not unmount, and it often re-renders before the CSS menu transition + // can complete. We nuke the portal here to ensure the menu is closed. + terminatePortal() + } + return ( + + + + ) +} + +export default GitLabConfigMenu diff --git a/packages/client/modules/teamDashboard/components/ProviderRow/GitLabProviderRow.tsx b/packages/client/modules/teamDashboard/components/ProviderRow/GitLabProviderRow.tsx new file mode 100644 index 00000000000..b1394fe7046 --- /dev/null +++ b/packages/client/modules/teamDashboard/components/ProviderRow/GitLabProviderRow.tsx @@ -0,0 +1,223 @@ +import styled from '@emotion/styled' +import graphql from 'babel-plugin-relay/macro' +import React from 'react' +import {useFragment} from 'react-relay' +import useAtmosphere from '../../../../hooks/useAtmosphere' +import useMutationProps from '../../../../hooks/useMutationProps' +import FlatButton from '../../../../components/FlatButton' +import GitLabProviderLogo from '../../../../components/GitLabProviderLogo' +import GitLabSVG from '../../../../components/GitLabSVG' +import Icon from '../../../../components/Icon' +import ProviderActions from '../../../../components/ProviderActions' +import ProviderCard from '../../../../components/ProviderCard' +import RowInfo from '../../../../components/Row/RowInfo' +import RowInfoCopy from '../../../../components/Row/RowInfoCopy' +import useBreakpoint from '../../../../hooks/useBreakpoint' +import {MenuPosition} from '../../../../hooks/useCoords' +import useMenu from '../../../../hooks/useMenu' +import {PALETTE} from '../../../../styles/paletteV3' +import {ICON_SIZE} from '../../../../styles/typographyV2' +import {Breakpoint} from '../../../../types/constEnums' +import GitLabClientManager, {GitLabIntegrationProvider} from '../../../../utils/GitLabClientManager' +import {GitLabProviderRow_viewer$key} from '../../../../__generated__/GitLabProviderRow_viewer.graphql' +import GitLabConfigMenu from './GitLabConfigMenu' +import useTooltip from 'parabol-client/hooks/useTooltip' + +const StyledButton = styled(FlatButton)({ + color: PALETTE.SLATE_700, + fontSize: 14, + fontWeight: 600, + minWidth: 36, + paddingLeft: 0, + paddingRight: 0, + width: '100%' +}) + +const StyledPrimaryButton = styled(StyledButton)({ + borderColor: PALETTE.SLATE_400 +}) + +const StyledSecondaryButton = styled(StyledButton)({ + backgroundColor: PALETTE.SLATE_200, + marginLeft: 16 +}) + +interface Props { + teamId: string + viewerRef: GitLabProviderRow_viewer$key +} + +const MenuButton = styled(FlatButton)({ + color: PALETTE.GRAPE_700, + fontSize: ICON_SIZE.MD18, + height: 24, + userSelect: 'none', + marginLeft: 4, + padding: 0, + width: 24 +}) + +const StyledIcon = styled(Icon)({ + fontSize: ICON_SIZE.MD18 +}) + +const ListAndMenu = styled('div')({ + display: 'flex', + position: 'absolute', + right: 16, + top: 16 +}) + +const GitLabLogin = styled('div')({}) + +const ProviderName = styled('div')({ + color: PALETTE.SLATE_700, + fontSize: 16, + fontWeight: 600, + lineHeight: '24px', + alignItems: 'center', + display: 'flex', + marginRight: 16, + verticalAlign: 'middle' +}) + +const GitLabProviderRow = (props: Props) => { + const {teamId, viewerRef} = props + const viewer = useFragment( + graphql` + fragment GitLabProviderRow_viewer on User { + teamMember(teamId: $teamId) { + integrations { + gitlab { + availableProviders { + id + scope + type + name + updatedAt + providerMetadata { + ... on OAuth2ProviderMetadata { + clientId + serverBaseUrl + scopes + } + } + } + activeProvider { + id + name + } + isActive + teamId + } + } + } + } + `, + viewerRef + ) + const {teamMember} = viewer + const {integrations} = teamMember! + const {gitlab} = integrations + const {isActive, availableProviders} = gitlab! + const atmosphere = useAtmosphere() + const mutationProps = useMutationProps() + const {submitting} = mutationProps + const primaryProvider = GitLabClientManager.getPrimaryProvider(availableProviders) + const secondaryProvider = GitLabClientManager.getSecondaryProvider(availableProviders) + const openOAuth = (provider: GitLabIntegrationProvider) => { + GitLabClientManager.openOAuth(atmosphere, provider, teamId, mutationProps) + } + const { + originRef: menuRef, + menuPortal, + menuProps, + terminatePortal, + togglePortal + } = useMenu(MenuPosition.UPPER_RIGHT) + const isDesktop = useBreakpoint(Breakpoint.SIDEBAR_LEFT) + const primaryProviderName = !secondaryProvider ? 'Connect' : primaryProvider!.name + const { + tooltipPortal: primaryTooltipPortal, + openTooltip: primaryOpenTooltip, + closeTooltip: primaryCloseTooltip, + originRef: primaryRef + } = useTooltip(MenuPosition.LOWER_CENTER) + const { + tooltipPortal: secondaryTooltipPortal, + openTooltip: secondaryOpenTooltip, + closeTooltip: secondaryCloseTooltip, + originRef: secondaryRef + } = useTooltip(MenuPosition.LOWER_CENTER) + + return ( + + + + GitLab + Use GitLab Issues from within Parabol + + {!isActive && ( + + {primaryProvider && ( + openOAuth(primaryProvider)} + palette='warm' + waiting={submitting} + onMouseOver={primaryOpenTooltip} + onMouseOut={primaryCloseTooltip} + ref={primaryRef as any} + > + {isDesktop ? primaryProviderName : add} + + )} + {primaryProvider && primaryTooltipPortal('Connect to GitLab Cloud')} + {secondaryProvider && ( + openOAuth(secondaryProvider)} + palette='warm' + waiting={submitting} + onMouseOver={secondaryOpenTooltip} + onMouseOut={secondaryCloseTooltip} + ref={secondaryRef as any} + > + {isDesktop ? ( + GitLabClientManager.getTruncatedProviderName(secondaryProvider.name) + ) : ( + enhanced_encryption + )} + + )} + {secondaryProvider && + secondaryTooltipPortal( + `Connect to ${secondaryProvider!.providerMetadata!.serverBaseUrl}` + )} + + )} + {isActive && ( + + {/* */} + + + + + more_vert + + {menuPortal( + + )} + + )} + + ) +} + +export default GitLabProviderRow diff --git a/packages/client/modules/teamDashboard/components/ProviderRow/MattermostConfigMenu.tsx b/packages/client/modules/teamDashboard/components/ProviderRow/MattermostConfigMenu.tsx index cd5121d5872..cc131170e8c 100644 --- a/packages/client/modules/teamDashboard/components/ProviderRow/MattermostConfigMenu.tsx +++ b/packages/client/modules/teamDashboard/components/ProviderRow/MattermostConfigMenu.tsx @@ -2,7 +2,7 @@ import React from 'react' import useAtmosphere from '../../../../hooks/useAtmosphere' import {MenuProps} from '../../../../hooks/useMenu' import {MenuMutationProps} from '../../../../hooks/useMutationProps' -import RemoveMattermostAuthMutation from '../../../../mutations/RemoveMattermostAuthMutation' +import RemoveIntegrationProviderMutation from '../../../../mutations/RemoveIntegrationProviderMutation' import Menu from '../../../../components/Menu' import MenuItem from '../../../../components/MenuItem' @@ -10,17 +10,22 @@ interface Props { menuProps: MenuProps mutationProps: MenuMutationProps teamId: string + providerId: string + terminatePortal: () => void } const MattermostConfigMenu = (props: Props) => { - const {menuProps, mutationProps, teamId} = props + const {menuProps, mutationProps, providerId, teamId, terminatePortal} = props const {onError, onCompleted, submitMutation, submitting} = mutationProps const atmosphere = useAtmosphere() const removeMattermostAuth = () => { if (submitting) return submitMutation() - RemoveMattermostAuthMutation(atmosphere, {teamId}, {onCompleted, onError}) + RemoveIntegrationProviderMutation(atmosphere, {providerId, teamId}, {onCompleted, onError}) + // Our parent component does not unmount, and it often re-renders before the CSS menu transition + // can complete. We nuke the portal here to ensure the menu is closed. + terminatePortal() } return ( diff --git a/packages/client/modules/teamDashboard/components/ProviderRow/MattermostPanel.tsx b/packages/client/modules/teamDashboard/components/ProviderRow/MattermostPanel.tsx index 5c6e019966b..e5f189a1c0d 100644 --- a/packages/client/modules/teamDashboard/components/ProviderRow/MattermostPanel.tsx +++ b/packages/client/modules/teamDashboard/components/ProviderRow/MattermostPanel.tsx @@ -8,7 +8,6 @@ import BasicInput from '../../../../components/InputField/BasicInput' import StyledError from '../../../../components/StyledError' import useAtmosphere from '../../../../hooks/useAtmosphere' import useMutationProps from '../../../../hooks/useMutationProps' -import AddMattermostAuthMutation from '../../../../mutations/AddMattermostAuthMutation' import {PALETTE} from '../../../../styles/paletteV3' import Legitity from '../../../../validation/Legitity' import {MattermostPanel_viewer$key} from '~/__generated__/MattermostPanel_viewer.graphql' @@ -17,6 +16,9 @@ import LabelHeading from '../../../../components/LabelHeading/LabelHeading' import linkify from '~/utils/linkify' import useTooltip from '~/hooks/useTooltip' import {MenuPosition} from '~/hooks/useCoords' +import AddIntegrationProviderMutation from '../../../../mutations/AddIntegrationProviderMutation' +import UpdateIntegrationProviderMutation from '../../../../mutations/UpdateIntegrationProviderMutation' +import {AddIntegrationProviderInput} from '~/__generated__/AddIntegrationProviderMutation.graphql' interface Props { viewerRef: MattermostPanel_viewer$key @@ -65,26 +67,42 @@ const MattermostPanel = (props: Props) => { const viewer = useFragment( graphql` fragment MattermostPanel_viewer on User { + preferredName + email teamMember(teamId: $teamId) { integrations { mattermost { - isActive - webhookUrl + activeProvider { + id + providerMetadata { + ... on WebHookProviderMetadata { + webhookUrl + } + } + } } } + team { + orgId + } } } `, viewerRef ) - const {teamMember} = viewer - const {integrations} = teamMember! - const {mattermost} = integrations + const {teamMember, preferredName, email} = viewer + const { + integrations: {mattermost} + } = teamMember! + const activeProvider = mattermost?.activeProvider + const {orgId} = teamMember!.team! const atmosphere = useAtmosphere() + // corner case: let them re-upsert the same webhook url when reverting to a previous value + const serverWebhookUrl = activeProvider?.providerMetadata?.webhookUrl || '' const {validateField, setDirtyField, onChange, fields} = useForm({ webhookUrl: { - getDefault: () => mattermost?.webhookUrl || '', + getDefault: () => serverWebhookUrl, validate: (rawInput: string) => { return new Legitity(rawInput).test((maybeUrl) => { if (!maybeUrl) return 'No link provided' @@ -104,18 +122,45 @@ const MattermostPanel = (props: Props) => { } = useMutationProps() const {error: fieldError, value: fieldValue} = fields.webhookUrl - // corner case: let them re-upsert the same webhook url when reverting to a - // previous value - const updateDisabled = (error, value) => - error || submitting || !value || (value === mattermost?.webhookUrl && !mutationError) + const isUpdateDisabled = (error?: string, value?: any) => + !!error || submitting || !value || (value === serverWebhookUrl && !mutationError) const onSubmit = (e: FormEvent) => { e.preventDefault() const {error, value: webhookUrl} = validateField('webhookUrl') - if (updateDisabled(error, webhookUrl)) return + if (isUpdateDisabled(error, webhookUrl)) return setDirtyField() submitMutation() - AddMattermostAuthMutation(atmosphere, {webhookUrl, teamId}, {onError, onCompleted}) + const provider: AddIntegrationProviderInput = { + orgId, + teamId, + provider: 'mattermost', + scope: 'team', + type: 'webhook', + name: `Mattermost webhook for ${preferredName ? preferredName : email}`, + webhookProviderMetadataInput: { + webhookUrl + } + } + if (mattermost?.activeProvider) { + UpdateIntegrationProviderMutation( + atmosphere, + { + provider: { + id: mattermost.activeProvider.id, + ...provider + }, + teamId + }, + {onError, onCompleted} + ) + } else { + AddIntegrationProviderMutation( + atmosphere, + {provider, token: {}, teamId}, + {onError, onCompleted} + ) + } } const {tooltipPortal, openTooltip, closeTooltip, originRef} = useTooltip( @@ -140,7 +185,7 @@ const MattermostPanel = (props: Props) => { name='webhookUrl' placeholder='https://my.mattermost.com:8065/hooks/abc123' /> - + Update diff --git a/packages/client/modules/teamDashboard/components/ProviderRow/MattermostProviderRow.tsx b/packages/client/modules/teamDashboard/components/ProviderRow/MattermostProviderRow.tsx index ddd029ca957..b81004e809c 100644 --- a/packages/client/modules/teamDashboard/components/ProviderRow/MattermostProviderRow.tsx +++ b/packages/client/modules/teamDashboard/components/ProviderRow/MattermostProviderRow.tsx @@ -92,6 +92,9 @@ const MattermostProviderRow = (props: Props) => { integrations { mattermost { isActive + activeProvider { + id + } } } } @@ -106,8 +109,11 @@ const MattermostProviderRow = (props: Props) => { const {mattermost} = integrations const [isConnectClicked, setConnectClicked] = useState(false) const isActive = mattermost?.isActive - const {togglePortal, originRef, menuPortal, menuProps} = useMenu(MenuPosition.UPPER_RIGHT) + const {togglePortal, originRef, menuPortal, menuProps, terminatePortal} = useMenu( + MenuPosition.UPPER_RIGHT + ) const isDesktop = useBreakpoint(Breakpoint.SIDEBAR_LEFT) + return ( @@ -129,6 +135,8 @@ const MattermostProviderRow = (props: Props) => { menuProps={menuProps} mutationProps={mutationProps} teamId={teamId} + providerId={mattermost!.activeProvider!.id} + terminatePortal={terminatePortal} /> )} diff --git a/packages/client/mutations/AddIntegrationProviderMutation.ts b/packages/client/mutations/AddIntegrationProviderMutation.ts new file mode 100644 index 00000000000..f074618a2e2 --- /dev/null +++ b/packages/client/mutations/AddIntegrationProviderMutation.ts @@ -0,0 +1,44 @@ +import graphql from 'babel-plugin-relay/macro' +import {commitMutation} from 'react-relay' +import {StandardMutation} from '../types/relayMutations' +import {AddIntegrationProviderMutation as TAddIntegrationProviderMutation} from '../__generated__/AddIntegrationProviderMutation.graphql' + +graphql` + fragment AddIntegrationProviderMutation_team on AddIntegrationProviderSuccess { + user { + ...MattermostProviderRow_viewer @relay(mask: false) + } + } +` + +const mutation = graphql` + mutation AddIntegrationProviderMutation( + $provider: AddIntegrationProviderInput! + $token: IntegrationTokenInput + $teamId: ID + ) { + addIntegrationProvider(provider: $provider, token: $token) { + ... on ErrorPayload { + error { + message + } + } + ...AddIntegrationProviderMutation_team @relay(mask: false) + } + } +` + +const AddIntegrationProviderMutation: StandardMutation = ( + atmosphere, + variables, + {onError, onCompleted} +) => { + return commitMutation(atmosphere, { + mutation, + variables, + onCompleted, + onError + }) +} + +export default AddIntegrationProviderMutation diff --git a/packages/client/mutations/AddIntegrationTokenMutation.ts b/packages/client/mutations/AddIntegrationTokenMutation.ts new file mode 100644 index 00000000000..3a7735f2a41 --- /dev/null +++ b/packages/client/mutations/AddIntegrationTokenMutation.ts @@ -0,0 +1,53 @@ +import graphql from 'babel-plugin-relay/macro' +import {commitMutation} from 'react-relay' +import {StandardMutation} from '../types/relayMutations' +import {AddIntegrationTokenMutation as TAddIntegrationTokenMutation} from '../__generated__/AddIntegrationTokenMutation.graphql' + +graphql` + fragment AddIntegrationTokenMutation_part on AddIntegrationTokenSuccess { + user { + ...GitLabProviderRow_viewer @relay(mask: false) + } + } +` + +const mutation = graphql` + mutation AddIntegrationTokenMutation( + $providerId: ID! + $oauthCodeOrPat: ID! + $teamId: ID! + $redirectUri: URL! + ) { + addIntegrationToken( + providerId: $providerId + oauthCodeOrPat: $oauthCodeOrPat + teamId: $teamId + redirectUri: $redirectUri + ) { + ... on ErrorPayload { + error { + message + } + } + ...AddIntegrationTokenMutation_part @relay(mask: false) + } + } +` + +const AddIntegrationTokenMutation: StandardMutation = ( + atmosphere, + variables, + {onError, onCompleted} +) => { + return commitMutation(atmosphere, { + mutation, + variables, + optimisticUpdater: () => { + const {} = variables + }, + onCompleted, + onError + }) +} + +export default AddIntegrationTokenMutation diff --git a/packages/client/mutations/AddMattermostAuthMutation.ts b/packages/client/mutations/AddMattermostAuthMutation.ts deleted file mode 100644 index 122d1ce340c..00000000000 --- a/packages/client/mutations/AddMattermostAuthMutation.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {commitMutation} from 'react-relay' -import graphql from 'babel-plugin-relay/macro' -import {StandardMutation} from '../types/relayMutations' -import {AddMattermostAuthMutation as TAddMattermostAuthMutation} from '../__generated__/AddMattermostAuthMutation.graphql' - -graphql` - fragment AddMattermostAuthMutation_team on AddMattermostAuthSuccess { - user { - ...MattermostPanel_viewer - } - } -` - -const mutation = graphql` - mutation AddMattermostAuthMutation($webhookUrl: URL!, $teamId: ID!) { - addMattermostAuth(webhookUrl: $webhookUrl, teamId: $teamId) { - ... on ErrorPayload { - error { - message - } - } - ...AddMattermostAuthMutation_team @relay(mask: false) - } - } -` - -const AddMattermostAuthMutation: StandardMutation = ( - atmosphere, - variables, - {onError, onCompleted} -) => { - return commitMutation(atmosphere, { - mutation, - variables, - onCompleted, - onError - }) -} - -export default AddMattermostAuthMutation diff --git a/packages/client/mutations/RemoveIntegrationProviderMutation.ts b/packages/client/mutations/RemoveIntegrationProviderMutation.ts new file mode 100644 index 00000000000..4fd9e372867 --- /dev/null +++ b/packages/client/mutations/RemoveIntegrationProviderMutation.ts @@ -0,0 +1,40 @@ +import graphql from 'babel-plugin-relay/macro' +import {commitMutation} from 'react-relay' +import {StandardMutation} from '../types/relayMutations' +import {RemoveIntegrationProviderMutation as TRemoveIntegrationProviderMutation} from '../__generated__/RemoveIntegrationProviderMutation.graphql' + +graphql` + fragment RemoveIntegrationProviderMutation_team on RemoveIntegrationProviderSuccess { + user { + ...MattermostProviderRow_viewer @relay(mask: false) + } + } +` + +const mutation = graphql` + mutation RemoveIntegrationProviderMutation($providerId: ID!, $teamId: ID!) { + removeIntegrationProvider(providerId: $providerId) { + ... on ErrorPayload { + error { + message + } + } + ...RemoveIntegrationProviderMutation_team @relay(mask: false) + } + } +` + +const RemoveIntegrationProviderMutation: StandardMutation = ( + atmosphere, + variables, + {onError, onCompleted} +) => { + return commitMutation(atmosphere, { + mutation, + variables, + onCompleted, + onError + }) +} + +export default RemoveIntegrationProviderMutation diff --git a/packages/client/mutations/RemoveIntegrationTokenMutation.ts b/packages/client/mutations/RemoveIntegrationTokenMutation.ts new file mode 100644 index 00000000000..133a874dae5 --- /dev/null +++ b/packages/client/mutations/RemoveIntegrationTokenMutation.ts @@ -0,0 +1,40 @@ +import graphql from 'babel-plugin-relay/macro' +import {commitMutation} from 'react-relay' +import {StandardMutation} from '../types/relayMutations' +import {RemoveIntegrationTokenMutation as TRemoveIntegrationTokenMutation} from '../__generated__/RemoveIntegrationTokenMutation.graphql' + +graphql` + fragment RemoveIntegrationTokenMutation_team on RemoveIntegrationTokenSuccess { + user { + ...GitLabProviderRow_viewer @relay(mask: false) + } + } +` + +const mutation = graphql` + mutation RemoveIntegrationTokenMutation($providerId: ID!, $teamId: ID!) { + removeIntegrationToken(providerId: $providerId, teamId: $teamId) { + ... on ErrorPayload { + error { + message + } + } + ...RemoveIntegrationTokenMutation_team @relay(mask: false) + } + } +` + +const RemoveIntegrationTokenMutation: StandardMutation = ( + atmosphere, + variables, + {onError, onCompleted} +) => { + return commitMutation(atmosphere, { + mutation, + variables, + onCompleted, + onError + }) +} + +export default RemoveIntegrationTokenMutation diff --git a/packages/client/mutations/RemoveMattermostAuthMutation.ts b/packages/client/mutations/RemoveMattermostAuthMutation.ts deleted file mode 100644 index 427b4b6937d..00000000000 --- a/packages/client/mutations/RemoveMattermostAuthMutation.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {commitMutation} from 'react-relay' -import graphql from 'babel-plugin-relay/macro' -import {StandardMutation} from '../types/relayMutations' -import {RemoveMattermostAuthMutation as TRemoveMattermostAuthMutation} from '../__generated__/RemoveMattermostAuthMutation.graphql' - -graphql` - fragment RemoveMattermostAuthMutation_team on RemoveMattermostAuthSuccess { - user { - ...MattermostProviderRow_viewer @relay(mask: false) - } - } -` - -const mutation = graphql` - mutation RemoveMattermostAuthMutation($teamId: ID!) { - removeMattermostAuth(teamId: $teamId) { - ... on ErrorPayload { - error { - message - } - } - ...RemoveMattermostAuthMutation_team @relay(mask: false) - } - } -` - -const RemoveMattermostAuthMutation: StandardMutation = ( - atmosphere, - variables, - {onError, onCompleted} -) => { - return commitMutation(atmosphere, { - mutation, - variables, - onCompleted, - onError - }) -} - -export default RemoveMattermostAuthMutation diff --git a/packages/client/mutations/UpdateIntegrationProviderMutation.ts b/packages/client/mutations/UpdateIntegrationProviderMutation.ts new file mode 100644 index 00000000000..4201295279f --- /dev/null +++ b/packages/client/mutations/UpdateIntegrationProviderMutation.ts @@ -0,0 +1,43 @@ +import graphql from 'babel-plugin-relay/macro' +import {commitMutation} from 'react-relay' +import {StandardMutation} from '../types/relayMutations' +import {UpdateIntegrationProviderMutation as TUpdateIntegrationProviderMutation} from '../__generated__/UpdateIntegrationProviderMutation.graphql' + +graphql` + fragment UpdateIntegrationProviderMutation_part on UpdateIntegrationProviderSuccess { + user { + ...MattermostPanel_viewer + } + } +` + +const mutation = graphql` + mutation UpdateIntegrationProviderMutation( + $provider: UpdateIntegrationProviderInput! + $teamId: ID! + ) { + updateIntegrationProvider(provider: $provider) { + ... on ErrorPayload { + error { + message + } + } + ...UpdateIntegrationProviderMutation_part @relay(mask: false) + } + } +` + +const UpdateIntegrationProviderMutation: StandardMutation = ( + atmosphere, + variables, + {onError, onCompleted} +) => { + return commitMutation(atmosphere, { + mutation, + variables, + onCompleted, + onError + }) +} + +export default UpdateIntegrationProviderMutation diff --git a/packages/client/shared/gqlIds/GitLabIntegrationId.ts b/packages/client/shared/gqlIds/GitLabIntegrationId.ts new file mode 100644 index 00000000000..bfaa0fa516a --- /dev/null +++ b/packages/client/shared/gqlIds/GitLabIntegrationId.ts @@ -0,0 +1,9 @@ +const GitLabIntegrationId = { + join: (teamId: string, userId: string) => `gli:${teamId}:${userId}`, + split: (id: string) => { + const [, teamId, userId] = id.split(':') + return {teamId, userId} + } +} + +export default GitLabIntegrationId diff --git a/packages/client/shared/gqlIds/IntegrationProviderId.ts b/packages/client/shared/gqlIds/IntegrationProviderId.ts new file mode 100644 index 00000000000..d93ca97824c --- /dev/null +++ b/packages/client/shared/gqlIds/IntegrationProviderId.ts @@ -0,0 +1,8 @@ +export type IntegrationProviderIdT = string + +const IntegrationProviderId = { + join: (providerId: number): IntegrationProviderIdT => `integrationProvider:${providerId}`, + split: (id: IntegrationProviderIdT) => parseInt(id.split(':')[1]) +} + +export default IntegrationProviderId diff --git a/packages/client/styles/theme/images/graphics/gitlab-icon-rgb.svg b/packages/client/styles/theme/images/graphics/gitlab-icon-rgb.svg new file mode 100644 index 00000000000..e0dc375bd9b --- /dev/null +++ b/packages/client/styles/theme/images/graphics/gitlab-icon-rgb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/client/subscriptions/NotificationSubscription.ts b/packages/client/subscriptions/NotificationSubscription.ts index 42e4c335e45..e7fc216c2f1 100644 --- a/packages/client/subscriptions/NotificationSubscription.ts +++ b/packages/client/subscriptions/NotificationSubscription.ts @@ -107,6 +107,7 @@ const subscription = graphql` user { id featureFlags { + gitlab spotlight } } diff --git a/packages/client/types/ClientActionVarsT.ts b/packages/client/types/ClientActionVarsT.ts new file mode 100644 index 00000000000..2b0acdf495c --- /dev/null +++ b/packages/client/types/ClientActionVarsT.ts @@ -0,0 +1,12 @@ +interface ClientActionVarsT { + atlassian: string | undefined + github: string | undefined + google: string | undefined + segment: string | undefined + sentry: string | undefined + slack: string | undefined + stripe: string | undefined + prblIn: string | undefined +} + +export default ClientActionVarsT diff --git a/packages/client/types/constEnums.ts b/packages/client/types/constEnums.ts index f37a90a2b8d..fccd1db569e 100644 --- a/packages/client/types/constEnums.ts +++ b/packages/client/types/constEnums.ts @@ -246,9 +246,9 @@ export const enum Pricing { export const enum Providers { ATLASSIAN_NAME = 'Atlassian', - ATLASSIAN_DESC = 'Create Jira issues from Parabol', + ATLASSIAN_DESC = 'Use Jira Cloud Issues from within Parabol', GITHUB_NAME = 'GitHub', - GITHUB_DESC = 'Create issues from Parabol', + GITHUB_DESC = 'Use GitHub Issues from within Parabol', GITHUB_SCOPE = 'admin:org_hook,read:org,repo,user,write:repo_hook', MATTERMOST_NAME = 'Mattermost', MATTERMOST_DESC = 'Push notifications to Mattermost', diff --git a/packages/client/types/graphql.ts b/packages/client/types/graphql.ts index 1c0715a98e7..5ae123aaccc 100644 --- a/packages/client/types/graphql.ts +++ b/packages/client/types/graphql.ts @@ -49583,6 +49583,11 @@ export interface ITeamMemberIntegrations { */ github: IGitHubIntegration | null; + /** + * All things associated with a GitLab integration for a team member + */ + gitlab: IGitLabIntegration | null; + /** * All things associated with a Mattermost integration for a team member */ @@ -49984,6 +49989,207 @@ export interface IGitHubSearchQuery { lastUsedAt: any; } +/** + * Gitlab integration data for a given user + */ +export interface IGitLabIntegration { + __typename: 'GitLabIntegration'; + + /** + * composite key + */ + id: string; + + /** + * The timestamp the token was updated at + */ + updatedAt: any; + + /** + * The timestamp the provider was created + */ + createdAt: any; + + /** + * *The team that the token is linked to + */ + teamId: string; + + /** + * The user that the access token is attached to + */ + userId: string; + + /** + * true if an access token exists, else false + */ + isActive: boolean; + + /** + * The active Integration Provider details to be used with token + */ + tokenMetadata: IOAuth2TokenMetadata | null; + + /** + * The active Integration Provider details to be used with token + */ + activeProvider: IIntegrationProvider | null; + + /** + * A list of available Integration Providers + */ + availableProviders: Array; + api: IXGitLabApi | null; +} + +/** + * OAuth2 token metadata for an Integration Provider + */ +export interface IOAuth2TokenMetadata { + __typename: 'OAuth2TokenMetadata'; + + /** + * The access token + */ + accessToken: string | null; + + /** + * The refresh token + */ + refreshToken: string | null; + + /** + * The scopes this token is valid for + */ + scopes: Array; +} + +/** + * An authentication provider configuration + */ +export interface IIntegrationProvider { + __typename: 'IntegrationProvider'; + + /** + * The provider's unique identifier + */ + id: string; + + /** + * The org that the access token is attached to + */ + orgId: string; + + /** + * The team that the token is linked to + */ + teamId: string; + + /** + * The timestamp the provider was created + */ + createdAt: any; + + /** + * The timestamp the token was updated at + */ + updatedAt: any; + + /** + * The service this provider is associated with + */ + provider: IntegrationProvidersEnum; + + /** + * The kind of token used by this provider + */ + type: IntegrationProviderTypesEnum; + + /** + * The scope this provider configuration was created at (globally, org-wide, or by the team) + */ + scope: IntegrationProviderScopesEnum; + + /** + * true if the provider configuration should be used + */ + isActive: boolean; + + /** + * The name of the provider, suitable for display on a user interface + */ + name: string; + + /** + * The metadata associated with the provider, depending on the provider token type (OAuth2 or WebHook), different metadata will be provided + */ + providerMetadata: ProviderMetadata; +} + +/** + * The type of Integration Provider service + */ +export const enum IntegrationProvidersEnum { + gitlab = 'gitlab', + mattermost = 'mattermost', +} + +/** + * The kind of token provided by the service + */ +export const enum IntegrationProviderTypesEnum { + oauth2 = 'oauth2', + pat = 'pat', + webhook = 'webhook', +} + +/** + * The scope this provider was created on (globally, org-wide, or on the team) + */ +export const enum IntegrationProviderScopesEnum { + global = 'global', + org = 'org', + team = 'team', +} + +export type ProviderMetadata = + | IOAuth2ProviderMetadata + | IWebHookProviderMetadata; + +/** + * OAuth2 metadata for an Integration Provider, excluding the client secret + */ +export interface IOAuth2ProviderMetadata { + __typename: 'OAuth2ProviderMetadata'; + + /** + * The base URL of the OAuth2 server + */ + serverBaseUrl: any; + + /** + * The OAuth2 client id + */ + clientId: string; + + /** + * The OAuth2 scopes + */ + scopes: Array; +} + +/** + * WebHook metadata for an Integration Provider + */ +export interface IWebHookProviderMetadata { + __typename: 'WebHookProviderMetadata'; + + /** + * The webhook URL + */ + webhookUrl: any; +} + /** * OAuth token for a team member */ @@ -49996,9 +50202,9 @@ export interface IMattermostIntegration { isActive: boolean; /** - * the Mattermost server to integrate against + * The active Integration Provider details to be used to access Mattermost */ - webhookUrl: any; + activeProvider: IIntegrationProvider | null; /** * The team that the token is linked to @@ -51309,6 +51515,11 @@ export interface IUserFeatureFlags { * true if standups is allowed */ standups: boolean; + + /** + * true if gitlab is allowed + */ + gitlab: boolean; } /** @@ -55201,7 +55412,6 @@ export interface IMutation { * Add a comment to a discussion */ addComment: AddCommentPayload; - addMattermostAuth: AddMattermostAuthPayload; /** * Add a new poker template with a default dimension created @@ -55551,11 +55761,6 @@ export interface IMutation { */ removePokerTemplateScaleValue: IRemovePokerTemplateScaleValuePayload; - /** - * Disconnect a team member from Slack - */ - removeMattermostAuth: RemoveMattermostAuthPayload; - /** * Remove a reflection */ @@ -55806,6 +56011,27 @@ export interface IMutation { */ updateGitHubDimensionField: UpdateGitHubDimensionFieldPayload; createPoll: CreatePollPayload; + + /** + * Add integration token material to the team, supported by the GitLab integration + */ + addIntegrationToken: AddIntegrationTokenPayload; + + /** + * Adds a new Integration Provider configuration + */ + addIntegrationProvider: AddIntegrationProviderPayload; + + /** + * Update the Integration Provider settings + */ + updateIntegrationProvider: UpdateIntegrationProviderPayload; + + /** + * Remove an Integration Provider, and any associated tokens + */ + removeIntegrationProvider: RemoveIntegrationProviderPayload; + removeIntegrationToken: RemoveIntegrationTokenPayload; } export interface IAcceptTeamInvitationOnMutationArguments { @@ -55839,18 +56065,6 @@ export interface IAddCommentOnMutationArguments { comment: IAddCommentInput; } -export interface IAddMattermostAuthOnMutationArguments { - /** - * the url of the Mattermost server the token is good for - */ - webhookUrl: any; - - /** - * the teamId, when combined with the viewer's userId, used to upsert the credentials - */ - teamId: string; -} - export interface IAddPokerTemplateOnMutationArguments { parentTemplateId?: string | null; teamId: string; @@ -56472,13 +56686,6 @@ export interface IRemovePokerTemplateScaleValueOnMutationArguments { label: string; } -export interface IRemoveMattermostAuthOnMutationArguments { - /** - * the teamId to disconnect from Mattermost - */ - teamId: string; -} - export interface IRemoveReflectionOnMutationArguments { reflectionId: string; } @@ -56990,6 +57197,51 @@ export interface ICreatePollOnMutationArguments { newPoll: ICreatePollInput; } +export interface IAddIntegrationTokenOnMutationArguments { + providerId: string; + oauthCodeOrPat: string; + teamId: string; + redirectUri: any; +} + +export interface IAddIntegrationProviderOnMutationArguments { + /** + * The new Integration Provider + */ + provider: IAddIntegrationProviderInput; + + /** + * An optional token to add along with the new provider + */ + token?: IIntegrationTokenInput | null; +} + +export interface IUpdateIntegrationProviderOnMutationArguments { + /** + * The new Integration Provider + */ + provider: IUpdateIntegrationProviderInput; +} + +export interface IRemoveIntegrationProviderOnMutationArguments { + /** + * Id of the Integration Provider to remove + */ + providerId: string; +} + +export interface IRemoveIntegrationTokenOnMutationArguments { + /** + * The Integration Provider id related to the token + */ + providerId: string; + + /** + * The team id related to the token + */ + teamId: string; +} + export interface IAcceptTeamInvitationPayload { __typename: 'AcceptTeamInvitationPayload'; error: IStandardMutationError | null; @@ -57125,27 +57377,6 @@ export interface IAddCommentInput { threadParentId?: string | null; } -/** - * Return object for AddMattermostAuthPayload - */ -export type AddMattermostAuthPayload = - | IErrorPayload - | IAddMattermostAuthSuccess; - -export interface IAddMattermostAuthSuccess { - __typename: 'AddMattermostAuthSuccess'; - - /** - * The newly created mattermost integration object - */ - mattermostIntegration: IMattermostIntegration; - - /** - * The user who updated mattermost integration object - */ - user: IUser; -} - export interface IAddPokerTemplatePayload { __typename: 'AddPokerTemplatePayload'; error: IStandardMutationError | null; @@ -57257,6 +57488,7 @@ export interface IAddFeatureFlagPayload { export const enum UserFlagEnum { spotlight = 'spotlight', standups = 'standups', + gitlab = 'gitlab', } export interface IAddGitHubAuthPayload { @@ -58511,27 +58743,6 @@ export interface IRemovePokerTemplateScaleValuePayload { scale: ITemplateScale | null; } -/** - * Return object for RemoveMattermostAuthPayload - */ -export type RemoveMattermostAuthPayload = - | IErrorPayload - | IRemoveMattermostAuthSuccess; - -export interface IRemoveMattermostAuthSuccess { - __typename: 'RemoveMattermostAuthSuccess'; - - /** - * The team with updated mattermost auth - */ - teamId: string; - - /** - * The user with updated mattermost auth - */ - user: IUser; -} - export interface IRemoveReflectionPayload { __typename: 'RemoveReflectionPayload'; error: IStandardMutationError | null; @@ -59580,24 +59791,274 @@ export interface IPollOptionInput { title: string; } -export interface ISubscription { - __typename: 'Subscription'; - meetingSubscription: MeetingSubscriptionPayload; - notificationSubscription: NotificationSubscriptionPayload; - organizationSubscription: OrganizationSubscriptionPayload; - taskSubscription: TaskSubscriptionPayload; - teamSubscription: TeamSubscriptionPayload; -} +/** + * Return object for AddIntegrationTokenPayload + */ +export type AddIntegrationTokenPayload = + | IErrorPayload + | IAddIntegrationTokenSuccess; -export interface IMeetingSubscriptionOnSubscriptionArguments { - meetingId: string; +export interface IAddIntegrationTokenSuccess { + __typename: 'AddIntegrationTokenSuccess'; + + /** + * The team member with the updated auth + */ + teamMember: ITeamMember | null; + + /** + * The user who updated IntegrationToken object + */ + user: IUser | null; } -export type MeetingSubscriptionPayload = - | IAddCommentSuccess - | ICreatePollSuccess - | IAddReactjiToReflectionSuccess - | IAddReactjiToReactableSuccess +/** + * Return object for AddIntegrationProviderPayload + */ +export type AddIntegrationProviderPayload = + | IErrorPayload + | IAddIntegrationProviderSuccess; + +export interface IAddIntegrationProviderSuccess { + __typename: 'AddIntegrationProviderSuccess'; + + /** + * The team member with the updated Integration Provider + */ + teamMember: ITeamMember; + + /** + * The user who updated Integration Provider object + */ + user: IUser; +} + +/** + * An Integration Provider configuration + */ +export interface IAddIntegrationProviderInput { + /** + * The org that the access token is attached to + */ + orgId: string; + + /** + * The team that the token is linked to + */ + teamId: string; + + /** + * The service this provider is associated with + */ + provider?: IntegrationProvidersEnum | null; + + /** + * The kind of token used by this provider + */ + type?: IntegrationProviderTypesEnum | null; + + /** + * The scope this provider configuration was created at (globally, org-wide, or by the team) + */ + scope?: IntegrationProviderScopesEnum | null; + + /** + * The name of the provider, suitable for display on a user interface + */ + name: string; + + /** + * Webhook provider metadata, has to be non-null if token type is webhook, refactor once we get https://github.com/graphql/graphql-spec/pull/825 + */ + webhookProviderMetadataInput?: IWebhookProviderMetadataInput | null; + + /** + * OAuth2 provider metadata, has to be non-null if token type is OAuth2, refactor once we get https://github.com/graphql/graphql-spec/pull/825 + */ + oAuth2ProviderMetadataInput?: IOAuth2ProviderMetadataInput | null; +} + +/** + * Webhook provider metadata + */ +export interface IWebhookProviderMetadataInput { + /** + * Webhook URL to be used by the provider + */ + webhookUrl: any; +} + +/** + * OAuth2 provider metadata + */ +export interface IOAuth2ProviderMetadataInput { + /** + * A list of scope strings that should be requested from the provider + */ + scopes?: Array | null; + + /** + * The base URL used to access the provider + */ + serverBaseUrl: any; + + /** + * The client id to give to the provider + */ + clientId: string; + + /** + * The client id to give to the provider + */ + clientSecret: string; +} + +/** + * An Integration Provider configuration + */ +export interface IIntegrationTokenInput { + /** + * The OAuth2 code to resolve to an access token, or the personal access token + */ + oauthCodeOrPat?: string | null; + + /** + * The redirect uri used to resolve to an OAuth2 access token + */ + redirectUri?: any | null; +} + +/** + * Return object for UpdateIntegrationProviderPayload + */ +export type UpdateIntegrationProviderPayload = + | IErrorPayload + | IUpdateIntegrationProviderSuccess; + +export interface IUpdateIntegrationProviderSuccess { + __typename: 'UpdateIntegrationProviderSuccess'; + + /** + * The team member with the updated auth + */ + teamMember: ITeamMember; + + /** + * The user who updated IntegrationToken object + */ + user: IUser; +} + +/** + * An Integration Provider configuration + */ +export interface IUpdateIntegrationProviderInput { + /** + * The the id of the Integration Provider to update + */ + id: string; + + /** + * The service this provider is associated with + */ + provider?: IntegrationProvidersEnum | null; + + /** + * The kind of token used by this provider + */ + type?: IntegrationProviderTypesEnum | null; + + /** + * The scope this provider configuration was created at (globally, org-wide, or by the team) + */ + scope?: IntegrationProviderScopesEnum | null; + + /** + * The name of the provider, suitable for display on a user interface + */ + name: string; + + /** + * The org that the access token is attached to + */ + orgId: string; + + /** + * The team that the token is linked to + */ + teamId: string; + + /** + * Webhook provider metadata, has to be non-null if token type is webhook, refactor once we get https://github.com/graphql/graphql-spec/pull/825 + */ + webhookProviderMetadataInput?: IWebhookProviderMetadataInput | null; + + /** + * OAuth2 provider metadata, has to be non-null if token type is OAuth2, refactor once we get https://github.com/graphql/graphql-spec/pull/825 + */ + oAuth2ProviderMetadataInput?: IOAuth2ProviderMetadataInput | null; +} + +/** + * Return object for RemoveIntegrationProviderPayload + */ +export type RemoveIntegrationProviderPayload = + | IErrorPayload + | IRemoveIntegrationProviderSuccess; + +export interface IRemoveIntegrationProviderSuccess { + __typename: 'RemoveIntegrationProviderSuccess'; + + /** + * The team member with the updated auth + */ + teamMember: ITeamMember; + + /** + * The user who updated IntegrationToken object + */ + user: IUser; +} + +/** + * Return object for RemoveIntegrationTokenPayload + */ +export type RemoveIntegrationTokenPayload = + | IErrorPayload + | IRemoveIntegrationTokenSuccess; + +export interface IRemoveIntegrationTokenSuccess { + __typename: 'RemoveIntegrationTokenSuccess'; + + /** + * The team member with the updated auth + */ + teamMember: ITeamMember; + + /** + * The user who updated IntegrationToken object + */ + user: IUser; +} + +export interface ISubscription { + __typename: 'Subscription'; + meetingSubscription: MeetingSubscriptionPayload; + notificationSubscription: NotificationSubscriptionPayload; + organizationSubscription: OrganizationSubscriptionPayload; + taskSubscription: TaskSubscriptionPayload; + teamSubscription: TeamSubscriptionPayload; +} + +export interface IMeetingSubscriptionOnSubscriptionArguments { + meetingId: string; +} + +export type MeetingSubscriptionPayload = + | IAddCommentSuccess + | ICreatePollSuccess + | IAddReactjiToReflectionSuccess + | IAddReactjiToReactableSuccess | IAutoGroupReflectionsPayload | ICreateReflectionPayload | IDeleteCommentSuccess @@ -59868,7 +60329,7 @@ export type TeamSubscriptionPayload = | IAddAgendaItemPayload | IAddAtlassianAuthPayload | IAddGitHubAuthPayload - | IAddMattermostAuthSuccess + | IAddIntegrationProviderSuccess | IAddSlackAuthPayload | IAddTeamPayload | IArchiveTeamPayload @@ -59907,7 +60368,6 @@ export type TeamSubscriptionPayload = | IReflectTemplatePromptUpdateGroupColorPayload | IRemoveAtlassianAuthPayload | IRemoveGitHubAuthPayload - | IRemoveMattermostAuthSuccess | IRemoveSlackAuthPayload | IRemoveReflectTemplatePayload | IRemovePokerTemplatePayload @@ -59966,4 +60426,46348 @@ export interface IXGitHubApi { mutation: IXGitHubMutation | null; } +/** + * Represents the access level of a relationship between a User and object that it is related to + */ +export interface IXGitLabAccessLevel { + __typename: '_xGitLabAccessLevel'; + + /** + * Integer representation of access level. + */ + integerValue: number | null; + + /** + * String representation of access level. + */ + stringValue: XGitLabAccessLevelEnum | null; +} + +/** + * Access level to a resource + */ +export const enum XGitLabAccessLevelEnum { + /** + * No access. + */ + NO_ACCESS = 'NO_ACCESS', + + /** + * Minimal access. + */ + MINIMAL_ACCESS = 'MINIMAL_ACCESS', + + /** + * Guest access. + */ + GUEST = 'GUEST', + + /** + * Reporter access. + */ + REPORTER = 'REPORTER', + + /** + * Developer access. + */ + DEVELOPER = 'DEVELOPER', + + /** + * Maintainer access. + */ + MAINTAINER = 'MAINTAINER', + + /** + * Owner access. + */ + OWNER = 'OWNER', +} + +/** + * Autogenerated input type of AddProjectToSecurityDashboard + */ +export interface IXGitLabAddProjectToSecurityDashboardInput { + /** + * ID of the project to be added to Instance Security Dashboard. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AddProjectToSecurityDashboard + */ +export interface IXGitLabAddProjectToSecurityDashboardPayload { + __typename: '_xGitLabAddProjectToSecurityDashboardPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Project that was added to the Instance Security Dashboard. + */ + project: IXGitLabProject | null; +} + +/** + * Autogenerated input type of AdminSidekiqQueuesDeleteJobs + */ +export interface IXGitLabAdminSidekiqQueuesDeleteJobsInput { + /** + * Delete jobs matching user in the context metadata. + */ + user?: string | null; + + /** + * Delete jobs matching project in the context metadata. + */ + project?: string | null; + + /** + * Delete jobs matching root_namespace in the context metadata. + */ + rootNamespace?: string | null; + + /** + * Delete jobs matching subscription_plan in the context metadata. + */ + subscriptionPlan?: string | null; + + /** + * Delete jobs matching caller_id in the context metadata. + */ + callerId?: string | null; + + /** + * Delete jobs matching remote_ip in the context metadata. + */ + remoteIp?: string | null; + + /** + * Delete jobs matching related_class in the context metadata. + */ + relatedClass?: string | null; + + /** + * Delete jobs matching feature_category in the context metadata. + */ + featureCategory?: string | null; + + /** + * Delete jobs matching client_id in the context metadata. + */ + clientId?: string | null; + + /** + * Delete jobs with the given worker class. + */ + workerClass?: string | null; + + /** + * Name of the queue to delete jobs from. + */ + queueName: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AdminSidekiqQueuesDeleteJobs + */ +export interface IXGitLabAdminSidekiqQueuesDeleteJobsPayload { + __typename: '_xGitLabAdminSidekiqQueuesDeleteJobsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Information about the status of the deletion request. + */ + result: IXGitLabDeleteJobsResponse | null; +} + +/** + * Configuration details for an Agent + */ +export interface IXGitLabAgentConfiguration { + __typename: '_xGitLabAgentConfiguration'; + + /** + * Name of the agent. + */ + agentName: string | null; +} + +/** + * The connection type for AgentConfiguration. + */ +export interface IXGitLabAgentConfigurationConnection { + __typename: '_xGitLabAgentConfigurationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabAgentConfigurationEdge { + __typename: '_xGitLabAgentConfigurationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabAgentConfiguration | null; +} + +/** + * Information about a connected Agent + */ +export interface IXGitLabAgentMetadata { + __typename: '_xGitLabAgentMetadata'; + + /** + * Agent version commit. + */ + commit: string | null; + + /** + * Name of the pod running the Agent. + */ + podName: string | null; + + /** + * Namespace of the pod running the Agent. + */ + podNamespace: string | null; + + /** + * Agent version tag. + */ + version: string | null; +} + +/** + * Describes an alert from the project's Alert Management + */ +export interface IXGitLabAlertManagementAlert { + __typename: '_xGitLabAlertManagementAlert'; + + /** + * Assignees of the alert. + */ + assignees: IXGitLabUserCoreConnection | null; + + /** + * Timestamp the alert was created. + */ + createdAt: any | null; + + /** + * Description of the alert. + */ + description: string | null; + + /** + * Alert details. + */ + details: any | null; + + /** + * URL of the alert detail page. + */ + detailsUrl: string; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Timestamp the alert ended. + */ + endedAt: any | null; + + /** + * Environment for the alert. + */ + environment: IXGitLabEnvironment | null; + + /** + * Number of events of this alert. + */ + eventCount: number | null; + + /** + * List of hosts the alert came from. + */ + hosts: Array | null; + + /** + * Internal ID of the alert. + */ + iid: string; + + /** + * Issue attached to the alert. + */ + issue: IXGitLabIssue | null; + + /** + * Internal ID of the GitLab issue attached to the alert. Deprecated in 13.10: Use issue field. + * @deprecated "Use issue field. Deprecated in 13.10." + */ + issueIid: string | null; + + /** + * URL for metrics embed for the alert. + */ + metricsDashboardUrl: string | null; + + /** + * Monitoring tool the alert came from. + */ + monitoringTool: string | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Alert condition for Prometheus. + */ + prometheusAlert: IXGitLabPrometheusAlert | null; + + /** + * Runbook for the alert as defined in alert details. + */ + runbook: string | null; + + /** + * Service the alert came from. + */ + service: string | null; + + /** + * Severity of the alert. + */ + severity: XGitLabAlertManagementSeverity | null; + + /** + * Timestamp the alert was raised. + */ + startedAt: any | null; + + /** + * Status of the alert. + */ + status: XGitLabAlertManagementStatus | null; + + /** + * Title of the alert. + */ + title: string | null; + + /** + * To-do items of the current user for the alert. + */ + todos: IXGitLabTodoConnection | null; + + /** + * Timestamp the alert was last updated. + */ + updatedAt: any | null; +} + +export interface IAssigneesOnXGitLabAlertManagementAlertArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDiscussionsOnXGitLabAlertManagementAlertArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabAlertManagementAlertArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITodosOnXGitLabAlertManagementAlertArguments { + /** + * Action to be filtered. + */ + action?: Array | null; + + /** + * ID of an author. + */ + authorId?: Array | null; + + /** + * ID of a project. + */ + projectId?: Array | null; + + /** + * ID of a group. + */ + groupId?: Array | null; + + /** + * State of the todo. + */ + state?: Array | null; + + /** + * Type of the todo. + */ + type?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for AlertManagementAlert. + */ +export interface IXGitLabAlertManagementAlertConnection { + __typename: '_xGitLabAlertManagementAlertConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabAlertManagementAlertEdge { + __typename: '_xGitLabAlertManagementAlertEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabAlertManagementAlert | null; +} + +/** + * Values for sorting alerts + */ +export const enum XGitLabAlertManagementAlertSort { + /** + * Updated at descending order. + * @deprecated "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5." + */ + updated_desc = 'updated_desc', + + /** + * Updated at ascending order. + * @deprecated "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5." + */ + updated_asc = 'updated_asc', + + /** + * Created at descending order. + * @deprecated "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5." + */ + created_desc = 'created_desc', + + /** + * Created at ascending order. + * @deprecated "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5." + */ + created_asc = 'created_asc', + + /** + * Updated at descending order. + */ + UPDATED_DESC = 'UPDATED_DESC', + + /** + * Updated at ascending order. + */ + UPDATED_ASC = 'UPDATED_ASC', + + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Start time by ascending order. + */ + STARTED_AT_ASC = 'STARTED_AT_ASC', + + /** + * Start time by descending order. + */ + STARTED_AT_DESC = 'STARTED_AT_DESC', + + /** + * End time by ascending order. + */ + ENDED_AT_ASC = 'ENDED_AT_ASC', + + /** + * End time by descending order. + */ + ENDED_AT_DESC = 'ENDED_AT_DESC', + + /** + * Created time by ascending order. + */ + CREATED_TIME_ASC = 'CREATED_TIME_ASC', + + /** + * Created time by descending order. + */ + CREATED_TIME_DESC = 'CREATED_TIME_DESC', + + /** + * Created time by ascending order. + */ + UPDATED_TIME_ASC = 'UPDATED_TIME_ASC', + + /** + * Created time by descending order. + */ + UPDATED_TIME_DESC = 'UPDATED_TIME_DESC', + + /** + * Events count by ascending order. + */ + EVENT_COUNT_ASC = 'EVENT_COUNT_ASC', + + /** + * Events count by descending order. + */ + EVENT_COUNT_DESC = 'EVENT_COUNT_DESC', + + /** + * Severity from less critical to more critical. + */ + SEVERITY_ASC = 'SEVERITY_ASC', + + /** + * Severity from more critical to less critical. + */ + SEVERITY_DESC = 'SEVERITY_DESC', + + /** + * Status by order: `Ignored > Resolved > Acknowledged > Triggered`. + */ + STATUS_ASC = 'STATUS_ASC', + + /** + * Status by order: `Triggered > Acknowledged > Resolved > Ignored`. + */ + STATUS_DESC = 'STATUS_DESC', +} + +/** + * Represents total number of alerts for the represented categories + */ +export interface IXGitLabAlertManagementAlertStatusCountsType { + __typename: '_xGitLabAlertManagementAlertStatusCountsType'; + + /** + * Number of alerts with status ACKNOWLEDGED for the project + */ + acknowledged: number | null; + + /** + * Total number of alerts for the project. + */ + all: number | null; + + /** + * Number of alerts with status IGNORED for the project + */ + ignored: number | null; + + /** + * Number of alerts with status TRIGGERED or ACKNOWLEDGED for the project. + */ + open: number | null; + + /** + * Number of alerts with status RESOLVED for the project + */ + resolved: number | null; + + /** + * Number of alerts with status TRIGGERED for the project + */ + triggered: number | null; +} + +/** + * Filters the alerts based on given domain + */ +export const enum XGitLabAlertManagementDomainFilter { + /** + * Alerts for operations domain. + */ + operations = 'operations', + + /** + * Alerts for threat monitoring domain. + */ + threat_monitoring = 'threat_monitoring', +} + +/** + * An endpoint and credentials used to accept alerts for a project + */ +export interface IXGitLabAlertManagementHttpIntegration { + __typename: '_xGitLabAlertManagementHttpIntegration'; + + /** + * Whether the endpoint is currently accepting alerts. + */ + active: boolean | null; + + /** + * URL at which Prometheus metrics can be queried to populate the metrics dashboard. + */ + apiUrl: string | null; + + /** + * ID of the integration. + */ + id: string; + + /** + * Name of the integration. + */ + name: string | null; + + /** + * Extract alert fields from payload example for custom mapping. + */ + payloadAlertFields: Array | null; + + /** + * The custom mapping of GitLab alert attributes to fields from the payload_example. + */ + payloadAttributeMappings: Array | null; + + /** + * Example of an alert payload. + */ + payloadExample: any | null; + + /** + * Token used to authenticate alert notification requests. + */ + token: string | null; + + /** + * Type of integration. + */ + type: XGitLabAlertManagementIntegrationType; + + /** + * Endpoint which accepts alert notifications. + */ + url: string | null; +} + +/** + * The connection type for AlertManagementHttpIntegration. + */ +export interface IXGitLabAlertManagementHttpIntegrationConnection { + __typename: '_xGitLabAlertManagementHttpIntegrationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabAlertManagementHttpIntegrationEdge { + __typename: '_xGitLabAlertManagementHttpIntegrationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabAlertManagementHttpIntegration | null; +} + +export type _xGitLabAlertManagementIntegration = + | IXGitLabAlertManagementHttpIntegration + | IXGitLabAlertManagementPrometheusIntegration; + +export interface IXGitLabAlertManagementIntegration { + __typename: '_xGitLabAlertManagementIntegration'; + + /** + * Whether the endpoint is currently accepting alerts. + */ + active: boolean | null; + + /** + * URL at which Prometheus metrics can be queried to populate the metrics dashboard. + */ + apiUrl: string | null; + + /** + * ID of the integration. + */ + id: string; + + /** + * Name of the integration. + */ + name: string | null; + + /** + * Token used to authenticate alert notification requests. + */ + token: string | null; + + /** + * Type of integration. + */ + type: XGitLabAlertManagementIntegrationType; + + /** + * Endpoint which accepts alert notifications. + */ + url: string | null; +} + +/** + * The connection type for AlertManagementIntegration. + */ +export interface IXGitLabAlertManagementIntegrationConnection { + __typename: '_xGitLabAlertManagementIntegrationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array<_xGitLabAlertManagementIntegration | null> | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabAlertManagementIntegrationEdge { + __typename: '_xGitLabAlertManagementIntegrationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: _xGitLabAlertManagementIntegration | null; +} + +/** + * Values of types of integrations + */ +export const enum XGitLabAlertManagementIntegrationType { + /** + * Prometheus integration. + */ + PROMETHEUS = 'PROMETHEUS', + + /** + * Integration with any monitoring tool. + */ + HTTP = 'HTTP', +} + +/** + * Parsed field from an alert used for custom mappings + */ +export interface IXGitLabAlertManagementPayloadAlertField { + __typename: '_xGitLabAlertManagementPayloadAlertField'; + + /** + * Human-readable label of the payload path. + */ + label: string | null; + + /** + * Path to value inside payload JSON. + */ + path: Array | null; + + /** + * Type of the parsed value. + */ + type: XGitLabAlertManagementPayloadAlertFieldType | null; +} + +/** + * Field that are available while modifying the custom mapping attributes for an HTTP integration + */ +export interface IXGitLabAlertManagementPayloadAlertFieldInput { + /** + * GitLab alert field name. + */ + fieldName: XGitLabAlertManagementPayloadAlertFieldName; + + /** + * Path to value inside payload JSON. + */ + path: Array; + + /** + * Human-readable label of the payload path. + */ + label?: string | null; + + /** + * Type of the parsed value. + */ + type: XGitLabAlertManagementPayloadAlertFieldType; +} + +/** + * Values for alert field names used in the custom mapping + */ +export const enum XGitLabAlertManagementPayloadAlertFieldName { + /** + * The title of the incident. + */ + TITLE = 'TITLE', + + /** + * A high-level summary of the problem. + */ + DESCRIPTION = 'DESCRIPTION', + + /** + * The time of the incident. + */ + START_TIME = 'START_TIME', + + /** + * The resolved time of the incident. + */ + END_TIME = 'END_TIME', + + /** + * The affected service. + */ + SERVICE = 'SERVICE', + + /** + * The name of the associated monitoring tool. + */ + MONITORING_TOOL = 'MONITORING_TOOL', + + /** + * One or more hosts, as to where this incident occurred. + */ + HOSTS = 'HOSTS', + + /** + * The severity of the alert. + */ + SEVERITY = 'SEVERITY', + + /** + * The unique identifier of the alert. This can be used to group occurrences of the same alert. + */ + FINGERPRINT = 'FINGERPRINT', + + /** + * The name of the associated GitLab environment. + */ + GITLAB_ENVIRONMENT_NAME = 'GITLAB_ENVIRONMENT_NAME', +} + +/** + * Values for alert field types used in the custom mapping + */ +export const enum XGitLabAlertManagementPayloadAlertFieldType { + /** + * Array field type. + */ + ARRAY = 'ARRAY', + + /** + * DateTime field type. + */ + DATETIME = 'DATETIME', + + /** + * String field type. + */ + STRING = 'STRING', +} + +/** + * Parsed field (with its name) from an alert used for custom mappings + */ +export interface IXGitLabAlertManagementPayloadAlertMappingField { + __typename: '_xGitLabAlertManagementPayloadAlertMappingField'; + + /** + * GitLab alert field name. + */ + fieldName: XGitLabAlertManagementPayloadAlertFieldName | null; + + /** + * Human-readable label of the payload path. + */ + label: string | null; + + /** + * Path to value inside payload JSON. + */ + path: Array | null; + + /** + * Type of the parsed value. + */ + type: XGitLabAlertManagementPayloadAlertFieldType | null; +} + +/** + * An endpoint and credentials used to accept Prometheus alerts for a project + */ +export interface IXGitLabAlertManagementPrometheusIntegration { + __typename: '_xGitLabAlertManagementPrometheusIntegration'; + + /** + * Whether the endpoint is currently accepting alerts. + */ + active: boolean | null; + + /** + * URL at which Prometheus metrics can be queried to populate the metrics dashboard. + */ + apiUrl: string | null; + + /** + * ID of the integration. + */ + id: string; + + /** + * Name of the integration. + */ + name: string | null; + + /** + * Token used to authenticate alert notification requests. + */ + token: string | null; + + /** + * Type of integration. + */ + type: XGitLabAlertManagementIntegrationType; + + /** + * Endpoint which accepts alert notifications. + */ + url: string | null; +} + +/** + * Alert severity values + */ +export const enum XGitLabAlertManagementSeverity { + /** + * Critical severity + */ + CRITICAL = 'CRITICAL', + + /** + * High severity + */ + HIGH = 'HIGH', + + /** + * Medium severity + */ + MEDIUM = 'MEDIUM', + + /** + * Low severity + */ + LOW = 'LOW', + + /** + * Info severity + */ + INFO = 'INFO', + + /** + * Unknown severity + */ + UNKNOWN = 'UNKNOWN', +} + +/** + * Alert status values + */ +export const enum XGitLabAlertManagementStatus { + /** + * Investigation has not started. + */ + TRIGGERED = 'TRIGGERED', + + /** + * Someone is actively investigating the problem. + */ + ACKNOWLEDGED = 'ACKNOWLEDGED', + + /** + * The problem has been addressed. + */ + RESOLVED = 'RESOLVED', + + /** + * No action will be taken. + */ + IGNORED = 'IGNORED', +} + +/** + * Autogenerated input type of AlertSetAssignees + */ +export interface IXGitLabAlertSetAssigneesInput { + /** + * Project the alert to mutate is in. + */ + projectPath: string; + + /** + * IID of the alert to mutate. + */ + iid: string; + + /** + * Usernames to assign to the alert. Replaces existing assignees by default. + */ + assigneeUsernames: Array; + + /** + * Operation to perform. Defaults to REPLACE. + */ + operationMode?: XGitLabMutationOperationMode | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AlertSetAssignees + */ +export interface IXGitLabAlertSetAssigneesPayload { + __typename: '_xGitLabAlertSetAssigneesPayload'; + + /** + * Alert after mutation. + */ + alert: IXGitLabAlertManagementAlert | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue created after mutation. + */ + issue: IXGitLabIssue | null; + + /** + * To-do item after mutation. + */ + todo: IXGitLabTodo | null; +} + +/** + * Autogenerated input type of AlertTodoCreate + */ +export interface IXGitLabAlertTodoCreateInput { + /** + * Project the alert to mutate is in. + */ + projectPath: string; + + /** + * IID of the alert to mutate. + */ + iid: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AlertTodoCreate + */ +export interface IXGitLabAlertTodoCreatePayload { + __typename: '_xGitLabAlertTodoCreatePayload'; + + /** + * Alert after mutation. + */ + alert: IXGitLabAlertManagementAlert | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue created after mutation. + */ + issue: IXGitLabIssue | null; + + /** + * To-do item after mutation. + */ + todo: IXGitLabTodo | null; +} + +/** + * Data associated with configuring API fuzzing scans in GitLab CI + */ +export interface IXGitLabApiFuzzingCiConfiguration { + __typename: '_xGitLabApiFuzzingCiConfiguration'; + + /** + * All available scan modes. + */ + scanModes: Array | null; + + /** + * All default scan profiles. + */ + scanProfiles: Array | null; +} + +/** + * Autogenerated input type of ApiFuzzingCiConfigurationCreate + */ +export interface IXGitLabApiFuzzingCiConfigurationCreateInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * File path or URL to the file that defines the API surface for scanning. Must + * be in the format specified by the `scanMode` argument. + */ + apiSpecificationFile: string; + + /** + * CI variable containing the password for authenticating with the target API. + */ + authPassword?: string | null; + + /** + * CI variable containing the username for authenticating with the target API. + */ + authUsername?: string | null; + + /** + * Mode for API fuzzing scans. + */ + scanMode: XGitLabApiFuzzingScanMode; + + /** + * Name of a default profile to use for scanning. Ex: Quick-10. + */ + scanProfile?: string | null; + + /** + * URL for the target of API fuzzing scans. + */ + target: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ApiFuzzingCiConfigurationCreate + */ +export interface IXGitLabApiFuzzingCiConfigurationCreatePayload { + __typename: '_xGitLabApiFuzzingCiConfigurationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * A YAML snippet that can be inserted into the project's `.gitlab-ci.yml` to set up API fuzzing scans. + */ + configurationYaml: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Location at which the project's `.gitlab-ci.yml` file can be edited in the browser. + */ + gitlabCiYamlEditPath: string | null; +} + +/** + * All possible ways to specify the API surface for an API fuzzing scan. + */ +export const enum XGitLabApiFuzzingScanMode { + /** + * The API surface is specified by a HAR file. + */ + HAR = 'HAR', + + /** + * The API surface is specified by a OPENAPI file. + */ + OPENAPI = 'OPENAPI', + + /** + * The API surface is specified by a POSTMAN file. + */ + POSTMAN = 'POSTMAN', +} + +/** + * An API Fuzzing scan profile. + */ +export interface IXGitLabApiFuzzingScanProfile { + __typename: '_xGitLabApiFuzzingScanProfile'; + + /** + * Short description of the profile. + */ + description: string | null; + + /** + * Unique name of the profile. + */ + name: string | null; + + /** + * Syntax highlighted HTML representation of the YAML. + */ + yaml: string | null; +} + +/** + * Describes a rule for who can approve merge requests. + */ +export interface IXGitLabApprovalRule { + __typename: '_xGitLabApprovalRule'; + + /** + * Number of required approvals. + */ + approvalsRequired: number | null; + + /** + * Indicates if the rule is satisfied. + */ + approved: boolean | null; + + /** + * List of users defined in the rule that approved the merge request. + */ + approvedBy: IXGitLabUserCoreConnection | null; + + /** + * Indicates if the rule contains approvers from a hidden group. + */ + containsHiddenGroups: boolean | null; + + /** + * List of all users eligible to approve the merge request (defined explicitly and from associated groups). + */ + eligibleApprovers: Array | null; + + /** + * List of groups added as approvers for the rule. + */ + groups: IXGitLabGroupConnection | null; + + /** + * ID of the rule. + */ + id: any; + + /** + * Name of the rule. + */ + name: string | null; + + /** + * Indicates if the rule was overridden for the merge request. + */ + overridden: boolean | null; + + /** + * Named section of the Code Owners file that the rule applies to. + */ + section: string | null; + + /** + * Source rule used to create the rule. + */ + sourceRule: IXGitLabApprovalRule | null; + + /** + * Type of the rule. + */ + type: XGitLabApprovalRuleType | null; + + /** + * List of users added as approvers for the rule. + */ + users: IXGitLabUserCoreConnection | null; +} + +export interface IApprovedByOnXGitLabApprovalRuleArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupsOnXGitLabApprovalRuleArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IUsersOnXGitLabApprovalRuleArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The kind of an approval rule. + */ +export const enum XGitLabApprovalRuleType { + /** + * A `regular` approval rule. + */ + REGULAR = 'REGULAR', + + /** + * A `code_owner` approval rule. + */ + CODE_OWNER = 'CODE_OWNER', + + /** + * A `report_approver` approval rule. + */ + REPORT_APPROVER = 'REPORT_APPROVER', + + /** + * A `any_approver` approval rule. + */ + ANY_APPROVER = 'ANY_APPROVER', +} + +/** + * Assignee ID wildcard values + */ +export const enum XGitLabAssigneeWildcardId { + /** + * No assignee is assigned. + */ + NONE = 'NONE', + + /** + * An assignee is assigned. + */ + ANY = 'ANY', +} + +/** + * User availability status + */ +export const enum XGitLabAvailabilityEnum { + /** + * Not Set + */ + NOT_SET = 'NOT_SET', + + /** + * Busy + */ + BUSY = 'BUSY', +} + +/** + * An emoji awarded by a user + */ +export interface IXGitLabAwardEmoji { + __typename: '_xGitLabAwardEmoji'; + + /** + * Emoji description. + */ + description: string; + + /** + * Emoji as an icon. + */ + emoji: string; + + /** + * Emoji name. + */ + name: string; + + /** + * Emoji in Unicode. + */ + unicode: string; + + /** + * Unicode version for this emoji. + */ + unicodeVersion: string; + + /** + * User who awarded the emoji. + */ + user: IXGitLabUserCore; +} + +/** + * Autogenerated input type of AwardEmojiAdd + */ +export interface IXGitLabAwardEmojiAddInput { + /** + * Global ID of the awardable resource. + */ + awardableId: any; + + /** + * Emoji name. + */ + name: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AwardEmojiAdd + */ +export interface IXGitLabAwardEmojiAddPayload { + __typename: '_xGitLabAwardEmojiAddPayload'; + + /** + * Award emoji after mutation. + */ + awardEmoji: IXGitLabAwardEmoji | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * The connection type for AwardEmoji. + */ +export interface IXGitLabAwardEmojiConnection { + __typename: '_xGitLabAwardEmojiConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabAwardEmojiEdge { + __typename: '_xGitLabAwardEmojiEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabAwardEmoji | null; +} + +/** + * Autogenerated input type of AwardEmojiRemove + */ +export interface IXGitLabAwardEmojiRemoveInput { + /** + * Global ID of the awardable resource. + */ + awardableId: any; + + /** + * Emoji name. + */ + name: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AwardEmojiRemove + */ +export interface IXGitLabAwardEmojiRemovePayload { + __typename: '_xGitLabAwardEmojiRemovePayload'; + + /** + * Award emoji after mutation. + */ + awardEmoji: IXGitLabAwardEmoji | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of AwardEmojiToggle + */ +export interface IXGitLabAwardEmojiToggleInput { + /** + * Global ID of the awardable resource. + */ + awardableId: any; + + /** + * Emoji name. + */ + name: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of AwardEmojiToggle + */ +export interface IXGitLabAwardEmojiTogglePayload { + __typename: '_xGitLabAwardEmojiTogglePayload'; + + /** + * Award emoji after mutation. + */ + awardEmoji: IXGitLabAwardEmoji | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji. + */ + toggledOn: boolean; +} + +export interface IXGitLabBaseService { + __typename: '_xGitLabBaseService'; + + /** + * Indicates if the service is active. + */ + active: boolean | null; + + /** + * Class name of the service. + */ + type: string | null; +} + +export interface IXGitLabBlob { + __typename: '_xGitLabBlob'; + + /** + * Flat path of the entry. + */ + flatPath: string; + + /** + * ID of the entry. + */ + id: string; + + /** + * LFS ID of the blob. + */ + lfsOid: string | null; + + /** + * Blob mode in numeric format. + */ + mode: string | null; + + /** + * Name of the entry. + */ + name: string; + + /** + * Path of the entry. + */ + path: string; + + /** + * Last commit SHA for the entry. + */ + sha: string; + + /** + * Type of tree entry. + */ + type: XGitLabEntryType; + + /** + * Web path of the blob. + */ + webPath: string | null; + + /** + * Web URL of the blob. + */ + webUrl: string | null; +} + +/** + * The connection type for Blob. + */ +export interface IXGitLabBlobConnection { + __typename: '_xGitLabBlobConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabBlobEdge { + __typename: '_xGitLabBlobEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabBlob | null; +} + +/** + * Represents how the blob content should be displayed + */ +export interface IXGitLabBlobViewer { + __typename: '_xGitLabBlobViewer'; + + /** + * Shows whether the blob should be displayed collapsed. + */ + collapsed: boolean; + + /** + * Content file type. + */ + fileType: string; + + /** + * Shows whether the blob content is loaded asynchronously. + */ + loadAsync: boolean; + + /** + * Loading partial name. + */ + loadingPartialName: string; + + /** + * Error rendering the blob content. + */ + renderError: string | null; + + /** + * Shows whether the blob is too large to be displayed. + */ + tooLarge: boolean; + + /** + * Type of blob viewer. + */ + type: XGitLabBlobViewersType; +} + +/** + * Types of blob viewers + */ +export const enum XGitLabBlobViewersType { + /** + * Rich blob viewers type. + */ + rich = 'rich', + + /** + * Simple blob viewers type. + */ + simple = 'simple', + + /** + * Auxiliary blob viewers type. + */ + auxiliary = 'auxiliary', +} + +/** + * Represents a project or group issue board + */ +export interface IXGitLabBoard { + __typename: '_xGitLabBoard'; + + /** + * Board assignee. + */ + assignee: IXGitLabUserCore | null; + + /** + * Timestamp of when the board was created. + */ + createdAt: any; + + /** + * Epics associated with board issues. + */ + epics: IXGitLabBoardEpicConnection | null; + + /** + * Whether or not backlog list is hidden. + */ + hideBacklogList: boolean | null; + + /** + * Whether or not closed list is hidden. + */ + hideClosedList: boolean | null; + + /** + * ID (global ID) of the board. + */ + id: string; + + /** + * Board iteration. + */ + iteration: IXGitLabIteration | null; + + /** + * Board iteration cadence. + */ + iterationCadence: IXGitLabIterationCadence | null; + + /** + * Labels of the board. + */ + labels: IXGitLabLabelConnection | null; + + /** + * Lists of the board. + */ + lists: IXGitLabBoardListConnection | null; + + /** + * Board milestone. + */ + milestone: IXGitLabMilestone | null; + + /** + * Name of the board. + */ + name: string | null; + + /** + * Timestamp of when the board was last updated. + */ + updatedAt: any; + + /** + * Web path of the board. + */ + webPath: string; + + /** + * Web URL of the board. + */ + webUrl: string; + + /** + * Weight of the board. + */ + weight: number | null; +} + +export interface IEpicsOnXGitLabBoardArguments { + /** + * Filters applied when selecting issues on the board. + */ + issueFilters?: IXGitLabBoardIssueInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelsOnXGitLabBoardArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IListsOnXGitLabBoardArguments { + /** + * Find a list by its global ID. + */ + id?: any | null; + + /** + * Filters applied when getting issue metadata in the board list. + */ + issueFilters?: IXGitLabBoardIssueInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for Board. + */ +export interface IXGitLabBoardConnection { + __typename: '_xGitLabBoardConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabBoardEdge { + __typename: '_xGitLabBoardEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabBoard | null; +} + +/** + * Represents an epic on an issue board + */ +export interface IXGitLabBoardEpic { + __typename: '_xGitLabBoardEpic'; + + /** + * Ancestors (parents) of the epic. + */ + ancestors: IXGitLabEpicConnection | null; + + /** + * Author of the epic. + */ + author: IXGitLabUserCore; + + /** + * List of award emojis associated with the epic. + */ + awardEmoji: IXGitLabAwardEmojiConnection | null; + + /** + * Children (sub-epics) of the epic. + */ + children: IXGitLabEpicConnection | null; + + /** + * Timestamp of when the epic was closed. + */ + closedAt: any | null; + + /** + * Indicates if the epic is confidential. + */ + confidential: boolean | null; + + /** + * Timestamp of when the epic was created. + */ + createdAt: any | null; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; + + /** + * Number of open and closed descendant epics and issues. + */ + descendantCounts: IXGitLabEpicDescendantCount | null; + + /** + * Total weight of open and closed issues in the epic and its descendants. + */ + descendantWeightSum: IXGitLabEpicDescendantWeights | null; + + /** + * Description of the epic. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Number of downvotes the epic has received. + */ + downvotes: number; + + /** + * Due date of the epic. + */ + dueDate: any | null; + + /** + * Fixed due date of the epic. + */ + dueDateFixed: any | null; + + /** + * Inherited due date of the epic from milestones. + */ + dueDateFromMilestones: any | null; + + /** + * Indicates if the due date has been manually set. + */ + dueDateIsFixed: boolean | null; + + /** + * List of events associated with the object. + */ + events: IXGitLabEventConnection | null; + + /** + * Group to which the epic belongs. + */ + group: IXGitLabGroup; + + /** + * Indicates if the epic has children. + */ + hasChildren: boolean; + + /** + * Indicates if the epic has direct issues. + */ + hasIssues: boolean; + + /** + * Indicates if the epic has a parent epic. + */ + hasParent: boolean; + + /** + * Current health status of the epic. + */ + healthStatus: IXGitLabEpicHealthStatus | null; + + /** + * ID of the epic. + */ + id: string; + + /** + * Internal ID of the epic. + */ + iid: string; + + /** + * A list of issues associated with the epic. + */ + issues: IXGitLabEpicIssueConnection | null; + + /** + * Labels assigned to the epic. + */ + labels: IXGitLabLabelConnection | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Parent epic of the epic. + */ + parent: IXGitLabEpic | null; + + /** + * List of participants for the epic. + */ + participants: IXGitLabUserCoreConnection | null; + + /** + * Internal reference of the epic. Returned in shortened format by default. + */ + reference: string; + + /** + * URI path of the epic-issue relationship. + */ + relationPath: string | null; + + /** + * Relative position of the epic in the epic tree. + */ + relativePosition: number | null; + + /** + * Start date of the epic. + */ + startDate: any | null; + + /** + * Fixed start date of the epic. + */ + startDateFixed: any | null; + + /** + * Inherited start date of the epic from milestones. + */ + startDateFromMilestones: any | null; + + /** + * Indicates if the start date has been manually set. + */ + startDateIsFixed: boolean | null; + + /** + * State of the epic. + */ + state: XGitLabEpicState; + + /** + * Indicates the currently logged in user is subscribed to the epic. + */ + subscribed: boolean; + + /** + * Title of the epic. + */ + title: string | null; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Timestamp of when the epic was updated. + */ + updatedAt: any | null; + + /** + * Number of upvotes the epic has received. + */ + upvotes: number; + + /** + * Number of user discussions in the epic. + */ + userDiscussionsCount: number; + + /** + * Number of user notes of the epic. + */ + userNotesCount: number; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabEpicPermissions; + + /** + * User preferences for the epic on the issue board. + */ + userPreferences: IXGitLabBoardEpicUserPreferences | null; + + /** + * Web path of the epic. + */ + webPath: string; + + /** + * Web URL of the epic. + */ + webUrl: string; +} + +export interface IAncestorsOnXGitLabBoardEpicArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the epic, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of epics, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * Filter epics by state. + */ + state?: XGitLabEpicState | null; + + /** + * Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + */ + in?: Array | null; + + /** + * List epics by sort order. + */ + sort?: XGitLabEpicSort | null; + + /** + * Filter epics by author. + */ + authorUsername?: string | null; + + /** + * Filter epics by labels. + */ + labelName?: Array | null; + + /** + * Filter epics by milestone title, computed from epic's issues. + */ + milestoneTitle?: string | null; + + /** + * Filter epics by IID for autocomplete. + */ + iidStartsWith?: string | null; + + /** + * Include epics from ancestor groups. + * @default true + */ + includeAncestorGroups?: boolean | null; + + /** + * Include epics from descendant groups. + * @default true + */ + includeDescendantGroups?: boolean | null; + + /** + * Filter epics by given confidentiality. + */ + confidential?: boolean | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicFilterInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAwardEmojiOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IChildrenOnXGitLabBoardEpicArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the epic, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of epics, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * Filter epics by state. + */ + state?: XGitLabEpicState | null; + + /** + * Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + */ + in?: Array | null; + + /** + * List epics by sort order. + */ + sort?: XGitLabEpicSort | null; + + /** + * Filter epics by author. + */ + authorUsername?: string | null; + + /** + * Filter epics by labels. + */ + labelName?: Array | null; + + /** + * Filter epics by milestone title, computed from epic's issues. + */ + milestoneTitle?: string | null; + + /** + * Filter epics by IID for autocomplete. + */ + iidStartsWith?: string | null; + + /** + * Include epics from ancestor groups. + * @default false + */ + includeAncestorGroups?: boolean | null; + + /** + * Include epics from descendant groups. + * @default true + */ + includeDescendantGroups?: boolean | null; + + /** + * Filter epics by given confidentiality. + */ + confidential?: boolean | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicFilterInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICurrentUserTodosOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +export interface IDiscussionsOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IEventsOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIssuesOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelsOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IParticipantsOnXGitLabBoardEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReferenceOnXGitLabBoardEpicArguments { + /** + * Indicates if the reference should be returned in full. + * @default false + */ + full?: boolean | null; +} + +/** + * The connection type for BoardEpic. + */ +export interface IXGitLabBoardEpicConnection { + __typename: '_xGitLabBoardEpicConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of BoardEpicCreate + */ +export interface IXGitLabBoardEpicCreateInput { + /** + * Group the epic to create is in. + */ + groupPath: string; + + /** + * Global ID of the board that the epic is in. + */ + boardId: any; + + /** + * Global ID of the epic board list in which epic will be created. + */ + listId: any; + + /** + * Title of the epic. + */ + title: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of BoardEpicCreate + */ +export interface IXGitLabBoardEpicCreatePayload { + __typename: '_xGitLabBoardEpicCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic after creation. + */ + epic: IXGitLabEpic | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabBoardEpicEdge { + __typename: '_xGitLabBoardEpicEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabBoardEpic | null; +} + +/** + * Represents user preferences for a board epic + */ +export interface IXGitLabBoardEpicUserPreferences { + __typename: '_xGitLabBoardEpicUserPreferences'; + + /** + * Indicates epic should be displayed as collapsed. + */ + collapsed: boolean; +} + +export interface IXGitLabBoardIssueInput { + /** + * Filter by label name. + */ + labelName?: Array | null; + + /** + * Filter by author username. + */ + authorUsername?: string | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * List of IIDs of issues. For example `["1", "2"]`. + */ + iids?: Array | null; + + /** + * Filter by milestone title. + */ + milestoneTitle?: string | null; + + /** + * Filter by assignee username. + */ + assigneeUsername?: Array | null; + + /** + * Filter by release tag. + */ + releaseTag?: string | null; + + /** + * Filter by the given issue types. + */ + types?: Array | null; + + /** + * Filter by milestone ID wildcard. + */ + milestoneWildcardId?: XGitLabMilestoneWildcardId | null; + + /** + * Filter by epic ID. Incompatible with epicWildcardId. + */ + epicId?: any | null; + + /** + * Filter by iteration title. + */ + iterationTitle?: string | null; + + /** + * Filter by weight. + */ + weight?: string | null; + + /** + * Filter by a list of iteration IDs. Incompatible with iterationWildcardId. + */ + iterationId?: Array | null; + + /** + * List of negated arguments. + */ + not?: IXGitLabNegatedBoardIssueInput | null; + + /** + * Search query for issue title or description. + */ + search?: string | null; + + /** + * Filter by assignee wildcard. Incompatible with assigneeUsername. + */ + assigneeWildcardId?: XGitLabAssigneeWildcardId | null; + + /** + * Filter by epic ID wildcard. Incompatible with epicId. + */ + epicWildcardId?: XGitLabEpicWildcardId | null; + + /** + * Filter by iteration ID wildcard. + */ + iterationWildcardId?: XGitLabIterationWildcardId | null; + + /** + * Filter by weight ID wildcard. Incompatible with weight. + */ + weightWildcardId?: XGitLabWeightWildcardId | null; +} + +/** + * Represents a list for an issue board + */ +export interface IXGitLabBoardList { + __typename: '_xGitLabBoardList'; + + /** + * Assignee in the list. + */ + assignee: IXGitLabUserCore | null; + + /** + * Indicates if the list is collapsed for this user. + */ + collapsed: boolean | null; + + /** + * ID (global ID) of the list. + */ + id: string; + + /** + * Board issues. + */ + issues: IXGitLabIssueConnection | null; + + /** + * Count of issues in the list. + */ + issuesCount: number | null; + + /** + * Iteration of the list. + */ + iteration: IXGitLabIteration | null; + + /** + * Label of the list. + */ + label: IXGitLabLabel | null; + + /** + * Current limit metric for the list. + */ + limitMetric: XGitLabListLimitMetric | null; + + /** + * Type of the list. + */ + listType: string; + + /** + * Maximum number of issues in the list. + */ + maxIssueCount: number | null; + + /** + * Maximum weight of issues in the list. + */ + maxIssueWeight: number | null; + + /** + * Milestone of the list. + */ + milestone: IXGitLabMilestone | null; + + /** + * Position of list within the board. + */ + position: number | null; + + /** + * Title of the list. + */ + title: string; + + /** + * Total weight of all issues in the list. + */ + totalWeight: number | null; +} + +export interface IIssuesOnXGitLabBoardListArguments { + /** + * Filters applied when selecting issues in the board list. + */ + filters?: IXGitLabBoardIssueInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for BoardList. + */ +export interface IXGitLabBoardListConnection { + __typename: '_xGitLabBoardListConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of BoardListCreate + */ +export interface IXGitLabBoardListCreateInput { + /** + * Create the backlog list. + */ + backlog?: boolean | null; + + /** + * Global ID of an existing label. + */ + labelId?: any | null; + + /** + * Global ID of the issue board to mutate. + */ + boardId: any; + + /** + * Global ID of an existing milestone. + */ + milestoneId?: any | null; + + /** + * Global ID of an existing iteration. + */ + iterationId?: any | null; + + /** + * Global ID of an existing user. + */ + assigneeId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of BoardListCreate + */ +export interface IXGitLabBoardListCreatePayload { + __typename: '_xGitLabBoardListCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue list in the issue board. + */ + list: IXGitLabBoardList | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabBoardListEdge { + __typename: '_xGitLabBoardListEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabBoardList | null; +} + +/** + * Autogenerated input type of BoardListUpdateLimitMetrics + */ +export interface IXGitLabBoardListUpdateLimitMetricsInput { + /** + * Global ID of the list. + */ + listId: any; + + /** + * New limit metric type for the list. + */ + limitMetric?: XGitLabListLimitMetric | null; + + /** + * New maximum issue count limit. + */ + maxIssueCount?: number | null; + + /** + * New maximum issue weight limit. + */ + maxIssueWeight?: number | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of BoardListUpdateLimitMetrics + */ +export interface IXGitLabBoardListUpdateLimitMetricsPayload { + __typename: '_xGitLabBoardListUpdateLimitMetricsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Updated list. + */ + list: IXGitLabBoardList | null; +} + +export interface IXGitLabBranch { + __typename: '_xGitLabBranch'; + + /** + * Commit for the branch. + */ + commit: IXGitLabCommit | null; + + /** + * Name of the branch. + */ + name: string; +} + +/** + * Autogenerated input type of BulkEnableDevopsAdoptionNamespaces + */ +export interface IXGitLabBulkEnableDevopsAdoptionNamespacesInput { + /** + * List of Namespace IDs. + */ + namespaceIds: Array; + + /** + * Display namespace ID. + */ + displayNamespaceId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of BulkEnableDevopsAdoptionNamespaces + */ +export interface IXGitLabBulkEnableDevopsAdoptionNamespacesPayload { + __typename: '_xGitLabBulkEnableDevopsAdoptionNamespacesPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Enabled namespaces after mutation. + */ + enabledNamespaces: Array | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Represents the total number of issues and their weights for a particular day + */ +export interface IXGitLabBurnupChartDailyTotals { + __typename: '_xGitLabBurnupChartDailyTotals'; + + /** + * Number of closed issues as of this day. + */ + completedCount: number; + + /** + * Total weight of closed issues as of this day. + */ + completedWeight: number; + + /** + * Date for burnup totals. + */ + date: any; + + /** + * Number of issues as of this day. + */ + scopeCount: number; + + /** + * Total weight of issues as of this day. + */ + scopeWeight: number; +} + +export interface IXGitLabCiApplicationSettings { + __typename: '_xGitLabCiApplicationSettings'; + + /** + * Whether to keep the latest jobs artifacts. + */ + keepLatestArtifact: boolean | null; +} + +export interface IXGitLabCiBuildNeed { + __typename: '_xGitLabCiBuildNeed'; + + /** + * ID of the job we need to complete. + */ + id: string; + + /** + * Name of the job we need to complete. + */ + name: string | null; +} + +/** + * The connection type for CiBuildNeed. + */ +export interface IXGitLabCiBuildNeedConnection { + __typename: '_xGitLabCiBuildNeedConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiBuildNeedEdge { + __typename: '_xGitLabCiBuildNeedEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiBuildNeed | null; +} + +/** + * Autogenerated input type of CiCdSettingsUpdate + */ +export interface IXGitLabCiCdSettingsUpdateInput { + /** + * Full Path of the project the settings belong to. + */ + fullPath: string; + + /** + * Indicates if the latest artifact should be kept for this project. + */ + keepLatestArtifact?: boolean | null; + + /** + * Indicates CI job tokens generated in this project have restricted access to resources. + */ + jobTokenScopeEnabled?: boolean | null; + + /** + * Indicates if merge pipelines are enabled for the project. + */ + mergePipelinesEnabled?: boolean | null; + + /** + * Indicates if merge trains are enabled for the project. + */ + mergeTrainsEnabled?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CiCdSettingsUpdate + */ +export interface IXGitLabCiCdSettingsUpdatePayload { + __typename: '_xGitLabCiCdSettingsUpdatePayload'; + + /** + * CI/CD settings after mutation. + */ + ciCdSettings: IXGitLabProjectCiCdSetting; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export interface IXGitLabCiConfig { + __typename: '_xGitLabCiConfig'; + + /** + * Linting errors. + */ + errors: Array | null; + + /** + * Merged CI configuration YAML. + */ + mergedYaml: string | null; + + /** + * Stages of the pipeline. + */ + stages: IXGitLabCiConfigStageConnection | null; + + /** + * Status of linting, can be either valid or invalid. + */ + status: XGitLabCiConfigStatus | null; +} + +export interface IStagesOnXGitLabCiConfigArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabCiConfigGroup { + __typename: '_xGitLabCiConfigGroup'; + + /** + * Jobs in group. + */ + jobs: IXGitLabCiConfigJobConnection | null; + + /** + * Name of the job group. + */ + name: string | null; + + /** + * Size of the job group. + */ + size: number | null; +} + +export interface IJobsOnXGitLabCiConfigGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for CiConfigGroup. + */ +export interface IXGitLabCiConfigGroupConnection { + __typename: '_xGitLabCiConfigGroupConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiConfigGroupEdge { + __typename: '_xGitLabCiConfigGroupEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiConfigGroup | null; +} + +export interface IXGitLabCiConfigJob { + __typename: '_xGitLabCiConfigJob'; + + /** + * Override a set of commands that are executed after the job. + */ + afterScript: Array | null; + + /** + * Allow job to fail. + */ + allowFailure: boolean | null; + + /** + * Override a set of commands that are executed before the job. + */ + beforeScript: Array | null; + + /** + * Name of an environment to which the job deploys. + */ + environment: string | null; + + /** + * Limit when jobs are not created. + */ + except: IXGitLabCiConfigJobRestriction | null; + + /** + * Name of the job group. + */ + groupName: string | null; + + /** + * Name of the job. + */ + name: string | null; + + /** + * Builds that must complete before the jobs run. + */ + needs: IXGitLabCiConfigNeedConnection | null; + + /** + * Jobs are created when these conditions do not apply. + */ + only: IXGitLabCiConfigJobRestriction | null; + + /** + * Shell script that is executed by a runner. + */ + script: Array | null; + + /** + * Name of the job stage. + */ + stage: string | null; + + /** + * List of tags that are used to select a runner. + */ + tags: Array | null; + + /** + * When to run the job. + */ + when: string | null; +} + +export interface INeedsOnXGitLabCiConfigJobArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for CiConfigJob. + */ +export interface IXGitLabCiConfigJobConnection { + __typename: '_xGitLabCiConfigJobConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiConfigJobEdge { + __typename: '_xGitLabCiConfigJobEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiConfigJob | null; +} + +export interface IXGitLabCiConfigJobRestriction { + __typename: '_xGitLabCiConfigJobRestriction'; + + /** + * Git refs the job restriction applies to. + */ + refs: Array | null; +} + +export interface IXGitLabCiConfigNeed { + __typename: '_xGitLabCiConfigNeed'; + + /** + * Name of the need. + */ + name: string | null; +} + +/** + * The connection type for CiConfigNeed. + */ +export interface IXGitLabCiConfigNeedConnection { + __typename: '_xGitLabCiConfigNeedConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiConfigNeedEdge { + __typename: '_xGitLabCiConfigNeedEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiConfigNeed | null; +} + +export interface IXGitLabCiConfigStage { + __typename: '_xGitLabCiConfigStage'; + + /** + * Groups of jobs for the stage. + */ + groups: IXGitLabCiConfigGroupConnection | null; + + /** + * Name of the stage. + */ + name: string | null; +} + +export interface IGroupsOnXGitLabCiConfigStageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for CiConfigStage. + */ +export interface IXGitLabCiConfigStageConnection { + __typename: '_xGitLabCiConfigStageConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiConfigStageEdge { + __typename: '_xGitLabCiConfigStageEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiConfigStage | null; +} + +/** + * Values for YAML processor result + */ +export const enum XGitLabCiConfigStatus { + /** + * Configuration file is valid. + */ + VALID = 'VALID', + + /** + * Configuration file is not valid. + */ + INVALID = 'INVALID', +} + +export interface IXGitLabCiGroup { + __typename: '_xGitLabCiGroup'; + + /** + * Detailed status of the group. + */ + detailedStatus: IXGitLabDetailedStatus | null; + + /** + * ID for a group. + */ + id: string; + + /** + * Jobs in group. + */ + jobs: IXGitLabCiJobConnection | null; + + /** + * Name of the job group. + */ + name: string | null; + + /** + * Size of the group. + */ + size: number | null; +} + +export interface IJobsOnXGitLabCiGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for CiGroup. + */ +export interface IXGitLabCiGroupConnection { + __typename: '_xGitLabCiGroupConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiGroupEdge { + __typename: '_xGitLabCiGroupEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiGroup | null; +} + +export interface IXGitLabCiJob { + __typename: '_xGitLabCiJob'; + + /** + * Indicates the job is active. + */ + active: boolean; + + /** + * Whether the job is allowed to fail. + */ + allowFailure: boolean; + + /** + * Artifacts generated by the job. + */ + artifacts: IXGitLabCiJobArtifactConnection | null; + + /** + * Indicates the job can be canceled. + */ + cancelable: boolean; + + /** + * Path to the commit that triggered the job. + */ + commitPath: string | null; + + /** + * Coverage level of the job. + */ + coverage: number | null; + + /** + * When the job was created. + */ + createdAt: any; + + /** + * Whether the job was created by a tag. + */ + createdByTag: boolean; + + /** + * Detailed status of the job. + */ + detailedStatus: IXGitLabDetailedStatus | null; + + /** + * Duration of the job in seconds. + */ + duration: number | null; + + /** + * When a job has finished running. + */ + finishedAt: any | null; + + /** + * ID of the job. + */ + id: any | null; + + /** + * Whether the job has a manual action. + */ + manualJob: boolean | null; + + /** + * Name of the job. + */ + name: string | null; + + /** + * References to builds that must complete before the jobs run. + */ + needs: IXGitLabCiBuildNeedConnection | null; + + /** + * Pipeline the job belongs to. + */ + pipeline: IXGitLabPipeline | null; + + /** + * Indicates the job can be played. + */ + playable: boolean; + + /** + * When the job was enqueued and marked as pending. + */ + queuedAt: any | null; + + /** + * How long the job was enqueued before starting. + */ + queuedDuration: any | null; + + /** + * Ref name of the job. + */ + refName: string | null; + + /** + * Path to the ref. + */ + refPath: string | null; + + /** + * Indicates the job can be retried. + */ + retryable: boolean; + + /** + * Schedule for the build. + */ + scheduledAt: any | null; + + /** + * Type of job scheduling. Value is `dag` if the job uses the `needs` keyword, and `stage` otherwise. + */ + schedulingType: string | null; + + /** + * Short SHA1 ID of the commit. + */ + shortSha: string; + + /** + * Stage of the job. + */ + stage: IXGitLabCiStage | null; + + /** + * When the job was started. + */ + startedAt: any | null; + + /** + * Status of the job. + */ + status: XGitLabCiJobStatus | null; + + /** + * Indicates the job is stuck. + */ + stuck: boolean; + + /** + * Tags for the current job. + */ + tags: Array | null; + + /** + * Whether the job was triggered. + */ + triggered: boolean | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabJobPermissions; +} + +export interface IArtifactsOnXGitLabCiJobArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INeedsOnXGitLabCiJobArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabCiJobArtifact { + __typename: '_xGitLabCiJobArtifact'; + + /** + * URL for downloading the artifact's file. + */ + downloadPath: string | null; + + /** + * File type of the artifact. + */ + fileType: XGitLabJobArtifactFileType | null; +} + +/** + * The connection type for CiJobArtifact. + */ +export interface IXGitLabCiJobArtifactConnection { + __typename: '_xGitLabCiJobArtifactConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiJobArtifactEdge { + __typename: '_xGitLabCiJobArtifactEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiJobArtifact | null; +} + +/** + * The connection type for CiJob. + */ +export interface IXGitLabCiJobConnection { + __typename: '_xGitLabCiJobConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiJobEdge { + __typename: '_xGitLabCiJobEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiJob | null; +} + +export const enum XGitLabCiJobStatus { + /** + * A job that is created. + */ + CREATED = 'CREATED', + + /** + * A job that is waiting for resource. + */ + WAITING_FOR_RESOURCE = 'WAITING_FOR_RESOURCE', + + /** + * A job that is preparing. + */ + PREPARING = 'PREPARING', + + /** + * A job that is pending. + */ + PENDING = 'PENDING', + + /** + * A job that is running. + */ + RUNNING = 'RUNNING', + + /** + * A job that is success. + */ + SUCCESS = 'SUCCESS', + + /** + * A job that is failed. + */ + FAILED = 'FAILED', + + /** + * A job that is canceled. + */ + CANCELED = 'CANCELED', + + /** + * A job that is skipped. + */ + SKIPPED = 'SKIPPED', + + /** + * A job that is manual. + */ + MANUAL = 'MANUAL', + + /** + * A job that is scheduled. + */ + SCHEDULED = 'SCHEDULED', +} + +/** + * Autogenerated input type of CiJobTokenScopeAddProject + */ +export interface IXGitLabCiJobTokenScopeAddProjectInput { + /** + * Project that the CI job token scope belongs to. + */ + projectPath: string; + + /** + * Project to be added to the CI job token scope. + */ + targetProjectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CiJobTokenScopeAddProject + */ +export interface IXGitLabCiJobTokenScopeAddProjectPayload { + __typename: '_xGitLabCiJobTokenScopeAddProjectPayload'; + + /** + * CI job token's scope of access. + */ + ciJobTokenScope: IXGitLabCiJobTokenScopeType | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CiJobTokenScopeRemoveProject + */ +export interface IXGitLabCiJobTokenScopeRemoveProjectInput { + /** + * Project that the CI job token scope belongs to. + */ + projectPath: string; + + /** + * Project to be removed from the CI job token scope. + */ + targetProjectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CiJobTokenScopeRemoveProject + */ +export interface IXGitLabCiJobTokenScopeRemoveProjectPayload { + __typename: '_xGitLabCiJobTokenScopeRemoveProjectPayload'; + + /** + * CI job token's scope of access. + */ + ciJobTokenScope: IXGitLabCiJobTokenScopeType | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export interface IXGitLabCiJobTokenScopeType { + __typename: '_xGitLabCiJobTokenScopeType'; + + /** + * Allow list of projects that can be accessed by CI Job tokens created by this project. + */ + projects: IXGitLabProjectConnection; +} + +export interface IProjectsOnXGitLabCiJobTokenScopeTypeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabCiMinutesNamespaceMonthlyUsage { + __typename: '_xGitLabCiMinutesNamespaceMonthlyUsage'; + + /** + * Total number of minutes used by all projects in the namespace. + */ + minutes: number | null; + + /** + * Month related to the usage data. + */ + month: string | null; + + /** + * CI minutes usage data for projects in the namespace. + */ + projects: IXGitLabCiMinutesProjectMonthlyUsageConnection | null; +} + +export interface IProjectsOnXGitLabCiMinutesNamespaceMonthlyUsageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for CiMinutesNamespaceMonthlyUsage. + */ +export interface IXGitLabCiMinutesNamespaceMonthlyUsageConnection { + __typename: '_xGitLabCiMinutesNamespaceMonthlyUsageConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiMinutesNamespaceMonthlyUsageEdge { + __typename: '_xGitLabCiMinutesNamespaceMonthlyUsageEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiMinutesNamespaceMonthlyUsage | null; +} + +export interface IXGitLabCiMinutesProjectMonthlyUsage { + __typename: '_xGitLabCiMinutesProjectMonthlyUsage'; + + /** + * Number of CI minutes used by the project in the month. + */ + minutes: number | null; + + /** + * Name of the project. + */ + name: string | null; +} + +/** + * The connection type for CiMinutesProjectMonthlyUsage. + */ +export interface IXGitLabCiMinutesProjectMonthlyUsageConnection { + __typename: '_xGitLabCiMinutesProjectMonthlyUsageConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiMinutesProjectMonthlyUsageEdge { + __typename: '_xGitLabCiMinutesProjectMonthlyUsageEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiMinutesProjectMonthlyUsage | null; +} + +export interface IXGitLabCiRunner { + __typename: '_xGitLabCiRunner'; + + /** + * Access level of the runner. + */ + accessLevel: XGitLabCiRunnerAccessLevel; + + /** + * Indicates the runner is allowed to receive jobs. + */ + active: boolean; + + /** + * Admin URL of the runner. Only available for adminstrators. + */ + adminUrl: string | null; + + /** + * Last contact from the runner. + */ + contactedAt: any | null; + + /** + * Description of the runner. + */ + description: string | null; + + /** + * ID of the runner. + */ + id: any; + + /** + * IP address of the runner. + */ + ipAddress: string | null; + + /** + * Number of jobs processed by the runner (limited to 1000, plus one to indicate that more items exist). + */ + jobCount: number | null; + + /** + * Indicates the runner is locked. + */ + locked: boolean | null; + + /** + * Maximum timeout (in seconds) for jobs processed by the runner. + */ + maximumTimeout: number | null; + + /** + * Private projects' "minutes cost factor" associated with the runner (GitLab.com only). + */ + privateProjectsMinutesCostFactor: number | null; + + /** + * Number of projects that the runner is associated with. + */ + projectCount: number | null; + + /** + * Public projects' "minutes cost factor" associated with the runner (GitLab.com only). + */ + publicProjectsMinutesCostFactor: number | null; + + /** + * Revision of the runner. + */ + revision: string | null; + + /** + * Indicates the runner is able to run untagged jobs. + */ + runUntagged: boolean; + + /** + * Type of the runner. + */ + runnerType: XGitLabCiRunnerType; + + /** + * First eight characters of the runner's token used to authenticate new job requests. Used as the runner's unique ID. + */ + shortSha: string | null; + + /** + * Status of the runner. + */ + status: XGitLabCiRunnerStatus; + + /** + * Tags associated with the runner. + */ + tagList: Array | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabRunnerPermissions; + + /** + * Version of the runner. + */ + version: string | null; +} + +export const enum XGitLabCiRunnerAccessLevel { + /** + * A runner that is not protected. + */ + NOT_PROTECTED = 'NOT_PROTECTED', + + /** + * A runner that is ref protected. + */ + REF_PROTECTED = 'REF_PROTECTED', +} + +/** + * The connection type for CiRunner. + */ +export interface IXGitLabCiRunnerConnection { + __typename: '_xGitLabCiRunnerConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiRunnerEdge { + __typename: '_xGitLabCiRunnerEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiRunner | null; + + /** + * Web URL of the runner. The value depends on where you put this field in the query. You can use it for projects or groups. + */ + webUrl: string | null; +} + +/** + * Values for sorting runners + */ +export const enum XGitLabCiRunnerSort { + /** + * Ordered by contacted_at in ascending order. + */ + CONTACTED_ASC = 'CONTACTED_ASC', + + /** + * Ordered by contacted_at in descending order. + */ + CONTACTED_DESC = 'CONTACTED_DESC', + + /** + * Ordered by created_at in ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Ordered by created_at in descending order. + */ + CREATED_DESC = 'CREATED_DESC', +} + +export const enum XGitLabCiRunnerStatus { + /** + * A runner that is not paused. + */ + ACTIVE = 'ACTIVE', + + /** + * A runner that is paused. + */ + PAUSED = 'PAUSED', + + /** + * A runner that contacted this instance within the last 2 hours. + */ + ONLINE = 'ONLINE', + + /** + * A runner that has not contacted this instance within the last 2 hours. + */ + OFFLINE = 'OFFLINE', + + /** + * A runner that has never contacted this instance. + */ + NOT_CONNECTED = 'NOT_CONNECTED', +} + +export const enum XGitLabCiRunnerType { + /** + * A runner that is instance type. + */ + INSTANCE_TYPE = 'INSTANCE_TYPE', + + /** + * A runner that is group type. + */ + GROUP_TYPE = 'GROUP_TYPE', + + /** + * A runner that is project type. + */ + PROJECT_TYPE = 'PROJECT_TYPE', +} + +export interface IXGitLabCiStage { + __typename: '_xGitLabCiStage'; + + /** + * Detailed status of the stage. + */ + detailedStatus: IXGitLabDetailedStatus | null; + + /** + * Group of jobs for the stage. + */ + groups: IXGitLabCiGroupConnection | null; + + /** + * ID of the stage. + */ + id: string; + + /** + * Jobs for the stage. + */ + jobs: IXGitLabCiJobConnection | null; + + /** + * Name of the stage. + */ + name: string | null; + + /** + * Status of the pipeline stage. + */ + status: string | null; +} + +export interface IGroupsOnXGitLabCiStageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IJobsOnXGitLabCiStageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for CiStage. + */ +export interface IXGitLabCiStageConnection { + __typename: '_xGitLabCiStageConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCiStageEdge { + __typename: '_xGitLabCiStageEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCiStage | null; +} + +/** + * GitLab CI/CD configuration template. + */ +export interface IXGitLabCiTemplate { + __typename: '_xGitLabCiTemplate'; + + /** + * Contents of the CI template. + */ + content: string; + + /** + * Name of the CI template. + */ + name: string; +} + +export interface IXGitLabClusterAgent { + __typename: '_xGitLabClusterAgent'; + + /** + * Active connections for the cluster agent + */ + connections: IXGitLabConnectedAgentConnection | null; + + /** + * Timestamp the cluster agent was created. + */ + createdAt: any | null; + + /** + * User object, containing information about the person who created the agent. + */ + createdByUser: IXGitLabUserCore | null; + + /** + * ID of the cluster agent. + */ + id: string; + + /** + * Name of the cluster agent. + */ + name: string | null; + + /** + * Project this cluster agent is associated with. + */ + project: IXGitLabProject | null; + + /** + * Tokens associated with the cluster agent. + */ + tokens: IXGitLabClusterAgentTokenConnection | null; + + /** + * Timestamp the cluster agent was updated. + */ + updatedAt: any | null; + + /** + * Web path of the cluster agent. + */ + webPath: string | null; +} + +export interface IConnectionsOnXGitLabClusterAgentArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITokensOnXGitLabClusterAgentArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for ClusterAgent. + */ +export interface IXGitLabClusterAgentConnection { + __typename: '_xGitLabClusterAgentConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of ClusterAgentDelete + */ +export interface IXGitLabClusterAgentDeleteInput { + /** + * Global ID of the cluster agent that will be deleted. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ClusterAgentDelete + */ +export interface IXGitLabClusterAgentDeletePayload { + __typename: '_xGitLabClusterAgentDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabClusterAgentEdge { + __typename: '_xGitLabClusterAgentEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabClusterAgent | null; +} + +export interface IXGitLabClusterAgentToken { + __typename: '_xGitLabClusterAgentToken'; + + /** + * Cluster agent this token is associated with. + */ + clusterAgent: IXGitLabClusterAgent | null; + + /** + * Timestamp the token was created. + */ + createdAt: any | null; + + /** + * User who created the token. + */ + createdByUser: IXGitLabUserCore | null; + + /** + * Description of the token. + */ + description: string | null; + + /** + * Global ID of the token. + */ + id: any; + + /** + * Timestamp the token was last used. + */ + lastUsedAt: any | null; + + /** + * Name given to the token. + */ + name: string | null; +} + +/** + * The connection type for ClusterAgentToken. + */ +export interface IXGitLabClusterAgentTokenConnection { + __typename: '_xGitLabClusterAgentTokenConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of ClusterAgentTokenCreate + */ +export interface IXGitLabClusterAgentTokenCreateInput { + /** + * Global ID of the cluster agent that will be associated with the new token. + */ + clusterAgentId: any; + + /** + * Description of the token. + */ + description?: string | null; + + /** + * Name of the token. + */ + name: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ClusterAgentTokenCreate + */ +export interface IXGitLabClusterAgentTokenCreatePayload { + __typename: '_xGitLabClusterAgentTokenCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Token secret value. Make sure you save it - you won't be able to access it again. + */ + secret: string | null; + + /** + * Token created after mutation. + */ + token: IXGitLabClusterAgentToken | null; +} + +/** + * Autogenerated input type of ClusterAgentTokenDelete + */ +export interface IXGitLabClusterAgentTokenDeleteInput { + /** + * Global ID of the cluster agent token that will be deleted. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ClusterAgentTokenDelete + */ +export interface IXGitLabClusterAgentTokenDeletePayload { + __typename: '_xGitLabClusterAgentTokenDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabClusterAgentTokenEdge { + __typename: '_xGitLabClusterAgentTokenEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabClusterAgentToken | null; +} + +/** + * Represents the code coverage activity for a group + */ +export interface IXGitLabCodeCoverageActivity { + __typename: '_xGitLabCodeCoverageActivity'; + + /** + * Average percentage of the different code coverage results available for the group. + */ + averageCoverage: number | null; + + /** + * Number of different code coverage results available for the group. + */ + coverageCount: number | null; + + /** + * Date when the code coverage was created. + */ + date: any; + + /** + * Number of projects with code coverage results for the group. + */ + projectCount: number | null; +} + +/** + * The connection type for CodeCoverageActivity. + */ +export interface IXGitLabCodeCoverageActivityConnection { + __typename: '_xGitLabCodeCoverageActivityConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCodeCoverageActivityEdge { + __typename: '_xGitLabCodeCoverageActivityEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCodeCoverageActivity | null; +} + +/** + * Represents the code coverage summary for a project + */ +export interface IXGitLabCodeCoverageSummary { + __typename: '_xGitLabCodeCoverageSummary'; + + /** + * Average percentage of the different code coverage results available for the project. + */ + averageCoverage: number | null; + + /** + * Number of different code coverage results available. + */ + coverageCount: number | null; + + /** + * Latest date when the code coverage was created for the project. + */ + lastUpdatedOn: any | null; +} + +/** + * Represents a code quality degradation on the pipeline. + */ +export interface IXGitLabCodeQualityDegradation { + __typename: '_xGitLabCodeQualityDegradation'; + + /** + * Description of the code quality degradation. + */ + description: string; + + /** + * Unique fingerprint to identify the code quality degradation. For example, an MD5 hash. + */ + fingerprint: string; + + /** + * Line on which the code quality degradation occurred. + */ + line: number; + + /** + * Relative path to the file containing the code quality degradation. + */ + path: string; + + /** + * Status of the degradation (BLOCKER, CRITICAL, MAJOR, MINOR, INFO). + */ + severity: XGitLabCodeQualityDegradationSeverity; +} + +/** + * The connection type for CodeQualityDegradation. + */ +export interface IXGitLabCodeQualityDegradationConnection { + __typename: '_xGitLabCodeQualityDegradationConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCodeQualityDegradationEdge { + __typename: '_xGitLabCodeQualityDegradationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCodeQualityDegradation | null; +} + +export const enum XGitLabCodeQualityDegradationSeverity { + /** + * Code Quality degradation has a status of blocker. + */ + BLOCKER = 'BLOCKER', + + /** + * Code Quality degradation has a status of critical. + */ + CRITICAL = 'CRITICAL', + + /** + * Code Quality degradation has a status of major. + */ + MAJOR = 'MAJOR', + + /** + * Code Quality degradation has a status of minor. + */ + MINOR = 'MINOR', + + /** + * Code Quality degradation has a status of info. + */ + INFO = 'INFO', +} + +export interface IXGitLabCommit { + __typename: '_xGitLabCommit'; + + /** + * Author of the commit. + */ + author: IXGitLabUserCore | null; + + /** + * Commit authors gravatar. + */ + authorGravatar: string | null; + + /** + * Commit authors name. + */ + authorName: string | null; + + /** + * Timestamp of when the commit was authored. + */ + authoredDate: any | null; + + /** + * Description of the commit message. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * ID (global ID) of the commit. + */ + id: string; + + /** + * Raw commit message. + */ + message: string | null; + + /** + * Pipelines of the commit ordered latest first. + */ + pipelines: IXGitLabPipelineConnection | null; + + /** + * SHA1 ID of the commit. + */ + sha: string; + + /** + * Short SHA1 ID of the commit. + */ + shortId: string; + + /** + * Rendered HTML of the commit signature. + */ + signatureHtml: string | null; + + /** + * Title of the commit message. + */ + title: string | null; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Web path of the commit. + */ + webPath: string; + + /** + * Web URL of the commit. + */ + webUrl: string; +} + +export interface IPipelinesOnXGitLabCommitArguments { + /** + * Filter pipelines by their status. + */ + status?: XGitLabPipelineStatusEnum | null; + + /** + * Filter pipelines by the ref they are run for. + */ + ref?: string | null; + + /** + * Filter pipelines by the sha of the commit they are run for. + */ + sha?: string | null; + + /** + * Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled. + */ + source?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabCommitAction { + /** + * Action to perform: create, delete, move, update, or chmod. + */ + action: XGitLabCommitActionMode; + + /** + * Full path to the file. + */ + filePath: string; + + /** + * Content of the file. + */ + content?: string | null; + + /** + * Original full path to the file being moved. + */ + previousPath?: string | null; + + /** + * Last known file commit ID. + */ + lastCommitId?: string | null; + + /** + * Enables/disables the execute flag on the file. + */ + executeFilemode?: boolean | null; + + /** + * Encoding of the file. Default is text. + */ + encoding?: XGitLabCommitEncoding | null; +} + +/** + * Mode of a commit action + */ +export const enum XGitLabCommitActionMode { + /** + * Create command. + */ + CREATE = 'CREATE', + + /** + * Delete command. + */ + DELETE = 'DELETE', + + /** + * Move command. + */ + MOVE = 'MOVE', + + /** + * Update command. + */ + UPDATE = 'UPDATE', + + /** + * Chmod command. + */ + CHMOD = 'CHMOD', +} + +/** + * The connection type for Commit. + */ +export interface IXGitLabCommitConnection { + __typename: '_xGitLabCommitConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of CommitCreate + */ +export interface IXGitLabCommitCreateInput { + /** + * Project full path the branch is associated with. + */ + projectPath: string; + + /** + * Name of the branch to commit into, it can be a new branch. + */ + branch: string; + + /** + * If on a new branch, name of the original branch. + */ + startBranch?: string | null; + + /** + * Raw commit message. + */ + message: string; + + /** + * Array of action hashes to commit as a batch. + */ + actions: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CommitCreate + */ +export interface IXGitLabCommitCreatePayload { + __typename: '_xGitLabCommitCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Commit after mutation. + */ + commit: IXGitLabCommit | null; + + /** + * ETag path for the commit's pipeline. + */ + commitPipelinePath: string | null; + + /** + * Contents of the commit. + */ + content: Array | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCommitEdge { + __typename: '_xGitLabCommitEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCommit | null; +} + +export const enum XGitLabCommitEncoding { + /** + * Text encoding. + */ + TEXT = 'TEXT', + + /** + * Base64 encoding. + */ + BASE64 = 'BASE64', +} + +/** + * Represents a ComplianceFramework associated with a Project + */ +export interface IXGitLabComplianceFramework { + __typename: '_xGitLabComplianceFramework'; + + /** + * Hexadecimal representation of compliance framework's label color. + */ + color: string; + + /** + * Description of the compliance framework. + */ + description: string; + + /** + * Compliance framework ID. + */ + id: string; + + /** + * Name of the compliance framework. + */ + name: string; + + /** + * Full path of the compliance pipeline configuration stored in a project + * repository, such as `.gitlab/.compliance-gitlab-ci.yml@compliance/hipaa` + * **(ULTIMATE)**. + */ + pipelineConfigurationFullPath: string | null; +} + +/** + * The connection type for ComplianceFramework. + */ +export interface IXGitLabComplianceFrameworkConnection { + __typename: '_xGitLabComplianceFrameworkConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabComplianceFrameworkEdge { + __typename: '_xGitLabComplianceFrameworkEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabComplianceFramework | null; +} + +export interface IXGitLabComplianceFrameworkInput { + /** + * New name for the compliance framework. + */ + name?: string | null; + + /** + * New description for the compliance framework. + */ + description?: string | null; + + /** + * New color representation of the compliance framework in hex format. e.g. #FCA121. + */ + color?: string | null; + + /** + * Full path of the compliance pipeline configuration stored in a project + * repository, such as `.gitlab/.compliance-gitlab-ci.yml@compliance/hipaa` + * **(ULTIMATE)**. + */ + pipelineConfigurationFullPath?: string | null; +} + +/** + * Composer metadata + */ +export interface IXGitLabComposerMetadata { + __typename: '_xGitLabComposerMetadata'; + + /** + * Data of the Composer JSON file. + */ + composerJson: IXGitLabPackageComposerJsonType; + + /** + * Target SHA of the package. + */ + targetSha: string; +} + +/** + * Conan file metadata + */ +export interface IXGitLabConanFileMetadata { + __typename: '_xGitLabConanFileMetadata'; + + /** + * Type of the Conan file. + */ + conanFileType: XGitLabConanMetadatumFileTypeEnum; + + /** + * Reference of the Conan package. + */ + conanPackageReference: string | null; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * ID of the metadatum. + */ + id: any; + + /** + * Revision of the package. + */ + packageRevision: string | null; + + /** + * Revision of the Conan recipe. + */ + recipeRevision: string; + + /** + * Date of most recent update. + */ + updatedAt: any; +} + +/** + * Conan metadata + */ +export interface IXGitLabConanMetadata { + __typename: '_xGitLabConanMetadata'; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * ID of the metadatum. + */ + id: any; + + /** + * Channel of the Conan package. + */ + packageChannel: string; + + /** + * Username of the Conan package. + */ + packageUsername: string; + + /** + * Recipe of the Conan package. + */ + recipe: string; + + /** + * Recipe path of the Conan package. + */ + recipePath: string; + + /** + * Date of most recent update. + */ + updatedAt: any; +} + +/** + * Conan file types + */ +export const enum XGitLabConanMetadatumFileTypeEnum { + /** + * A recipe file type. + */ + RECIPE_FILE = 'RECIPE_FILE', + + /** + * A package file type. + */ + PACKAGE_FILE = 'PACKAGE_FILE', +} + +/** + * Autogenerated input type of ConfigureDependencyScanning + */ +export interface IXGitLabConfigureDependencyScanningInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ConfigureDependencyScanning + */ +export interface IXGitLabConfigureDependencyScanningPayload { + __typename: '_xGitLabConfigureDependencyScanningPayload'; + + /** + * Branch that has the new/modified `.gitlab-ci.yml` file. + */ + branch: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Redirect path to use when the response is successful. + */ + successPath: string | null; +} + +/** + * Autogenerated input type of ConfigureSast + */ +export interface IXGitLabConfigureSastInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * SAST CI configuration for the project. + */ + configuration: IXGitLabSastCiConfigurationInput; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ConfigureSast + */ +export interface IXGitLabConfigureSastPayload { + __typename: '_xGitLabConfigureSastPayload'; + + /** + * Branch that has the new/modified `.gitlab-ci.yml` file. + */ + branch: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Redirect path to use when the response is successful. + */ + successPath: string | null; +} + +/** + * Autogenerated input type of ConfigureSecretDetection + */ +export interface IXGitLabConfigureSecretDetectionInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ConfigureSecretDetection + */ +export interface IXGitLabConfigureSecretDetectionPayload { + __typename: '_xGitLabConfigureSecretDetectionPayload'; + + /** + * Branch that has the new/modified `.gitlab-ci.yml` file. + */ + branch: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Redirect path to use when the response is successful. + */ + successPath: string | null; +} + +/** + * Connection details for an Agent + */ +export interface IXGitLabConnectedAgent { + __typename: '_xGitLabConnectedAgent'; + + /** + * When the connection was established. + */ + connectedAt: any | null; + + /** + * ID of the connection. + */ + connectionId: any | null; + + /** + * Information about the Agent. + */ + metadata: IXGitLabAgentMetadata | null; +} + +/** + * The connection type for ConnectedAgent. + */ +export interface IXGitLabConnectedAgentConnection { + __typename: '_xGitLabConnectedAgentConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabConnectedAgentEdge { + __typename: '_xGitLabConnectedAgentEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabConnectedAgent | null; +} + +/** + * A tag expiration policy designed to keep only the images that matter most + */ +export interface IXGitLabContainerExpirationPolicy { + __typename: '_xGitLabContainerExpirationPolicy'; + + /** + * This container expiration policy schedule. + */ + cadence: XGitLabContainerExpirationPolicyCadenceEnum; + + /** + * Timestamp of when the container expiration policy was created. + */ + createdAt: any; + + /** + * Indicates whether this container expiration policy is enabled. + */ + enabled: boolean; + + /** + * Number of tags to retain. + */ + keepN: XGitLabContainerExpirationPolicyKeepEnum | null; + + /** + * Tags with names matching this regex pattern will expire. + */ + nameRegex: any | null; + + /** + * Tags with names matching this regex pattern will be preserved. + */ + nameRegexKeep: any | null; + + /** + * Next time that this container expiration policy will get executed. + */ + nextRunAt: any | null; + + /** + * Tags older that this will expire. + */ + olderThan: XGitLabContainerExpirationPolicyOlderThanEnum | null; + + /** + * Timestamp of when the container expiration policy was updated. + */ + updatedAt: any; +} + +export const enum XGitLabContainerExpirationPolicyCadenceEnum { + /** + * Every day + */ + EVERY_DAY = 'EVERY_DAY', + + /** + * Every week + */ + EVERY_WEEK = 'EVERY_WEEK', + + /** + * Every two weeks + */ + EVERY_TWO_WEEKS = 'EVERY_TWO_WEEKS', + + /** + * Every month + */ + EVERY_MONTH = 'EVERY_MONTH', + + /** + * Every three months + */ + EVERY_THREE_MONTHS = 'EVERY_THREE_MONTHS', +} + +export const enum XGitLabContainerExpirationPolicyKeepEnum { + /** + * 1 tag per image name + */ + ONE_TAG = 'ONE_TAG', + + /** + * 5 tags per image name + */ + FIVE_TAGS = 'FIVE_TAGS', + + /** + * 10 tags per image name + */ + TEN_TAGS = 'TEN_TAGS', + + /** + * 25 tags per image name + */ + TWENTY_FIVE_TAGS = 'TWENTY_FIVE_TAGS', + + /** + * 50 tags per image name + */ + FIFTY_TAGS = 'FIFTY_TAGS', + + /** + * 100 tags per image name + */ + ONE_HUNDRED_TAGS = 'ONE_HUNDRED_TAGS', +} + +export const enum XGitLabContainerExpirationPolicyOlderThanEnum { + /** + * 7 days until tags are automatically removed + */ + SEVEN_DAYS = 'SEVEN_DAYS', + + /** + * 14 days until tags are automatically removed + */ + FOURTEEN_DAYS = 'FOURTEEN_DAYS', + + /** + * 30 days until tags are automatically removed + */ + THIRTY_DAYS = 'THIRTY_DAYS', + + /** + * 60 days until tags are automatically removed + */ + SIXTY_DAYS = 'SIXTY_DAYS', + + /** + * 90 days until tags are automatically removed + */ + NINETY_DAYS = 'NINETY_DAYS', +} + +/** + * A container repository + */ +export interface IXGitLabContainerRepository { + __typename: '_xGitLabContainerRepository'; + + /** + * Can the current user delete the container repository. + */ + canDelete: boolean; + + /** + * Timestamp when the container repository was created. + */ + createdAt: any; + + /** + * Tags cleanup status for the container repository. + */ + expirationPolicyCleanupStatus: XGitLabContainerRepositoryCleanupStatus | null; + + /** + * Timestamp when the cleanup done by the expiration policy was started on the container repository. + */ + expirationPolicyStartedAt: any | null; + + /** + * ID of the container repository. + */ + id: string; + + /** + * URL of the container repository. + */ + location: string; + + /** + * Name of the container repository. + */ + name: string; + + /** + * Path of the container repository. + */ + path: string; + + /** + * Project of the container registry. + */ + project: IXGitLabProject; + + /** + * Status of the container repository. + */ + status: XGitLabContainerRepositoryStatus | null; + + /** + * Number of tags associated with this image. + */ + tagsCount: number; + + /** + * Timestamp when the container repository was updated. + */ + updatedAt: any; +} + +/** + * Status of the tags cleanup of a container repository + */ +export const enum XGitLabContainerRepositoryCleanupStatus { + /** + * Tags cleanup is not scheduled. This is the default state. + */ + UNSCHEDULED = 'UNSCHEDULED', + + /** + * Tags cleanup is scheduled and is going to be executed shortly. + */ + SCHEDULED = 'SCHEDULED', + + /** + * Tags cleanup has been partially executed. There are still remaining tags to delete. + */ + UNFINISHED = 'UNFINISHED', + + /** + * Tags cleanup is ongoing. + */ + ONGOING = 'ONGOING', +} + +/** + * The connection type for ContainerRepository. + */ +export interface IXGitLabContainerRepositoryConnection { + __typename: '_xGitLabContainerRepositoryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Details of a container repository + */ +export interface IXGitLabContainerRepositoryDetails { + __typename: '_xGitLabContainerRepositoryDetails'; + + /** + * Can the current user delete the container repository. + */ + canDelete: boolean; + + /** + * Timestamp when the container repository was created. + */ + createdAt: any; + + /** + * Tags cleanup status for the container repository. + */ + expirationPolicyCleanupStatus: XGitLabContainerRepositoryCleanupStatus | null; + + /** + * Timestamp when the cleanup done by the expiration policy was started on the container repository. + */ + expirationPolicyStartedAt: any | null; + + /** + * ID of the container repository. + */ + id: string; + + /** + * URL of the container repository. + */ + location: string; + + /** + * Name of the container repository. + */ + name: string; + + /** + * Path of the container repository. + */ + path: string; + + /** + * Project of the container registry. + */ + project: IXGitLabProject; + + /** + * Status of the container repository. + */ + status: XGitLabContainerRepositoryStatus | null; + + /** + * Tags of the container repository. + */ + tags: IXGitLabContainerRepositoryTagConnection | null; + + /** + * Number of tags associated with this image. + */ + tagsCount: number; + + /** + * Timestamp when the container repository was updated. + */ + updatedAt: any; +} + +export interface ITagsOnXGitLabContainerRepositoryDetailsArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabContainerRepositoryEdge { + __typename: '_xGitLabContainerRepositoryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabContainerRepository | null; +} + +/** + * Values for sorting container repositories + */ +export const enum XGitLabContainerRepositorySort { + /** + * Updated at descending order. + * @deprecated "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5." + */ + updated_desc = 'updated_desc', + + /** + * Updated at ascending order. + * @deprecated "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5." + */ + updated_asc = 'updated_asc', + + /** + * Created at descending order. + * @deprecated "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5." + */ + created_desc = 'created_desc', + + /** + * Created at ascending order. + * @deprecated "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5." + */ + created_asc = 'created_asc', + + /** + * Updated at descending order. + */ + UPDATED_DESC = 'UPDATED_DESC', + + /** + * Updated at ascending order. + */ + UPDATED_ASC = 'UPDATED_ASC', + + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Name by ascending order. + */ + NAME_ASC = 'NAME_ASC', + + /** + * Name by descending order. + */ + NAME_DESC = 'NAME_DESC', +} + +/** + * Status of a container repository + */ +export const enum XGitLabContainerRepositoryStatus { + /** + * Delete Scheduled status. + */ + DELETE_SCHEDULED = 'DELETE_SCHEDULED', + + /** + * Delete Failed status. + */ + DELETE_FAILED = 'DELETE_FAILED', +} + +/** + * A tag from a container repository + */ +export interface IXGitLabContainerRepositoryTag { + __typename: '_xGitLabContainerRepositoryTag'; + + /** + * Can the current user delete this tag. + */ + canDelete: boolean; + + /** + * Timestamp when the tag was created. + */ + createdAt: any | null; + + /** + * Digest of the tag. + */ + digest: string | null; + + /** + * URL of the tag. + */ + location: string; + + /** + * Name of the tag. + */ + name: string; + + /** + * Path of the tag. + */ + path: string; + + /** + * Revision of the tag. + */ + revision: string | null; + + /** + * Short revision of the tag. + */ + shortRevision: string | null; + + /** + * Size of the tag. + */ + totalSize: any | null; +} + +/** + * The connection type for ContainerRepositoryTag. + */ +export interface IXGitLabContainerRepositoryTagConnection { + __typename: '_xGitLabContainerRepositoryTagConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabContainerRepositoryTagEdge { + __typename: '_xGitLabContainerRepositoryTagEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabContainerRepositoryTag | null; +} + +/** + * Autogenerated input type of CreateAlertIssue + */ +export interface IXGitLabCreateAlertIssueInput { + /** + * Project the alert to mutate is in. + */ + projectPath: string; + + /** + * IID of the alert to mutate. + */ + iid: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateAlertIssue + */ +export interface IXGitLabCreateAlertIssuePayload { + __typename: '_xGitLabCreateAlertIssuePayload'; + + /** + * Alert after mutation. + */ + alert: IXGitLabAlertManagementAlert | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue created after mutation. + */ + issue: IXGitLabIssue | null; + + /** + * To-do item after mutation. + */ + todo: IXGitLabTodo | null; +} + +/** + * Autogenerated input type of CreateAnnotation + */ +export interface IXGitLabCreateAnnotationInput { + /** + * Global ID of the environment to add an annotation to. + */ + environmentId?: any | null; + + /** + * Global ID of the cluster to add an annotation to. + */ + clusterId?: any | null; + + /** + * Timestamp indicating starting moment to which the annotation relates. + */ + startingAt: any; + + /** + * Timestamp indicating ending moment to which the annotation relates. + */ + endingAt?: any | null; + + /** + * Path to a file defining the dashboard on which the annotation should be added. + */ + dashboardPath: string; + + /** + * Description of the annotation. + */ + description: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateAnnotation + */ +export interface IXGitLabCreateAnnotationPayload { + __typename: '_xGitLabCreateAnnotationPayload'; + + /** + * Created annotation. + */ + annotation: IXGitLabMetricsDashboardAnnotation | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CreateBoard + */ +export interface IXGitLabCreateBoardInput { + /** + * Full path of the project with which the resource is associated. + */ + projectPath?: string | null; + + /** + * Full path of the group with which the resource is associated. + */ + groupPath?: string | null; + + /** + * Board name. + */ + name?: string | null; + + /** + * Whether or not backlog list is hidden. + */ + hideBacklogList?: boolean | null; + + /** + * Whether or not closed list is hidden. + */ + hideClosedList?: boolean | null; + + /** + * ID of user to be assigned to the board. + */ + assigneeId?: any | null; + + /** + * ID of milestone to be assigned to the board. + */ + milestoneId?: any | null; + + /** + * ID of iteration to be assigned to the board. + */ + iterationId?: any | null; + + /** + * ID of iteration cadence to be assigned to the board. + */ + iterationCadenceId?: any | null; + + /** + * Weight value to be assigned to the board. + */ + weight?: number | null; + + /** + * Labels of the issue. + */ + labels?: Array | null; + + /** + * IDs of labels to be added to the board. + */ + labelIds?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateBoard + */ +export interface IXGitLabCreateBoardPayload { + __typename: '_xGitLabCreateBoardPayload'; + + /** + * Board after mutation. + */ + board: IXGitLabBoard | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CreateBranch + */ +export interface IXGitLabCreateBranchInput { + /** + * Project full path the branch is associated with. + */ + projectPath: string; + + /** + * Name of the branch. + */ + name: string; + + /** + * Branch name or commit SHA to create branch from. + */ + ref: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateBranch + */ +export interface IXGitLabCreateBranchPayload { + __typename: '_xGitLabCreateBranchPayload'; + + /** + * Branch after mutation. + */ + branch: IXGitLabBranch | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CreateClusterAgent + */ +export interface IXGitLabCreateClusterAgentInput { + /** + * Full path of the associated project for this cluster agent. + */ + projectPath: string; + + /** + * Name of the cluster agent. + */ + name: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateClusterAgent + */ +export interface IXGitLabCreateClusterAgentPayload { + __typename: '_xGitLabCreateClusterAgentPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Cluster agent created after mutation. + */ + clusterAgent: IXGitLabClusterAgent | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CreateComplianceFramework + */ +export interface IXGitLabCreateComplianceFrameworkInput { + /** + * Full path of the namespace to add the compliance framework to. + */ + namespacePath: string; + + /** + * Parameters to update the compliance framework with. + */ + params: IXGitLabComplianceFrameworkInput; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateComplianceFramework + */ +export interface IXGitLabCreateComplianceFrameworkPayload { + __typename: '_xGitLabCreateComplianceFrameworkPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Created compliance framework. + */ + framework: IXGitLabComplianceFramework | null; +} + +/** + * Autogenerated input type of CreateCustomEmoji + */ +export interface IXGitLabCreateCustomEmojiInput { + /** + * Namespace full path the emoji is associated with. + */ + groupPath: string; + + /** + * Name of the emoji. + */ + name: string; + + /** + * Location of the emoji file. + */ + url: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateCustomEmoji + */ +export interface IXGitLabCreateCustomEmojiPayload { + __typename: '_xGitLabCreateCustomEmojiPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * New custom emoji. + */ + customEmoji: IXGitLabCustomEmoji | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CreateDiffNote + */ +export interface IXGitLabCreateDiffNoteInput { + /** + * Global ID of the resource to add a note to. + */ + noteableId: any; + + /** + * Content of the note. + */ + body: string; + + /** + * Confidentiality flag of a note. Default is false. + */ + confidential?: boolean | null; + + /** + * Position of this note on a diff. + */ + position: IXGitLabDiffPositionInput; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateDiffNote + */ +export interface IXGitLabCreateDiffNotePayload { + __typename: '_xGitLabCreateDiffNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +/** + * Autogenerated input type of CreateEpic + */ +export interface IXGitLabCreateEpicInput { + /** + * Group the epic to mutate is in. + */ + groupPath: string; + + /** + * Title of the epic. + */ + title?: string | null; + + /** + * Description of the epic. + */ + description?: string | null; + + /** + * Indicates if the epic is confidential. + */ + confidential?: boolean | null; + + /** + * Start date of the epic. + */ + startDateFixed?: string | null; + + /** + * End date of the epic. + */ + dueDateFixed?: string | null; + + /** + * Indicates start date should be sourced from start_date_fixed field not the issue milestones. + */ + startDateIsFixed?: boolean | null; + + /** + * Indicates end date should be sourced from due_date_fixed field not the issue milestones. + */ + dueDateIsFixed?: boolean | null; + + /** + * IDs of labels to be added to the epic. + */ + addLabelIds?: Array | null; + + /** + * IDs of labels to be removed from the epic. + */ + removeLabelIds?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateEpic + */ +export interface IXGitLabCreateEpicPayload { + __typename: '_xGitLabCreateEpicPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Created epic. + */ + epic: IXGitLabEpic | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of CreateImageDiffNote + */ +export interface IXGitLabCreateImageDiffNoteInput { + /** + * Global ID of the resource to add a note to. + */ + noteableId: any; + + /** + * Content of the note. + */ + body: string; + + /** + * Confidentiality flag of a note. Default is false. + */ + confidential?: boolean | null; + + /** + * Position of this note on a diff. + */ + position: IXGitLabDiffImagePositionInput; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateImageDiffNote + */ +export interface IXGitLabCreateImageDiffNotePayload { + __typename: '_xGitLabCreateImageDiffNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +/** + * Autogenerated input type of CreateIssue + */ +export interface IXGitLabCreateIssueInput { + /** + * Description of the issue. + */ + description?: string | null; + + /** + * Due date of the issue. + */ + dueDate?: any | null; + + /** + * Indicates the issue is confidential. + */ + confidential?: boolean | null; + + /** + * Indicates discussion is locked on the issue. + */ + locked?: boolean | null; + + /** + * Type of the issue. + */ + type?: XGitLabIssueType | null; + + /** + * Project full path the issue is associated with. + */ + projectPath: string; + + /** + * IID (internal ID) of a project issue. Only admins and project owners can modify. + */ + iid?: number | null; + + /** + * Title of the issue. + */ + title: string; + + /** + * ID of the milestone to assign to the issue. On update milestone will be removed if set to null. + */ + milestoneId?: any | null; + + /** + * Labels of the issue. + */ + labels?: Array | null; + + /** + * IDs of labels to be added to the issue. + */ + labelIds?: Array | null; + + /** + * Timestamp when the issue was created. Available only for admins and project owners. + */ + createdAt?: any | null; + + /** + * IID of a merge request for which to resolve discussions. + */ + mergeRequestToResolveDiscussionsOf?: any | null; + + /** + * ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`. + */ + discussionToResolve?: string | null; + + /** + * Array of user IDs to assign to the issue. + */ + assigneeIds?: Array | null; + + /** + * Desired health status. + */ + healthStatus?: XGitLabHealthStatus | null; + + /** + * Weight of the issue. + */ + weight?: number | null; + + /** + * ID of an epic to associate the issue with. + */ + epicId?: any | null; + + /** + * Global iteration ID. Mutually exlusive argument with `iterationWildcardId`. + */ + iterationId?: any | null; + + /** + * Iteration wildcard ID. Supported values are: `CURRENT`. Mutually exclusive + * argument with `iterationId`. iterationCadenceId also required when this + * argument is provided. + */ + iterationWildcardId?: XGitLabIssueCreationIterationWildcardId | null; + + /** + * Global iteration cadence ID. Required when `iterationWildcardId` is provided. + */ + iterationCadenceId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateIssue + */ +export interface IXGitLabCreateIssuePayload { + __typename: '_xGitLabCreateIssuePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of CreateIteration + */ +export interface IXGitLabCreateIterationInput { + /** + * Full path of the project with which the resource is associated. + */ + projectPath?: string | null; + + /** + * Full path of the group with which the resource is associated. + */ + groupPath?: string | null; + + /** + * Global ID of the iterations cadence to be assigned to newly created iteration. + */ + iterationsCadenceId?: any | null; + + /** + * Title of the iteration. + */ + title?: string | null; + + /** + * Description of the iteration. + */ + description?: string | null; + + /** + * Start date of the iteration. + */ + startDate?: string | null; + + /** + * End date of the iteration. + */ + dueDate?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateIteration + */ +export interface IXGitLabCreateIterationPayload { + __typename: '_xGitLabCreateIterationPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Created iteration. + */ + iteration: IXGitLabIteration | null; +} + +/** + * Autogenerated input type of CreateNote + */ +export interface IXGitLabCreateNoteInput { + /** + * Global ID of the resource to add a note to. + */ + noteableId: any; + + /** + * Content of the note. + */ + body: string; + + /** + * Confidentiality flag of a note. Default is false. + */ + confidential?: boolean | null; + + /** + * Global ID of the discussion this note is in reply to. + */ + discussionId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateNote + */ +export interface IXGitLabCreateNotePayload { + __typename: '_xGitLabCreateNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +/** + * Autogenerated input type of CreateRequirement + */ +export interface IXGitLabCreateRequirementInput { + /** + * Title of the requirement. + */ + title?: string | null; + + /** + * Description of the requirement. + */ + description?: string | null; + + /** + * Full project path the requirement is associated with. + */ + projectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateRequirement + */ +export interface IXGitLabCreateRequirementPayload { + __typename: '_xGitLabCreateRequirementPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Requirement after mutation. + */ + requirement: IXGitLabRequirement | null; +} + +/** + * Autogenerated input type of CreateSnippet + */ +export interface IXGitLabCreateSnippetInput { + /** + * Title of the snippet. + */ + title: string; + + /** + * Description of the snippet. + */ + description?: string | null; + + /** + * Visibility level of the snippet. + */ + visibilityLevel: XGitLabVisibilityLevelsEnum; + + /** + * Full path of the project the snippet is associated with. + */ + projectPath?: string | null; + + /** + * Paths to files uploaded in the snippet description. + */ + uploadedFiles?: Array | null; + + /** + * Actions to perform over the snippet repository and blobs. + */ + blobActions?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateSnippet + */ +export interface IXGitLabCreateSnippetPayload { + __typename: '_xGitLabCreateSnippetPayload'; + + /** + * CAPTCHA site key which must be used to render a challenge for the user to + * solve to obtain a valid captchaResponse value. Included only when an operation + * was not completed because "NeedsCaptchaResponse" is true. Deprecated in 13.11: + * Use spam protection with HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + captchaSiteKey: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Indicates whether the operation was detected as possible spam and not + * completed. If CAPTCHA is enabled, the request must be resubmitted with a valid + * CAPTCHA response and spam_log_id included for the operation to be completed. + * Included only when an operation was not completed because + * "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam protection with + * HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + needsCaptchaResponse: boolean | null; + + /** + * Snippet after mutation. + */ + snippet: IXGitLabSnippet | null; + + /** + * Indicates whether the operation was detected as definite spam. There is no + * option to resubmit the request with a CAPTCHA response. Deprecated in 13.11: + * Use spam protection with HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + spam: boolean | null; + + /** + * Spam log ID which must be passed along with a valid CAPTCHA response for an + * operation to be completed. Included only when an operation was not completed + * because "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam + * protection with HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + spamLogId: number | null; +} + +/** + * Autogenerated input type of CreateTestCase + */ +export interface IXGitLabCreateTestCaseInput { + /** + * Test case title. + */ + title: string; + + /** + * Test case description. + */ + description?: string | null; + + /** + * IDs of labels to be added to the test case. + */ + labelIds?: Array | null; + + /** + * Project full path to create the test case in. + */ + projectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CreateTestCase + */ +export interface IXGitLabCreateTestCasePayload { + __typename: '_xGitLabCreateTestCasePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Test case created. + */ + testCase: IXGitLabIssue | null; +} + +/** + * Represents the current license + */ +export interface IXGitLabCurrentLicense { + __typename: '_xGitLabCurrentLicense'; + + /** + * Date when the license was activated. + */ + activatedAt: any | null; + + /** + * Number of billable users on the system. + */ + billableUsersCount: number | null; + + /** + * Date, including grace period, when licensed features will be blocked. + */ + blockChangesAt: any | null; + + /** + * Company of the licensee. + */ + company: string | null; + + /** + * Email of the licensee. + */ + email: string | null; + + /** + * Date when the license expires. + */ + expiresAt: any | null; + + /** + * ID of the license. + */ + id: string; + + /** + * Date when the license was last synced. + */ + lastSync: any | null; + + /** + * Highest number of billable users on the system during the term of the current license. + */ + maximumUserCount: number | null; + + /** + * Name of the licensee. + */ + name: string | null; + + /** + * Name of the subscription plan. + */ + plan: string; + + /** + * Date when the license started. + */ + startsAt: any | null; + + /** + * Type of the license. + */ + type: string; + + /** + * Number of paid users in the license. + */ + usersInLicenseCount: number | null; + + /** + * Number of users over the paid users in the license. + */ + usersOverLicenseCount: number | null; +} + +export type _xGitLabCurrentUserTodos = + | IXGitLabBoardEpic + | IXGitLabDesign + | IXGitLabEpic + | IXGitLabEpicIssue + | IXGitLabIssue + | IXGitLabMergeRequest; + +export interface IXGitLabCurrentUserTodos { + __typename: '_xGitLabCurrentUserTodos'; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; +} + +export interface ICurrentUserTodosOnXGitLabCurrentUserTodosArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +/** + * A custom emoji uploaded by user + */ +export interface IXGitLabCustomEmoji { + __typename: '_xGitLabCustomEmoji'; + + /** + * Whether the emoji is an external link. + */ + external: boolean; + + /** + * ID of the emoji. + */ + id: any; + + /** + * Name of the emoji. + */ + name: string; + + /** + * Link to file of the emoji. + */ + url: string; +} + +/** + * The connection type for CustomEmoji. + */ +export interface IXGitLabCustomEmojiConnection { + __typename: '_xGitLabCustomEmojiConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCustomEmojiEdge { + __typename: '_xGitLabCustomEmojiEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCustomEmoji | null; +} + +export interface IXGitLabCustomerRelationsContact { + __typename: '_xGitLabCustomerRelationsContact'; + + /** + * Timestamp the contact was created. + */ + createdAt: any; + + /** + * Description of or notes for the contact. + */ + description: string | null; + + /** + * Email address of the contact. + */ + email: string | null; + + /** + * First name of the contact. + */ + firstName: string; + + /** + * Internal ID of the contact. + */ + id: string; + + /** + * Last name of the contact. + */ + lastName: string; + + /** + * Organization of the contact. + */ + organization: IXGitLabCustomerRelationsOrganization | null; + + /** + * Phone number of the contact. + */ + phone: string | null; + + /** + * Timestamp the contact was last updated. + */ + updatedAt: any; +} + +/** + * The connection type for CustomerRelationsContact. + */ +export interface IXGitLabCustomerRelationsContactConnection { + __typename: '_xGitLabCustomerRelationsContactConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of CustomerRelationsContactCreate + */ +export interface IXGitLabCustomerRelationsContactCreateInput { + /** + * Group for the contact. + */ + groupId: any; + + /** + * Organization for the contact. + */ + organizationId?: any | null; + + /** + * First name of the contact. + */ + firstName: string; + + /** + * Last name of the contact. + */ + lastName: string; + + /** + * Phone number of the contact. + */ + phone?: string | null; + + /** + * Email address of the contact. + */ + email?: string | null; + + /** + * Description of or notes for the contact. + */ + description?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CustomerRelationsContactCreate + */ +export interface IXGitLabCustomerRelationsContactCreatePayload { + __typename: '_xGitLabCustomerRelationsContactCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Contact after the mutation. + */ + contact: IXGitLabCustomerRelationsContact | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCustomerRelationsContactEdge { + __typename: '_xGitLabCustomerRelationsContactEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCustomerRelationsContact | null; +} + +/** + * Autogenerated input type of CustomerRelationsContactUpdate + */ +export interface IXGitLabCustomerRelationsContactUpdateInput { + /** + * Global ID of the contact. + */ + id: any; + + /** + * Organization of the contact. + */ + organizationId?: any | null; + + /** + * First name of the contact. + */ + firstName?: string | null; + + /** + * Last name of the contact. + */ + lastName?: string | null; + + /** + * Phone number of the contact. + */ + phone?: string | null; + + /** + * Email address of the contact. + */ + email?: string | null; + + /** + * Description of or notes for the contact. + */ + description?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CustomerRelationsContactUpdate + */ +export interface IXGitLabCustomerRelationsContactUpdatePayload { + __typename: '_xGitLabCustomerRelationsContactUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Contact after the mutation. + */ + contact: IXGitLabCustomerRelationsContact | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export interface IXGitLabCustomerRelationsOrganization { + __typename: '_xGitLabCustomerRelationsOrganization'; + + /** + * Timestamp the organization was created. + */ + createdAt: any; + + /** + * Standard billing rate for the organization. + */ + defaultRate: number | null; + + /** + * Description of or notes for the organization. + */ + description: string | null; + + /** + * Internal ID of the organization. + */ + id: string; + + /** + * Name of the organization. + */ + name: string; + + /** + * Timestamp the organization was last updated. + */ + updatedAt: any; +} + +/** + * The connection type for CustomerRelationsOrganization. + */ +export interface IXGitLabCustomerRelationsOrganizationConnection { + __typename: '_xGitLabCustomerRelationsOrganizationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of CustomerRelationsOrganizationCreate + */ +export interface IXGitLabCustomerRelationsOrganizationCreateInput { + /** + * Group for the organization. + */ + groupId: any; + + /** + * Name of the organization. + */ + name: string; + + /** + * Standard billing rate for the organization. + */ + defaultRate?: number | null; + + /** + * Description of or notes for the organization. + */ + description?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CustomerRelationsOrganizationCreate + */ +export interface IXGitLabCustomerRelationsOrganizationCreatePayload { + __typename: '_xGitLabCustomerRelationsOrganizationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Organization after the mutation. + */ + organization: IXGitLabCustomerRelationsOrganization | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabCustomerRelationsOrganizationEdge { + __typename: '_xGitLabCustomerRelationsOrganizationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabCustomerRelationsOrganization | null; +} + +/** + * Autogenerated input type of CustomerRelationsOrganizationUpdate + */ +export interface IXGitLabCustomerRelationsOrganizationUpdateInput { + /** + * Global ID of the organization. + */ + id: any; + + /** + * Name of the organization. + */ + name?: string | null; + + /** + * Standard billing rate for the organization. + */ + defaultRate?: number | null; + + /** + * Description of or notes for the organization. + */ + description?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of CustomerRelationsOrganizationUpdate + */ +export interface IXGitLabCustomerRelationsOrganizationUpdatePayload { + __typename: '_xGitLabCustomerRelationsOrganizationUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Organization after the mutation. + */ + organization: IXGitLabCustomerRelationsOrganization; +} + +/** + * Autogenerated input type of DastOnDemandScanCreate + */ +export interface IXGitLabDastOnDemandScanCreateInput { + /** + * Project the site profile belongs to. + */ + fullPath: string; + + /** + * ID of the site profile to be used for the scan. + */ + dastSiteProfileId: any; + + /** + * ID of the scanner profile to be used for the scan. + */ + dastScannerProfileId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastOnDemandScanCreate + */ +export interface IXGitLabDastOnDemandScanCreatePayload { + __typename: '_xGitLabDastOnDemandScanCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * URL of the pipeline that was created. + */ + pipelineUrl: string | null; +} + +/** + * Represents a DAST Profile + */ +export interface IXGitLabDastProfile { + __typename: '_xGitLabDastProfile'; + + /** + * Associated branch. + */ + branch: IXGitLabDastProfileBranch | null; + + /** + * Associated profile schedule. + */ + dastProfileSchedule: IXGitLabDastProfileSchedule | null; + + /** + * Associated scanner profile. + */ + dastScannerProfile: IXGitLabDastScannerProfile | null; + + /** + * Associated site profile. + */ + dastSiteProfile: IXGitLabDastSiteProfile | null; + + /** + * Description of the scan. + */ + description: string | null; + + /** + * Relative web path to the edit page of a profile. + */ + editPath: string | null; + + /** + * ID of the profile. + */ + id: any; + + /** + * Name of the profile. + */ + name: string | null; +} + +/** + * Represents a DAST Profile Branch + */ +export interface IXGitLabDastProfileBranch { + __typename: '_xGitLabDastProfileBranch'; + + /** + * Indicates whether or not the branch exists. + */ + exists: boolean | null; + + /** + * Name of the branch. + */ + name: string | null; +} + +/** + * Represents DAST Profile Cadence. + */ +export interface IXGitLabDastProfileCadence { + __typename: '_xGitLabDastProfileCadence'; + + /** + * Duration of the DAST profile cadence. + */ + duration: number | null; + + /** + * Unit for the duration of DAST profile cadence. + */ + unit: XGitLabDastProfileCadenceUnit | null; +} + +/** + * Represents DAST Profile Cadence. + */ +export interface IXGitLabDastProfileCadenceInput { + /** + * Unit for the duration of DAST Profile Cadence. + */ + unit?: XGitLabDastProfileCadenceUnit | null; + + /** + * Duration of the DAST Profile Cadence. + */ + duration?: number | null; +} + +/** + * Unit for the duration of Dast Profile Cadence. + */ +export const enum XGitLabDastProfileCadenceUnit { + /** + * DAST Profile Cadence duration in days. + */ + DAY = 'DAY', + + /** + * DAST Profile Cadence duration in weeks. + */ + WEEK = 'WEEK', + + /** + * DAST Profile Cadence duration in months. + */ + MONTH = 'MONTH', + + /** + * DAST Profile Cadence duration in years. + */ + YEAR = 'YEAR', +} + +/** + * The connection type for DastProfile. + */ +export interface IXGitLabDastProfileConnection { + __typename: '_xGitLabDastProfileConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of DastProfileCreate + */ +export interface IXGitLabDastProfileCreateInput { + /** + * Project the profile belongs to. + */ + fullPath: string; + + /** + * Represents a DAST Profile Schedule. + */ + dastProfileSchedule?: IXGitLabDastProfileScheduleInput | null; + + /** + * Name of the profile. + */ + name: string; + + /** + * Description of the profile. Defaults to an empty string. + * @default "" + */ + description?: string | null; + + /** + * Associated branch. + */ + branchName?: string | null; + + /** + * ID of the site profile to be associated. + */ + dastSiteProfileId: any; + + /** + * ID of the scanner profile to be associated. + */ + dastScannerProfileId: any; + + /** + * Run scan using profile after creation. Defaults to false. + * @default false + */ + runAfterCreate?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastProfileCreate + */ +export interface IXGitLabDastProfileCreatePayload { + __typename: '_xGitLabDastProfileCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Created profile. + */ + dastProfile: IXGitLabDastProfile | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * URL of the pipeline that was created. Requires `runAfterCreate` to be set to `true`. + */ + pipelineUrl: string | null; +} + +/** + * Autogenerated input type of DastProfileDelete + */ +export interface IXGitLabDastProfileDeleteInput { + /** + * ID of the profile to be deleted. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastProfileDelete + */ +export interface IXGitLabDastProfileDeletePayload { + __typename: '_xGitLabDastProfileDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDastProfileEdge { + __typename: '_xGitLabDastProfileEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDastProfile | null; +} + +/** + * Autogenerated input type of DastProfileRun + */ +export interface IXGitLabDastProfileRunInput { + /** + * ID of the profile to be used for the scan. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastProfileRun + */ +export interface IXGitLabDastProfileRunPayload { + __typename: '_xGitLabDastProfileRunPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * URL of the pipeline that was created. + */ + pipelineUrl: string | null; +} + +/** + * Represents a DAST profile schedule. + */ +export interface IXGitLabDastProfileSchedule { + __typename: '_xGitLabDastProfileSchedule'; + + /** + * Status of the DAST profile schedule. + */ + active: boolean | null; + + /** + * Cadence of the DAST profile schedule. + */ + cadence: IXGitLabDastProfileCadence | null; + + /** + * ID of the DAST profile schedule. + */ + id: any; + + /** + * Next run time of the DAST profile schedule in the given timezone. + */ + nextRunAt: any | null; + + /** + * Start time of the DAST profile schedule in the given timezone. + */ + startsAt: any | null; + + /** + * Time zone of the start time of the DAST profile schedule. + */ + timezone: string | null; +} + +/** + * Input type for DAST Profile Schedules + */ +export interface IXGitLabDastProfileScheduleInput { + /** + * Status of a Dast Profile Schedule. + */ + active?: boolean | null; + + /** + * Start time of a Dast Profile Schedule. + */ + startsAt?: any | null; + + /** + * Time Zone for the Start time of a Dast Profile Schedule. + */ + timezone?: string | null; + + /** + * Cadence of a Dast Profile Schedule. + */ + cadence?: IXGitLabDastProfileCadenceInput | null; +} + +/** + * Autogenerated input type of DastProfileUpdate + */ +export interface IXGitLabDastProfileUpdateInput { + /** + * ID of the profile to be deleted. + */ + id: any; + + /** + * Represents a DAST profile schedule. + */ + dastProfileSchedule?: IXGitLabDastProfileScheduleInput | null; + + /** + * Name of the profile. + */ + name?: string | null; + + /** + * Description of the profile. Defaults to an empty string. + * @default "" + */ + description?: string | null; + + /** + * Associated branch. + */ + branchName?: string | null; + + /** + * ID of the site profile to be associated. + */ + dastSiteProfileId?: any | null; + + /** + * ID of the scanner profile to be associated. + */ + dastScannerProfileId?: any | null; + + /** + * Run scan using profile after update. Defaults to false. + * @default false + */ + runAfterUpdate?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastProfileUpdate + */ +export interface IXGitLabDastProfileUpdatePayload { + __typename: '_xGitLabDastProfileUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Updated profile. + */ + dastProfile: IXGitLabDastProfile | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * The URL of the pipeline that was created. Requires the input argument + * `runAfterUpdate` to be set to `true` when calling the mutation, otherwise no + * pipeline will be created. + */ + pipelineUrl: string | null; +} + +/** + * Represents a DAST scanner profile + */ +export interface IXGitLabDastScannerProfile { + __typename: '_xGitLabDastScannerProfile'; + + /** + * Relative web path to the edit page of a scanner profile. + */ + editPath: string | null; + + /** + * ID of the DAST scanner profile. + */ + id: any; + + /** + * Name of the DAST scanner profile. + */ + profileName: string | null; + + /** + * List of security policy names that are referencing given project. + */ + referencedInSecurityPolicies: Array | null; + + /** + * Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan. + */ + scanType: XGitLabDastScanTypeEnum | null; + + /** + * Indicates if debug messages should be included in DAST console output. True to include the debug messages. + */ + showDebugMessages: boolean; + + /** + * Maximum number of minutes allowed for the spider to traverse the site. + */ + spiderTimeout: number | null; + + /** + * Maximum number of seconds allowed for the site under test to respond to a request. + */ + targetTimeout: number | null; + + /** + * Indicates if the AJAX spider should be used to crawl the target site. True to + * run the AJAX spider in addition to the traditional spider, and false to run + * only the traditional spider. + */ + useAjaxSpider: boolean; +} + +/** + * The connection type for DastScannerProfile. + */ +export interface IXGitLabDastScannerProfileConnection { + __typename: '_xGitLabDastScannerProfileConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of DastScannerProfileCreate + */ +export interface IXGitLabDastScannerProfileCreateInput { + /** + * Project the scanner profile belongs to. + */ + fullPath: string; + + /** + * Name of the scanner profile. + */ + profileName: string; + + /** + * Maximum number of minutes allowed for the spider to traverse the site. + */ + spiderTimeout?: number | null; + + /** + * Maximum number of seconds allowed for the site under test to respond to a request. + */ + targetTimeout?: number | null; + + /** + * Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan. + * @default "PASSIVE" + */ + scanType?: XGitLabDastScanTypeEnum | null; + + /** + * Indicates if the AJAX spider should be used to crawl the target site. True to + * run the AJAX spider in addition to the traditional spider, and false to run + * only the traditional spider. + * @default false + */ + useAjaxSpider?: boolean | null; + + /** + * Indicates if debug messages should be included in DAST console output. True to include the debug messages. + * @default false + */ + showDebugMessages?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastScannerProfileCreate + */ +export interface IXGitLabDastScannerProfileCreatePayload { + __typename: '_xGitLabDastScannerProfileCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * ID of the scanner profile. + */ + id: any | null; +} + +/** + * Autogenerated input type of DastScannerProfileDelete + */ +export interface IXGitLabDastScannerProfileDeleteInput { + /** + * ID of the scanner profile to be deleted. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastScannerProfileDelete + */ +export interface IXGitLabDastScannerProfileDeletePayload { + __typename: '_xGitLabDastScannerProfileDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDastScannerProfileEdge { + __typename: '_xGitLabDastScannerProfileEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDastScannerProfile | null; +} + +/** + * Autogenerated input type of DastScannerProfileUpdate + */ +export interface IXGitLabDastScannerProfileUpdateInput { + /** + * ID of the scanner profile to be updated. + */ + id: any; + + /** + * Name of the scanner profile. + */ + profileName: string; + + /** + * Maximum number of minutes allowed for the spider to traverse the site. + */ + spiderTimeout: number; + + /** + * Maximum number of seconds allowed for the site under test to respond to a request. + */ + targetTimeout: number; + + /** + * Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan. + */ + scanType?: XGitLabDastScanTypeEnum | null; + + /** + * Indicates if the AJAX spider should be used to crawl the target site. True to + * run the AJAX spider in addition to the traditional spider, and false to run + * only the traditional spider. + */ + useAjaxSpider?: boolean | null; + + /** + * Indicates if debug messages should be included in DAST console output. True to include the debug messages. + */ + showDebugMessages?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastScannerProfileUpdate + */ +export interface IXGitLabDastScannerProfileUpdatePayload { + __typename: '_xGitLabDastScannerProfileUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * ID of the scanner profile. + */ + id: any | null; +} + +export const enum XGitLabDastScanTypeEnum { + /** + * Passive DAST scan. This scan will not make active attacks against the target site. + */ + PASSIVE = 'PASSIVE', + + /** + * Active DAST scan. This scan will make active attacks against the target site. + */ + ACTIVE = 'ACTIVE', +} + +/** + * Represents a DAST Site Profile + */ +export interface IXGitLabDastSiteProfile { + __typename: '_xGitLabDastSiteProfile'; + + /** + * Target authentication details. + */ + auth: IXGitLabDastSiteProfileAuth | null; + + /** + * Relative web path to the edit page of a site profile. + */ + editPath: string | null; + + /** + * URLs to skip during an authenticated scan. + */ + excludedUrls: Array | null; + + /** + * ID of the site profile. + */ + id: any; + + /** + * Normalized URL of the target to be scanned. + */ + normalizedTargetUrl: string | null; + + /** + * Name of the site profile. + */ + profileName: string | null; + + /** + * List of security policy names that are referencing given project. + */ + referencedInSecurityPolicies: Array | null; + + /** + * Comma-separated list of request header names and values to be added to every request made by DAST. + */ + requestHeaders: string | null; + + /** + * Type of target to be scanned. + */ + targetType: XGitLabDastTargetTypeEnum | null; + + /** + * URL of the target to be scanned. + */ + targetUrl: string | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabDastSiteProfilePermissions; + + /** + * Current validation status of the site profile. + */ + validationStatus: XGitLabDastSiteProfileValidationStatusEnum | null; +} + +/** + * Input type for DastSiteProfile authentication + */ +export interface IXGitLabDastSiteProfileAuth { + __typename: '_xGitLabDastSiteProfileAuth'; + + /** + * Indicates whether authentication is enabled. + */ + enabled: boolean | null; + + /** + * Redacted password to authenticate with on the target website. + */ + password: string | null; + + /** + * Name of password field at the sign-in HTML form. + */ + passwordField: string | null; + + /** + * The URL of the page containing the sign-in HTML form on the target website. + */ + url: string | null; + + /** + * Username to authenticate with on the target website. + */ + username: string | null; + + /** + * Name of username field at the sign-in HTML form. + */ + usernameField: string | null; +} + +/** + * Input type for DastSiteProfile authentication + */ +export interface IXGitLabDastSiteProfileAuthInput { + /** + * Indicates whether authentication is enabled. + */ + enabled?: boolean | null; + + /** + * The URL of the page containing the sign-in HTML form on the target website. + */ + url?: string | null; + + /** + * Name of username field at the sign-in HTML form. + */ + usernameField?: string | null; + + /** + * Name of password field at the sign-in HTML form. + */ + passwordField?: string | null; + + /** + * Username to authenticate with on the target website. + */ + username?: string | null; + + /** + * Password to authenticate with on the target website. + */ + password?: string | null; +} + +/** + * The connection type for DastSiteProfile. + */ +export interface IXGitLabDastSiteProfileConnection { + __typename: '_xGitLabDastSiteProfileConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of DastSiteProfileCreate + */ +export interface IXGitLabDastSiteProfileCreateInput { + /** + * Name of the site profile. + */ + profileName: string; + + /** + * URL of the target to be scanned. + */ + targetUrl?: string | null; + + /** + * Type of target to be scanned. + */ + targetType?: XGitLabDastTargetTypeEnum | null; + + /** + * Comma-separated list of request header names and values to be added to every request made by DAST. + */ + requestHeaders?: string | null; + + /** + * Parameters for authentication. + */ + auth?: IXGitLabDastSiteProfileAuthInput | null; + + /** + * Project the site profile belongs to. + */ + fullPath: string; + + /** + * URLs to skip during an authenticated scan. Defaults to `[]`. + * @default [] + */ + excludedUrls?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastSiteProfileCreate + */ +export interface IXGitLabDastSiteProfileCreatePayload { + __typename: '_xGitLabDastSiteProfileCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * ID of the site profile. + */ + id: any | null; +} + +/** + * Autogenerated input type of DastSiteProfileDelete + */ +export interface IXGitLabDastSiteProfileDeleteInput { + /** + * ID of the site profile to be deleted. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastSiteProfileDelete + */ +export interface IXGitLabDastSiteProfileDeletePayload { + __typename: '_xGitLabDastSiteProfileDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDastSiteProfileEdge { + __typename: '_xGitLabDastSiteProfileEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDastSiteProfile | null; +} + +/** + * Check permissions for the current user on site profile + */ +export interface IXGitLabDastSiteProfilePermissions { + __typename: '_xGitLabDastSiteProfilePermissions'; + + /** + * Indicates the user can perform `create_on_demand_dast_scan` on this resource + */ + createOnDemandDastScan: boolean; +} + +/** + * Autogenerated input type of DastSiteProfileUpdate + */ +export interface IXGitLabDastSiteProfileUpdateInput { + /** + * Name of the site profile. + */ + profileName: string; + + /** + * URL of the target to be scanned. + */ + targetUrl?: string | null; + + /** + * Type of target to be scanned. + */ + targetType?: XGitLabDastTargetTypeEnum | null; + + /** + * Comma-separated list of request header names and values to be added to every request made by DAST. + */ + requestHeaders?: string | null; + + /** + * Parameters for authentication. + */ + auth?: IXGitLabDastSiteProfileAuthInput | null; + + /** + * ID of the site profile to be updated. + */ + id: any; + + /** + * URLs to skip during an authenticated scan. + */ + excludedUrls?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastSiteProfileUpdate + */ +export interface IXGitLabDastSiteProfileUpdatePayload { + __typename: '_xGitLabDastSiteProfileUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * ID of the site profile. + */ + id: any | null; +} + +export const enum XGitLabDastSiteProfileValidationStatusEnum { + /** + * No site validation exists. + */ + NONE = 'NONE', + + /** + * Site validation process has not started. + */ + PENDING_VALIDATION = 'PENDING_VALIDATION', + + /** + * Site validation process is in progress. + */ + INPROGRESS_VALIDATION = 'INPROGRESS_VALIDATION', + + /** + * Site validation process finished successfully. + */ + PASSED_VALIDATION = 'PASSED_VALIDATION', + + /** + * Site validation process finished but failed. + */ + FAILED_VALIDATION = 'FAILED_VALIDATION', +} + +/** + * Autogenerated input type of DastSiteTokenCreate + */ +export interface IXGitLabDastSiteTokenCreateInput { + /** + * Project the site token belongs to. + */ + fullPath: string; + + /** + * URL of the target to be validated. + */ + targetUrl?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastSiteTokenCreate + */ +export interface IXGitLabDastSiteTokenCreatePayload { + __typename: '_xGitLabDastSiteTokenCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * ID of the site token. + */ + id: any | null; + + /** + * Current validation status of the target. + */ + status: XGitLabDastSiteProfileValidationStatusEnum | null; + + /** + * Token string. + */ + token: string | null; +} + +/** + * Represents a DAST Site Validation + */ +export interface IXGitLabDastSiteValidation { + __typename: '_xGitLabDastSiteValidation'; + + /** + * Global ID of the site validation. + */ + id: any; + + /** + * Normalized URL of the target to be validated. + */ + normalizedTargetUrl: string | null; + + /** + * Status of the site validation. + */ + status: XGitLabDastSiteProfileValidationStatusEnum; +} + +/** + * The connection type for DastSiteValidation. + */ +export interface IXGitLabDastSiteValidationConnection { + __typename: '_xGitLabDastSiteValidationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of DastSiteValidationCreate + */ +export interface IXGitLabDastSiteValidationCreateInput { + /** + * Project the site profile belongs to. + */ + fullPath: string; + + /** + * ID of the site token. + */ + dastSiteTokenId: any; + + /** + * Path to be requested during validation. + */ + validationPath: string; + + /** + * Validation strategy to be used. + */ + strategy?: XGitLabDastSiteValidationStrategyEnum | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastSiteValidationCreate + */ +export interface IXGitLabDastSiteValidationCreatePayload { + __typename: '_xGitLabDastSiteValidationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * ID of the site validation. + */ + id: any | null; + + /** + * Current validation status. + */ + status: XGitLabDastSiteProfileValidationStatusEnum | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDastSiteValidationEdge { + __typename: '_xGitLabDastSiteValidationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDastSiteValidation | null; +} + +/** + * Autogenerated input type of DastSiteValidationRevoke + */ +export interface IXGitLabDastSiteValidationRevokeInput { + /** + * Project the site validation belongs to. + */ + fullPath: string; + + /** + * Normalized URL of the target to be revoked. + */ + normalizedTargetUrl: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DastSiteValidationRevoke + */ +export interface IXGitLabDastSiteValidationRevokePayload { + __typename: '_xGitLabDastSiteValidationRevokePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export const enum XGitLabDastSiteValidationStatusEnum { + /** + * Site validation process has not started. + */ + PENDING_VALIDATION = 'PENDING_VALIDATION', + + /** + * Site validation process is in progress. + */ + INPROGRESS_VALIDATION = 'INPROGRESS_VALIDATION', + + /** + * Site validation process finished successfully. + */ + PASSED_VALIDATION = 'PASSED_VALIDATION', + + /** + * Site validation process finished but failed. + */ + FAILED_VALIDATION = 'FAILED_VALIDATION', +} + +export const enum XGitLabDastSiteValidationStrategyEnum { + /** + * Text file validation. + */ + TEXT_FILE = 'TEXT_FILE', + + /** + * Header validation. + */ + HEADER = 'HEADER', + + /** + * Meta tag validation. + */ + META_TAG = 'META_TAG', +} + +export const enum XGitLabDastTargetTypeEnum { + /** + * Website target. + */ + WEBSITE = 'WEBSITE', + + /** + * API target. + */ + API = 'API', +} + +/** + * Color of the data visualization palette + */ +export const enum XGitLabDataVisualizationColorEnum { + /** + * Blue color + */ + BLUE = 'BLUE', + + /** + * Orange color + */ + ORANGE = 'ORANGE', + + /** + * Aqua color + */ + AQUA = 'AQUA', + + /** + * Green color + */ + GREEN = 'GREEN', + + /** + * Magenta color + */ + MAGENTA = 'MAGENTA', +} + +/** + * Weight of the data visualization palette + */ +export const enum XGitLabDataVisualizationWeightEnum { + /** + * 50 weight + */ + WEIGHT_50 = 'WEIGHT_50', + + /** + * 100 weight + */ + WEIGHT_100 = 'WEIGHT_100', + + /** + * 200 weight + */ + WEIGHT_200 = 'WEIGHT_200', + + /** + * 300 weight + */ + WEIGHT_300 = 'WEIGHT_300', + + /** + * 400 weight + */ + WEIGHT_400 = 'WEIGHT_400', + + /** + * 500 weight + */ + WEIGHT_500 = 'WEIGHT_500', + + /** + * 600 weight + */ + WEIGHT_600 = 'WEIGHT_600', + + /** + * 700 weight + */ + WEIGHT_700 = 'WEIGHT_700', + + /** + * 800 weight + */ + WEIGHT_800 = 'WEIGHT_800', + + /** + * 900 weight + */ + WEIGHT_900 = 'WEIGHT_900', + + /** + * 950 weight + */ + WEIGHT_950 = 'WEIGHT_950', +} + +/** + * Autogenerated input type of DeleteAnnotation + */ +export interface IXGitLabDeleteAnnotationInput { + /** + * Global ID of the annotation to delete. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DeleteAnnotation + */ +export interface IXGitLabDeleteAnnotationPayload { + __typename: '_xGitLabDeleteAnnotationPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * The response from the AdminSidekiqQueuesDeleteJobs mutation + */ +export interface IXGitLabDeleteJobsResponse { + __typename: '_xGitLabDeleteJobsResponse'; + + /** + * Whether or not the entire queue was processed in time; if not, retrying the same request is safe. + */ + completed: boolean | null; + + /** + * Number of matching jobs deleted. + */ + deletedJobs: number | null; + + /** + * Queue size after processing. + */ + queueSize: number | null; +} + +/** + * Represents metadata associated with a dependency link + */ +export type _xGitLabDependencyLinkMetadata = + IXGitLabNugetDependencyLinkMetadata; + +/** + * Dependency proxy blob + */ +export interface IXGitLabDependencyProxyBlob { + __typename: '_xGitLabDependencyProxyBlob'; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * Name of the blob. + */ + fileName: string; + + /** + * Size of the blob file. + */ + size: string; + + /** + * Date of most recent update. + */ + updatedAt: any; +} + +/** + * The connection type for DependencyProxyBlob. + */ +export interface IXGitLabDependencyProxyBlobConnection { + __typename: '_xGitLabDependencyProxyBlobConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDependencyProxyBlobEdge { + __typename: '_xGitLabDependencyProxyBlobEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDependencyProxyBlob | null; +} + +/** + * Group-level Dependency Proxy TTL policy settings + */ +export interface IXGitLabDependencyProxyImageTtlGroupPolicy { + __typename: '_xGitLabDependencyProxyImageTtlGroupPolicy'; + + /** + * Timestamp of creation. + */ + createdAt: any | null; + + /** + * Indicates whether the policy is enabled or disabled. + */ + enabled: boolean; + + /** + * Number of days to retain a cached image file. + */ + ttl: number | null; + + /** + * Timestamp of the most recent update. + */ + updatedAt: any | null; +} + +/** + * Dependency proxy manifest + */ +export interface IXGitLabDependencyProxyManifest { + __typename: '_xGitLabDependencyProxyManifest'; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * Digest of the manifest. + */ + digest: string; + + /** + * Name of the manifest. + */ + fileName: string; + + /** + * Name of the image. + */ + imageName: string; + + /** + * Size of the manifest file. + */ + size: string; + + /** + * Date of most recent update. + */ + updatedAt: any; +} + +/** + * The connection type for DependencyProxyManifest. + */ +export interface IXGitLabDependencyProxyManifestConnection { + __typename: '_xGitLabDependencyProxyManifestConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDependencyProxyManifestEdge { + __typename: '_xGitLabDependencyProxyManifestEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDependencyProxyManifest | null; +} + +/** + * Group-level Dependency Proxy settings + */ +export interface IXGitLabDependencyProxySetting { + __typename: '_xGitLabDependencyProxySetting'; + + /** + * Indicates whether the dependency proxy is enabled for the group. + */ + enabled: boolean; +} + +/** + * All environment deployment tiers. + */ +export const enum XGitLabDeploymentTier { + /** + * Production. + */ + PRODUCTION = 'PRODUCTION', + + /** + * Staging. + */ + STAGING = 'STAGING', + + /** + * Testing. + */ + TESTING = 'TESTING', + + /** + * Development. + */ + DEVELOPMENT = 'DEVELOPMENT', + + /** + * Other. + */ + OTHER = 'OTHER', +} + +/** + * A single design + */ +export interface IXGitLabDesign { + __typename: '_xGitLabDesign'; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; + + /** + * Diff refs for this design. + */ + diffRefs: IXGitLabDiffRefs; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * How this design was changed in the current version. + */ + event: XGitLabDesignVersionEvent; + + /** + * Filename of the design. + */ + filename: string; + + /** + * Full path to the design file. + */ + fullPath: string; + + /** + * ID of this design. + */ + id: string; + + /** + * URL of the full-sized image. + */ + image: string; + + /** + * The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated + */ + imageV432x230: string | null; + + /** + * Issue the design belongs to. + */ + issue: IXGitLabIssue; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Total count of user-created notes for this design. + */ + notesCount: number; + + /** + * Project the design belongs to. + */ + project: IXGitLabProject; + + /** + * All versions related to this design ordered newest first. + */ + versions: IXGitLabDesignVersionConnection; +} + +export interface ICurrentUserTodosOnXGitLabDesignArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +export interface IDiscussionsOnXGitLabDesignArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabDesignArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVersionsOnXGitLabDesignArguments { + /** + * SHA256 of the most recent acceptable version. + */ + earlierOrEqualToSha?: string | null; + + /** + * Global ID of the most recent acceptable version. + */ + earlierOrEqualToId?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * A design pinned to a specific version. The image field reflects the design as of the associated version + */ +export interface IXGitLabDesignAtVersion { + __typename: '_xGitLabDesignAtVersion'; + + /** + * Underlying design. + */ + design: IXGitLabDesign; + + /** + * Diff refs for this design. + */ + diffRefs: IXGitLabDiffRefs; + + /** + * How this design was changed in the current version. + */ + event: XGitLabDesignVersionEvent; + + /** + * Filename of the design. + */ + filename: string; + + /** + * Full path to the design file. + */ + fullPath: string; + + /** + * ID of this design. + */ + id: string; + + /** + * URL of the full-sized image. + */ + image: string; + + /** + * The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated + */ + imageV432x230: string | null; + + /** + * Issue the design belongs to. + */ + issue: IXGitLabIssue; + + /** + * Total count of user-created notes for this design. + */ + notesCount: number; + + /** + * Project the design belongs to. + */ + project: IXGitLabProject; + + /** + * Version this design-at-versions is pinned to. + */ + version: IXGitLabDesignVersion; +} + +/** + * The connection type for DesignAtVersion. + */ +export interface IXGitLabDesignAtVersionConnection { + __typename: '_xGitLabDesignAtVersionConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDesignAtVersionEdge { + __typename: '_xGitLabDesignAtVersionEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDesignAtVersion | null; +} + +/** + * A collection of designs + */ +export interface IXGitLabDesignCollection { + __typename: '_xGitLabDesignCollection'; + + /** + * Copy state of the design collection. + */ + copyState: XGitLabDesignCollectionCopyState | null; + + /** + * Find a specific design. + */ + design: IXGitLabDesign | null; + + /** + * Find a design as of a version. + */ + designAtVersion: IXGitLabDesignAtVersion | null; + + /** + * All designs for the design collection. + */ + designs: IXGitLabDesignConnection; + + /** + * Issue associated with the design collection. + */ + issue: IXGitLabIssue; + + /** + * Project associated with the design collection. + */ + project: IXGitLabProject; + + /** + * A specific version. + */ + version: IXGitLabDesignVersion | null; + + /** + * All versions related to all designs, ordered newest first. + */ + versions: IXGitLabDesignVersionConnection; +} + +export interface IDesignOnXGitLabDesignCollectionArguments { + /** + * Find a design by its ID. + */ + id?: any | null; + + /** + * Find a design by its filename. + */ + filename?: string | null; +} + +export interface IDesignAtVersionOnXGitLabDesignCollectionArguments { + /** + * Global ID of the design at this version. + */ + id: any; +} + +export interface IDesignsOnXGitLabDesignCollectionArguments { + /** + * Filters designs by their ID. + */ + ids?: Array | null; + + /** + * Filters designs by their filename. + */ + filenames?: Array | null; + + /** + * Filters designs to only those that existed at the version. If argument is + * omitted or nil then all designs will reflect the latest version + */ + atVersion?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVersionOnXGitLabDesignCollectionArguments { + /** + * SHA256 of a specific version. + */ + sha?: string | null; + + /** + * Global ID of the version. + */ + id?: any | null; +} + +export interface IVersionsOnXGitLabDesignCollectionArguments { + /** + * SHA256 of the most recent acceptable version. + */ + earlierOrEqualToSha?: string | null; + + /** + * Global ID of the most recent acceptable version. + */ + earlierOrEqualToId?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Copy state of a DesignCollection + */ +export const enum XGitLabDesignCollectionCopyState { + /** + * The DesignCollection has no copy in progress + */ + READY = 'READY', + + /** + * The DesignCollection is being copied + */ + IN_PROGRESS = 'IN_PROGRESS', + + /** + * The DesignCollection encountered an error during a copy + */ + ERROR = 'ERROR', +} + +/** + * The connection type for Design. + */ +export interface IXGitLabDesignConnection { + __typename: '_xGitLabDesignConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDesignEdge { + __typename: '_xGitLabDesignEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDesign | null; +} + +export type _xGitLabDesignFields = IXGitLabDesign | IXGitLabDesignAtVersion; + +export interface IXGitLabDesignFields { + __typename: '_xGitLabDesignFields'; + + /** + * Diff refs for this design. + */ + diffRefs: IXGitLabDiffRefs; + + /** + * How this design was changed in the current version. + */ + event: XGitLabDesignVersionEvent; + + /** + * Filename of the design. + */ + filename: string; + + /** + * Full path to the design file. + */ + fullPath: string; + + /** + * ID of this design. + */ + id: string; + + /** + * URL of the full-sized image. + */ + image: string; + + /** + * The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated + */ + imageV432x230: string | null; + + /** + * Issue the design belongs to. + */ + issue: IXGitLabIssue; + + /** + * Total count of user-created notes for this design. + */ + notesCount: number; + + /** + * Project the design belongs to. + */ + project: IXGitLabProject; +} + +export interface IXGitLabDesignManagement { + __typename: '_xGitLabDesignManagement'; + + /** + * Find a design as of a version. + */ + designAtVersion: IXGitLabDesignAtVersion | null; + + /** + * Find a version. + */ + version: IXGitLabDesignVersion | null; +} + +export interface IDesignAtVersionOnXGitLabDesignManagementArguments { + /** + * Global ID of the design at this version. + */ + id: any; +} + +export interface IVersionOnXGitLabDesignManagementArguments { + /** + * Global ID of the version. + */ + id: any; +} + +/** + * Autogenerated input type of DesignManagementDelete + */ +export interface IXGitLabDesignManagementDeleteInput { + /** + * Project where the issue is to upload designs for. + */ + projectPath: string; + + /** + * IID of the issue to modify designs for. + */ + iid: string; + + /** + * Filenames of the designs to delete. + */ + filenames: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DesignManagementDelete + */ +export interface IXGitLabDesignManagementDeletePayload { + __typename: '_xGitLabDesignManagementDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * New version in which the designs are deleted. + */ + version: IXGitLabDesignVersion | null; +} + +/** + * Autogenerated input type of DesignManagementMove + */ +export interface IXGitLabDesignManagementMoveInput { + /** + * ID of the design to move. + */ + id: any; + + /** + * ID of the immediately preceding design. + */ + previous?: any | null; + + /** + * ID of the immediately following design. + */ + next?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DesignManagementMove + */ +export interface IXGitLabDesignManagementMovePayload { + __typename: '_xGitLabDesignManagementMovePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Current state of the collection. + */ + designCollection: IXGitLabDesignCollection | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DesignManagementUpload + */ +export interface IXGitLabDesignManagementUploadInput { + /** + * Project where the issue is to upload designs for. + */ + projectPath: string; + + /** + * IID of the issue to modify designs for. + */ + iid: string; + + /** + * Files to upload. + */ + files: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DesignManagementUpload + */ +export interface IXGitLabDesignManagementUploadPayload { + __typename: '_xGitLabDesignManagementUploadPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Designs that were uploaded by the mutation. + */ + designs: Array; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Any designs that were skipped from the upload due to there being no change to their content since their last version + */ + skippedDesigns: Array; +} + +/** + * A specific version in which designs were added, modified or deleted + */ +export interface IXGitLabDesignVersion { + __typename: '_xGitLabDesignVersion'; + + /** + * Author of the version. + */ + author: IXGitLabUserCore; + + /** + * Timestamp of when the version was created. + */ + createdAt: any; + + /** + * A particular design as of this version, provided it is visible at this version. + */ + designAtVersion: IXGitLabDesignAtVersion; + + /** + * All designs that were changed in the version. + */ + designs: IXGitLabDesignConnection; + + /** + * All designs that are visible at this version, as of this version. + */ + designsAtVersion: IXGitLabDesignAtVersionConnection; + + /** + * ID of the design version. + */ + id: string; + + /** + * SHA of the design version. + */ + sha: string; +} + +export interface IDesignAtVersionOnXGitLabDesignVersionArguments { + /** + * ID of the DesignAtVersion. + */ + id?: any | null; + + /** + * ID of a specific design. + */ + designId?: any | null; + + /** + * Filename of a specific design. + */ + filename?: string | null; +} + +export interface IDesignsOnXGitLabDesignVersionArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDesignsAtVersionOnXGitLabDesignVersionArguments { + /** + * Filters designs by their ID. + */ + ids?: Array | null; + + /** + * Filters designs by their filename. + */ + filenames?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for DesignVersion. + */ +export interface IXGitLabDesignVersionConnection { + __typename: '_xGitLabDesignVersionConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDesignVersionEdge { + __typename: '_xGitLabDesignVersionEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDesignVersion | null; +} + +/** + * Mutation event of a design within a version + */ +export const enum XGitLabDesignVersionEvent { + /** + * No change. + */ + NONE = 'NONE', + + /** + * A creation event + */ + CREATION = 'CREATION', + + /** + * A modification event + */ + MODIFICATION = 'MODIFICATION', + + /** + * A deletion event + */ + DELETION = 'DELETION', +} + +/** + * Autogenerated input type of DestroyBoard + */ +export interface IXGitLabDestroyBoardInput { + /** + * Global ID of the board to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated input type of DestroyBoardList + */ +export interface IXGitLabDestroyBoardListInput { + /** + * Global ID of the list to destroy. Only label lists are accepted. + */ + listId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyBoardList + */ +export interface IXGitLabDestroyBoardListPayload { + __typename: '_xGitLabDestroyBoardListPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * List after mutation. + */ + list: IXGitLabBoardList | null; +} + +/** + * Autogenerated return type of DestroyBoard + */ +export interface IXGitLabDestroyBoardPayload { + __typename: '_xGitLabDestroyBoardPayload'; + + /** + * Board after mutation. + */ + board: IXGitLabBoard | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyComplianceFramework + */ +export interface IXGitLabDestroyComplianceFrameworkInput { + /** + * Global ID of the compliance framework to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyComplianceFramework + */ +export interface IXGitLabDestroyComplianceFrameworkPayload { + __typename: '_xGitLabDestroyComplianceFrameworkPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyContainerRepository + */ +export interface IXGitLabDestroyContainerRepositoryInput { + /** + * ID of the container repository. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyContainerRepository + */ +export interface IXGitLabDestroyContainerRepositoryPayload { + __typename: '_xGitLabDestroyContainerRepositoryPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Container repository policy after scheduling the deletion. + */ + containerRepository: IXGitLabContainerRepository; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyContainerRepositoryTags + */ +export interface IXGitLabDestroyContainerRepositoryTagsInput { + /** + * ID of the container repository. + */ + id: any; + + /** + * Container repository tag(s) to delete. Total number can't be greater than 20 + */ + tagNames: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyContainerRepositoryTags + */ +export interface IXGitLabDestroyContainerRepositoryTagsPayload { + __typename: '_xGitLabDestroyContainerRepositoryTagsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Deleted container repository tags. + */ + deletedTagNames: Array; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyCustomEmoji + */ +export interface IXGitLabDestroyCustomEmojiInput { + /** + * Global ID of the custom emoji to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyCustomEmoji + */ +export interface IXGitLabDestroyCustomEmojiPayload { + __typename: '_xGitLabDestroyCustomEmojiPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Deleted custom emoji. + */ + customEmoji: IXGitLabCustomEmoji | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyEpicBoard + */ +export interface IXGitLabDestroyEpicBoardInput { + /** + * Global ID of the board to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyEpicBoard + */ +export interface IXGitLabDestroyEpicBoardPayload { + __typename: '_xGitLabDestroyEpicBoardPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic board after mutation. + */ + epicBoard: IXGitLabEpicBoard | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyNote + */ +export interface IXGitLabDestroyNoteInput { + /** + * Global ID of the note to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyNote + */ +export interface IXGitLabDestroyNotePayload { + __typename: '_xGitLabDestroyNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +/** + * Autogenerated input type of DestroyPackageFile + */ +export interface IXGitLabDestroyPackageFileInput { + /** + * ID of the Package file. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyPackageFile + */ +export interface IXGitLabDestroyPackageFilePayload { + __typename: '_xGitLabDestroyPackageFilePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroyPackage + */ +export interface IXGitLabDestroyPackageInput { + /** + * ID of the Package. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroyPackage + */ +export interface IXGitLabDestroyPackagePayload { + __typename: '_xGitLabDestroyPackagePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of DestroySnippet + */ +export interface IXGitLabDestroySnippetInput { + /** + * Global ID of the snippet to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DestroySnippet + */ +export interface IXGitLabDestroySnippetPayload { + __typename: '_xGitLabDestroySnippetPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Snippet after mutation. + */ + snippet: IXGitLabSnippet | null; +} + +export interface IXGitLabDetailedStatus { + __typename: '_xGitLabDetailedStatus'; + + /** + * Action information for the status. This includes method, button title, icon, path, and title. + */ + action: IXGitLabStatusAction | null; + + /** + * Path of the details for the status. + */ + detailsPath: string | null; + + /** + * Favicon of the status. + */ + favicon: string | null; + + /** + * Group of the status. + */ + group: string | null; + + /** + * Indicates if the status has further details. + */ + hasDetails: boolean | null; + + /** + * Icon of the status. + */ + icon: string | null; + + /** + * ID for a detailed status. + */ + id: string; + + /** + * Label of the status. + */ + label: string | null; + + /** + * Text of the status. + */ + text: string | null; + + /** + * Tooltip associated with the status. + */ + tooltip: string | null; +} + +/** + * Enabled namespace for DevopsAdoption + */ +export interface IXGitLabDevopsAdoptionEnabledNamespace { + __typename: '_xGitLabDevopsAdoptionEnabledNamespace'; + + /** + * Namespace where data should be displayed. + */ + displayNamespace: IXGitLabNamespace | null; + + /** + * ID of the enabled namespace. + */ + id: string; + + /** + * Metrics snapshot for previous month for the enabled namespace. + */ + latestSnapshot: IXGitLabDevopsAdoptionSnapshot | null; + + /** + * Namespace which should be calculated. + */ + namespace: IXGitLabNamespace | null; + + /** + * Data snapshots of the namespace. + */ + snapshots: IXGitLabDevopsAdoptionSnapshotConnection | null; +} + +export interface ISnapshotsOnXGitLabDevopsAdoptionEnabledNamespaceArguments { + /** + * Filter to snapshots with month end before the provided date. + */ + endTimeBefore?: any | null; + + /** + * Filter to snapshots with month end after the provided date. + */ + endTimeAfter?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for DevopsAdoptionEnabledNamespace. + */ +export interface IXGitLabDevopsAdoptionEnabledNamespaceConnection { + __typename: '_xGitLabDevopsAdoptionEnabledNamespaceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDevopsAdoptionEnabledNamespaceEdge { + __typename: '_xGitLabDevopsAdoptionEnabledNamespaceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDevopsAdoptionEnabledNamespace | null; +} + +/** + * Snapshot + */ +export interface IXGitLabDevopsAdoptionSnapshot { + __typename: '_xGitLabDevopsAdoptionSnapshot'; + + /** + * Total number of projects with existing CODEOWNERS file. + */ + codeOwnersUsedCount: number | null; + + /** + * Total number of projects with enabled coverage fuzzing. + */ + coverageFuzzingEnabledCount: number | null; + + /** + * Total number of projects with enabled DAST. + */ + dastEnabledCount: number | null; + + /** + * Total number of projects with enabled dependency scanning. + */ + dependencyScanningEnabledCount: number | null; + + /** + * At least one deployment succeeded. + */ + deploySucceeded: boolean; + + /** + * End time for the snapshot where the data points were collected. + */ + endTime: any; + + /** + * At least one issue was opened. + */ + issueOpened: boolean; + + /** + * At least one merge request was approved. + */ + mergeRequestApproved: boolean; + + /** + * At least one merge request was opened. + */ + mergeRequestOpened: boolean; + + /** + * At least one pipeline succeeded. + */ + pipelineSucceeded: boolean; + + /** + * Time the snapshot was recorded. + */ + recordedAt: any; + + /** + * At least one runner was used. + */ + runnerConfigured: boolean; + + /** + * Total number of projects with enabled SAST. + */ + sastEnabledCount: number | null; + + /** + * At least one security scan succeeded. Deprecated in 14.1: Substituted with specific security metrics. Always false. + * @deprecated "Substituted with specific security metrics. Always false. Deprecated in 14.1." + */ + securityScanSucceeded: boolean; + + /** + * Start time for the snapshot where the data points were collected. + */ + startTime: any; + + /** + * Total number of projects. + */ + totalProjectsCount: number | null; + + /** + * Total number of projects with vulnerability management used at least once. + */ + vulnerabilityManagementUsedCount: number | null; +} + +/** + * The connection type for DevopsAdoptionSnapshot. + */ +export interface IXGitLabDevopsAdoptionSnapshotConnection { + __typename: '_xGitLabDevopsAdoptionSnapshotConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDevopsAdoptionSnapshotEdge { + __typename: '_xGitLabDevopsAdoptionSnapshotEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDevopsAdoptionSnapshot | null; +} + +export interface IXGitLabDiffImagePositionInput { + /** + * SHA of the HEAD at the time the comment was made. + */ + headSha: string; + + /** + * Merge base of the branch the comment was made on. + */ + baseSha?: string | null; + + /** + * SHA of the branch being compared against. + */ + startSha: string; + + /** + * The paths of the file that was changed. Both of the properties of this input + * are optional, but at least one of them is required + */ + paths: IXGitLabDiffPathsInput; + + /** + * X position of the note. + */ + x: number; + + /** + * Y position of the note. + */ + y: number; + + /** + * Total width of the image. + */ + width: number; + + /** + * Total height of the image. + */ + height: number; +} + +export interface IXGitLabDiffPathsInput { + /** + * Path of the file on the start SHA. + */ + oldPath?: string | null; + + /** + * Path of the file on the HEAD SHA. + */ + newPath?: string | null; +} + +export interface IXGitLabDiffPosition { + __typename: '_xGitLabDiffPosition'; + + /** + * Information about the branch, HEAD, and base at the time of commenting. + */ + diffRefs: IXGitLabDiffRefs; + + /** + * Path of the file that was changed. + */ + filePath: string; + + /** + * Total height of the image. + */ + height: number | null; + + /** + * Line on HEAD SHA that was changed. + */ + newLine: number | null; + + /** + * Path of the file on the HEAD SHA. + */ + newPath: string | null; + + /** + * Line on start SHA that was changed. + */ + oldLine: number | null; + + /** + * Path of the file on the start SHA. + */ + oldPath: string | null; + + /** + * Type of file the position refers to. + */ + positionType: XGitLabDiffPositionType; + + /** + * Total width of the image. + */ + width: number | null; + + /** + * X position of the note. + */ + x: number | null; + + /** + * Y position of the note. + */ + y: number | null; +} + +export interface IXGitLabDiffPositionInput { + /** + * SHA of the HEAD at the time the comment was made. + */ + headSha: string; + + /** + * Merge base of the branch the comment was made on. + */ + baseSha?: string | null; + + /** + * SHA of the branch being compared against. + */ + startSha: string; + + /** + * The paths of the file that was changed. Both of the properties of this input + * are optional, but at least one of them is required + */ + paths: IXGitLabDiffPathsInput; + + /** + * Line on start SHA that was changed. + */ + oldLine?: number | null; + + /** + * Line on HEAD SHA that was changed. + */ + newLine?: number | null; +} + +/** + * Type of file the position refers to + */ +export const enum XGitLabDiffPositionType { + /** + * Text file. + */ + text = 'text', + + /** + * An image. + */ + image = 'image', +} + +export interface IXGitLabDiffRefs { + __typename: '_xGitLabDiffRefs'; + + /** + * Merge base of the branch the comment was made on. + */ + baseSha: string | null; + + /** + * SHA of the HEAD at the time the comment was made. + */ + headSha: string; + + /** + * SHA of the branch being compared against. + */ + startSha: string; +} + +/** + * Changes to a single file + */ +export interface IXGitLabDiffStats { + __typename: '_xGitLabDiffStats'; + + /** + * Number of lines added to this file. + */ + additions: number; + + /** + * Number of lines deleted from this file. + */ + deletions: number; + + /** + * File path, relative to repository root. + */ + path: string; +} + +/** + * Aggregated summary of changes + */ +export interface IXGitLabDiffStatsSummary { + __typename: '_xGitLabDiffStatsSummary'; + + /** + * Number of lines added. + */ + additions: number; + + /** + * Number of lines changed. + */ + changes: number; + + /** + * Number of lines deleted. + */ + deletions: number; + + /** + * Number of files changed. + */ + fileCount: number; +} + +/** + * Autogenerated input type of DisableDevopsAdoptionNamespace + */ +export interface IXGitLabDisableDevopsAdoptionNamespaceInput { + /** + * One or many IDs of the enabled namespaces to disable. + */ + id: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DisableDevopsAdoptionNamespace + */ +export interface IXGitLabDisableDevopsAdoptionNamespacePayload { + __typename: '_xGitLabDisableDevopsAdoptionNamespacePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export interface IXGitLabDiscussion { + __typename: '_xGitLabDiscussion'; + + /** + * Timestamp of the discussion's creation. + */ + createdAt: any; + + /** + * ID of this discussion. + */ + id: any; + + /** + * Object which the discussion belongs to. + */ + noteable: _xGitLabNoteableType | null; + + /** + * All notes in the discussion. + */ + notes: IXGitLabNoteConnection; + + /** + * ID used to reply to this discussion. + */ + replyId: any; + + /** + * Indicates if the object can be resolved. + */ + resolvable: boolean; + + /** + * Indicates if the object is resolved. + */ + resolved: boolean; + + /** + * Timestamp of when the object was resolved. + */ + resolvedAt: any | null; + + /** + * User who resolved the object. + */ + resolvedBy: IXGitLabUserCore | null; +} + +export interface INotesOnXGitLabDiscussionArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for Discussion. + */ +export interface IXGitLabDiscussionConnection { + __typename: '_xGitLabDiscussionConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabDiscussionEdge { + __typename: '_xGitLabDiscussionEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabDiscussion | null; +} + +/** + * Autogenerated input type of DiscussionToggleResolve + */ +export interface IXGitLabDiscussionToggleResolveInput { + /** + * Global ID of the discussion. + */ + id: any; + + /** + * Will resolve the discussion when true, and unresolve the discussion when false. + */ + resolve: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of DiscussionToggleResolve + */ +export interface IXGitLabDiscussionToggleResolvePayload { + __typename: '_xGitLabDiscussionToggleResolvePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Discussion after mutation. + */ + discussion: IXGitLabDiscussion | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * All information related to DORA metrics. + */ +export interface IXGitLabDora { + __typename: '_xGitLabDora'; + + /** + * DORA metrics for the current group or project. + */ + metrics: Array | null; +} + +export interface IMetricsOnXGitLabDoraArguments { + /** + * Type of metric to return. + */ + metric: XGitLabDoraMetricType; + + /** + * Date range to start from. Default is 3 months ago. + */ + startDate?: any | null; + + /** + * Date range to end at. Default is the current date. + */ + endDate?: any | null; + + /** + * How the metric should be aggregrated. Defaults to `DAILY`. In the case of + * `ALL`, the `date` field in the response will be `null`. + */ + interval?: XGitLabDoraMetricBucketingInterval | null; + + /** + * Deployment tier of the environments to return. Defaults to `PRODUCTION`. + */ + environmentTier?: XGitLabDeploymentTier | null; +} + +export interface IXGitLabDoraMetric { + __typename: '_xGitLabDoraMetric'; + + /** + * Date of the data point. + */ + date: string | null; + + /** + * Value of the data point. + */ + value: number | null; +} + +/** + * All possible ways that DORA metrics can be aggregated. + */ +export const enum XGitLabDoraMetricBucketingInterval { + /** + * All data points are combined into a single value. + */ + ALL = 'ALL', + + /** + * Data points are combined into chunks by month. + */ + MONTHLY = 'MONTHLY', + + /** + * Data points are combined into chunks by day. + */ + DAILY = 'DAILY', +} + +/** + * All supported DORA metric types. + */ +export const enum XGitLabDoraMetricType { + /** + * Deployment frequency. + */ + DEPLOYMENT_FREQUENCY = 'DEPLOYMENT_FREQUENCY', + + /** + * Lead time for changes. + */ + LEAD_TIME_FOR_CHANGES = 'LEAD_TIME_FOR_CHANGES', +} + +/** + * Autogenerated input type of EchoCreate + */ +export interface IXGitLabEchoCreateInput { + /** + * Errors to return to the user. + */ + errors?: Array | null; + + /** + * Messages to return to the user. + */ + messages?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EchoCreate + */ +export interface IXGitLabEchoCreatePayload { + __typename: '_xGitLabEchoCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Messages returned to the user. + */ + echoes: Array | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of EnableDevopsAdoptionNamespace + */ +export interface IXGitLabEnableDevopsAdoptionNamespaceInput { + /** + * Namespace ID. + */ + namespaceId: any; + + /** + * Display namespace ID. + */ + displayNamespaceId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EnableDevopsAdoptionNamespace + */ +export interface IXGitLabEnableDevopsAdoptionNamespacePayload { + __typename: '_xGitLabEnableDevopsAdoptionNamespacePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Enabled namespace after mutation. + */ + enabledNamespace: IXGitLabDevopsAdoptionEnabledNamespace | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export type _xGitLabEntry = + | IXGitLabBlob + | IXGitLabSubmodule + | IXGitLabTreeEntry; + +export interface IXGitLabEntry { + __typename: '_xGitLabEntry'; + + /** + * Flat path of the entry. + */ + flatPath: string; + + /** + * ID of the entry. + */ + id: string; + + /** + * Name of the entry. + */ + name: string; + + /** + * Path of the entry. + */ + path: string; + + /** + * Last commit SHA for the entry. + */ + sha: string; + + /** + * Type of tree entry. + */ + type: XGitLabEntryType; +} + +/** + * Type of a tree entry + */ +export const enum XGitLabEntryType { + /** + * Directory tree type. + */ + tree = 'tree', + + /** + * File tree type. + */ + blob = 'blob', + + /** + * Commit tree type. + */ + commit = 'commit', +} + +/** + * Describes where code is deployed for a project + */ +export interface IXGitLabEnvironment { + __typename: '_xGitLabEnvironment'; + + /** + * ID of the environment. + */ + id: string; + + /** + * Most severe open alert for the environment. If multiple alerts have equal severity, the most recent is returned. + */ + latestOpenedMostSevereAlert: IXGitLabAlertManagementAlert | null; + + /** + * Metrics dashboard schema for the environment. + */ + metricsDashboard: IXGitLabMetricsDashboard | null; + + /** + * Human-readable name of the environment. + */ + name: string; + + /** + * Path to the environment. + */ + path: string; + + /** + * State of the environment, for example: available/stopped. + */ + state: string; +} + +export interface IMetricsDashboardOnXGitLabEnvironmentArguments { + /** + * Path to a file which defines a metrics dashboard eg: `"config/prometheus/common_metrics.yml"`. + */ + path: string; +} + +/** + * The connection type for Environment. + */ +export interface IXGitLabEnvironmentConnection { + __typename: '_xGitLabEnvironmentConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEnvironmentEdge { + __typename: '_xGitLabEnvironmentEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEnvironment | null; +} + +/** + * Autogenerated input type of EnvironmentsCanaryIngressUpdate + */ +export interface IXGitLabEnvironmentsCanaryIngressUpdateInput { + /** + * Global ID of the environment to update. + */ + id: any; + + /** + * Weight of the Canary Ingress. + */ + weight: number; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EnvironmentsCanaryIngressUpdate + */ +export interface IXGitLabEnvironmentsCanaryIngressUpdatePayload { + __typename: '_xGitLabEnvironmentsCanaryIngressUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Represents an epic + */ +export interface IXGitLabEpic { + __typename: '_xGitLabEpic'; + + /** + * Ancestors (parents) of the epic. + */ + ancestors: IXGitLabEpicConnection | null; + + /** + * Author of the epic. + */ + author: IXGitLabUserCore; + + /** + * List of award emojis associated with the epic. + */ + awardEmoji: IXGitLabAwardEmojiConnection | null; + + /** + * Children (sub-epics) of the epic. + */ + children: IXGitLabEpicConnection | null; + + /** + * Timestamp of when the epic was closed. + */ + closedAt: any | null; + + /** + * Indicates if the epic is confidential. + */ + confidential: boolean | null; + + /** + * Timestamp of when the epic was created. + */ + createdAt: any | null; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; + + /** + * Number of open and closed descendant epics and issues. + */ + descendantCounts: IXGitLabEpicDescendantCount | null; + + /** + * Total weight of open and closed issues in the epic and its descendants. + */ + descendantWeightSum: IXGitLabEpicDescendantWeights | null; + + /** + * Description of the epic. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Number of downvotes the epic has received. + */ + downvotes: number; + + /** + * Due date of the epic. + */ + dueDate: any | null; + + /** + * Fixed due date of the epic. + */ + dueDateFixed: any | null; + + /** + * Inherited due date of the epic from milestones. + */ + dueDateFromMilestones: any | null; + + /** + * Indicates if the due date has been manually set. + */ + dueDateIsFixed: boolean | null; + + /** + * List of events associated with the object. + */ + events: IXGitLabEventConnection | null; + + /** + * Group to which the epic belongs. + */ + group: IXGitLabGroup; + + /** + * Indicates if the epic has children. + */ + hasChildren: boolean; + + /** + * Indicates if the epic has direct issues. + */ + hasIssues: boolean; + + /** + * Indicates if the epic has a parent epic. + */ + hasParent: boolean; + + /** + * Current health status of the epic. + */ + healthStatus: IXGitLabEpicHealthStatus | null; + + /** + * ID of the epic. + */ + id: string; + + /** + * Internal ID of the epic. + */ + iid: string; + + /** + * A list of issues associated with the epic. + */ + issues: IXGitLabEpicIssueConnection | null; + + /** + * Labels assigned to the epic. + */ + labels: IXGitLabLabelConnection | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Parent epic of the epic. + */ + parent: IXGitLabEpic | null; + + /** + * List of participants for the epic. + */ + participants: IXGitLabUserCoreConnection | null; + + /** + * Internal reference of the epic. Returned in shortened format by default. + */ + reference: string; + + /** + * URI path of the epic-issue relationship. + */ + relationPath: string | null; + + /** + * Relative position of the epic in the epic tree. + */ + relativePosition: number | null; + + /** + * Start date of the epic. + */ + startDate: any | null; + + /** + * Fixed start date of the epic. + */ + startDateFixed: any | null; + + /** + * Inherited start date of the epic from milestones. + */ + startDateFromMilestones: any | null; + + /** + * Indicates if the start date has been manually set. + */ + startDateIsFixed: boolean | null; + + /** + * State of the epic. + */ + state: XGitLabEpicState; + + /** + * Indicates the currently logged in user is subscribed to the epic. + */ + subscribed: boolean; + + /** + * Title of the epic. + */ + title: string | null; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Timestamp of when the epic was updated. + */ + updatedAt: any | null; + + /** + * Number of upvotes the epic has received. + */ + upvotes: number; + + /** + * Number of user discussions in the epic. + */ + userDiscussionsCount: number; + + /** + * Number of user notes of the epic. + */ + userNotesCount: number; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabEpicPermissions; + + /** + * Web path of the epic. + */ + webPath: string; + + /** + * Web URL of the epic. + */ + webUrl: string; +} + +export interface IAncestorsOnXGitLabEpicArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the epic, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of epics, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * Filter epics by state. + */ + state?: XGitLabEpicState | null; + + /** + * Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + */ + in?: Array | null; + + /** + * List epics by sort order. + */ + sort?: XGitLabEpicSort | null; + + /** + * Filter epics by author. + */ + authorUsername?: string | null; + + /** + * Filter epics by labels. + */ + labelName?: Array | null; + + /** + * Filter epics by milestone title, computed from epic's issues. + */ + milestoneTitle?: string | null; + + /** + * Filter epics by IID for autocomplete. + */ + iidStartsWith?: string | null; + + /** + * Include epics from ancestor groups. + * @default true + */ + includeAncestorGroups?: boolean | null; + + /** + * Include epics from descendant groups. + * @default true + */ + includeDescendantGroups?: boolean | null; + + /** + * Filter epics by given confidentiality. + */ + confidential?: boolean | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicFilterInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAwardEmojiOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IChildrenOnXGitLabEpicArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the epic, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of epics, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * Filter epics by state. + */ + state?: XGitLabEpicState | null; + + /** + * Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + */ + in?: Array | null; + + /** + * List epics by sort order. + */ + sort?: XGitLabEpicSort | null; + + /** + * Filter epics by author. + */ + authorUsername?: string | null; + + /** + * Filter epics by labels. + */ + labelName?: Array | null; + + /** + * Filter epics by milestone title, computed from epic's issues. + */ + milestoneTitle?: string | null; + + /** + * Filter epics by IID for autocomplete. + */ + iidStartsWith?: string | null; + + /** + * Include epics from ancestor groups. + * @default false + */ + includeAncestorGroups?: boolean | null; + + /** + * Include epics from descendant groups. + * @default true + */ + includeDescendantGroups?: boolean | null; + + /** + * Filter epics by given confidentiality. + */ + confidential?: boolean | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicFilterInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICurrentUserTodosOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +export interface IDiscussionsOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IEventsOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIssuesOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelsOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IParticipantsOnXGitLabEpicArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReferenceOnXGitLabEpicArguments { + /** + * Indicates if the reference should be returned in full. + * @default false + */ + full?: boolean | null; +} + +/** + * Autogenerated input type of EpicAddIssue + */ +export interface IXGitLabEpicAddIssueInput { + /** + * IID of the epic to mutate. + */ + iid: string; + + /** + * Group the epic to mutate belongs to. + */ + groupPath: string; + + /** + * Full path of the project the issue belongs to. + */ + projectPath: string; + + /** + * IID of the issue to be added. + */ + issueIid: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicAddIssue + */ +export interface IXGitLabEpicAddIssuePayload { + __typename: '_xGitLabEpicAddIssuePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic after mutation. + */ + epic: IXGitLabEpic | null; + + /** + * Epic-issue relationship. + */ + epicIssue: IXGitLabEpicIssue | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Represents an epic board + */ +export interface IXGitLabEpicBoard { + __typename: '_xGitLabEpicBoard'; + + /** + * Whether or not backlog list is hidden. + */ + hideBacklogList: boolean | null; + + /** + * Whether or not closed list is hidden. + */ + hideClosedList: boolean | null; + + /** + * Global ID of the epic board. + */ + id: any; + + /** + * Labels of the board. + */ + labels: IXGitLabLabelConnection | null; + + /** + * Epic board lists. + */ + lists: IXGitLabEpicListConnection | null; + + /** + * Name of the epic board. + */ + name: string | null; + + /** + * Web path of the epic board. + */ + webPath: string; + + /** + * Web URL of the epic board. + */ + webUrl: string; +} + +export interface ILabelsOnXGitLabEpicBoardArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IListsOnXGitLabEpicBoardArguments { + /** + * Find an epic board list by ID. + */ + id?: any | null; + + /** + * Filters applied when getting epic metadata in the epic board list. + */ + epicFilters?: IXGitLabEpicFilters | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for EpicBoard. + */ +export interface IXGitLabEpicBoardConnection { + __typename: '_xGitLabEpicBoardConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of EpicBoardCreate + */ +export interface IXGitLabEpicBoardCreateInput { + /** + * Board name. + */ + name?: string | null; + + /** + * Whether or not backlog list is hidden. + */ + hideBacklogList?: boolean | null; + + /** + * Whether or not closed list is hidden. + */ + hideClosedList?: boolean | null; + + /** + * Labels of the issue. + */ + labels?: Array | null; + + /** + * IDs of labels to be added to the board. + */ + labelIds?: Array | null; + + /** + * Full path of the group with which the resource is associated. + */ + groupPath?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicBoardCreate + */ +export interface IXGitLabEpicBoardCreatePayload { + __typename: '_xGitLabEpicBoardCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Created epic board. + */ + epicBoard: IXGitLabEpicBoard | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEpicBoardEdge { + __typename: '_xGitLabEpicBoardEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEpicBoard | null; +} + +/** + * Autogenerated input type of EpicBoardListCreate + */ +export interface IXGitLabEpicBoardListCreateInput { + /** + * Create the backlog list. + */ + backlog?: boolean | null; + + /** + * Global ID of an existing label. + */ + labelId?: any | null; + + /** + * Global ID of the issue board to mutate. + */ + boardId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicBoardListCreate + */ +export interface IXGitLabEpicBoardListCreatePayload { + __typename: '_xGitLabEpicBoardListCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Epic list in the epic board. + */ + list: IXGitLabEpicList | null; +} + +/** + * Autogenerated input type of EpicBoardListDestroy + */ +export interface IXGitLabEpicBoardListDestroyInput { + /** + * Global ID of the epic board list to destroy. + */ + listId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicBoardListDestroy + */ +export interface IXGitLabEpicBoardListDestroyPayload { + __typename: '_xGitLabEpicBoardListDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Epic board list. `null` if the board was destroyed successfully. + */ + list: IXGitLabEpicList | null; +} + +/** + * Autogenerated input type of EpicBoardUpdate + */ +export interface IXGitLabEpicBoardUpdateInput { + /** + * Board name. + */ + name?: string | null; + + /** + * Whether or not backlog list is hidden. + */ + hideBacklogList?: boolean | null; + + /** + * Whether or not closed list is hidden. + */ + hideClosedList?: boolean | null; + + /** + * Labels of the issue. + */ + labels?: Array | null; + + /** + * IDs of labels to be added to the board. + */ + labelIds?: Array | null; + + /** + * Epic board global ID. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicBoardUpdate + */ +export interface IXGitLabEpicBoardUpdatePayload { + __typename: '_xGitLabEpicBoardUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Updated epic board. + */ + epicBoard: IXGitLabEpicBoard | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * The connection type for Epic. + */ +export interface IXGitLabEpicConnection { + __typename: '_xGitLabEpicConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Counts of descendent epics + */ +export interface IXGitLabEpicDescendantCount { + __typename: '_xGitLabEpicDescendantCount'; + + /** + * Number of closed child epics. + */ + closedEpics: number | null; + + /** + * Number of closed epic issues. + */ + closedIssues: number | null; + + /** + * Number of opened child epics. + */ + openedEpics: number | null; + + /** + * Number of opened epic issues. + */ + openedIssues: number | null; +} + +/** + * Total weight of open and closed descendant issues + */ +export interface IXGitLabEpicDescendantWeights { + __typename: '_xGitLabEpicDescendantWeights'; + + /** + * Total weight of completed (closed) issues in this epic, including epic descendants. + */ + closedIssues: number | null; + + /** + * Total weight of opened issues in this epic, including epic descendants. + */ + openedIssues: number | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEpicEdge { + __typename: '_xGitLabEpicEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEpic | null; +} + +export interface IXGitLabEpicFilters { + /** + * Filter by label name. + */ + labelName?: Array | null; + + /** + * Filter by author username. + */ + authorUsername?: string | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicBoardIssueInput | null; + + /** + * Search query for epic title or description. + */ + search?: string | null; +} + +/** + * Health status of child issues + */ +export interface IXGitLabEpicHealthStatus { + __typename: '_xGitLabEpicHealthStatus'; + + /** + * Number of issues at risk. + */ + issuesAtRisk: number | null; + + /** + * Number of issues that need attention. + */ + issuesNeedingAttention: number | null; + + /** + * Number of issues on track. + */ + issuesOnTrack: number | null; +} + +/** + * Relationship between an epic and an issue + */ +export interface IXGitLabEpicIssue { + __typename: '_xGitLabEpicIssue'; + + /** + * Alert associated to this issue. + */ + alertManagementAlert: IXGitLabAlertManagementAlert | null; + + /** + * Assignees of the issue. + */ + assignees: IXGitLabUserCoreConnection | null; + + /** + * User that created the issue. + */ + author: IXGitLabUserCore; + + /** + * Indicates the issue is blocked. + */ + blocked: boolean; + + /** + * Count of issues blocking this issue. + */ + blockedByCount: number | null; + + /** + * Issues blocking this issue. + */ + blockedByIssues: IXGitLabIssueConnection | null; + + /** + * Count of issues this issue is blocking. + */ + blockingCount: number; + + /** + * Timestamp of when the issue was closed. + */ + closedAt: any | null; + + /** + * Indicates the issue is confidential. + */ + confidential: boolean; + + /** + * User specific email address for the issue. + */ + createNoteEmail: string | null; + + /** + * Timestamp of when the issue was created. + */ + createdAt: any; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; + + /** + * Customer relations contacts of the issue. + */ + customerRelationsContacts: IXGitLabCustomerRelationsContactConnection | null; + + /** + * Description of the issue. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Collection of design images associated with this issue. + */ + designCollection: IXGitLabDesignCollection | null; + + /** + * Indicates discussion is locked on the issue. + */ + discussionLocked: boolean; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Number of downvotes the issue has received. + */ + downvotes: number; + + /** + * Due date of the issue. + */ + dueDate: any | null; + + /** + * Indicates if a project has email notifications disabled: `true` if email notifications are disabled. + */ + emailsDisabled: boolean; + + /** + * Epic to which this issue belongs. + */ + epic: IXGitLabEpic | null; + + /** + * ID of the epic-issue relation. + */ + epicIssueId: string; + + /** + * Current health status. + */ + healthStatus: XGitLabHealthStatus | null; + + /** + * Indicates the issue is hidden because the author has been banned. Will always + * return `null` if `ban_user_feature_flag` feature flag is disabled. + */ + hidden: boolean | null; + + /** + * Human-readable time estimate of the issue. + */ + humanTimeEstimate: string | null; + + /** + * Human-readable total time reported as spent on the issue. + */ + humanTotalTimeSpent: string | null; + + /** + * Global ID of the epic-issue relation. + */ + id: string | null; + + /** + * Internal ID of the issue. + */ + iid: string; + + /** + * Iteration of the issue. + */ + iteration: IXGitLabIteration | null; + + /** + * Labels of the issue. + */ + labels: IXGitLabLabelConnection | null; + + /** + * Number of merge requests that close the issue on merge. + */ + mergeRequestsCount: number; + + /** + * Metric images associated to the issue. + */ + metricImages: Array | null; + + /** + * Milestone of the issue. + */ + milestone: IXGitLabMilestone | null; + + /** + * Indicates if issue got moved from other project. + */ + moved: boolean | null; + + /** + * Updated Issue after it got moved to another project. + */ + movedTo: IXGitLabIssue | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * List of participants in the issue. + */ + participants: IXGitLabUserCoreConnection | null; + + /** + * ID of the issue project. + */ + projectId: number; + + /** + * Internal reference of the issue. Returned in shortened format by default. + */ + reference: string; + + /** + * URI path of the epic-issue relation. + */ + relationPath: string | null; + + /** + * Relative position of the issue (used for positioning in epic tree and issue boards). + */ + relativePosition: number | null; + + /** + * Severity level of the incident. + */ + severity: XGitLabIssuableSeverity | null; + + /** + * Timestamp of when the issue SLA expires. + */ + slaDueAt: any | null; + + /** + * State of the issue. + */ + state: XGitLabIssueState; + + /** + * Indicates whether an issue is published to the status page. + */ + statusPagePublishedIncident: boolean | null; + + /** + * Indicates the currently logged in user is subscribed to the issue. + */ + subscribed: boolean; + + /** + * Task completion status of the issue. + */ + taskCompletionStatus: IXGitLabTaskCompletionStatus; + + /** + * Time estimate of the issue. + */ + timeEstimate: number; + + /** + * Timelogs on the issue. + */ + timelogs: IXGitLabTimelogConnection; + + /** + * Title of the issue. + */ + title: string; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Total time reported as spent on the issue. + */ + totalTimeSpent: number; + + /** + * Type of the issue. + */ + type: XGitLabIssueType | null; + + /** + * Timestamp of when the issue was last updated. + */ + updatedAt: any; + + /** + * User that last updated the issue. + */ + updatedBy: IXGitLabUserCore | null; + + /** + * Number of upvotes the issue has received. + */ + upvotes: number; + + /** + * Number of user discussions in the issue. + */ + userDiscussionsCount: number; + + /** + * Number of user notes of the issue. + */ + userNotesCount: number; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabIssuePermissions; + + /** + * Web path of the issue. + */ + webPath: string; + + /** + * Web URL of the issue. + */ + webUrl: string; + + /** + * Weight of the issue. + */ + weight: number | null; +} + +export interface IAssigneesOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IBlockedByIssuesOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICurrentUserTodosOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +export interface ICustomerRelationsContactsOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDiscussionsOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelsOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IParticipantsOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReferenceOnXGitLabEpicIssueArguments { + /** + * Boolean option specifying whether the reference should be returned in full. + * @default false + */ + full?: boolean | null; +} + +export interface ITimelogsOnXGitLabEpicIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for EpicIssue. + */ +export interface IXGitLabEpicIssueConnection { + __typename: '_xGitLabEpicIssueConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; + + /** + * Total weight of issues collection. + */ + weight: number; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEpicIssueEdge { + __typename: '_xGitLabEpicIssueEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEpicIssue | null; +} + +/** + * Represents an epic board list + */ +export interface IXGitLabEpicList { + __typename: '_xGitLabEpicList'; + + /** + * Indicates if this list is collapsed for this user. + */ + collapsed: boolean | null; + + /** + * List epics. + */ + epics: IXGitLabEpicConnection | null; + + /** + * Count of epics in the list. + */ + epicsCount: number | null; + + /** + * Global ID of the board list. + */ + id: any; + + /** + * Label of the list. + */ + label: IXGitLabLabel | null; + + /** + * Type of the list. + */ + listType: string; + + /** + * Position of the list within the board. + */ + position: number | null; + + /** + * Title of the list. + */ + title: string; +} + +export interface IEpicsOnXGitLabEpicListArguments { + /** + * Filters applied when selecting epics in the board list. + */ + filters?: IXGitLabEpicFilters | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for EpicList. + */ +export interface IXGitLabEpicListConnection { + __typename: '_xGitLabEpicListConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEpicListEdge { + __typename: '_xGitLabEpicListEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEpicList | null; +} + +/** + * Autogenerated input type of EpicMoveList + */ +export interface IXGitLabEpicMoveListInput { + /** + * Global ID of the board that the epic is in. + */ + boardId: any; + + /** + * ID of the epic to mutate. + */ + epicId: any; + + /** + * ID of the board list that the epic will be moved from. Required if moving between lists. + */ + fromListId?: any | null; + + /** + * ID of the list the epic will be in after mutation. + */ + toListId: any; + + /** + * ID of epic that should be placed before the current epic. + */ + moveBeforeId?: any | null; + + /** + * ID of epic that should be placed after the current epic. + */ + moveAfterId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicMoveList + */ +export interface IXGitLabEpicMoveListPayload { + __typename: '_xGitLabEpicMoveListPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic after mutation. + */ + epic: IXGitLabEpic | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Check permissions for the current user on an epic + */ +export interface IXGitLabEpicPermissions { + __typename: '_xGitLabEpicPermissions'; + + /** + * Indicates the user can perform `admin_epic` on this resource + */ + adminEpic: boolean; + + /** + * Indicates the user can perform `award_emoji` on this resource + */ + awardEmoji: boolean; + + /** + * Indicates the user can perform `create_epic` on this resource + */ + createEpic: boolean; + + /** + * Indicates the user can perform `create_note` on this resource + */ + createNote: boolean; + + /** + * Indicates the user can perform `destroy_epic` on this resource + */ + destroyEpic: boolean; + + /** + * Indicates the user can perform `read_epic` on this resource + */ + readEpic: boolean; + + /** + * Indicates the user can perform `read_epic_iid` on this resource + */ + readEpicIid: boolean; + + /** + * Indicates the user can perform `update_epic` on this resource + */ + updateEpic: boolean; +} + +/** + * Autogenerated input type of EpicSetSubscription + */ +export interface IXGitLabEpicSetSubscriptionInput { + /** + * IID of the epic to mutate. + */ + iid: string; + + /** + * Group the epic to mutate belongs to. + */ + groupPath: string; + + /** + * Desired state of the subscription. + */ + subscribedState: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicSetSubscription + */ +export interface IXGitLabEpicSetSubscriptionPayload { + __typename: '_xGitLabEpicSetSubscriptionPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic after mutation. + */ + epic: IXGitLabEpic | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Roadmap sort values + */ +export const enum XGitLabEpicSort { + /** + * Start date at descending order. + * @deprecated "Use START_DATE_DESC. Deprecated in 13.11." + */ + start_date_desc = 'start_date_desc', + + /** + * Start date at ascending order. + * @deprecated "Use START_DATE_ASC. Deprecated in 13.11." + */ + start_date_asc = 'start_date_asc', + + /** + * End date at descending order. + * @deprecated "Use END_DATE_DESC. Deprecated in 13.11." + */ + end_date_desc = 'end_date_desc', + + /** + * End date at ascending order. + * @deprecated "Use END_DATE_ASC. Deprecated in 13.11." + */ + end_date_asc = 'end_date_asc', + + /** + * Sort by start date in descending order. + */ + START_DATE_DESC = 'START_DATE_DESC', + + /** + * Sort by start date in ascending order. + */ + START_DATE_ASC = 'START_DATE_ASC', + + /** + * Sort by end date in descending order. + */ + END_DATE_DESC = 'END_DATE_DESC', + + /** + * Sort by end date in ascending order. + */ + END_DATE_ASC = 'END_DATE_ASC', + + /** + * Sort by title in descending order. + */ + TITLE_DESC = 'TITLE_DESC', + + /** + * Sort by title in ascending order. + */ + TITLE_ASC = 'TITLE_ASC', +} + +/** + * State of an epic + */ +export const enum XGitLabEpicState { + /** + * All epics. + */ + all = 'all', + + /** + * Open epics. + */ + opened = 'opened', + + /** + * Closed epics. + */ + closed = 'closed', +} + +/** + * State event of an epic + */ +export const enum XGitLabEpicStateEvent { + /** + * Reopen the epic. + */ + REOPEN = 'REOPEN', + + /** + * Close the epic. + */ + CLOSE = 'CLOSE', +} + +/** + * A node of an epic tree. + */ +export interface IXGitLabEpicTreeNodeFieldsInputType { + /** + * ID of the epic issue or epic that is being moved. + */ + id: any; + + /** + * ID of the epic issue or issue the epic or issue is switched with. + */ + adjacentReferenceId?: any | null; + + /** + * Type of switch. Valid values are `after` or `before`. + */ + relativePosition?: XGitLabMoveType | null; + + /** + * ID of the new parent epic. + */ + newParentId?: any | null; +} + +/** + * Autogenerated input type of EpicTreeReorder + */ +export interface IXGitLabEpicTreeReorderInput { + /** + * ID of the base epic of the tree. + */ + baseEpicId: any; + + /** + * Parameters for updating the tree positions. + */ + moved: IXGitLabEpicTreeNodeFieldsInputType; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EpicTreeReorder + */ +export interface IXGitLabEpicTreeReorderPayload { + __typename: '_xGitLabEpicTreeReorderPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Epic ID wildcard values + */ +export const enum XGitLabEpicWildcardId { + /** + * No epic is assigned. + */ + NONE = 'NONE', + + /** + * Any epic is assigned. + */ + ANY = 'ANY', +} + +/** + * Autogenerated input type of EscalationPolicyCreate + */ +export interface IXGitLabEscalationPolicyCreateInput { + /** + * Project to create the escalation policy for. + */ + projectPath: string; + + /** + * Name of the escalation policy. + */ + name: string; + + /** + * Description of the escalation policy. + */ + description?: string | null; + + /** + * Steps of the escalation policy. + */ + rules: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EscalationPolicyCreate + */ +export interface IXGitLabEscalationPolicyCreatePayload { + __typename: '_xGitLabEscalationPolicyCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Escalation policy. + */ + escalationPolicy: IXGitLabEscalationPolicyType | null; +} + +/** + * Autogenerated input type of EscalationPolicyDestroy + */ +export interface IXGitLabEscalationPolicyDestroyInput { + /** + * Escalation policy internal ID to remove. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EscalationPolicyDestroy + */ +export interface IXGitLabEscalationPolicyDestroyPayload { + __typename: '_xGitLabEscalationPolicyDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Escalation policy. + */ + escalationPolicy: IXGitLabEscalationPolicyType | null; +} + +/** + * Represents an escalation policy + */ +export interface IXGitLabEscalationPolicyType { + __typename: '_xGitLabEscalationPolicyType'; + + /** + * Description of the escalation policy. + */ + description: string | null; + + /** + * ID of the escalation policy. + */ + id: any | null; + + /** + * Name of the escalation policy. + */ + name: string | null; + + /** + * Steps of the escalation policy. + */ + rules: Array | null; +} + +/** + * The connection type for EscalationPolicyType. + */ +export interface IXGitLabEscalationPolicyTypeConnection { + __typename: '_xGitLabEscalationPolicyTypeConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEscalationPolicyTypeEdge { + __typename: '_xGitLabEscalationPolicyTypeEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEscalationPolicyType | null; +} + +/** + * Autogenerated input type of EscalationPolicyUpdate + */ +export interface IXGitLabEscalationPolicyUpdateInput { + /** + * ID of the on-call schedule to create the on-call rotation in. + */ + id: any; + + /** + * Name of the escalation policy. + */ + name?: string | null; + + /** + * Description of the escalation policy. + */ + description?: string | null; + + /** + * Steps of the escalation policy. + */ + rules?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of EscalationPolicyUpdate + */ +export interface IXGitLabEscalationPolicyUpdatePayload { + __typename: '_xGitLabEscalationPolicyUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Escalation policy. + */ + escalationPolicy: IXGitLabEscalationPolicyType | null; +} + +/** + * Represents an escalation rule + */ +export interface IXGitLabEscalationRuleInput { + /** + * On-call schedule to notify. + */ + oncallScheduleIid?: string | null; + + /** + * Username of the user to notify. + */ + username?: string | null; + + /** + * Time in seconds before the rule is activated. + */ + elapsedTimeSeconds: number; + + /** + * Status required to prevent the rule from activating. + */ + status: XGitLabEscalationRuleStatus; +} + +/** + * Escalation rule statuses + */ +export const enum XGitLabEscalationRuleStatus { + /** + * . + */ + ACKNOWLEDGED = 'ACKNOWLEDGED', + + /** + * . + */ + RESOLVED = 'RESOLVED', +} + +/** + * Represents an escalation rule for an escalation policy + */ +export interface IXGitLabEscalationRuleType { + __typename: '_xGitLabEscalationRuleType'; + + /** + * Time in seconds before the rule is activated. + */ + elapsedTimeSeconds: number | null; + + /** + * ID of the escalation policy. + */ + id: any | null; + + /** + * On-call schedule to notify. + */ + oncallSchedule: IXGitLabIncidentManagementOncallSchedule | null; + + /** + * Status required to prevent the rule from activating. + */ + status: XGitLabEscalationRuleStatus | null; + + /** + * User to notify. + */ + user: IXGitLabUserCore | null; +} + +/** + * Representing an event + */ +export interface IXGitLabEvent { + __typename: '_xGitLabEvent'; + + /** + * Action of the event. + */ + action: XGitLabEventAction; + + /** + * Author of this event. + */ + author: IXGitLabUserCore; + + /** + * When this event was created. + */ + createdAt: any; + + /** + * ID of the event. + */ + id: string; + + /** + * When this event was updated. + */ + updatedAt: any; +} + +export type _xGitLabEventable = IXGitLabBoardEpic | IXGitLabEpic; + +export interface IXGitLabEventable { + __typename: '_xGitLabEventable'; + + /** + * List of events associated with the object. + */ + events: IXGitLabEventConnection | null; +} + +export interface IEventsOnXGitLabEventableArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Event action + */ +export const enum XGitLabEventAction { + /** + * Created action + */ + CREATED = 'CREATED', + + /** + * Updated action + */ + UPDATED = 'UPDATED', + + /** + * Closed action + */ + CLOSED = 'CLOSED', + + /** + * Reopened action + */ + REOPENED = 'REOPENED', + + /** + * Pushed action + */ + PUSHED = 'PUSHED', + + /** + * Commented action + */ + COMMENTED = 'COMMENTED', + + /** + * Merged action + */ + MERGED = 'MERGED', + + /** + * Joined action + */ + JOINED = 'JOINED', + + /** + * Left action + */ + LEFT = 'LEFT', + + /** + * Destroyed action + */ + DESTROYED = 'DESTROYED', + + /** + * Expired action + */ + EXPIRED = 'EXPIRED', + + /** + * Approved action + */ + APPROVED = 'APPROVED', +} + +/** + * The connection type for Event. + */ +export interface IXGitLabEventConnection { + __typename: '_xGitLabEventConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabEventEdge { + __typename: '_xGitLabEventEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabEvent | null; +} + +/** + * Autogenerated input type of ExportRequirements + */ +export interface IXGitLabExportRequirementsInput { + /** + * List requirements by sort order. + */ + sort?: XGitLabSort | null; + + /** + * Filter requirements by state. + */ + state?: XGitLabRequirementState | null; + + /** + * Search query for requirement title. + */ + search?: string | null; + + /** + * Filter requirements by author username. + */ + authorUsername?: Array | null; + + /** + * Full project path the requirements are associated with. + */ + projectPath: string; + + /** + * List of selected requirements fields to be exported. + */ + selectedFields?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ExportRequirements + */ +export interface IXGitLabExportRequirementsPayload { + __typename: '_xGitLabExportRequirementsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Represents an external resource to send audit events to + */ +export interface IXGitLabExternalAuditEventDestination { + __typename: '_xGitLabExternalAuditEventDestination'; + + /** + * External destination to send audit events to. + */ + destinationUrl: string; + + /** + * Group the destination belongs to. + */ + group: IXGitLabGroup; + + /** + * ID of the destination. + */ + id: string; +} + +/** + * Autogenerated input type of ExternalAuditEventDestinationCreate + */ +export interface IXGitLabExternalAuditEventDestinationCreateInput { + /** + * Destination URL. + */ + destinationUrl: string; + + /** + * Group path. + */ + groupPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ExternalAuditEventDestinationCreate + */ +export interface IXGitLabExternalAuditEventDestinationCreatePayload { + __typename: '_xGitLabExternalAuditEventDestinationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Destination created. + */ + externalAuditEventDestination: IXGitLabExternalAuditEventDestination | null; +} + +/** + * Autogenerated input type of ExternalAuditEventDestinationDestroy + */ +export interface IXGitLabExternalAuditEventDestinationDestroyInput { + /** + * ID of external audit event destination to destroy. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ExternalAuditEventDestinationDestroy + */ +export interface IXGitLabExternalAuditEventDestinationDestroyPayload { + __typename: '_xGitLabExternalAuditEventDestinationDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of ExternalAuditEventDestinationUpdate + */ +export interface IXGitLabExternalAuditEventDestinationUpdateInput { + /** + * ID of external audit event destination to destroy. + */ + id: any; + + /** + * Destination URL to change. + */ + destinationUrl?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ExternalAuditEventDestinationUpdate + */ +export interface IXGitLabExternalAuditEventDestinationUpdatePayload { + __typename: '_xGitLabExternalAuditEventDestinationUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Updated destination. + */ + externalAuditEventDestination: IXGitLabExternalAuditEventDestination | null; +} + +/** + * Represents an external issue + */ +export interface IXGitLabExternalIssue { + __typename: '_xGitLabExternalIssue'; + + /** + * Timestamp of when the issue was created. + */ + createdAt: any | null; + + /** + * Type of external tracker. + */ + externalTracker: string | null; + + /** + * Relative reference of the issue in the external tracker. + */ + relativeReference: string | null; + + /** + * Status of the issue in the external tracker. + */ + status: string | null; + + /** + * Title of the issue in the external tracker. + */ + title: string | null; + + /** + * Timestamp of when the issue was updated. + */ + updatedAt: any | null; + + /** + * URL to the issue in the external tracker. + */ + webUrl: string | null; +} + +export interface IXGitLabGeoNode { + __typename: '_xGitLabGeoNode'; + + /** + * Maximum concurrency of container repository sync for this secondary node. + */ + containerRepositoriesMaxCapacity: number | null; + + /** + * Indicates whether this Geo node is enabled. + */ + enabled: boolean | null; + + /** + * Maximum concurrency of LFS/attachment backfill for this secondary node. + */ + filesMaxCapacity: number | null; + + /** + * Find group wiki repository registries on this Geo node. + */ + groupWikiRepositoryRegistries: IXGitLabGroupWikiRepositoryRegistryConnection | null; + + /** + * ID of this GeoNode. + */ + id: string; + + /** + * URL defined on the primary node secondary nodes should use to contact it. + */ + internalUrl: string | null; + + /** + * Find LFS object registries on this Geo node. + */ + lfsObjectRegistries: IXGitLabLfsObjectRegistryConnection | null; + + /** + * Find merge request diff registries on this Geo node. + */ + mergeRequestDiffRegistries: IXGitLabMergeRequestDiffRegistryConnection | null; + + /** + * Interval (in days) in which the repository verification is valid. After expiry, it is reverted. + */ + minimumReverificationInterval: number | null; + + /** + * Unique identifier for this Geo node. + */ + name: string | null; + + /** + * Package file registries of the GeoNode. + */ + packageFileRegistries: IXGitLabPackageFileRegistryConnection | null; + + /** + * Find Pages Deployment registries on this Geo node + */ + pagesDeploymentRegistries: IXGitLabPagesDeploymentRegistryConnection | null; + + /** + * Find pipeline artifact registries on this Geo node. + */ + pipelineArtifactRegistries: IXGitLabPipelineArtifactRegistryConnection | null; + + /** + * Indicates whether this Geo node is the primary. + */ + primary: boolean | null; + + /** + * Maximum concurrency of repository backfill for this secondary node. + */ + reposMaxCapacity: number | null; + + /** + * Namespaces that should be synced, if `selective_sync_type` == `namespaces`. + */ + selectiveSyncNamespaces: IXGitLabNamespaceConnection | null; + + /** + * Repository storages whose projects should be synced, if `selective_sync_type` == `shards`. + */ + selectiveSyncShards: Array | null; + + /** + * Indicates if syncing is limited to only specific groups, or shards. + */ + selectiveSyncType: string | null; + + /** + * Find snippet repository registries on this Geo node. + */ + snippetRepositoryRegistries: IXGitLabSnippetRepositoryRegistryConnection | null; + + /** + * Indicates if this secondary node will replicate blobs in Object Storage. + */ + syncObjectStorage: boolean | null; + + /** + * Find terraform state version registries on this Geo node. + */ + terraformStateVersionRegistries: IXGitLabTerraformStateVersionRegistryConnection | null; + + /** + * Find Upload registries on this Geo node + */ + uploadRegistries: IXGitLabUploadRegistryConnection | null; + + /** + * User-facing URL for this Geo node. + */ + url: string | null; + + /** + * Maximum concurrency of repository verification for this secondary node. + */ + verificationMaxCapacity: number | null; +} + +export interface IGroupWikiRepositoryRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILfsObjectRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMergeRequestDiffRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPackageFileRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPagesDeploymentRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPipelineArtifactRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISelectiveSyncNamespacesOnXGitLabGeoNodeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetRepositoryRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITerraformStateVersionRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IUploadRegistriesOnXGitLabGeoNodeArguments { + /** + * Filters registries by their ID. + */ + ids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Autogenerated input type of GitlabSubscriptionActivate + */ +export interface IXGitLabGitlabSubscriptionActivateInput { + /** + * Activation code received after purchasing a GitLab subscription. + */ + activationCode: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of GitlabSubscriptionActivate + */ +export interface IXGitLabGitlabSubscriptionActivatePayload { + __typename: '_xGitLabGitlabSubscriptionActivatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Current license. + */ + license: IXGitLabCurrentLicense | null; +} + +export interface IXGitLabGrafanaIntegration { + __typename: '_xGitLabGrafanaIntegration'; + + /** + * Timestamp of the issue's creation. + */ + createdAt: any; + + /** + * Indicates whether Grafana integration is enabled. + */ + enabled: boolean; + + /** + * URL for the Grafana host for the Grafana integration. + */ + grafanaUrl: string; + + /** + * Internal ID of the Grafana integration. + */ + id: string; + + /** + * Timestamp of the issue's last activity. + */ + updatedAt: any; +} + +export interface IXGitLabGroup { + __typename: '_xGitLabGroup'; + + /** + * Size limit for repositories in the namespace in bytes. + */ + actualRepositorySizeLimit: number | null; + + /** + * Additional storage purchased for the root namespace in bytes. + */ + additionalPurchasedStorageSize: number | null; + + /** + * Indicates whether Auto DevOps is enabled for all projects within this group. + */ + autoDevopsEnabled: boolean | null; + + /** + * Avatar URL of the group. + */ + avatarUrl: string | null; + + /** + * Number of billable users in the group. + */ + billableMembersCount: number | null; + + /** + * A single board of the group. + */ + board: IXGitLabBoard | null; + + /** + * Boards of the group. + */ + boards: IXGitLabBoardConnection | null; + + /** + * Represents the code coverage activity for this group. + */ + codeCoverageActivities: IXGitLabCodeCoverageActivityConnection | null; + + /** + * Compliance frameworks available to projects in this namespace. + */ + complianceFrameworks: IXGitLabComplianceFrameworkConnection | null; + + /** + * Find contacts of this group. + */ + contacts: IXGitLabCustomerRelationsContactConnection | null; + + /** + * Container repositories of the group. + */ + containerRepositories: IXGitLabContainerRepositoryConnection | null; + + /** + * Number of container repositories in the group. + */ + containerRepositoriesCount: number; + + /** + * Includes at least one project where the repository size exceeds the limit. + */ + containsLockedProjects: boolean; + + /** + * Custom emoji within this namespace. Available only when feature flag + * `custom_emoji` is enabled. This flag is disabled by default, because the + * feature is experimental and is subject to change without notice. + */ + customEmoji: IXGitLabCustomEmojiConnection | null; + + /** + * Number of dependency proxy blobs cached in the group. + */ + dependencyProxyBlobCount: number; + + /** + * Dependency Proxy blobs. + */ + dependencyProxyBlobs: IXGitLabDependencyProxyBlobConnection | null; + + /** + * Number of dependency proxy images cached in the group. + */ + dependencyProxyImageCount: number; + + /** + * Prefix for pulling images when using the dependency proxy. + */ + dependencyProxyImagePrefix: string; + + /** + * Dependency proxy TTL policy for the group. + */ + dependencyProxyImageTtlPolicy: IXGitLabDependencyProxyImageTtlGroupPolicy | null; + + /** + * Dependency Proxy manifests. + */ + dependencyProxyManifests: IXGitLabDependencyProxyManifestConnection | null; + + /** + * Dependency Proxy settings for the group. + */ + dependencyProxySetting: IXGitLabDependencyProxySetting | null; + + /** + * Total size of the dependency proxy cached images. + */ + dependencyProxyTotalSize: string; + + /** + * List of descendant groups of this group. + */ + descendantGroups: IXGitLabGroupConnection | null; + + /** + * Description of the namespace. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Group's DORA metrics. + */ + dora: IXGitLabDora | null; + + /** + * Indicates if a group has email notifications disabled. + */ + emailsDisabled: boolean | null; + + /** + * Find a single epic. + */ + epic: IXGitLabEpic | null; + + /** + * Find a single epic board. + */ + epicBoard: IXGitLabEpicBoard | null; + + /** + * Find epic boards. + */ + epicBoards: IXGitLabEpicBoardConnection | null; + + /** + * Find epics. + */ + epics: IXGitLabEpicConnection | null; + + /** + * Indicates if Epics are enabled for namespace + */ + epicsEnabled: boolean | null; + + /** + * Full name of the namespace. + */ + fullName: string; + + /** + * Full path of the namespace. + */ + fullPath: string; + + /** + * A membership of a user within this group. + */ + groupMembers: IXGitLabGroupMemberConnection | null; + + /** + * ID of the namespace. + */ + id: string; + + /** + * Status of the temporary storage increase. + */ + isTemporaryStorageIncreaseEnabled: boolean; + + /** + * Issues for projects in this group. + */ + issues: IXGitLabIssueConnection | null; + + /** + * Find iteration cadences. + */ + iterationCadences: IXGitLabIterationCadenceConnection | null; + + /** + * Find iterations. + */ + iterations: IXGitLabIterationConnection | null; + + /** + * Label available on this group. + */ + label: IXGitLabLabel | null; + + /** + * Labels available on this group. + */ + labels: IXGitLabLabelConnection | null; + + /** + * Indicates if Large File Storage (LFS) is enabled for namespace. + */ + lfsEnabled: boolean | null; + + /** + * Indicates if a group is disabled from getting mentioned. + */ + mentionsDisabled: boolean | null; + + /** + * Merge requests for projects in this group. + */ + mergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Milestones of the group. + */ + milestones: IXGitLabMilestoneConnection | null; + + /** + * Name of the namespace. + */ + name: string; + + /** + * Find organizations of this group. + */ + organizations: IXGitLabCustomerRelationsOrganizationConnection | null; + + /** + * Package settings for the namespace. + */ + packageSettings: IXGitLabPackageSettings | null; + + /** + * Packages of the group. + */ + packages: IXGitLabPackageConnection | null; + + /** + * Parent group. + */ + parent: IXGitLabGroup | null; + + /** + * Path of the namespace. + */ + path: string; + + /** + * Permission level required to create projects in the group. + */ + projectCreationLevel: string | null; + + /** + * Projects within this namespace. + */ + projects: IXGitLabProjectConnection; + + /** + * Number of projects in the root namespace where the repository size exceeds the limit. + */ + repositorySizeExcessProjectCount: number; + + /** + * Indicates if users can request access to namespace. + */ + requestAccessEnabled: boolean | null; + + /** + * Indicates if all users in this group are required to set up two-factor authentication. + */ + requireTwoFactorAuthentication: boolean | null; + + /** + * Aggregated storage statistics of the namespace. Only available for root namespaces. + */ + rootStorageStatistics: IXGitLabRootStorageStatistics | null; + + /** + * Find runners visible to the current user. + */ + runners: IXGitLabCiRunnerConnection | null; + + /** + * Indicates if sharing a project with another group within this group is prevented. + */ + shareWithGroupLock: boolean | null; + + /** + * Shared runners availability for the namespace and its descendants. + */ + sharedRunnersSetting: XGitLabSharedRunnersSetting | null; + + /** + * Group statistics. + */ + stats: IXGitLabGroupStats | null; + + /** + * Total storage limit of the root namespace in bytes. + */ + storageSizeLimit: number | null; + + /** + * Permission level required to create subgroups within the group. + */ + subgroupCreationLevel: string | null; + + /** + * Date until the temporary storage increase is active. + */ + temporaryStorageIncreaseEndsOn: any | null; + + /** + * Time logged on issues and merge requests in the group and its subgroups. + */ + timelogs: IXGitLabTimelogConnection; + + /** + * Total repository size of all projects in the root namespace in bytes. + */ + totalRepositorySize: number | null; + + /** + * Total excess repository size of all projects in the root namespace in bytes. + */ + totalRepositorySizeExcess: number | null; + + /** + * Time before two-factor authentication is enforced. + */ + twoFactorGracePeriod: number | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabGroupPermissions; + + /** + * Visibility of the namespace. + */ + visibility: string | null; + + /** + * Vulnerabilities reported on the projects in the group and its subgroups. + */ + vulnerabilities: IXGitLabVulnerabilityConnection | null; + + /** + * The historical number of vulnerabilities per day for the projects in the group and its subgroups. + */ + vulnerabilitiesCountByDay: IXGitLabVulnerabilitiesCountByDayConnection | null; + + /** + * Represents vulnerable project counts for each grade. + */ + vulnerabilityGrades: Array; + + /** + * Vulnerability scanners reported on the project vulnerabilities of the group and its subgroups. + */ + vulnerabilityScanners: IXGitLabVulnerabilityScannerConnection | null; + + /** + * Counts for each vulnerability severity in the group and its subgroups. + */ + vulnerabilitySeveritiesCount: IXGitLabVulnerabilitySeveritiesCount | null; + + /** + * Web URL of the group. + */ + webUrl: string; +} + +export interface IBoardOnXGitLabGroupArguments { + /** + * ID of the board. + */ + id: any; +} + +export interface IBoardsOnXGitLabGroupArguments { + /** + * Find a board by its ID. + */ + id?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICodeCoverageActivitiesOnXGitLabGroupArguments { + /** + * First day for which to fetch code coverage activity (maximum time window is set to 90 days). + */ + startDate: any; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IComplianceFrameworksOnXGitLabGroupArguments { + /** + * Global ID of a specific compliance framework to return. + */ + id?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IContactsOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IContainerRepositoriesOnXGitLabGroupArguments { + /** + * Filter the container repositories by their name. + */ + name?: string | null; + + /** + * Sort container repositories by this criteria. + * @default "created_desc" + */ + sort?: XGitLabContainerRepositorySort | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICustomEmojiOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDependencyProxyBlobsOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDependencyProxyManifestsOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDescendantGroupsOnXGitLabGroupArguments { + /** + * List of descendant groups of the parent group. + * @default true + */ + includeParentDescendants?: boolean | null; + + /** + * Limit result to groups owned by authenticated user. + */ + owned?: boolean | null; + + /** + * Search query for group name or group full path. + */ + search?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IEpicOnXGitLabGroupArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the epic, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of epics, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * Filter epics by state. + */ + state?: XGitLabEpicState | null; + + /** + * Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + */ + in?: Array | null; + + /** + * List epics by sort order. + */ + sort?: XGitLabEpicSort | null; + + /** + * Filter epics by author. + */ + authorUsername?: string | null; + + /** + * Filter epics by labels. + */ + labelName?: Array | null; + + /** + * Filter epics by milestone title, computed from epic's issues. + */ + milestoneTitle?: string | null; + + /** + * Filter epics by IID for autocomplete. + */ + iidStartsWith?: string | null; + + /** + * Include epics from ancestor groups. + * @default false + */ + includeAncestorGroups?: boolean | null; + + /** + * Include epics from descendant groups. + * @default true + */ + includeDescendantGroups?: boolean | null; + + /** + * Filter epics by given confidentiality. + */ + confidential?: boolean | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicFilterInput | null; +} + +export interface IEpicBoardOnXGitLabGroupArguments { + /** + * Find an epic board by ID. + */ + id: any; +} + +export interface IEpicBoardsOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IEpicsOnXGitLabGroupArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the epic, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of epics, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * Filter epics by state. + */ + state?: XGitLabEpicState | null; + + /** + * Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + */ + in?: Array | null; + + /** + * List epics by sort order. + */ + sort?: XGitLabEpicSort | null; + + /** + * Filter epics by author. + */ + authorUsername?: string | null; + + /** + * Filter epics by labels. + */ + labelName?: Array | null; + + /** + * Filter epics by milestone title, computed from epic's issues. + */ + milestoneTitle?: string | null; + + /** + * Filter epics by IID for autocomplete. + */ + iidStartsWith?: string | null; + + /** + * Include epics from ancestor groups. + * @default false + */ + includeAncestorGroups?: boolean | null; + + /** + * Include epics from descendant groups. + * @default true + */ + includeDescendantGroups?: boolean | null; + + /** + * Filter epics by given confidentiality. + */ + confidential?: boolean | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Negated epic arguments. + */ + not?: IXGitLabNegatedEpicFilterInput | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupMembersOnXGitLabGroupArguments { + /** + * Search query. + */ + search?: string | null; + + /** + * Filter members by the given member relations. + * @default ["DIRECT","INHERITED"] + */ + relations?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIssuesOnXGitLabGroupArguments { + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the issue. For example, "1". + */ + iid?: string | null; + + /** + * List of IIDs of issues. For example, `["1", "2"]`. + */ + iids?: Array | null; + + /** + * Labels applied to this issue. + */ + labelName?: Array | null; + + /** + * Milestone applied to this issue. + */ + milestoneTitle?: Array | null; + + /** + * Username of the author of the issue. + */ + authorUsername?: string | null; + + /** + * Usernames of users assigned to the issue. + */ + assigneeUsernames?: Array | null; + + /** + * ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + */ + assigneeId?: string | null; + + /** + * Issues created before this date. + */ + createdBefore?: any | null; + + /** + * Issues created after this date. + */ + createdAfter?: any | null; + + /** + * Issues updated before this date. + */ + updatedBefore?: any | null; + + /** + * Issues updated after this date. + */ + updatedAfter?: any | null; + + /** + * Issues closed before this date. + */ + closedBefore?: any | null; + + /** + * Issues closed after this date. + */ + closedAfter?: any | null; + + /** + * Filter issues by the given issue types. + */ + types?: Array | null; + + /** + * Filter issues by milestone ID wildcard. + */ + milestoneWildcardId?: XGitLabMilestoneWildcardId | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + */ + confidential?: boolean | null; + + /** + * Negated arguments. + */ + not?: IXGitLabNegatedIssueFilterInput | null; + + /** + * Current state of this issue. + */ + state?: XGitLabIssuableState | null; + + /** + * Sort issues by this criteria. + * @default "created_desc" + */ + sort?: XGitLabIssueSort | null; + + /** + * List of iteration Global IDs applied to the issue. + */ + iterationId?: Array | null; + + /** + * Filter by iteration ID wildcard. + */ + iterationWildcardId?: XGitLabIterationWildcardId | null; + + /** + * ID of an epic associated with the issues, "none" and "any" values are supported. + */ + epicId?: string | null; + + /** + * Whether to include subepics when filtering issues by epicId. + */ + includeSubepics?: boolean | null; + + /** + * Weight applied to the issue, "none" and "any" values are supported. + */ + weight?: string | null; + + /** + * Include issues belonging to subgroups + * @default false + */ + includeSubgroups?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIterationCadencesOnXGitLabGroupArguments { + /** + * Global ID of the iteration cadence to look up. + */ + id?: any | null; + + /** + * Fuzzy search by title. + */ + title?: string | null; + + /** + * Duration in weeks of the iterations within this cadence. + */ + durationInWeeks?: number | null; + + /** + * Whether the iteration cadence should automatically generate future iterations. + */ + automatic?: boolean | null; + + /** + * Whether the iteration cadence is active. + */ + active?: boolean | null; + + /** + * Whether to include ancestor groups to search iterations cadences in. + */ + includeAncestorGroups?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIterationsOnXGitLabGroupArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Filter iterations by state. + */ + state?: XGitLabIterationState | null; + + /** + * Fuzzy search by title. + */ + title?: string | null; + + /** + * Global ID of the Iteration to look up. + */ + id?: string | null; + + /** + * Internal ID of the Iteration to look up. + */ + iid?: string | null; + + /** + * Whether to include ancestor iterations. Defaults to true. + */ + includeAncestors?: boolean | null; + + /** + * Global iteration cadence IDs by which to look up the iterations. + */ + iterationCadenceIds?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelOnXGitLabGroupArguments { + /** + * Title of the label. + */ + title: string; +} + +export interface ILabelsOnXGitLabGroupArguments { + /** + * Search term to find labels with. + */ + searchTerm?: string | null; + + /** + * Include labels from ancestor groups. + * @default false + */ + includeAncestorGroups?: boolean | null; + + /** + * Include labels from descendant groups. + * @default false + */ + includeDescendantGroups?: boolean | null; + + /** + * Include only group level labels. + * @default false + */ + onlyGroupLabels?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMergeRequestsOnXGitLabGroupArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * Include merge requests belonging to subgroups + * @default false + */ + includeSubgroups?: boolean | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMilestonesOnXGitLabGroupArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`. + */ + ids?: Array | null; + + /** + * Filter milestones by state. + */ + state?: XGitLabMilestoneStateEnum | null; + + /** + * Title of the milestone. + */ + title?: string | null; + + /** + * Search string for the title. + */ + searchTitle?: string | null; + + /** + * Date the milestone contains. + */ + containingDate?: any | null; + + /** + * Sort milestones by this criteria. + * @default "DUE_DATE_ASC" + */ + sort?: XGitLabMilestoneSort | null; + + /** + * Include milestones from all subgroups and subprojects. + */ + includeDescendants?: boolean | null; + + /** + * Include milestones from all parent groups. + */ + includeAncestors?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IOrganizationsOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPackagesOnXGitLabGroupArguments { + /** + * Sort packages by this criteria. + * @default "CREATED_DESC" + */ + sort?: XGitLabPackageGroupSort | null; + + /** + * Search a package by name. + * @default null + */ + packageName?: string | null; + + /** + * Filter a package by type. + * @default null + */ + packageType?: XGitLabPackageTypeEnum | null; + + /** + * Filter a package by status. + * @default null + */ + status?: XGitLabPackageStatus | null; + + /** + * Include versionless packages. + * @default false + */ + includeVersionless?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectsOnXGitLabGroupArguments { + /** + * Include also subgroup projects. + * @default false + */ + includeSubgroups?: boolean | null; + + /** + * Search project with most similar names or paths. + * @default null + */ + search?: string | null; + + /** + * Sort projects by this criteria. + * @default null + */ + sort?: XGitLabNamespaceProjectSort | null; + + /** + * Filter projects by IDs. + * @default null + */ + ids?: Array | null; + + /** + * Returns only the projects which have code coverage. + * @default false + */ + hasCodeCoverage?: boolean | null; + + /** + * Returns only the projects which have vulnerabilities. + * @default false + */ + hasVulnerabilities?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IRunnersOnXGitLabGroupArguments { + /** + * Filter runners by status. + */ + status?: XGitLabCiRunnerStatus | null; + + /** + * Filter runners by type. + */ + type?: XGitLabCiRunnerType | null; + + /** + * Filter by tags associated with the runner (comma-separated or array). + */ + tagList?: Array | null; + + /** + * Filter by full token or partial text in description field. + */ + search?: string | null; + + /** + * Sort order of results. + */ + sort?: XGitLabCiRunnerSort | null; + + /** + * Control which runners to include in the results. + * @default "DESCENDANTS" + */ + membership?: XGitLabRunnerMembershipFilter | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabGroupArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitiesOnXGitLabGroupArguments { + /** + * Filter vulnerabilities by project. + */ + projectId?: Array | null; + + /** + * Filter vulnerabilities by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerabilities by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerabilities by state. + */ + state?: Array | null; + + /** + * Filter vulnerabilities by VulnerabilityScanner.externalId. + */ + scanner?: Array | null; + + /** + * Filter vulnerabilities by scanner ID. + */ + scannerId?: Array | null; + + /** + * List vulnerabilities by sort order. + * @default "severity_desc" + */ + sort?: XGitLabVulnerabilitySort | null; + + /** + * Returns only the vulnerabilities which have been resolved on default branch. + */ + hasResolution?: boolean | null; + + /** + * Returns only the vulnerabilities which have linked issues. + */ + hasIssues?: boolean | null; + + /** + * Filter vulnerabilities by location image. When this filter is present, the + * response only matches entries for a `reportType` that includes + * `container_scanning`, `cluster_image_scanning`. + */ + image?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitiesCountByDayOnXGitLabGroupArguments { + /** + * First day for which to fetch vulnerability history. + */ + startDate: any; + + /** + * Last day for which to fetch vulnerability history. + */ + endDate: any; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilityGradesOnXGitLabGroupArguments { + /** + * Include grades belonging to subgroups. + * @default false + */ + includeSubgroups?: boolean | null; +} + +export interface IVulnerabilityScannersOnXGitLabGroupArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitySeveritiesCountOnXGitLabGroupArguments { + /** + * Filter vulnerabilities by project. + */ + projectId?: Array | null; + + /** + * Filter vulnerabilities by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerabilities by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerabilities by state. + */ + state?: Array | null; + + /** + * Filter vulnerabilities by scanner. + */ + scanner?: Array | null; + + /** + * Filter vulnerabilities by scanner ID. + */ + scannerId?: Array | null; + + /** + * Filter vulnerabilities that do or do not have issues. + */ + hasIssues?: boolean | null; + + /** + * Filter vulnerabilities that do or do not have a resolution. + */ + hasResolution?: boolean | null; +} + +/** + * The connection type for Group. + */ +export interface IXGitLabGroupConnection { + __typename: '_xGitLabGroupConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabGroupEdge { + __typename: '_xGitLabGroupEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabGroup | null; +} + +/** + * Represents a Group Membership + */ +export interface IXGitLabGroupMember { + __typename: '_xGitLabGroupMember'; + + /** + * GitLab::Access level. + */ + accessLevel: IXGitLabAccessLevel | null; + + /** + * Date and time the membership was created. + */ + createdAt: any | null; + + /** + * User that authorized membership. + */ + createdBy: IXGitLabUserCore | null; + + /** + * Date and time the membership expires. + */ + expiresAt: any | null; + + /** + * Group that a User is a member of. + */ + group: IXGitLabGroup | null; + + /** + * ID of the member. + */ + id: string; + + /** + * Date and time the membership was last updated. + */ + updatedAt: any | null; + + /** + * User that is associated with the member object. + */ + user: IXGitLabUserCore | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabGroupPermissions; +} + +/** + * The connection type for GroupMember. + */ +export interface IXGitLabGroupMemberConnection { + __typename: '_xGitLabGroupMemberConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabGroupMemberEdge { + __typename: '_xGitLabGroupMemberEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabGroupMember | null; +} + +/** + * Group member relation + */ +export const enum XGitLabGroupMemberRelation { + /** + * Members in the group itself. + */ + DIRECT = 'DIRECT', + + /** + * Members in the group's ancestor groups. + */ + INHERITED = 'INHERITED', + + /** + * Members in the group's subgroups. + */ + DESCENDANTS = 'DESCENDANTS', +} + +/** + * User permission on groups + */ +export const enum XGitLabGroupPermission { + /** + * Groups where the user can create projects. + */ + CREATE_PROJECTS = 'CREATE_PROJECTS', +} + +export interface IXGitLabGroupPermissions { + __typename: '_xGitLabGroupPermissions'; + + /** + * Indicates the user can perform `create_projects` on this resource + */ + createProjects: boolean; + + /** + * Indicates the user can perform `read_group` on this resource + */ + readGroup: boolean; +} + +/** + * Contains release-related statistics about a group + */ +export interface IXGitLabGroupReleaseStats { + __typename: '_xGitLabGroupReleaseStats'; + + /** + * Total number of releases in all descendant projects of the group. + */ + releasesCount: number | null; + + /** + * Percentage of the group's descendant projects that have at least one release. + */ + releasesPercentage: number | null; +} + +/** + * Contains statistics about a group + */ +export interface IXGitLabGroupStats { + __typename: '_xGitLabGroupStats'; + + /** + * Statistics related to releases within the group. + */ + releaseStats: IXGitLabGroupReleaseStats | null; +} + +/** + * Autogenerated input type of GroupUpdate + */ +export interface IXGitLabGroupUpdateInput { + /** + * Full path of the group that will be updated. + */ + fullPath: string; + + /** + * Shared runners availability for the namespace and its descendants. + */ + sharedRunnersSetting: XGitLabSharedRunnersSetting; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of GroupUpdate + */ +export interface IXGitLabGroupUpdatePayload { + __typename: '_xGitLabGroupUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Group after update. + */ + group: IXGitLabGroup | null; +} + +/** + * Represents the Geo sync and verification state of a group wiki repository + */ +export interface IXGitLabGroupWikiRepositoryRegistry { + __typename: '_xGitLabGroupWikiRepositoryRegistry'; + + /** + * Timestamp when the GroupWikiRepositoryRegistry was created + */ + createdAt: any | null; + + /** + * ID of the Group Wiki Repository. + */ + groupWikiRepositoryId: string; + + /** + * ID of the GroupWikiRepositoryRegistry + */ + id: string; + + /** + * Error message during sync of the GroupWikiRepositoryRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the GroupWikiRepositoryRegistry + */ + lastSyncedAt: any | null; + + /** + * Timestamp after which the GroupWikiRepositoryRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the GroupWikiRepositoryRegistry + */ + retryCount: number | null; + + /** + * Sync state of the GroupWikiRepositoryRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for GroupWikiRepositoryRegistry. + */ +export interface IXGitLabGroupWikiRepositoryRegistryConnection { + __typename: '_xGitLabGroupWikiRepositoryRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabGroupWikiRepositoryRegistryEdge { + __typename: '_xGitLabGroupWikiRepositoryRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabGroupWikiRepositoryRegistry | null; +} + +/** + * Health status of an issue or epic + */ +export const enum XGitLabHealthStatus { + /** + * On track + */ + onTrack = 'onTrack', + + /** + * Needs attention + */ + needsAttention = 'needsAttention', + + /** + * At risk + */ + atRisk = 'atRisk', +} + +/** + * Autogenerated input type of HttpIntegrationCreate + */ +export interface IXGitLabHttpIntegrationCreateInput { + /** + * Project to create the integration in. + */ + projectPath: string; + + /** + * Name of the integration. + */ + name: string; + + /** + * Whether the integration is receiving alerts. + */ + active: boolean; + + /** + * Example of an alert payload. + */ + payloadExample?: any | null; + + /** + * Custom mapping of GitLab alert attributes to fields from the payload example. + */ + payloadAttributeMappings?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of HttpIntegrationCreate + */ +export interface IXGitLabHttpIntegrationCreatePayload { + __typename: '_xGitLabHttpIntegrationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * HTTP integration. + */ + integration: IXGitLabAlertManagementHttpIntegration | null; +} + +/** + * Autogenerated input type of HttpIntegrationDestroy + */ +export interface IXGitLabHttpIntegrationDestroyInput { + /** + * ID of the integration to remove. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of HttpIntegrationDestroy + */ +export interface IXGitLabHttpIntegrationDestroyPayload { + __typename: '_xGitLabHttpIntegrationDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * HTTP integration. + */ + integration: IXGitLabAlertManagementHttpIntegration | null; +} + +/** + * Autogenerated input type of HttpIntegrationResetToken + */ +export interface IXGitLabHttpIntegrationResetTokenInput { + /** + * ID of the integration to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of HttpIntegrationResetToken + */ +export interface IXGitLabHttpIntegrationResetTokenPayload { + __typename: '_xGitLabHttpIntegrationResetTokenPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * HTTP integration. + */ + integration: IXGitLabAlertManagementHttpIntegration | null; +} + +/** + * Autogenerated input type of HttpIntegrationUpdate + */ +export interface IXGitLabHttpIntegrationUpdateInput { + /** + * ID of the integration to mutate. + */ + id: any; + + /** + * Name of the integration. + */ + name?: string | null; + + /** + * Whether the integration is receiving alerts. + */ + active?: boolean | null; + + /** + * Example of an alert payload. + */ + payloadExample?: any | null; + + /** + * Custom mapping of GitLab alert attributes to fields from the payload example. + */ + payloadAttributeMappings?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of HttpIntegrationUpdate + */ +export interface IXGitLabHttpIntegrationUpdatePayload { + __typename: '_xGitLabHttpIntegrationUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * HTTP integration. + */ + integration: IXGitLabAlertManagementHttpIntegration | null; +} + +/** + * Describes an incident management on-call rotation + */ +export interface IXGitLabIncidentManagementOncallRotation { + __typename: '_xGitLabIncidentManagementOncallRotation'; + + /** + * Active period for the on-call rotation. + */ + activePeriod: IXGitLabOncallRotationActivePeriodType | null; + + /** + * End date and time of the on-call rotation. + */ + endsAt: any | null; + + /** + * ID of the on-call rotation. + */ + id: any; + + /** + * Length of the on-call schedule, in the units specified by lengthUnit. + */ + length: number | null; + + /** + * Unit of the on-call rotation length. + */ + lengthUnit: XGitLabOncallRotationUnitEnum | null; + + /** + * Name of the on-call rotation. + */ + name: string; + + /** + * Participants of the on-call rotation. + */ + participants: IXGitLabOncallParticipantTypeConnection | null; + + /** + * Blocks of time for which a participant is on-call within a given time frame. Time frame cannot exceed one month. + */ + shifts: IXGitLabIncidentManagementOncallShiftConnection | null; + + /** + * Start date of the on-call rotation. + */ + startsAt: any | null; +} + +export interface IParticipantsOnXGitLabIncidentManagementOncallRotationArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IShiftsOnXGitLabIncidentManagementOncallRotationArguments { + /** + * Start of timeframe to include shifts for. + */ + startTime: any; + + /** + * End of timeframe to include shifts for. Cannot exceed one month after start. + */ + endTime: any; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for IncidentManagementOncallRotation. + */ +export interface IXGitLabIncidentManagementOncallRotationConnection { + __typename: '_xGitLabIncidentManagementOncallRotationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabIncidentManagementOncallRotationEdge { + __typename: '_xGitLabIncidentManagementOncallRotationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabIncidentManagementOncallRotation | null; +} + +/** + * Describes an incident management on-call schedule + */ +export interface IXGitLabIncidentManagementOncallSchedule { + __typename: '_xGitLabIncidentManagementOncallSchedule'; + + /** + * Description of the on-call schedule. + */ + description: string | null; + + /** + * Internal ID of the on-call schedule. + */ + iid: string; + + /** + * Name of the on-call schedule. + */ + name: string; + oncallUsers: Array | null; + + /** + * On-call rotation for the on-call schedule. + */ + rotation: IXGitLabIncidentManagementOncallRotation | null; + + /** + * On-call rotations for the on-call schedule. + */ + rotations: IXGitLabIncidentManagementOncallRotationConnection; + + /** + * Time zone of the on-call schedule. + */ + timezone: string; +} + +export interface IRotationOnXGitLabIncidentManagementOncallScheduleArguments { + /** + * ID of the on-call rotation. + */ + id: any; +} + +export interface IRotationsOnXGitLabIncidentManagementOncallScheduleArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for IncidentManagementOncallSchedule. + */ +export interface IXGitLabIncidentManagementOncallScheduleConnection { + __typename: '_xGitLabIncidentManagementOncallScheduleConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabIncidentManagementOncallScheduleEdge { + __typename: '_xGitLabIncidentManagementOncallScheduleEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabIncidentManagementOncallSchedule | null; +} + +/** + * A block of time for which a participant is on-call. + */ +export interface IXGitLabIncidentManagementOncallShift { + __typename: '_xGitLabIncidentManagementOncallShift'; + + /** + * End time of the on-call shift. + */ + endsAt: any | null; + + /** + * Participant assigned to the on-call shift. + */ + participant: IXGitLabOncallParticipantType | null; + + /** + * Start time of the on-call shift. + */ + startsAt: any | null; +} + +/** + * The connection type for IncidentManagementOncallShift. + */ +export interface IXGitLabIncidentManagementOncallShiftConnection { + __typename: '_xGitLabIncidentManagementOncallShiftConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabIncidentManagementOncallShiftEdge { + __typename: '_xGitLabIncidentManagementOncallShiftEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabIncidentManagementOncallShift | null; +} + +export interface IXGitLabInstanceSecurityDashboard { + __typename: '_xGitLabInstanceSecurityDashboard'; + + /** + * Projects selected in Instance Security Dashboard. + */ + projects: IXGitLabProjectConnection; + + /** + * Represents vulnerable project counts for each grade. + */ + vulnerabilityGrades: Array; + + /** + * Vulnerability scanners reported on the vulnerabilities from projects selected in Instance Security Dashboard. + */ + vulnerabilityScanners: IXGitLabVulnerabilityScannerConnection | null; + + /** + * Counts for each vulnerability severity from projects selected in Instance Security Dashboard. + */ + vulnerabilitySeveritiesCount: IXGitLabVulnerabilitySeveritiesCount | null; +} + +export interface IProjectsOnXGitLabInstanceSecurityDashboardArguments { + /** + * Search query for project name, path, or description. + */ + search?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilityScannersOnXGitLabInstanceSecurityDashboardArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitySeveritiesCountOnXGitLabInstanceSecurityDashboardArguments { + /** + * Filter vulnerabilities by project. + */ + projectId?: Array | null; + + /** + * Filter vulnerabilities by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerabilities by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerabilities by state. + */ + state?: Array | null; + + /** + * Filter vulnerabilities by scanner. + */ + scanner?: Array | null; + + /** + * Filter vulnerabilities by scanner ID. + */ + scannerId?: Array | null; + + /** + * Filter vulnerabilities that do or do not have issues. + */ + hasIssues?: boolean | null; + + /** + * Filter vulnerabilities that do or do not have a resolution. + */ + hasResolution?: boolean | null; +} + +/** + * Represents an issuable. + */ +export type _xGitLabIssuable = + | IXGitLabEpic + | IXGitLabIssue + | IXGitLabMergeRequest; + +/** + * Fields to perform the search in + */ +export const enum XGitLabIssuableSearchableField { + /** + * Search in title field. + */ + TITLE = 'TITLE', + + /** + * Search in description field. + */ + DESCRIPTION = 'DESCRIPTION', +} + +/** + * Incident severity + */ +export const enum XGitLabIssuableSeverity { + /** + * Unknown severity + */ + UNKNOWN = 'UNKNOWN', + + /** + * Low severity + */ + LOW = 'LOW', + + /** + * Medium severity + */ + MEDIUM = 'MEDIUM', + + /** + * High severity + */ + HIGH = 'HIGH', + + /** + * Critical severity + */ + CRITICAL = 'CRITICAL', +} + +/** + * State of a GitLab issue or merge request + */ +export const enum XGitLabIssuableState { + /** + * In open state. + */ + opened = 'opened', + + /** + * In closed state. + */ + closed = 'closed', + + /** + * Discussion has been locked. + */ + locked = 'locked', + + /** + * All available. + */ + all = 'all', +} + +export interface IXGitLabIssue { + __typename: '_xGitLabIssue'; + + /** + * Alert associated to this issue. + */ + alertManagementAlert: IXGitLabAlertManagementAlert | null; + + /** + * Assignees of the issue. + */ + assignees: IXGitLabUserCoreConnection | null; + + /** + * User that created the issue. + */ + author: IXGitLabUserCore; + + /** + * Indicates the issue is blocked. + */ + blocked: boolean; + + /** + * Count of issues blocking this issue. + */ + blockedByCount: number | null; + + /** + * Issues blocking this issue. + */ + blockedByIssues: IXGitLabIssueConnection | null; + + /** + * Count of issues this issue is blocking. + */ + blockingCount: number; + + /** + * Timestamp of when the issue was closed. + */ + closedAt: any | null; + + /** + * Indicates the issue is confidential. + */ + confidential: boolean; + + /** + * User specific email address for the issue. + */ + createNoteEmail: string | null; + + /** + * Timestamp of when the issue was created. + */ + createdAt: any; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; + + /** + * Customer relations contacts of the issue. + */ + customerRelationsContacts: IXGitLabCustomerRelationsContactConnection | null; + + /** + * Description of the issue. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Collection of design images associated with this issue. + */ + designCollection: IXGitLabDesignCollection | null; + + /** + * Indicates discussion is locked on the issue. + */ + discussionLocked: boolean; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Number of downvotes the issue has received. + */ + downvotes: number; + + /** + * Due date of the issue. + */ + dueDate: any | null; + + /** + * Indicates if a project has email notifications disabled: `true` if email notifications are disabled. + */ + emailsDisabled: boolean; + + /** + * Epic to which this issue belongs. + */ + epic: IXGitLabEpic | null; + + /** + * Current health status. + */ + healthStatus: XGitLabHealthStatus | null; + + /** + * Indicates the issue is hidden because the author has been banned. Will always + * return `null` if `ban_user_feature_flag` feature flag is disabled. + */ + hidden: boolean | null; + + /** + * Human-readable time estimate of the issue. + */ + humanTimeEstimate: string | null; + + /** + * Human-readable total time reported as spent on the issue. + */ + humanTotalTimeSpent: string | null; + + /** + * ID of the issue. + */ + id: string; + + /** + * Internal ID of the issue. + */ + iid: string; + + /** + * Iteration of the issue. + */ + iteration: IXGitLabIteration | null; + + /** + * Labels of the issue. + */ + labels: IXGitLabLabelConnection | null; + + /** + * Number of merge requests that close the issue on merge. + */ + mergeRequestsCount: number; + + /** + * Metric images associated to the issue. + */ + metricImages: Array | null; + + /** + * Milestone of the issue. + */ + milestone: IXGitLabMilestone | null; + + /** + * Indicates if issue got moved from other project. + */ + moved: boolean | null; + + /** + * Updated Issue after it got moved to another project. + */ + movedTo: IXGitLabIssue | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * List of participants in the issue. + */ + participants: IXGitLabUserCoreConnection | null; + + /** + * ID of the issue project. + */ + projectId: number; + + /** + * Internal reference of the issue. Returned in shortened format by default. + */ + reference: string; + + /** + * Relative position of the issue (used for positioning in epic tree and issue boards). + */ + relativePosition: number | null; + + /** + * Severity level of the incident. + */ + severity: XGitLabIssuableSeverity | null; + + /** + * Timestamp of when the issue SLA expires. + */ + slaDueAt: any | null; + + /** + * State of the issue. + */ + state: XGitLabIssueState; + + /** + * Indicates whether an issue is published to the status page. + */ + statusPagePublishedIncident: boolean | null; + + /** + * Indicates the currently logged in user is subscribed to the issue. + */ + subscribed: boolean; + + /** + * Task completion status of the issue. + */ + taskCompletionStatus: IXGitLabTaskCompletionStatus; + + /** + * Time estimate of the issue. + */ + timeEstimate: number; + + /** + * Timelogs on the issue. + */ + timelogs: IXGitLabTimelogConnection; + + /** + * Title of the issue. + */ + title: string; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Total time reported as spent on the issue. + */ + totalTimeSpent: number; + + /** + * Type of the issue. + */ + type: XGitLabIssueType | null; + + /** + * Timestamp of when the issue was last updated. + */ + updatedAt: any; + + /** + * User that last updated the issue. + */ + updatedBy: IXGitLabUserCore | null; + + /** + * Number of upvotes the issue has received. + */ + upvotes: number; + + /** + * Number of user discussions in the issue. + */ + userDiscussionsCount: number; + + /** + * Number of user notes of the issue. + */ + userNotesCount: number; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabIssuePermissions; + + /** + * Web path of the issue. + */ + webPath: string; + + /** + * Web URL of the issue. + */ + webUrl: string; + + /** + * Weight of the issue. + */ + weight: number | null; +} + +export interface IAssigneesOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IBlockedByIssuesOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICurrentUserTodosOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +export interface ICustomerRelationsContactsOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDiscussionsOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelsOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IParticipantsOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReferenceOnXGitLabIssueArguments { + /** + * Boolean option specifying whether the reference should be returned in full. + * @default false + */ + full?: boolean | null; +} + +export interface ITimelogsOnXGitLabIssueArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for Issue. + */ +export interface IXGitLabIssueConnection { + __typename: '_xGitLabIssueConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; + + /** + * Total weight of issues collection. + */ + weight: number; +} + +/** + * Iteration ID wildcard values for issue creation + */ +export const enum XGitLabIssueCreationIterationWildcardId { + /** + * Current iteration. + */ + CURRENT = 'CURRENT', +} + +/** + * An edge in a connection. + */ +export interface IXGitLabIssueEdge { + __typename: '_xGitLabIssueEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueMove + */ +export interface IXGitLabIssueMoveInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Project to move the issue to. + */ + targetProjectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated input type of IssueMoveList + */ +export interface IXGitLabIssueMoveListInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Global ID of the board that the issue is in. + */ + boardId: any; + + /** + * ID of the board list that the issue will be moved from. + */ + fromListId?: string | null; + + /** + * ID of the board list that the issue will be moved to. + */ + toListId?: string | null; + + /** + * ID of issue that should be placed before the current issue. + */ + moveBeforeId?: string | null; + + /** + * ID of issue that should be placed after the current issue. + */ + moveAfterId?: string | null; + + /** + * ID of the parent epic. NULL when removing the association. + */ + epicId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueMoveList + */ +export interface IXGitLabIssueMoveListPayload { + __typename: '_xGitLabIssueMoveListPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated return type of IssueMove + */ +export interface IXGitLabIssueMovePayload { + __typename: '_xGitLabIssueMovePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Check permissions for the current user on a issue + */ +export interface IXGitLabIssuePermissions { + __typename: '_xGitLabIssuePermissions'; + + /** + * Indicates the user can perform `admin_issue` on this resource + */ + adminIssue: boolean; + + /** + * Indicates the user can perform `create_design` on this resource + */ + createDesign: boolean; + + /** + * Indicates the user can perform `create_note` on this resource + */ + createNote: boolean; + + /** + * Indicates the user can perform `destroy_design` on this resource + */ + destroyDesign: boolean; + + /** + * Indicates the user can perform `read_design` on this resource + */ + readDesign: boolean; + + /** + * Indicates the user can perform `read_issue` on this resource + */ + readIssue: boolean; + + /** + * Indicates the user can perform `reopen_issue` on this resource + */ + reopenIssue: boolean; + + /** + * Indicates the user can perform `update_issue` on this resource + */ + updateIssue: boolean; +} + +/** + * Autogenerated input type of IssueSetAssignees + */ +export interface IXGitLabIssueSetAssigneesInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Usernames to assign to the resource. Replaces existing assignees by default. + */ + assigneeUsernames: Array; + + /** + * Operation to perform. Defaults to REPLACE. + * @default "REPLACE" + */ + operationMode?: XGitLabMutationOperationMode | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetAssignees + */ +export interface IXGitLabIssueSetAssigneesPayload { + __typename: '_xGitLabIssueSetAssigneesPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetConfidential + */ +export interface IXGitLabIssueSetConfidentialInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Whether or not to set the issue as a confidential. + */ + confidential: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetConfidential + */ +export interface IXGitLabIssueSetConfidentialPayload { + __typename: '_xGitLabIssueSetConfidentialPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetDueDate + */ +export interface IXGitLabIssueSetDueDateInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Desired due date for the issue. Due date is removed if null. + */ + dueDate?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetDueDate + */ +export interface IXGitLabIssueSetDueDatePayload { + __typename: '_xGitLabIssueSetDueDatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetEpic + */ +export interface IXGitLabIssueSetEpicInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Global ID of the epic to be assigned to the issue, epic will be removed if absent or set to null + */ + epicId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetEpic + */ +export interface IXGitLabIssueSetEpicPayload { + __typename: '_xGitLabIssueSetEpicPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetIteration + */ +export interface IXGitLabIssueSetIterationInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Iteration to assign to the issue. + */ + iterationId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetIteration + */ +export interface IXGitLabIssueSetIterationPayload { + __typename: '_xGitLabIssueSetIterationPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetLocked + */ +export interface IXGitLabIssueSetLockedInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Whether or not to lock discussion on the issue. + */ + locked: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetLocked + */ +export interface IXGitLabIssueSetLockedPayload { + __typename: '_xGitLabIssueSetLockedPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetSeverity + */ +export interface IXGitLabIssueSetSeverityInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Set the incident severity level. + */ + severity: XGitLabIssuableSeverity; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetSeverity + */ +export interface IXGitLabIssueSetSeverityPayload { + __typename: '_xGitLabIssueSetSeverityPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetSubscription + */ +export interface IXGitLabIssueSetSubscriptionInput { + /** + * Desired state of the subscription. + */ + subscribedState: boolean; + + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetSubscription + */ +export interface IXGitLabIssueSetSubscriptionPayload { + __typename: '_xGitLabIssueSetSubscriptionPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of IssueSetWeight + */ +export interface IXGitLabIssueSetWeightInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * The desired weight for the issue. If set to null, weight is removed. + */ + weight?: number | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IssueSetWeight + */ +export interface IXGitLabIssueSetWeightPayload { + __typename: '_xGitLabIssueSetWeightPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Values for sorting issues + */ +export const enum XGitLabIssueSort { + /** + * Updated at descending order. + * @deprecated "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5." + */ + updated_desc = 'updated_desc', + + /** + * Updated at ascending order. + * @deprecated "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5." + */ + updated_asc = 'updated_asc', + + /** + * Created at descending order. + * @deprecated "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5." + */ + created_desc = 'created_desc', + + /** + * Created at ascending order. + * @deprecated "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5." + */ + created_asc = 'created_asc', + + /** + * Updated at descending order. + */ + UPDATED_DESC = 'UPDATED_DESC', + + /** + * Updated at ascending order. + */ + UPDATED_ASC = 'UPDATED_ASC', + + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Priority by ascending order. + */ + PRIORITY_ASC = 'PRIORITY_ASC', + + /** + * Priority by descending order. + */ + PRIORITY_DESC = 'PRIORITY_DESC', + + /** + * Label priority by ascending order. + */ + LABEL_PRIORITY_ASC = 'LABEL_PRIORITY_ASC', + + /** + * Label priority by descending order. + */ + LABEL_PRIORITY_DESC = 'LABEL_PRIORITY_DESC', + + /** + * Milestone due date by ascending order. + */ + MILESTONE_DUE_ASC = 'MILESTONE_DUE_ASC', + + /** + * Milestone due date by descending order. + */ + MILESTONE_DUE_DESC = 'MILESTONE_DUE_DESC', + + /** + * Due date by ascending order. + */ + DUE_DATE_ASC = 'DUE_DATE_ASC', + + /** + * Due date by descending order. + */ + DUE_DATE_DESC = 'DUE_DATE_DESC', + + /** + * Relative position by ascending order. + */ + RELATIVE_POSITION_ASC = 'RELATIVE_POSITION_ASC', + + /** + * Severity from less critical to more critical. + */ + SEVERITY_ASC = 'SEVERITY_ASC', + + /** + * Severity from more critical to less critical. + */ + SEVERITY_DESC = 'SEVERITY_DESC', + + /** + * Title by ascending order. + */ + TITLE_ASC = 'TITLE_ASC', + + /** + * Title by descending order. + */ + TITLE_DESC = 'TITLE_DESC', + + /** + * Number of upvotes (awarded "thumbs up" emoji) by ascending order. + */ + POPULARITY_ASC = 'POPULARITY_ASC', + + /** + * Number of upvotes (awarded "thumbs up" emoji) by descending order. + */ + POPULARITY_DESC = 'POPULARITY_DESC', + + /** + * Weight by ascending order. + */ + WEIGHT_ASC = 'WEIGHT_ASC', + + /** + * Weight by descending order. + */ + WEIGHT_DESC = 'WEIGHT_DESC', + + /** + * Published issues shown last. + */ + PUBLISHED_ASC = 'PUBLISHED_ASC', + + /** + * Published issues shown first. + */ + PUBLISHED_DESC = 'PUBLISHED_DESC', + + /** + * Issues with earliest SLA due time shown first. + */ + SLA_DUE_AT_ASC = 'SLA_DUE_AT_ASC', + + /** + * Issues with latest SLA due time shown first. + */ + SLA_DUE_AT_DESC = 'SLA_DUE_AT_DESC', + + /** + * Blocking issues count by ascending order. + */ + BLOCKING_ISSUES_ASC = 'BLOCKING_ISSUES_ASC', + + /** + * Blocking issues count by descending order. + */ + BLOCKING_ISSUES_DESC = 'BLOCKING_ISSUES_DESC', +} + +/** + * State of a GitLab issue + */ +export const enum XGitLabIssueState { + /** + * In open state. + */ + opened = 'opened', + + /** + * In closed state. + */ + closed = 'closed', + + /** + * Discussion has been locked. + */ + locked = 'locked', + + /** + * All available. + */ + all = 'all', +} + +/** + * Values for issue state events + */ +export const enum XGitLabIssueStateEvent { + /** + * Reopens the issue. + */ + REOPEN = 'REOPEN', + + /** + * Closes the issue. + */ + CLOSE = 'CLOSE', +} + +/** + * Represents total number of issues for the represented statuses + */ +export interface IXGitLabIssueStatusCountsType { + __typename: '_xGitLabIssueStatusCountsType'; + + /** + * Number of issues with status ALL for the project + */ + all: number | null; + + /** + * Number of issues with status CLOSED for the project + */ + closed: number | null; + + /** + * Number of issues with status OPENED for the project + */ + opened: number | null; +} + +/** + * Issue type + */ +export const enum XGitLabIssueType { + /** + * Issue issue type + */ + ISSUE = 'ISSUE', + + /** + * Incident issue type + */ + INCIDENT = 'INCIDENT', + + /** + * Test Case issue type + */ + TEST_CASE = 'TEST_CASE', + + /** + * Requirement issue type + */ + REQUIREMENT = 'REQUIREMENT', +} + +/** + * Represents an iteration object + */ +export interface IXGitLabIteration { + __typename: '_xGitLabIteration'; + + /** + * Timestamp of iteration creation. + */ + createdAt: any; + + /** + * Description of the iteration. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Timestamp of the iteration due date. + */ + dueDate: any | null; + + /** + * ID of the iteration. + */ + id: string; + + /** + * Internal ID of the iteration. + */ + iid: string; + + /** + * Cadence of the iteration. + */ + iterationCadence: IXGitLabIterationCadence; + + /** + * Historically accurate report about the timebox. + */ + report: IXGitLabTimeboxReport | null; + + /** + * Web path of the iteration, scoped to the query parent. Only valid for Project parents. Returns null in other contexts. + */ + scopedPath: string | null; + + /** + * Web URL of the iteration, scoped to the query parent. Only valid for Project parents. Returns null in other contexts. + */ + scopedUrl: string | null; + + /** + * Timestamp of the iteration start date. + */ + startDate: any | null; + + /** + * State of the iteration. + */ + state: XGitLabIterationState; + + /** + * Title of the iteration. + */ + title: string; + + /** + * Timestamp of last iteration update. + */ + updatedAt: any; + + /** + * Web path of the iteration. + */ + webPath: string; + + /** + * Web URL of the iteration. + */ + webUrl: string; +} + +/** + * Represents an iteration cadence + */ +export interface IXGitLabIterationCadence { + __typename: '_xGitLabIterationCadence'; + + /** + * Whether the iteration cadence is active. + */ + active: boolean | null; + + /** + * Whether the iteration cadence should automatically generate future iterations. + */ + automatic: boolean | null; + + /** + * Description of the iteration cadence. Maximum length is 5000 characters. + */ + description: string | null; + + /** + * Duration in weeks of the iterations within this cadence. + */ + durationInWeeks: number | null; + + /** + * Global ID of the iteration cadence. + */ + id: any; + + /** + * Future iterations to be created when iteration cadence is set to automatic. + */ + iterationsInAdvance: number | null; + + /** + * Whether the iteration cadence should roll over issues to the next iteration or not. + */ + rollOver: boolean; + + /** + * Timestamp of the iteration cadence start date. + */ + startDate: any | null; + + /** + * Title of the iteration cadence. + */ + title: string; +} + +/** + * The connection type for IterationCadence. + */ +export interface IXGitLabIterationCadenceConnection { + __typename: '_xGitLabIterationCadenceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of IterationCadenceCreate + */ +export interface IXGitLabIterationCadenceCreateInput { + /** + * Group where the iteration cadence is created. + */ + groupPath: string; + + /** + * Title of the iteration cadence. + */ + title?: string | null; + + /** + * Duration in weeks of the iterations within this cadence. + */ + durationInWeeks?: number | null; + + /** + * Future iterations to be created when iteration cadence is set to automatic. + */ + iterationsInAdvance?: number | null; + + /** + * Timestamp of the iteration cadence start date. + */ + startDate?: any | null; + + /** + * Whether the iteration cadence should automatically generate future iterations. + */ + automatic: boolean; + + /** + * Whether the iteration cadence is active. + */ + active: boolean; + + /** + * Whether the iteration cadence should roll over issues to the next iteration or not. + */ + rollOver?: boolean | null; + + /** + * Description of the iteration cadence. Maximum length is 5000 characters. + */ + description?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IterationCadenceCreate + */ +export interface IXGitLabIterationCadenceCreatePayload { + __typename: '_xGitLabIterationCadenceCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Created iteration cadence. + */ + iterationCadence: IXGitLabIterationCadence | null; +} + +/** + * Autogenerated input type of IterationCadenceDestroy + */ +export interface IXGitLabIterationCadenceDestroyInput { + /** + * Global ID of the iteration cadence. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IterationCadenceDestroy + */ +export interface IXGitLabIterationCadenceDestroyPayload { + __typename: '_xGitLabIterationCadenceDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Group the iteration cadence belongs to. + */ + group: IXGitLabGroup; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabIterationCadenceEdge { + __typename: '_xGitLabIterationCadenceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabIterationCadence | null; +} + +/** + * Autogenerated input type of IterationCadenceUpdate + */ +export interface IXGitLabIterationCadenceUpdateInput { + /** + * Global ID of the iteration cadence. + */ + id: any; + + /** + * Title of the iteration cadence. + */ + title?: string | null; + + /** + * Duration in weeks of the iterations within this cadence. + */ + durationInWeeks?: number | null; + + /** + * Future iterations to be created when iteration cadence is set to automatic. + */ + iterationsInAdvance?: number | null; + + /** + * Timestamp of the iteration cadence start date. + */ + startDate?: any | null; + + /** + * Whether the iteration cadence should automatically generate future iterations. + */ + automatic?: boolean | null; + + /** + * Whether the iteration cadence is active. + */ + active?: boolean | null; + + /** + * Whether the iteration cadence should roll over issues to the next iteration or not. + */ + rollOver?: boolean | null; + + /** + * Description of the iteration cadence. Maximum length is 5000 characters. + */ + description?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IterationCadenceUpdate + */ +export interface IXGitLabIterationCadenceUpdatePayload { + __typename: '_xGitLabIterationCadenceUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Updated iteration cadence. + */ + iterationCadence: IXGitLabIterationCadence | null; +} + +/** + * The connection type for Iteration. + */ +export interface IXGitLabIterationConnection { + __typename: '_xGitLabIterationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of iterationCreate + */ +export interface IXGitLabiterationCreateInput { + /** + * Full path of the project with which the resource is associated. + */ + projectPath?: string | null; + + /** + * Full path of the group with which the resource is associated. + */ + groupPath?: string | null; + + /** + * Global ID of the iterations cadence to be assigned to newly created iteration. + */ + iterationsCadenceId?: any | null; + + /** + * Title of the iteration. + */ + title?: string | null; + + /** + * Description of the iteration. + */ + description?: string | null; + + /** + * Start date of the iteration. + */ + startDate?: string | null; + + /** + * End date of the iteration. + */ + dueDate?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of iterationCreate + */ +export interface IXGitLabiterationCreatePayload { + __typename: '_xGitLabiterationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Created iteration. + */ + iteration: IXGitLabIteration | null; +} + +/** + * Autogenerated input type of IterationDelete + */ +export interface IXGitLabIterationDeleteInput { + /** + * ID of the iteration. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of IterationDelete + */ +export interface IXGitLabIterationDeletePayload { + __typename: '_xGitLabIterationDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Group the iteration belongs to. + */ + group: IXGitLabGroup; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabIterationEdge { + __typename: '_xGitLabIterationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabIteration | null; +} + +/** + * State of a GitLab iteration + */ +export const enum XGitLabIterationState { + /** + * Upcoming iteration. + */ + upcoming = 'upcoming', + + /** + * Started iteration. Deprecated in 14.1: Use current instead. + * @deprecated "Use current instead. Deprecated in 14.1." + */ + started = 'started', + + /** + * Current iteration. + */ + current = 'current', + + /** + * Open iteration. + */ + opened = 'opened', + + /** + * Closed iteration. + */ + closed = 'closed', + + /** + * Any iteration. + */ + all = 'all', +} + +/** + * Iteration ID wildcard values + */ +export const enum XGitLabIterationWildcardId { + /** + * No iteration is assigned. + */ + NONE = 'NONE', + + /** + * An iteration is assigned. + */ + ANY = 'ANY', + + /** + * Current iteration. + */ + CURRENT = 'CURRENT', +} + +export interface IXGitLabJiraImport { + __typename: '_xGitLabJiraImport'; + + /** + * Timestamp of when the Jira import was created. + */ + createdAt: any | null; + + /** + * Count of issues that failed to import. + */ + failedToImportCount: number; + + /** + * Count of issues that were successfully imported. + */ + importedIssuesCount: number; + + /** + * Project key for the imported Jira project. + */ + jiraProjectKey: string; + + /** + * Timestamp of when the Jira import was scheduled. + */ + scheduledAt: any | null; + + /** + * User that started the Jira import. + */ + scheduledBy: IXGitLabUserCore | null; + + /** + * Total count of issues that were attempted to import. + */ + totalIssueCount: number; +} + +/** + * The connection type for JiraImport. + */ +export interface IXGitLabJiraImportConnection { + __typename: '_xGitLabJiraImportConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabJiraImportEdge { + __typename: '_xGitLabJiraImportEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabJiraImport | null; +} + +/** + * Autogenerated input type of JiraImportStart + */ +export interface IXGitLabJiraImportStartInput { + /** + * Project to import the Jira project into. + */ + projectPath: string; + + /** + * Project key of the importer Jira project. + */ + jiraProjectKey: string; + + /** + * Project name of the importer Jira project. + */ + jiraProjectName?: string | null; + + /** + * Mapping of Jira to GitLab users. + */ + usersMapping?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of JiraImportStart + */ +export interface IXGitLabJiraImportStartPayload { + __typename: '_xGitLabJiraImportStartPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Jira import data after mutation. + */ + jiraImport: IXGitLabJiraImport | null; +} + +/** + * Autogenerated input type of JiraImportUsers + */ +export interface IXGitLabJiraImportUsersInput { + /** + * Project to import the Jira users into. + */ + projectPath: string; + + /** + * Index of the record the import should started at, default 0 (50 records returned). + */ + startAt?: number | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of JiraImportUsers + */ +export interface IXGitLabJiraImportUsersPayload { + __typename: '_xGitLabJiraImportUsersPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Users returned from Jira, matched by email and name if possible. + */ + jiraUsers: Array | null; +} + +export interface IXGitLabJiraProject { + __typename: '_xGitLabJiraProject'; + + /** + * Key of the Jira project. + */ + key: string; + + /** + * Name of the Jira project. + */ + name: string | null; + + /** + * ID of the Jira project. + */ + projectId: number; +} + +/** + * The connection type for JiraProject. + */ +export interface IXGitLabJiraProjectConnection { + __typename: '_xGitLabJiraProjectConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabJiraProjectEdge { + __typename: '_xGitLabJiraProjectEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabJiraProject | null; +} + +export interface IXGitLabJiraService { + __typename: '_xGitLabJiraService'; + + /** + * Indicates if the service is active. + */ + active: boolean | null; + + /** + * List of all Jira projects fetched through Jira REST API. + */ + projects: IXGitLabJiraProjectConnection | null; + + /** + * Class name of the service. + */ + type: string | null; +} + +export interface IProjectsOnXGitLabJiraServiceArguments { + /** + * Project name or key. + */ + name?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabJiraUser { + __typename: '_xGitLabJiraUser'; + + /** + * ID of the matched GitLab user. + */ + gitlabId: number | null; + + /** + * Name of the matched GitLab user. + */ + gitlabName: string | null; + + /** + * Username of the matched GitLab user. + */ + gitlabUsername: string | null; + + /** + * Account ID of the Jira user. + */ + jiraAccountId: string; + + /** + * Display name of the Jira user. + */ + jiraDisplayName: string; + + /** + * Email of the Jira user, returned only for users with public emails. + */ + jiraEmail: string | null; +} + +export interface IXGitLabJiraUsersMappingInputType { + /** + * Jira account ID of the user. + */ + jiraAccountId: string; + + /** + * ID of the GitLab user. + */ + gitlabId?: number | null; +} + +export const enum XGitLabJobArtifactFileType { + /** + * ARCHIVE job artifact file type. + */ + ARCHIVE = 'ARCHIVE', + + /** + * METADATA job artifact file type. + */ + METADATA = 'METADATA', + + /** + * TRACE job artifact file type. + */ + TRACE = 'TRACE', + + /** + * JUNIT job artifact file type. + */ + JUNIT = 'JUNIT', + + /** + * METRICS job artifact file type. + */ + METRICS = 'METRICS', + + /** + * METRICS REFEREE job artifact file type. + */ + METRICS_REFEREE = 'METRICS_REFEREE', + + /** + * NETWORK REFEREE job artifact file type. + */ + NETWORK_REFEREE = 'NETWORK_REFEREE', + + /** + * DOTENV job artifact file type. + */ + DOTENV = 'DOTENV', + + /** + * COBERTURA job artifact file type. + */ + COBERTURA = 'COBERTURA', + + /** + * CLUSTER APPLICATIONS job artifact file type. + */ + CLUSTER_APPLICATIONS = 'CLUSTER_APPLICATIONS', + + /** + * LSIF job artifact file type. + */ + LSIF = 'LSIF', + + /** + * SAST job artifact file type. + */ + SAST = 'SAST', + + /** + * SECRET DETECTION job artifact file type. + */ + SECRET_DETECTION = 'SECRET_DETECTION', + + /** + * DEPENDENCY SCANNING job artifact file type. + */ + DEPENDENCY_SCANNING = 'DEPENDENCY_SCANNING', + + /** + * CONTAINER SCANNING job artifact file type. + */ + CONTAINER_SCANNING = 'CONTAINER_SCANNING', + + /** + * CLUSTER IMAGE SCANNING job artifact file type. + */ + CLUSTER_IMAGE_SCANNING = 'CLUSTER_IMAGE_SCANNING', + + /** + * DAST job artifact file type. + */ + DAST = 'DAST', + + /** + * LICENSE SCANNING job artifact file type. + */ + LICENSE_SCANNING = 'LICENSE_SCANNING', + + /** + * ACCESSIBILITY job artifact file type. + */ + ACCESSIBILITY = 'ACCESSIBILITY', + + /** + * CODE QUALITY job artifact file type. + */ + CODEQUALITY = 'CODEQUALITY', + + /** + * PERFORMANCE job artifact file type. + */ + PERFORMANCE = 'PERFORMANCE', + + /** + * BROWSER PERFORMANCE job artifact file type. + */ + BROWSER_PERFORMANCE = 'BROWSER_PERFORMANCE', + + /** + * LOAD PERFORMANCE job artifact file type. + */ + LOAD_PERFORMANCE = 'LOAD_PERFORMANCE', + + /** + * TERRAFORM job artifact file type. + */ + TERRAFORM = 'TERRAFORM', + + /** + * REQUIREMENTS job artifact file type. + */ + REQUIREMENTS = 'REQUIREMENTS', + + /** + * COVERAGE FUZZING job artifact file type. + */ + COVERAGE_FUZZING = 'COVERAGE_FUZZING', + + /** + * API FUZZING job artifact file type. + */ + API_FUZZING = 'API_FUZZING', +} + +/** + * Autogenerated input type of JobCancel + */ +export interface IXGitLabJobCancelInput { + /** + * ID of the job to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of JobCancel + */ +export interface IXGitLabJobCancelPayload { + __typename: '_xGitLabJobCancelPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Job after the mutation. + */ + job: IXGitLabCiJob | null; +} + +export interface IXGitLabJobPermissions { + __typename: '_xGitLabJobPermissions'; + + /** + * Indicates the user can perform `read_build` on this resource + */ + readBuild: boolean; + + /** + * Indicates the user can perform `read_job_artifacts` on this resource + */ + readJobArtifacts: boolean; + + /** + * Indicates the user can perform `update_build` on this resource + */ + updateBuild: boolean; +} + +/** + * Autogenerated input type of JobPlay + */ +export interface IXGitLabJobPlayInput { + /** + * ID of the job to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of JobPlay + */ +export interface IXGitLabJobPlayPayload { + __typename: '_xGitLabJobPlayPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Job after the mutation. + */ + job: IXGitLabCiJob | null; +} + +/** + * Autogenerated input type of JobRetry + */ +export interface IXGitLabJobRetryInput { + /** + * ID of the job to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of JobRetry + */ +export interface IXGitLabJobRetryPayload { + __typename: '_xGitLabJobRetryPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Job after the mutation. + */ + job: IXGitLabCiJob | null; +} + +/** + * Autogenerated input type of JobUnschedule + */ +export interface IXGitLabJobUnscheduleInput { + /** + * ID of the job to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of JobUnschedule + */ +export interface IXGitLabJobUnschedulePayload { + __typename: '_xGitLabJobUnschedulePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Job after the mutation. + */ + job: IXGitLabCiJob | null; +} + +export interface IXGitLabKas { + __typename: '_xGitLabKas'; + + /** + * Indicates whether the Kubernetes Agent Server is enabled. + */ + enabled: boolean; + + /** + * URL used by the Agents to communicate with KAS. + */ + externalUrl: string | null; + + /** + * KAS version. + */ + version: string | null; +} + +export interface IXGitLabLabel { + __typename: '_xGitLabLabel'; + + /** + * Background color of the label. + */ + color: string; + + /** + * When this label was created. + */ + createdAt: any; + + /** + * Description of the label (Markdown rendered as HTML for caching). + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Label ID. + */ + id: string; + + /** + * Text color of the label. + */ + textColor: string; + + /** + * Content of the label. + */ + title: string; + + /** + * When this label was last updated. + */ + updatedAt: any; +} + +/** + * The connection type for Label. + */ +export interface IXGitLabLabelConnection { + __typename: '_xGitLabLabelConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of LabelCreate + */ +export interface IXGitLabLabelCreateInput { + /** + * Full path of the project with which the resource is associated. + */ + projectPath?: string | null; + + /** + * Full path of the group with which the resource is associated. + */ + groupPath?: string | null; + + /** + * Title of the label. + */ + title: string; + + /** + * Description of the label. + */ + description?: string | null; + + /** + * The color of the label given in 6-digit hex notation with leading '#' sign + * (for example, `#FFAABB`) or one of the CSS color names. + * @default "#6699cc" + */ + color?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of LabelCreate + */ +export interface IXGitLabLabelCreatePayload { + __typename: '_xGitLabLabelCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Label after mutation. + */ + label: IXGitLabLabel | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabLabelEdge { + __typename: '_xGitLabLabelEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabLabel | null; +} + +/** + * Represents the Geo sync and verification state of an LFS object + */ +export interface IXGitLabLfsObjectRegistry { + __typename: '_xGitLabLfsObjectRegistry'; + + /** + * Timestamp when the LfsObjectRegistry was created + */ + createdAt: any | null; + + /** + * ID of the LfsObjectRegistry + */ + id: string; + + /** + * Error message during sync of the LfsObjectRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the LfsObjectRegistry + */ + lastSyncedAt: any | null; + + /** + * ID of the LFS object. + */ + lfsObjectId: string; + + /** + * Timestamp after which the LfsObjectRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the LfsObjectRegistry + */ + retryCount: number | null; + + /** + * Sync state of the LfsObjectRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for LfsObjectRegistry. + */ +export interface IXGitLabLfsObjectRegistryConnection { + __typename: '_xGitLabLfsObjectRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabLfsObjectRegistryEdge { + __typename: '_xGitLabLfsObjectRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabLfsObjectRegistry | null; +} + +/** + * Represents an entry from the Cloud License history + */ +export interface IXGitLabLicenseHistoryEntry { + __typename: '_xGitLabLicenseHistoryEntry'; + + /** + * Date when the license was activated. + */ + activatedAt: any | null; + + /** + * Date, including grace period, when licensed features will be blocked. + */ + blockChangesAt: any | null; + + /** + * Company of the licensee. + */ + company: string | null; + + /** + * Email of the licensee. + */ + email: string | null; + + /** + * Date when the license expires. + */ + expiresAt: any | null; + + /** + * ID of the license. + */ + id: string; + + /** + * Name of the licensee. + */ + name: string | null; + + /** + * Name of the subscription plan. + */ + plan: string; + + /** + * Date when the license started. + */ + startsAt: any | null; + + /** + * Type of the license. + */ + type: string; + + /** + * Number of paid users in the license. + */ + usersInLicenseCount: number | null; +} + +/** + * The connection type for LicenseHistoryEntry. + */ +export interface IXGitLabLicenseHistoryEntryConnection { + __typename: '_xGitLabLicenseHistoryEntryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabLicenseHistoryEntryEdge { + __typename: '_xGitLabLicenseHistoryEntryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabLicenseHistoryEntry | null; +} + +/** + * List limit metric setting + */ +export const enum XGitLabListLimitMetric { + /** + * Limit list by number and total weight of issues. + */ + all_metrics = 'all_metrics', + + /** + * Limit list by number of issues. + */ + issue_count = 'issue_count', + + /** + * Limit list by total weight of issues. + */ + issue_weights = 'issue_weights', +} + +/** + * Autogenerated input type of MarkAsSpamSnippet + */ +export interface IXGitLabMarkAsSpamSnippetInput { + /** + * Global ID of the snippet to update. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MarkAsSpamSnippet + */ +export interface IXGitLabMarkAsSpamSnippetPayload { + __typename: '_xGitLabMarkAsSpamSnippetPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Snippet after mutation. + */ + snippet: IXGitLabSnippet | null; +} + +/** + * Maven metadata + */ +export interface IXGitLabMavenMetadata { + __typename: '_xGitLabMavenMetadata'; + + /** + * App group of the Maven package. + */ + appGroup: string; + + /** + * App name of the Maven package. + */ + appName: string; + + /** + * App version of the Maven package. + */ + appVersion: string | null; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * ID of the metadatum. + */ + id: any; + + /** + * Path of the Maven package. + */ + path: string; + + /** + * Date of most recent update. + */ + updatedAt: any; +} + +/** + * Possible identifier types for a measurement + */ +export const enum XGitLabMeasurementIdentifier { + /** + * Project count. + */ + PROJECTS = 'PROJECTS', + + /** + * User count. + */ + USERS = 'USERS', + + /** + * Issue count. + */ + ISSUES = 'ISSUES', + + /** + * Merge request count. + */ + MERGE_REQUESTS = 'MERGE_REQUESTS', + + /** + * Group count. + */ + GROUPS = 'GROUPS', + + /** + * Pipeline count. + */ + PIPELINES = 'PIPELINES', + + /** + * Pipeline count with success status. + */ + PIPELINES_SUCCEEDED = 'PIPELINES_SUCCEEDED', + + /** + * Pipeline count with failed status. + */ + PIPELINES_FAILED = 'PIPELINES_FAILED', + + /** + * Pipeline count with canceled status. + */ + PIPELINES_CANCELED = 'PIPELINES_CANCELED', + + /** + * Pipeline count with skipped status. + */ + PIPELINES_SKIPPED = 'PIPELINES_SKIPPED', +} + +export type _xGitLabMemberInterface = + | IXGitLabGroupMember + | IXGitLabProjectMember; + +export interface IXGitLabMemberInterface { + __typename: '_xGitLabMemberInterface'; + + /** + * GitLab::Access level. + */ + accessLevel: IXGitLabAccessLevel | null; + + /** + * Date and time the membership was created. + */ + createdAt: any | null; + + /** + * User that authorized membership. + */ + createdBy: IXGitLabUserCore | null; + + /** + * Date and time the membership expires. + */ + expiresAt: any | null; + + /** + * ID of the member. + */ + id: string; + + /** + * Date and time the membership was last updated. + */ + updatedAt: any | null; + + /** + * User that is associated with the member object. + */ + user: IXGitLabUserCore | null; +} + +/** + * The connection type for MemberInterface. + */ +export interface IXGitLabMemberInterfaceConnection { + __typename: '_xGitLabMemberInterfaceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array<_xGitLabMemberInterface | null> | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMemberInterfaceEdge { + __typename: '_xGitLabMemberInterfaceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: _xGitLabMemberInterface | null; +} + +export interface IXGitLabMergeRequest { + __typename: '_xGitLabMergeRequest'; + + /** + * Indicates if members of the target project can push to the fork. + */ + allowCollaboration: boolean | null; + + /** + * Information relating to rules that must be satisfied to merge this merge request. + */ + approvalState: IXGitLabMergeRequestApprovalState; + + /** + * Number of approvals left. + */ + approvalsLeft: number | null; + + /** + * Number of approvals required. + */ + approvalsRequired: number | null; + + /** + * Indicates if the merge request has all the required approvals. Returns true if no required approvals are configured. + */ + approved: boolean; + + /** + * Users who approved the merge request. + */ + approvedBy: IXGitLabUserCoreConnection | null; + + /** + * Assignees of the merge request. + */ + assignees: IXGitLabMergeRequestAssigneeConnection | null; + + /** + * User who created this merge request. + */ + author: IXGitLabUserCore | null; + + /** + * Indicates if auto merge is enabled for the merge request. + */ + autoMergeEnabled: boolean; + + /** + * Selected auto merge strategy. + */ + autoMergeStrategy: string | null; + + /** + * Array of available auto merge strategies. + */ + availableAutoMergeStrategies: Array | null; + + /** + * Number of commits in the merge request. + */ + commitCount: number | null; + + /** + * Merge request commits excluding merge commits. + */ + commitsWithoutMergeCommits: IXGitLabCommitConnection | null; + + /** + * Indicates if the merge request has conflicts. + */ + conflicts: boolean; + + /** + * Timestamp of when the merge request was created. + */ + createdAt: any; + + /** + * To-do items for the current user. + */ + currentUserTodos: IXGitLabTodoConnection; + + /** + * Default merge commit message of the merge request. + */ + defaultMergeCommitMessage: string | null; + + /** + * Default merge commit message of the merge request with description. + */ + defaultMergeCommitMessageWithDescription: string | null; + + /** + * Default squash commit message of the merge request. + */ + defaultSquashCommitMessage: string | null; + + /** + * Description of the merge request (Markdown rendered as HTML for caching). + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Diff head SHA of the merge request. + */ + diffHeadSha: string | null; + + /** + * References of the base SHA, the head SHA, and the start SHA for this merge request. + */ + diffRefs: IXGitLabDiffRefs | null; + + /** + * Details about which files were changed in this merge request. + */ + diffStats: Array | null; + + /** + * Summary of which files were changed in this merge request. + */ + diffStatsSummary: IXGitLabDiffStatsSummary | null; + + /** + * Indicates if comments on the merge request are locked to members only. + */ + discussionLocked: boolean; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Indicates if the source branch is behind the target branch. + */ + divergedFromTargetBranch: boolean; + + /** + * Number of downvotes for the merge request. + */ + downvotes: number; + + /** + * Indicates if the merge request is a draft. + */ + draft: boolean; + + /** + * Indicates if the project settings will lead to source branch deletion after merge. + */ + forceRemoveSourceBranch: boolean | null; + + /** + * Indicates if the merge request has CI. + */ + hasCi: boolean; + + /** + * Indicates if the source branch has any security reports. + */ + hasSecurityReports: boolean; + + /** + * Pipeline running on the branch HEAD of the merge request. + */ + headPipeline: IXGitLabPipeline | null; + + /** + * Human-readable time estimate of the merge request. + */ + humanTimeEstimate: string | null; + + /** + * Human-readable total time reported as spent on the merge request. + */ + humanTotalTimeSpent: string | null; + + /** + * ID of the merge request. + */ + id: string; + + /** + * Internal ID of the merge request. + */ + iid: string; + + /** + * Commit SHA of the merge request if merge is in progress. + */ + inProgressMergeCommitSha: string | null; + + /** + * Labels of the merge request. + */ + labels: IXGitLabLabelConnection | null; + + /** + * SHA of the merge request commit (set once merged). + */ + mergeCommitSha: string | null; + + /** + * Error message due to a merge error. + */ + mergeError: string | null; + + /** + * Indicates if a merge is currently occurring. + */ + mergeOngoing: boolean; + + /** + * Status of the merge request. Deprecated in 14.0: This was renamed. + * @deprecated "This was renamed. Please use `MergeRequest.mergeStatusEnum`. Deprecated in 14.0." + */ + mergeStatus: string | null; + + /** + * Merge status of the merge request. + */ + mergeStatusEnum: XGitLabMergeStatus | null; + + /** + * Number of merge requests in the merge train. + */ + mergeTrainsCount: number | null; + + /** + * User who merged this merge request. + */ + mergeUser: IXGitLabUserCore | null; + + /** + * Indicates if the merge has been set to be merged when its pipeline succeeds (MWPS). + */ + mergeWhenPipelineSucceeds: boolean | null; + + /** + * Indicates if the merge request is mergeable. + */ + mergeable: boolean; + + /** + * Indicates if all discussions in the merge request have been resolved, allowing the merge request to be merged. + */ + mergeableDiscussionsState: boolean | null; + + /** + * Timestamp of when the merge request was merged, null if not merged. + */ + mergedAt: any | null; + + /** + * Milestone of the merge request. + */ + milestone: IXGitLabMilestone | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Participants in the merge request. This includes the author, assignees, reviewers, and users mentioned in notes. + */ + participants: IXGitLabUserCoreConnection | null; + + /** + * Pipelines for the merge request. Note: for performance reasons, no more than + * the most recent 500 pipelines will be returned. + */ + pipelines: IXGitLabPipelineConnection | null; + + /** + * Alias for target_project. + */ + project: IXGitLabProject; + + /** + * ID of the merge request project. + */ + projectId: number; + + /** + * Rebase commit SHA of the merge request. + */ + rebaseCommitSha: string | null; + + /** + * Indicates if there is a rebase currently in progress for the merge request. + */ + rebaseInProgress: boolean; + + /** + * Internal reference of the merge request. Returned in shortened format by default. + */ + reference: string; + + /** + * Users from whom a review has been requested. + */ + reviewers: IXGitLabMergeRequestReviewerConnection | null; + + /** + * Indicates if the merge request is created by @GitLab-Security-Bot. + */ + securityAutoFix: boolean | null; + + /** + * Indicates if the target branch security reports are out of date. + */ + securityReportsUpToDateOnTargetBranch: boolean; + + /** + * Indicates if the merge request will be rebased. + */ + shouldBeRebased: boolean; + + /** + * Indicates if the source branch of the merge request will be deleted after merge. + */ + shouldRemoveSourceBranch: boolean | null; + + /** + * Source branch of the merge request. + */ + sourceBranch: string; + + /** + * Indicates if the source branch of the merge request exists. + */ + sourceBranchExists: boolean; + + /** + * Indicates if the source branch is protected. + */ + sourceBranchProtected: boolean; + + /** + * Source project of the merge request. + */ + sourceProject: IXGitLabProject | null; + + /** + * ID of the merge request source project. + */ + sourceProjectId: number | null; + + /** + * Indicates if squash on merge is enabled. + */ + squash: boolean; + + /** + * Indicates if squash on merge is enabled. + */ + squashOnMerge: boolean; + + /** + * State of the merge request. + */ + state: XGitLabMergeRequestState; + + /** + * Indicates if the currently logged in user is subscribed to this merge request. + */ + subscribed: boolean; + + /** + * Target branch of the merge request. + */ + targetBranch: string; + + /** + * Indicates if the target branch of the merge request exists. + */ + targetBranchExists: boolean; + + /** + * Target project of the merge request. + */ + targetProject: IXGitLabProject; + + /** + * ID of the merge request target project. + */ + targetProjectId: number; + + /** + * Completion status of tasks + */ + taskCompletionStatus: IXGitLabTaskCompletionStatus; + + /** + * Time estimate of the merge request. + */ + timeEstimate: number; + + /** + * Timelogs on the merge request. + */ + timelogs: IXGitLabTimelogConnection; + + /** + * Title of the merge request. + */ + title: string; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Total time reported as spent on the merge request. + */ + totalTimeSpent: number; + + /** + * Timestamp of when the merge request was last updated. + */ + updatedAt: any; + + /** + * Number of upvotes for the merge request. + */ + upvotes: number; + + /** + * Number of user discussions in the merge request. + */ + userDiscussionsCount: number | null; + + /** + * User notes count of the merge request. + */ + userNotesCount: number | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabMergeRequestPermissions; + + /** + * Web URL of the merge request. + */ + webUrl: string | null; + + /** + * Indicates if the merge request is a draft. Deprecated in 13.12: Use `draft`. + * @deprecated "Use `draft`. Deprecated in 13.12." + */ + workInProgress: boolean; +} + +export interface IApprovedByOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAssigneesOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICommitsWithoutMergeCommitsOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICurrentUserTodosOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; + + /** + * State of the to-do items. + */ + state?: XGitLabTodoStateEnum | null; +} + +export interface IDiffStatsOnXGitLabMergeRequestArguments { + /** + * Specific file path. + */ + path?: string | null; +} + +export interface IDiscussionsOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelsOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IParticipantsOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPipelinesOnXGitLabMergeRequestArguments { + /** + * Filter pipelines by their status. + */ + status?: XGitLabPipelineStatusEnum | null; + + /** + * Filter pipelines by the ref they are run for. + */ + ref?: string | null; + + /** + * Filter pipelines by the sha of the commit they are run for. + */ + sha?: string | null; + + /** + * Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled. + */ + source?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReferenceOnXGitLabMergeRequestArguments { + /** + * Boolean option specifying whether the reference should be returned in full. + * @default false + */ + full?: boolean | null; +} + +export interface IReviewersOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabMergeRequestArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Autogenerated input type of MergeRequestAccept + */ +export interface IXGitLabMergeRequestAcceptInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * How to merge this merge request. + */ + strategy?: XGitLabMergeStrategyEnum | null; + + /** + * Custom merge commit message. + */ + commitMessage?: string | null; + + /** + * Custom squash commit message (if squash is true). + */ + squashCommitMessage?: string | null; + + /** + * HEAD SHA at the time when this merge was requested. + */ + sha: string; + + /** + * Should the source branch be removed. + */ + shouldRemoveSourceBranch?: boolean | null; + + /** + * Squash commits on the source branch before merge. + * @default false + */ + squash?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestAccept + */ +export interface IXGitLabMergeRequestAcceptPayload { + __typename: '_xGitLabMergeRequestAcceptPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Information relating to rules that must be satisfied to merge this merge request. + */ +export interface IXGitLabMergeRequestApprovalState { + __typename: '_xGitLabMergeRequestApprovalState'; + + /** + * Indicates if the merge request approval rules are overwritten for the merge request. + */ + approvalRulesOverwritten: boolean | null; + + /** + * List of approval rules associated with the merge request. + */ + rules: Array | null; +} + +/** + * A user assigned to a merge request. + */ +export interface IXGitLabMergeRequestAssignee { + __typename: '_xGitLabMergeRequestAssignee'; + + /** + * Merge requests assigned to the user. + */ + assignedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Merge requests authored by the user. + */ + authoredMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * URL of the user's avatar. + */ + avatarUrl: string | null; + + /** + * Indicates if the user is a bot. + */ + bot: boolean; + + /** + * User callouts that belong to the user. + */ + callouts: IXGitLabUserCalloutConnection | null; + + /** + * User email. Deprecated in 13.7: This was renamed. + * @deprecated "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7." + */ + email: string | null; + + /** + * Group count for the user. + */ + groupCount: number | null; + + /** + * Group memberships of the user. + */ + groupMemberships: IXGitLabGroupMemberConnection | null; + + /** + * Groups where the user has access. Will always return `null` if + * `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + */ + groups: IXGitLabGroupConnection | null; + + /** + * ID of the user. + */ + id: string; + + /** + * Location of the user. + */ + location: string | null; + + /** + * Details of this user's interactions with the merge request. + */ + mergeRequestInteraction: IXGitLabUserMergeRequestInteraction | null; + + /** + * Human-readable name of the user. + */ + name: string; + + /** + * Personal namespace of the user. + */ + namespace: IXGitLabNamespace | null; + + /** + * Project memberships of the user. + */ + projectMemberships: IXGitLabProjectMemberConnection | null; + + /** + * User's public email. + */ + publicEmail: string | null; + + /** + * Merge requests assigned to the user for review. + */ + reviewRequestedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Snippets authored by the user. + */ + snippets: IXGitLabSnippetConnection | null; + + /** + * Projects starred by the user. + */ + starredProjects: IXGitLabProjectConnection | null; + + /** + * State of the user. + */ + state: XGitLabUserState; + + /** + * User status. + */ + status: IXGitLabUserStatus | null; + + /** + * Time logged by the user. + */ + timelogs: IXGitLabTimelogConnection | null; + + /** + * To-do items of the user. + */ + todos: IXGitLabTodoConnection | null; + + /** + * Permissions for the current user on the resource. + */ + userPermissions: IXGitLabUserPermissions; + + /** + * Username of the user. Unique within this instance of GitLab. + */ + username: string; + + /** + * Web path of the user. + */ + webPath: string; + + /** + * Web URL of the user. + */ + webUrl: string; +} + +export interface IAssignedMergeRequestsOnXGitLabMergeRequestAssigneeArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAuthoredMergeRequestsOnXGitLabMergeRequestAssigneeArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICalloutsOnXGitLabMergeRequestAssigneeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupMembershipsOnXGitLabMergeRequestAssigneeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupsOnXGitLabMergeRequestAssigneeArguments { + /** + * Search by group name or path. + */ + search?: string | null; + + /** + * Filter by permissions the user has on groups. + */ + permissionScope?: XGitLabGroupPermission | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectMembershipsOnXGitLabMergeRequestAssigneeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReviewRequestedMergeRequestsOnXGitLabMergeRequestAssigneeArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetsOnXGitLabMergeRequestAssigneeArguments { + /** + * Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + */ + ids?: Array | null; + + /** + * Visibility of the snippet. + */ + visibility?: XGitLabVisibilityScopesEnum | null; + + /** + * Type of snippet. + */ + type?: XGitLabTypeEnum | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IStarredProjectsOnXGitLabMergeRequestAssigneeArguments { + /** + * Search query. + */ + search?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabMergeRequestAssigneeArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITodosOnXGitLabMergeRequestAssigneeArguments { + /** + * Action to be filtered. + */ + action?: Array | null; + + /** + * ID of an author. + */ + authorId?: Array | null; + + /** + * ID of a project. + */ + projectId?: Array | null; + + /** + * ID of a group. + */ + groupId?: Array | null; + + /** + * State of the todo. + */ + state?: Array | null; + + /** + * Type of the todo. + */ + type?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for MergeRequestAssignee. + */ +export interface IXGitLabMergeRequestAssigneeConnection { + __typename: '_xGitLabMergeRequestAssigneeConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMergeRequestAssigneeEdge { + __typename: '_xGitLabMergeRequestAssigneeEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabMergeRequestAssignee | null; +} + +/** + * The connection type for MergeRequest. + */ +export interface IXGitLabMergeRequestConnection { + __typename: '_xGitLabMergeRequestConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; + + /** + * Total sum of time to merge, in seconds, for the collection of merge requests. + */ + totalTimeToMerge: number | null; +} + +/** + * Autogenerated input type of MergeRequestCreate + */ +export interface IXGitLabMergeRequestCreateInput { + /** + * Project full path the merge request is associated with. + */ + projectPath: string; + + /** + * Title of the merge request. + */ + title: string; + + /** + * Source branch of the merge request. + */ + sourceBranch: string; + + /** + * Target branch of the merge request. + */ + targetBranch: string; + + /** + * Description of the merge request (Markdown rendered as HTML for caching). + */ + description?: string | null; + + /** + * Labels of the merge request. + */ + labels?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestCreate + */ +export interface IXGitLabMergeRequestCreatePayload { + __typename: '_xGitLabMergeRequestCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Represents the Geo sync and verification state of a Merge Request diff + */ +export interface IXGitLabMergeRequestDiffRegistry { + __typename: '_xGitLabMergeRequestDiffRegistry'; + + /** + * Timestamp when the MergeRequestDiffRegistry was created + */ + createdAt: any | null; + + /** + * ID of the MergeRequestDiffRegistry + */ + id: string; + + /** + * Error message during sync of the MergeRequestDiffRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the MergeRequestDiffRegistry + */ + lastSyncedAt: any | null; + + /** + * ID of the Merge Request diff. + */ + mergeRequestDiffId: string; + + /** + * Timestamp after which the MergeRequestDiffRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the MergeRequestDiffRegistry + */ + retryCount: number | null; + + /** + * Sync state of the MergeRequestDiffRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for MergeRequestDiffRegistry. + */ +export interface IXGitLabMergeRequestDiffRegistryConnection { + __typename: '_xGitLabMergeRequestDiffRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMergeRequestDiffRegistryEdge { + __typename: '_xGitLabMergeRequestDiffRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabMergeRequestDiffRegistry | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMergeRequestEdge { + __typename: '_xGitLabMergeRequestEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabMergeRequest | null; +} + +/** + * New state to apply to a merge request. + */ +export const enum XGitLabMergeRequestNewState { + /** + * Open the merge request if it is closed. + */ + OPEN = 'OPEN', + + /** + * Close the merge request if it is open. + */ + CLOSED = 'CLOSED', +} + +/** + * Check permissions for the current user on a merge request + */ +export interface IXGitLabMergeRequestPermissions { + __typename: '_xGitLabMergeRequestPermissions'; + + /** + * Indicates the user can perform `admin_merge_request` on this resource + */ + adminMergeRequest: boolean; + + /** + * Indicates the user can perform `can_merge` on this resource + */ + canMerge: boolean; + + /** + * Indicates the user can perform `cherry_pick_on_current_merge_request` on this resource + */ + cherryPickOnCurrentMergeRequest: boolean; + + /** + * Indicates the user can perform `create_note` on this resource + */ + createNote: boolean; + + /** + * Indicates the user can perform `push_to_source_branch` on this resource + */ + pushToSourceBranch: boolean; + + /** + * Indicates the user can perform `read_merge_request` on this resource + */ + readMergeRequest: boolean; + + /** + * Indicates the user can perform `remove_source_branch` on this resource + */ + removeSourceBranch: boolean; + + /** + * Indicates the user can perform `revert_on_current_merge_request` on this resource + */ + revertOnCurrentMergeRequest: boolean; + + /** + * Indicates the user can perform `update_merge_request` on this resource + */ + updateMergeRequest: boolean; +} + +/** + * A user assigned to a merge request as a reviewer. + */ +export interface IXGitLabMergeRequestReviewer { + __typename: '_xGitLabMergeRequestReviewer'; + + /** + * Merge requests assigned to the user. + */ + assignedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Merge requests authored by the user. + */ + authoredMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * URL of the user's avatar. + */ + avatarUrl: string | null; + + /** + * Indicates if the user is a bot. + */ + bot: boolean; + + /** + * User callouts that belong to the user. + */ + callouts: IXGitLabUserCalloutConnection | null; + + /** + * User email. Deprecated in 13.7: This was renamed. + * @deprecated "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7." + */ + email: string | null; + + /** + * Group count for the user. + */ + groupCount: number | null; + + /** + * Group memberships of the user. + */ + groupMemberships: IXGitLabGroupMemberConnection | null; + + /** + * Groups where the user has access. Will always return `null` if + * `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + */ + groups: IXGitLabGroupConnection | null; + + /** + * ID of the user. + */ + id: string; + + /** + * Location of the user. + */ + location: string | null; + + /** + * Details of this user's interactions with the merge request. + */ + mergeRequestInteraction: IXGitLabUserMergeRequestInteraction | null; + + /** + * Human-readable name of the user. + */ + name: string; + + /** + * Personal namespace of the user. + */ + namespace: IXGitLabNamespace | null; + + /** + * Project memberships of the user. + */ + projectMemberships: IXGitLabProjectMemberConnection | null; + + /** + * User's public email. + */ + publicEmail: string | null; + + /** + * Merge requests assigned to the user for review. + */ + reviewRequestedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Snippets authored by the user. + */ + snippets: IXGitLabSnippetConnection | null; + + /** + * Projects starred by the user. + */ + starredProjects: IXGitLabProjectConnection | null; + + /** + * State of the user. + */ + state: XGitLabUserState; + + /** + * User status. + */ + status: IXGitLabUserStatus | null; + + /** + * Time logged by the user. + */ + timelogs: IXGitLabTimelogConnection | null; + + /** + * To-do items of the user. + */ + todos: IXGitLabTodoConnection | null; + + /** + * Permissions for the current user on the resource. + */ + userPermissions: IXGitLabUserPermissions; + + /** + * Username of the user. Unique within this instance of GitLab. + */ + username: string; + + /** + * Web path of the user. + */ + webPath: string; + + /** + * Web URL of the user. + */ + webUrl: string; +} + +export interface IAssignedMergeRequestsOnXGitLabMergeRequestReviewerArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAuthoredMergeRequestsOnXGitLabMergeRequestReviewerArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICalloutsOnXGitLabMergeRequestReviewerArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupMembershipsOnXGitLabMergeRequestReviewerArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupsOnXGitLabMergeRequestReviewerArguments { + /** + * Search by group name or path. + */ + search?: string | null; + + /** + * Filter by permissions the user has on groups. + */ + permissionScope?: XGitLabGroupPermission | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectMembershipsOnXGitLabMergeRequestReviewerArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReviewRequestedMergeRequestsOnXGitLabMergeRequestReviewerArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetsOnXGitLabMergeRequestReviewerArguments { + /** + * Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + */ + ids?: Array | null; + + /** + * Visibility of the snippet. + */ + visibility?: XGitLabVisibilityScopesEnum | null; + + /** + * Type of snippet. + */ + type?: XGitLabTypeEnum | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IStarredProjectsOnXGitLabMergeRequestReviewerArguments { + /** + * Search query. + */ + search?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabMergeRequestReviewerArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITodosOnXGitLabMergeRequestReviewerArguments { + /** + * Action to be filtered. + */ + action?: Array | null; + + /** + * ID of an author. + */ + authorId?: Array | null; + + /** + * ID of a project. + */ + projectId?: Array | null; + + /** + * ID of a group. + */ + groupId?: Array | null; + + /** + * State of the todo. + */ + state?: Array | null; + + /** + * Type of the todo. + */ + type?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for MergeRequestReviewer. + */ +export interface IXGitLabMergeRequestReviewerConnection { + __typename: '_xGitLabMergeRequestReviewerConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMergeRequestReviewerEdge { + __typename: '_xGitLabMergeRequestReviewerEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabMergeRequestReviewer | null; +} + +/** + * Autogenerated input type of MergeRequestReviewerRereview + */ +export interface IXGitLabMergeRequestReviewerRereviewInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * User ID for the user that has been requested for a new review. + */ + userId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestReviewerRereview + */ +export interface IXGitLabMergeRequestReviewerRereviewPayload { + __typename: '_xGitLabMergeRequestReviewerRereviewPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * State of a review of a GitLab merge request. + */ +export const enum XGitLabMergeRequestReviewState { + /** + * The merge request is unreviewed. + */ + UNREVIEWED = 'UNREVIEWED', + + /** + * The merge request is reviewed. + */ + REVIEWED = 'REVIEWED', + + /** + * The merge request is attention_required. + */ + ATTENTION_REQUIRED = 'ATTENTION_REQUIRED', +} + +/** + * Autogenerated input type of MergeRequestSetAssignees + */ +export interface IXGitLabMergeRequestSetAssigneesInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Usernames to assign to the resource. Replaces existing assignees by default. + */ + assigneeUsernames: Array; + + /** + * Operation to perform. Defaults to REPLACE. + * @default "REPLACE" + */ + operationMode?: XGitLabMutationOperationMode | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetAssignees + */ +export interface IXGitLabMergeRequestSetAssigneesPayload { + __typename: '_xGitLabMergeRequestSetAssigneesPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Autogenerated input type of MergeRequestSetDraft + */ +export interface IXGitLabMergeRequestSetDraftInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Whether or not to set the merge request as a draft. + */ + draft: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetDraft + */ +export interface IXGitLabMergeRequestSetDraftPayload { + __typename: '_xGitLabMergeRequestSetDraftPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Autogenerated input type of MergeRequestSetLabels + */ +export interface IXGitLabMergeRequestSetLabelsInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Label IDs to set. Replaces existing labels by default. + */ + labelIds: Array; + + /** + * Changes the operation mode. Defaults to REPLACE. + */ + operationMode?: XGitLabMutationOperationMode | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetLabels + */ +export interface IXGitLabMergeRequestSetLabelsPayload { + __typename: '_xGitLabMergeRequestSetLabelsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Autogenerated input type of MergeRequestSetLocked + */ +export interface IXGitLabMergeRequestSetLockedInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Whether or not to lock the merge request. + */ + locked: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetLocked + */ +export interface IXGitLabMergeRequestSetLockedPayload { + __typename: '_xGitLabMergeRequestSetLockedPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Autogenerated input type of MergeRequestSetMilestone + */ +export interface IXGitLabMergeRequestSetMilestoneInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Milestone to assign to the merge request. + */ + milestoneId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetMilestone + */ +export interface IXGitLabMergeRequestSetMilestonePayload { + __typename: '_xGitLabMergeRequestSetMilestonePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Autogenerated input type of MergeRequestSetSubscription + */ +export interface IXGitLabMergeRequestSetSubscriptionInput { + /** + * Desired state of the subscription. + */ + subscribedState: boolean; + + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetSubscription + */ +export interface IXGitLabMergeRequestSetSubscriptionPayload { + __typename: '_xGitLabMergeRequestSetSubscriptionPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Autogenerated input type of MergeRequestSetWip + */ +export interface IXGitLabMergeRequestSetWipInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Whether or not to set the merge request as a draft. + */ + wip: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestSetWip + */ +export interface IXGitLabMergeRequestSetWipPayload { + __typename: '_xGitLabMergeRequestSetWipPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Values for sorting merge requests + */ +export const enum XGitLabMergeRequestSort { + /** + * Updated at descending order. + * @deprecated "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5." + */ + updated_desc = 'updated_desc', + + /** + * Updated at ascending order. + * @deprecated "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5." + */ + updated_asc = 'updated_asc', + + /** + * Created at descending order. + * @deprecated "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5." + */ + created_desc = 'created_desc', + + /** + * Created at ascending order. + * @deprecated "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5." + */ + created_asc = 'created_asc', + + /** + * Updated at descending order. + */ + UPDATED_DESC = 'UPDATED_DESC', + + /** + * Updated at ascending order. + */ + UPDATED_ASC = 'UPDATED_ASC', + + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Priority by ascending order. + */ + PRIORITY_ASC = 'PRIORITY_ASC', + + /** + * Priority by descending order. + */ + PRIORITY_DESC = 'PRIORITY_DESC', + + /** + * Label priority by ascending order. + */ + LABEL_PRIORITY_ASC = 'LABEL_PRIORITY_ASC', + + /** + * Label priority by descending order. + */ + LABEL_PRIORITY_DESC = 'LABEL_PRIORITY_DESC', + + /** + * Milestone due date by ascending order. + */ + MILESTONE_DUE_ASC = 'MILESTONE_DUE_ASC', + + /** + * Milestone due date by descending order. + */ + MILESTONE_DUE_DESC = 'MILESTONE_DUE_DESC', + + /** + * Merge time by ascending order. + */ + MERGED_AT_ASC = 'MERGED_AT_ASC', + + /** + * Merge time by descending order. + */ + MERGED_AT_DESC = 'MERGED_AT_DESC', + + /** + * Closed time by ascending order. + */ + CLOSED_AT_ASC = 'CLOSED_AT_ASC', + + /** + * Closed time by descending order. + */ + CLOSED_AT_DESC = 'CLOSED_AT_DESC', +} + +export interface IXGitLabMergeRequestsResolverNegatedParams { + /** + * Array of label names. All resolved merge requests will not have these labels. + */ + labels?: Array | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; +} + +/** + * State of a GitLab merge request + */ +export const enum XGitLabMergeRequestState { + /** + * In open state. + */ + opened = 'opened', + + /** + * In closed state. + */ + closed = 'closed', + + /** + * Discussion has been locked. + */ + locked = 'locked', + + /** + * All available. + */ + all = 'all', + + /** + * Merge request has been merged. + */ + merged = 'merged', +} + +/** + * Autogenerated input type of MergeRequestUpdate + */ +export interface IXGitLabMergeRequestUpdateInput { + /** + * Project the merge request to mutate is in. + */ + projectPath: string; + + /** + * IID of the merge request to mutate. + */ + iid: string; + + /** + * Title of the merge request. + */ + title?: string | null; + + /** + * Target branch of the merge request. + */ + targetBranch?: string | null; + + /** + * Description of the merge request (Markdown rendered as HTML for caching). + */ + description?: string | null; + + /** + * Action to perform to change the state. + */ + state?: XGitLabMergeRequestNewState | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of MergeRequestUpdate + */ +export interface IXGitLabMergeRequestUpdatePayload { + __typename: '_xGitLabMergeRequestUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Merge request after mutation. + */ + mergeRequest: IXGitLabMergeRequest | null; +} + +/** + * Representation of whether a GitLab merge request can be merged. + */ +export const enum XGitLabMergeStatus { + /** + * Merge status has not been checked. + */ + UNCHECKED = 'UNCHECKED', + + /** + * Currently checking for mergeability. + */ + CHECKING = 'CHECKING', + + /** + * There are no conflicts between the source and target branches. + */ + CAN_BE_MERGED = 'CAN_BE_MERGED', + + /** + * There are conflicts between the source and target branches. + */ + CANNOT_BE_MERGED = 'CANNOT_BE_MERGED', + + /** + * Currently unchecked. The previous state was `CANNOT_BE_MERGED`. + */ + CANNOT_BE_MERGED_RECHECK = 'CANNOT_BE_MERGED_RECHECK', +} + +export const enum XGitLabMergeStrategyEnum { + /** + * Use the merge_train merge strategy. + */ + MERGE_TRAIN = 'MERGE_TRAIN', + + /** + * Use the add_to_merge_train_when_pipeline_succeeds merge strategy. + */ + ADD_TO_MERGE_TRAIN_WHEN_PIPELINE_SUCCEEDS = 'ADD_TO_MERGE_TRAIN_WHEN_PIPELINE_SUCCEEDS', + + /** + * Use the merge_when_pipeline_succeeds merge strategy. + */ + MERGE_WHEN_PIPELINE_SUCCEEDS = 'MERGE_WHEN_PIPELINE_SUCCEEDS', +} + +export interface IXGitLabMetadata { + __typename: '_xGitLabMetadata'; + + /** + * Metadata about KAS. + */ + kas: IXGitLabKas; + + /** + * Revision. + */ + revision: string; + + /** + * Version. + */ + version: string; +} + +/** + * Represents a metric image upload + */ +export interface IXGitLabMetricImage { + __typename: '_xGitLabMetricImage'; + + /** + * File name of the metric image. + */ + fileName: string | null; + + /** + * File path of the metric image. + */ + filePath: string | null; + + /** + * ID of the metric upload. + */ + id: string; + + /** + * Internal ID of the metric upload. + */ + iid: string; + + /** + * URL of the metric source. + */ + url: string; +} + +export interface IXGitLabMetricsDashboard { + __typename: '_xGitLabMetricsDashboard'; + + /** + * Annotations added to the dashboard. + */ + annotations: IXGitLabMetricsDashboardAnnotationConnection | null; + + /** + * Path to a file with the dashboard definition. + */ + path: string | null; + + /** + * Dashboard schema validation warnings. + */ + schemaValidationWarnings: Array | null; +} + +export interface IAnnotationsOnXGitLabMetricsDashboardArguments { + /** + * Timestamp marking date and time from which annotations need to be fetched. + */ + from: any; + + /** + * Timestamp marking date and time to which annotations need to be fetched. + */ + to?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabMetricsDashboardAnnotation { + __typename: '_xGitLabMetricsDashboardAnnotation'; + + /** + * Description of the annotation. + */ + description: string | null; + + /** + * Timestamp marking end of annotated time span. + */ + endingAt: any | null; + + /** + * ID of the annotation. + */ + id: string; + + /** + * ID of a dashboard panel to which the annotation should be scoped. + */ + panelId: string | null; + + /** + * Timestamp marking start of annotated time span. + */ + startingAt: any | null; +} + +/** + * The connection type for MetricsDashboardAnnotation. + */ +export interface IXGitLabMetricsDashboardAnnotationConnection { + __typename: '_xGitLabMetricsDashboardAnnotationConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMetricsDashboardAnnotationEdge { + __typename: '_xGitLabMetricsDashboardAnnotationEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabMetricsDashboardAnnotation | null; +} + +/** + * Represents a milestone + */ +export interface IXGitLabMilestone { + __typename: '_xGitLabMilestone'; + + /** + * Timestamp of milestone creation. + */ + createdAt: any; + + /** + * Description of the milestone. + */ + description: string | null; + + /** + * Timestamp of the milestone due date. + */ + dueDate: any | null; + + /** + * Expired state of the milestone (a milestone is expired when the due date is + * past the current date). Defaults to `false` when due date has not been set. + */ + expired: boolean; + + /** + * Indicates if milestone is at group level. + */ + groupMilestone: boolean; + + /** + * ID of the milestone. + */ + id: string; + + /** + * Internal ID of the milestone. + */ + iid: string; + + /** + * Indicates if milestone is at project level. + */ + projectMilestone: boolean; + + /** + * Historically accurate report about the timebox. + */ + report: IXGitLabTimeboxReport | null; + + /** + * Timestamp of the milestone start date. + */ + startDate: any | null; + + /** + * State of the milestone. + */ + state: XGitLabMilestoneStateEnum; + + /** + * Milestone statistics. + */ + stats: IXGitLabMilestoneStats | null; + + /** + * Indicates if milestone is at subgroup level. + */ + subgroupMilestone: boolean; + + /** + * Title of the milestone. + */ + title: string; + + /** + * Timestamp of last milestone update. + */ + updatedAt: any; + + /** + * Web path of the milestone. + */ + webPath: string; +} + +/** + * The connection type for Milestone. + */ +export interface IXGitLabMilestoneConnection { + __typename: '_xGitLabMilestoneConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabMilestoneEdge { + __typename: '_xGitLabMilestoneEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabMilestone | null; +} + +/** + * Values for sorting milestones + */ +export const enum XGitLabMilestoneSort { + /** + * Updated at descending order. + * @deprecated "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5." + */ + updated_desc = 'updated_desc', + + /** + * Updated at ascending order. + * @deprecated "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5." + */ + updated_asc = 'updated_asc', + + /** + * Created at descending order. + * @deprecated "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5." + */ + created_desc = 'created_desc', + + /** + * Created at ascending order. + * @deprecated "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5." + */ + created_asc = 'created_asc', + + /** + * Updated at descending order. + */ + UPDATED_DESC = 'UPDATED_DESC', + + /** + * Updated at ascending order. + */ + UPDATED_ASC = 'UPDATED_ASC', + + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Milestone due date by ascending order. + */ + DUE_DATE_ASC = 'DUE_DATE_ASC', + + /** + * Milestone due date by descending order. + */ + DUE_DATE_DESC = 'DUE_DATE_DESC', + + /** + * Group milestones in this order: non-expired milestones with due dates, + * non-expired milestones without due dates and expired milestones then sort by + * due date in ascending order. + */ + EXPIRED_LAST_DUE_DATE_ASC = 'EXPIRED_LAST_DUE_DATE_ASC', + + /** + * Group milestones in this order: non-expired milestones with due dates, + * non-expired milestones without due dates and expired milestones then sort by + * due date in descending order. + */ + EXPIRED_LAST_DUE_DATE_DESC = 'EXPIRED_LAST_DUE_DATE_DESC', +} + +/** + * Current state of milestone + */ +export const enum XGitLabMilestoneStateEnum { + /** + * Milestone is currently active. + */ + active = 'active', + + /** + * Milestone is closed. + */ + closed = 'closed', +} + +/** + * Contains statistics about a milestone + */ +export interface IXGitLabMilestoneStats { + __typename: '_xGitLabMilestoneStats'; + + /** + * Number of closed issues associated with the milestone. + */ + closedIssuesCount: number | null; + + /** + * Total number of issues associated with the milestone. + */ + totalIssuesCount: number | null; +} + +/** + * Milestone ID wildcard values + */ +export const enum XGitLabMilestoneWildcardId { + /** + * No milestone is assigned. + */ + NONE = 'NONE', + + /** + * Milestone is assigned. + */ + ANY = 'ANY', + + /** + * Milestone assigned is open and started (start date <= today). + */ + STARTED = 'STARTED', + + /** + * Milestone assigned is due in the future (due date > today). + */ + UPCOMING = 'UPCOMING', +} + +/** + * The position to which the adjacent object should be moved + */ +export const enum XGitLabMoveType { + /** + * Adjacent object is moved before the object that is being moved. + */ + before = 'before', + + /** + * Adjacent object is moved after the object that is being moved. + */ + after = 'after', +} + +export interface IXGitLabMutation { + __typename: '_xGitLabMutation'; + addProjectToSecurityDashboard: IXGitLabAddProjectToSecurityDashboardPayload | null; + adminSidekiqQueuesDeleteJobs: IXGitLabAdminSidekiqQueuesDeleteJobsPayload | null; + alertSetAssignees: IXGitLabAlertSetAssigneesPayload | null; + alertTodoCreate: IXGitLabAlertTodoCreatePayload | null; + apiFuzzingCiConfigurationCreate: IXGitLabApiFuzzingCiConfigurationCreatePayload | null; + awardEmojiAdd: IXGitLabAwardEmojiAddPayload | null; + awardEmojiRemove: IXGitLabAwardEmojiRemovePayload | null; + awardEmojiToggle: IXGitLabAwardEmojiTogglePayload | null; + boardEpicCreate: IXGitLabBoardEpicCreatePayload | null; + boardListCreate: IXGitLabBoardListCreatePayload | null; + boardListUpdateLimitMetrics: IXGitLabBoardListUpdateLimitMetricsPayload | null; + + /** + * **BETA** This endpoint is subject to change without notice. + */ + bulkEnableDevopsAdoptionNamespaces: IXGitLabBulkEnableDevopsAdoptionNamespacesPayload | null; + ciCdSettingsUpdate: IXGitLabCiCdSettingsUpdatePayload | null; + ciJobTokenScopeAddProject: IXGitLabCiJobTokenScopeAddProjectPayload | null; + ciJobTokenScopeRemoveProject: IXGitLabCiJobTokenScopeRemoveProjectPayload | null; + clusterAgentDelete: IXGitLabClusterAgentDeletePayload | null; + clusterAgentTokenCreate: IXGitLabClusterAgentTokenCreatePayload | null; + clusterAgentTokenDelete: IXGitLabClusterAgentTokenDeletePayload | null; + commitCreate: IXGitLabCommitCreatePayload | null; + + /** + * Configure Dependency Scanning for a project by enabling Dependency Scanning in a new or modified + * `.gitlab-ci.yml` file in a new branch. The new branch and a URL to + * create a Merge Request are a part of the response. + */ + configureDependencyScanning: IXGitLabConfigureDependencyScanningPayload | null; + + /** + * Configure SAST for a project by enabling SAST in a new or modified + * `.gitlab-ci.yml` file in a new branch. The new branch and a URL to + * create a Merge Request are a part of the response. + */ + configureSast: IXGitLabConfigureSastPayload | null; + + /** + * Configure Secret Detection for a project by enabling Secret Detection + * in a new or modified `.gitlab-ci.yml` file in a new branch. The new + * branch and a URL to create a Merge Request are a part of the + * response. + */ + configureSecretDetection: IXGitLabConfigureSecretDetectionPayload | null; + createAlertIssue: IXGitLabCreateAlertIssuePayload | null; + createAnnotation: IXGitLabCreateAnnotationPayload | null; + createBoard: IXGitLabCreateBoardPayload | null; + createBranch: IXGitLabCreateBranchPayload | null; + createClusterAgent: IXGitLabCreateClusterAgentPayload | null; + createComplianceFramework: IXGitLabCreateComplianceFrameworkPayload | null; + + /** + * Available only when feature flag `custom_emoji` is enabled. This flag is + * disabled by default, because the feature is experimental and is subject to + * change without notice. + */ + createCustomEmoji: IXGitLabCreateCustomEmojiPayload | null; + createDiffNote: IXGitLabCreateDiffNotePayload | null; + createEpic: IXGitLabCreateEpicPayload | null; + createImageDiffNote: IXGitLabCreateImageDiffNotePayload | null; + createIssue: IXGitLabCreateIssuePayload | null; + + /** + * @deprecated "Use iterationCreate. Deprecated in 14.0." + */ + createIteration: IXGitLabCreateIterationPayload | null; + createNote: IXGitLabCreateNotePayload | null; + createRequirement: IXGitLabCreateRequirementPayload | null; + createSnippet: IXGitLabCreateSnippetPayload | null; + createTestCase: IXGitLabCreateTestCasePayload | null; + customerRelationsContactCreate: IXGitLabCustomerRelationsContactCreatePayload | null; + customerRelationsContactUpdate: IXGitLabCustomerRelationsContactUpdatePayload | null; + customerRelationsOrganizationCreate: IXGitLabCustomerRelationsOrganizationCreatePayload | null; + customerRelationsOrganizationUpdate: IXGitLabCustomerRelationsOrganizationUpdatePayload | null; + dastOnDemandScanCreate: IXGitLabDastOnDemandScanCreatePayload | null; + dastProfileCreate: IXGitLabDastProfileCreatePayload | null; + dastProfileDelete: IXGitLabDastProfileDeletePayload | null; + dastProfileRun: IXGitLabDastProfileRunPayload | null; + dastProfileUpdate: IXGitLabDastProfileUpdatePayload | null; + dastScannerProfileCreate: IXGitLabDastScannerProfileCreatePayload | null; + dastScannerProfileDelete: IXGitLabDastScannerProfileDeletePayload | null; + dastScannerProfileUpdate: IXGitLabDastScannerProfileUpdatePayload | null; + dastSiteProfileCreate: IXGitLabDastSiteProfileCreatePayload | null; + dastSiteProfileDelete: IXGitLabDastSiteProfileDeletePayload | null; + dastSiteProfileUpdate: IXGitLabDastSiteProfileUpdatePayload | null; + dastSiteTokenCreate: IXGitLabDastSiteTokenCreatePayload | null; + dastSiteValidationCreate: IXGitLabDastSiteValidationCreatePayload | null; + dastSiteValidationRevoke: IXGitLabDastSiteValidationRevokePayload | null; + deleteAnnotation: IXGitLabDeleteAnnotationPayload | null; + designManagementDelete: IXGitLabDesignManagementDeletePayload | null; + designManagementMove: IXGitLabDesignManagementMovePayload | null; + designManagementUpload: IXGitLabDesignManagementUploadPayload | null; + destroyBoard: IXGitLabDestroyBoardPayload | null; + destroyBoardList: IXGitLabDestroyBoardListPayload | null; + destroyComplianceFramework: IXGitLabDestroyComplianceFrameworkPayload | null; + destroyContainerRepository: IXGitLabDestroyContainerRepositoryPayload | null; + destroyContainerRepositoryTags: IXGitLabDestroyContainerRepositoryTagsPayload | null; + + /** + * Available only when feature flag `custom_emoji` is enabled. This flag is + * disabled by default, because the feature is experimental and is subject to + * change without notice. + */ + destroyCustomEmoji: IXGitLabDestroyCustomEmojiPayload | null; + destroyEpicBoard: IXGitLabDestroyEpicBoardPayload | null; + destroyNote: IXGitLabDestroyNotePayload | null; + destroyPackage: IXGitLabDestroyPackagePayload | null; + destroyPackageFile: IXGitLabDestroyPackageFilePayload | null; + destroySnippet: IXGitLabDestroySnippetPayload | null; + + /** + * **BETA** This endpoint is subject to change without notice. + */ + disableDevopsAdoptionNamespace: IXGitLabDisableDevopsAdoptionNamespacePayload | null; + + /** + * Toggles the resolved state of a discussion + */ + discussionToggleResolve: IXGitLabDiscussionToggleResolvePayload | null; + + /** + * A mutation that does not perform any changes. + * + * This is expected to be used for testing of endpoints, to verify + * that a user has mutation access. + */ + echoCreate: IXGitLabEchoCreatePayload | null; + + /** + * **BETA** This endpoint is subject to change without notice. + */ + enableDevopsAdoptionNamespace: IXGitLabEnableDevopsAdoptionNamespacePayload | null; + environmentsCanaryIngressUpdate: IXGitLabEnvironmentsCanaryIngressUpdatePayload | null; + epicAddIssue: IXGitLabEpicAddIssuePayload | null; + epicBoardCreate: IXGitLabEpicBoardCreatePayload | null; + epicBoardListCreate: IXGitLabEpicBoardListCreatePayload | null; + + /** + * Destroys an epic board list. + */ + epicBoardListDestroy: IXGitLabEpicBoardListDestroyPayload | null; + epicBoardUpdate: IXGitLabEpicBoardUpdatePayload | null; + epicMoveList: IXGitLabEpicMoveListPayload | null; + epicSetSubscription: IXGitLabEpicSetSubscriptionPayload | null; + epicTreeReorder: IXGitLabEpicTreeReorderPayload | null; + escalationPolicyCreate: IXGitLabEscalationPolicyCreatePayload | null; + escalationPolicyDestroy: IXGitLabEscalationPolicyDestroyPayload | null; + escalationPolicyUpdate: IXGitLabEscalationPolicyUpdatePayload | null; + exportRequirements: IXGitLabExportRequirementsPayload | null; + externalAuditEventDestinationCreate: IXGitLabExternalAuditEventDestinationCreatePayload | null; + externalAuditEventDestinationDestroy: IXGitLabExternalAuditEventDestinationDestroyPayload | null; + externalAuditEventDestinationUpdate: IXGitLabExternalAuditEventDestinationUpdatePayload | null; + gitlabSubscriptionActivate: IXGitLabGitlabSubscriptionActivatePayload | null; + groupUpdate: IXGitLabGroupUpdatePayload | null; + httpIntegrationCreate: IXGitLabHttpIntegrationCreatePayload | null; + httpIntegrationDestroy: IXGitLabHttpIntegrationDestroyPayload | null; + httpIntegrationResetToken: IXGitLabHttpIntegrationResetTokenPayload | null; + httpIntegrationUpdate: IXGitLabHttpIntegrationUpdatePayload | null; + issueMove: IXGitLabIssueMovePayload | null; + issueMoveList: IXGitLabIssueMoveListPayload | null; + issueSetAssignees: IXGitLabIssueSetAssigneesPayload | null; + issueSetConfidential: IXGitLabIssueSetConfidentialPayload | null; + issueSetDueDate: IXGitLabIssueSetDueDatePayload | null; + issueSetEpic: IXGitLabIssueSetEpicPayload | null; + issueSetIteration: IXGitLabIssueSetIterationPayload | null; + issueSetLocked: IXGitLabIssueSetLockedPayload | null; + issueSetSeverity: IXGitLabIssueSetSeverityPayload | null; + issueSetSubscription: IXGitLabIssueSetSubscriptionPayload | null; + issueSetWeight: IXGitLabIssueSetWeightPayload | null; + iterationCadenceCreate: IXGitLabIterationCadenceCreatePayload | null; + iterationCadenceDestroy: IXGitLabIterationCadenceDestroyPayload | null; + iterationCadenceUpdate: IXGitLabIterationCadenceUpdatePayload | null; + iterationCreate: IXGitLabiterationCreatePayload | null; + iterationDelete: IXGitLabIterationDeletePayload | null; + jiraImportStart: IXGitLabJiraImportStartPayload | null; + jiraImportUsers: IXGitLabJiraImportUsersPayload | null; + jobCancel: IXGitLabJobCancelPayload | null; + jobPlay: IXGitLabJobPlayPayload | null; + jobRetry: IXGitLabJobRetryPayload | null; + jobUnschedule: IXGitLabJobUnschedulePayload | null; + labelCreate: IXGitLabLabelCreatePayload | null; + markAsSpamSnippet: IXGitLabMarkAsSpamSnippetPayload | null; + + /** + * Accepts a merge request. + * When accepted, the source branch will be merged into the target branch, either + * immediately if possible, or using one of the automatic merge strategies. + */ + mergeRequestAccept: IXGitLabMergeRequestAcceptPayload | null; + mergeRequestCreate: IXGitLabMergeRequestCreatePayload | null; + mergeRequestReviewerRereview: IXGitLabMergeRequestReviewerRereviewPayload | null; + mergeRequestSetAssignees: IXGitLabMergeRequestSetAssigneesPayload | null; + mergeRequestSetDraft: IXGitLabMergeRequestSetDraftPayload | null; + mergeRequestSetLabels: IXGitLabMergeRequestSetLabelsPayload | null; + mergeRequestSetLocked: IXGitLabMergeRequestSetLockedPayload | null; + mergeRequestSetMilestone: IXGitLabMergeRequestSetMilestonePayload | null; + mergeRequestSetSubscription: IXGitLabMergeRequestSetSubscriptionPayload | null; + + /** + * @deprecated "Use mergeRequestSetDraft. Deprecated in 13.12." + */ + mergeRequestSetWip: IXGitLabMergeRequestSetWipPayload | null; + + /** + * Update attributes of a merge request + */ + mergeRequestUpdate: IXGitLabMergeRequestUpdatePayload | null; + namespaceIncreaseStorageTemporarily: IXGitLabNamespaceIncreaseStorageTemporarilyPayload | null; + oncallRotationCreate: IXGitLabOncallRotationCreatePayload | null; + oncallRotationDestroy: IXGitLabOncallRotationDestroyPayload | null; + oncallRotationUpdate: IXGitLabOncallRotationUpdatePayload | null; + oncallScheduleCreate: IXGitLabOncallScheduleCreatePayload | null; + oncallScheduleDestroy: IXGitLabOncallScheduleDestroyPayload | null; + oncallScheduleUpdate: IXGitLabOncallScheduleUpdatePayload | null; + pipelineCancel: IXGitLabPipelineCancelPayload | null; + pipelineDestroy: IXGitLabPipelineDestroyPayload | null; + pipelineRetry: IXGitLabPipelineRetryPayload | null; + + /** + * Assign (or unset) a compliance framework to a project. + */ + projectSetComplianceFramework: IXGitLabProjectSetComplianceFrameworkPayload | null; + projectSetLocked: IXGitLabProjectSetLockedPayload | null; + prometheusIntegrationCreate: IXGitLabPrometheusIntegrationCreatePayload | null; + prometheusIntegrationResetToken: IXGitLabPrometheusIntegrationResetTokenPayload | null; + prometheusIntegrationUpdate: IXGitLabPrometheusIntegrationUpdatePayload | null; + promoteToEpic: IXGitLabPromoteToEpicPayload | null; + releaseAssetLinkCreate: IXGitLabReleaseAssetLinkCreatePayload | null; + releaseAssetLinkDelete: IXGitLabReleaseAssetLinkDeletePayload | null; + releaseAssetLinkUpdate: IXGitLabReleaseAssetLinkUpdatePayload | null; + releaseCreate: IXGitLabReleaseCreatePayload | null; + releaseDelete: IXGitLabReleaseDeletePayload | null; + releaseUpdate: IXGitLabReleaseUpdatePayload | null; + removeProjectFromSecurityDashboard: IXGitLabRemoveProjectFromSecurityDashboardPayload | null; + + /** + * Repositions a DiffNote on an image (a `Note` where the `position.positionType` is `"image"`) + */ + repositionImageDiffNote: IXGitLabRepositionImageDiffNotePayload | null; + runnerDelete: IXGitLabRunnerDeletePayload | null; + runnerUpdate: IXGitLabRunnerUpdatePayload | null; + runnersRegistrationTokenReset: IXGitLabRunnersRegistrationTokenResetPayload | null; + + /** + * Commits the `policy_yaml` content to the assigned security policy project for the given project(`project_path`) + */ + scanExecutionPolicyCommit: IXGitLabScanExecutionPolicyCommitPayload | null; + + /** + * Assigns the specified project(`security_policy_project_id`) as security policy + * project for the given project(`project_path`). If the project already has a + * security policy project, this reassigns the project's security policy project + * with the given `security_policy_project_id` + */ + securityPolicyProjectAssign: IXGitLabSecurityPolicyProjectAssignPayload | null; + + /** + * Creates and assigns a security policy project for the given project(`project_path`) + */ + securityPolicyProjectCreate: IXGitLabSecurityPolicyProjectCreatePayload | null; + + /** + * Unassigns the security policy project for the given project(`project_path`). + */ + securityPolicyProjectUnassign: IXGitLabSecurityPolicyProjectUnassignPayload | null; + terraformStateDelete: IXGitLabTerraformStateDeletePayload | null; + terraformStateLock: IXGitLabTerraformStateLockPayload | null; + terraformStateUnlock: IXGitLabTerraformStateUnlockPayload | null; + todoCreate: IXGitLabTodoCreatePayload | null; + todoMarkDone: IXGitLabTodoMarkDonePayload | null; + todoRestore: IXGitLabTodoRestorePayload | null; + todoRestoreMany: IXGitLabTodoRestoreManyPayload | null; + todosMarkAllDone: IXGitLabTodosMarkAllDonePayload | null; + updateAlertStatus: IXGitLabUpdateAlertStatusPayload | null; + updateBoard: IXGitLabUpdateBoardPayload | null; + updateBoardEpicUserPreferences: IXGitLabUpdateBoardEpicUserPreferencesPayload | null; + updateBoardList: IXGitLabUpdateBoardListPayload | null; + updateComplianceFramework: IXGitLabUpdateComplianceFrameworkPayload | null; + updateContainerExpirationPolicy: IXGitLabUpdateContainerExpirationPolicyPayload | null; + updateDependencyProxyImageTtlGroupPolicy: IXGitLabUpdateDependencyProxyImageTtlGroupPolicyPayload | null; + updateDependencyProxySettings: IXGitLabUpdateDependencyProxySettingsPayload | null; + updateEpic: IXGitLabUpdateEpicPayload | null; + updateEpicBoardList: IXGitLabUpdateEpicBoardListPayload | null; + + /** + * Updates a DiffNote on an image (a `Note` where the `position.positionType` is `"image"`). + * If the body of the Note contains only quick actions, + * the Note will be destroyed during the update, and no Note will be + * returned. + */ + updateImageDiffNote: IXGitLabUpdateImageDiffNotePayload | null; + updateIssue: IXGitLabUpdateIssuePayload | null; + updateIteration: IXGitLabUpdateIterationPayload | null; + updateNamespacePackageSettings: IXGitLabUpdateNamespacePackageSettingsPayload | null; + + /** + * Updates a Note. + * If the body of the Note contains only quick actions, + * the Note will be destroyed during the update, and no Note will be + * returned. + */ + updateNote: IXGitLabUpdateNotePayload | null; + updateRequirement: IXGitLabUpdateRequirementPayload | null; + updateSnippet: IXGitLabUpdateSnippetPayload | null; + userCalloutCreate: IXGitLabUserCalloutCreatePayload | null; + vulnerabilityConfirm: IXGitLabVulnerabilityConfirmPayload | null; + vulnerabilityCreate: IXGitLabVulnerabilityCreatePayload | null; + vulnerabilityDismiss: IXGitLabVulnerabilityDismissPayload | null; + vulnerabilityExternalIssueLinkCreate: IXGitLabVulnerabilityExternalIssueLinkCreatePayload | null; + vulnerabilityExternalIssueLinkDestroy: IXGitLabVulnerabilityExternalIssueLinkDestroyPayload | null; + vulnerabilityResolve: IXGitLabVulnerabilityResolvePayload | null; + vulnerabilityRevertToDetected: IXGitLabVulnerabilityRevertToDetectedPayload | null; +} + +export interface IAddProjectToSecurityDashboardOnXGitLabMutationArguments { + /** + * Parameters for AddProjectToSecurityDashboard + */ + input: IXGitLabAddProjectToSecurityDashboardInput; +} + +export interface IAdminSidekiqQueuesDeleteJobsOnXGitLabMutationArguments { + /** + * Parameters for AdminSidekiqQueuesDeleteJobs + */ + input: IXGitLabAdminSidekiqQueuesDeleteJobsInput; +} + +export interface IAlertSetAssigneesOnXGitLabMutationArguments { + /** + * Parameters for AlertSetAssignees + */ + input: IXGitLabAlertSetAssigneesInput; +} + +export interface IAlertTodoCreateOnXGitLabMutationArguments { + /** + * Parameters for AlertTodoCreate + */ + input: IXGitLabAlertTodoCreateInput; +} + +export interface IApiFuzzingCiConfigurationCreateOnXGitLabMutationArguments { + /** + * Parameters for ApiFuzzingCiConfigurationCreate + */ + input: IXGitLabApiFuzzingCiConfigurationCreateInput; +} + +export interface IAwardEmojiAddOnXGitLabMutationArguments { + /** + * Parameters for AwardEmojiAdd + */ + input: IXGitLabAwardEmojiAddInput; +} + +export interface IAwardEmojiRemoveOnXGitLabMutationArguments { + /** + * Parameters for AwardEmojiRemove + */ + input: IXGitLabAwardEmojiRemoveInput; +} + +export interface IAwardEmojiToggleOnXGitLabMutationArguments { + /** + * Parameters for AwardEmojiToggle + */ + input: IXGitLabAwardEmojiToggleInput; +} + +export interface IBoardEpicCreateOnXGitLabMutationArguments { + /** + * Parameters for BoardEpicCreate + */ + input: IXGitLabBoardEpicCreateInput; +} + +export interface IBoardListCreateOnXGitLabMutationArguments { + /** + * Parameters for BoardListCreate + */ + input: IXGitLabBoardListCreateInput; +} + +export interface IBoardListUpdateLimitMetricsOnXGitLabMutationArguments { + /** + * Parameters for BoardListUpdateLimitMetrics + */ + input: IXGitLabBoardListUpdateLimitMetricsInput; +} + +export interface IBulkEnableDevopsAdoptionNamespacesOnXGitLabMutationArguments { + /** + * Parameters for BulkEnableDevopsAdoptionNamespaces + */ + input: IXGitLabBulkEnableDevopsAdoptionNamespacesInput; +} + +export interface ICiCdSettingsUpdateOnXGitLabMutationArguments { + /** + * Parameters for CiCdSettingsUpdate + */ + input: IXGitLabCiCdSettingsUpdateInput; +} + +export interface ICiJobTokenScopeAddProjectOnXGitLabMutationArguments { + /** + * Parameters for CiJobTokenScopeAddProject + */ + input: IXGitLabCiJobTokenScopeAddProjectInput; +} + +export interface ICiJobTokenScopeRemoveProjectOnXGitLabMutationArguments { + /** + * Parameters for CiJobTokenScopeRemoveProject + */ + input: IXGitLabCiJobTokenScopeRemoveProjectInput; +} + +export interface IClusterAgentDeleteOnXGitLabMutationArguments { + /** + * Parameters for ClusterAgentDelete + */ + input: IXGitLabClusterAgentDeleteInput; +} + +export interface IClusterAgentTokenCreateOnXGitLabMutationArguments { + /** + * Parameters for ClusterAgentTokenCreate + */ + input: IXGitLabClusterAgentTokenCreateInput; +} + +export interface IClusterAgentTokenDeleteOnXGitLabMutationArguments { + /** + * Parameters for ClusterAgentTokenDelete + */ + input: IXGitLabClusterAgentTokenDeleteInput; +} + +export interface ICommitCreateOnXGitLabMutationArguments { + /** + * Parameters for CommitCreate + */ + input: IXGitLabCommitCreateInput; +} + +export interface IConfigureDependencyScanningOnXGitLabMutationArguments { + /** + * Parameters for ConfigureDependencyScanning + */ + input: IXGitLabConfigureDependencyScanningInput; +} + +export interface IConfigureSastOnXGitLabMutationArguments { + /** + * Parameters for ConfigureSast + */ + input: IXGitLabConfigureSastInput; +} + +export interface IConfigureSecretDetectionOnXGitLabMutationArguments { + /** + * Parameters for ConfigureSecretDetection + */ + input: IXGitLabConfigureSecretDetectionInput; +} + +export interface ICreateAlertIssueOnXGitLabMutationArguments { + /** + * Parameters for CreateAlertIssue + */ + input: IXGitLabCreateAlertIssueInput; +} + +export interface ICreateAnnotationOnXGitLabMutationArguments { + /** + * Parameters for CreateAnnotation + */ + input: IXGitLabCreateAnnotationInput; +} + +export interface ICreateBoardOnXGitLabMutationArguments { + /** + * Parameters for CreateBoard + */ + input: IXGitLabCreateBoardInput; +} + +export interface ICreateBranchOnXGitLabMutationArguments { + /** + * Parameters for CreateBranch + */ + input: IXGitLabCreateBranchInput; +} + +export interface ICreateClusterAgentOnXGitLabMutationArguments { + /** + * Parameters for CreateClusterAgent + */ + input: IXGitLabCreateClusterAgentInput; +} + +export interface ICreateComplianceFrameworkOnXGitLabMutationArguments { + /** + * Parameters for CreateComplianceFramework + */ + input: IXGitLabCreateComplianceFrameworkInput; +} + +export interface ICreateCustomEmojiOnXGitLabMutationArguments { + /** + * Parameters for CreateCustomEmoji + */ + input: IXGitLabCreateCustomEmojiInput; +} + +export interface ICreateDiffNoteOnXGitLabMutationArguments { + /** + * Parameters for CreateDiffNote + */ + input: IXGitLabCreateDiffNoteInput; +} + +export interface ICreateEpicOnXGitLabMutationArguments { + /** + * Parameters for CreateEpic + */ + input: IXGitLabCreateEpicInput; +} + +export interface ICreateImageDiffNoteOnXGitLabMutationArguments { + /** + * Parameters for CreateImageDiffNote + */ + input: IXGitLabCreateImageDiffNoteInput; +} + +export interface ICreateIssueOnXGitLabMutationArguments { + /** + * Parameters for CreateIssue + */ + input: IXGitLabCreateIssueInput; +} + +export interface ICreateIterationOnXGitLabMutationArguments { + /** + * Parameters for CreateIteration + */ + input: IXGitLabCreateIterationInput; +} + +export interface ICreateNoteOnXGitLabMutationArguments { + /** + * Parameters for CreateNote + */ + input: IXGitLabCreateNoteInput; +} + +export interface ICreateRequirementOnXGitLabMutationArguments { + /** + * Parameters for CreateRequirement + */ + input: IXGitLabCreateRequirementInput; +} + +export interface ICreateSnippetOnXGitLabMutationArguments { + /** + * Parameters for CreateSnippet + */ + input: IXGitLabCreateSnippetInput; +} + +export interface ICreateTestCaseOnXGitLabMutationArguments { + /** + * Parameters for CreateTestCase + */ + input: IXGitLabCreateTestCaseInput; +} + +export interface ICustomerRelationsContactCreateOnXGitLabMutationArguments { + /** + * Parameters for CustomerRelationsContactCreate + */ + input: IXGitLabCustomerRelationsContactCreateInput; +} + +export interface ICustomerRelationsContactUpdateOnXGitLabMutationArguments { + /** + * Parameters for CustomerRelationsContactUpdate + */ + input: IXGitLabCustomerRelationsContactUpdateInput; +} + +export interface ICustomerRelationsOrganizationCreateOnXGitLabMutationArguments { + /** + * Parameters for CustomerRelationsOrganizationCreate + */ + input: IXGitLabCustomerRelationsOrganizationCreateInput; +} + +export interface ICustomerRelationsOrganizationUpdateOnXGitLabMutationArguments { + /** + * Parameters for CustomerRelationsOrganizationUpdate + */ + input: IXGitLabCustomerRelationsOrganizationUpdateInput; +} + +export interface IDastOnDemandScanCreateOnXGitLabMutationArguments { + /** + * Parameters for DastOnDemandScanCreate + */ + input: IXGitLabDastOnDemandScanCreateInput; +} + +export interface IDastProfileCreateOnXGitLabMutationArguments { + /** + * Parameters for DastProfileCreate + */ + input: IXGitLabDastProfileCreateInput; +} + +export interface IDastProfileDeleteOnXGitLabMutationArguments { + /** + * Parameters for DastProfileDelete + */ + input: IXGitLabDastProfileDeleteInput; +} + +export interface IDastProfileRunOnXGitLabMutationArguments { + /** + * Parameters for DastProfileRun + */ + input: IXGitLabDastProfileRunInput; +} + +export interface IDastProfileUpdateOnXGitLabMutationArguments { + /** + * Parameters for DastProfileUpdate + */ + input: IXGitLabDastProfileUpdateInput; +} + +export interface IDastScannerProfileCreateOnXGitLabMutationArguments { + /** + * Parameters for DastScannerProfileCreate + */ + input: IXGitLabDastScannerProfileCreateInput; +} + +export interface IDastScannerProfileDeleteOnXGitLabMutationArguments { + /** + * Parameters for DastScannerProfileDelete + */ + input: IXGitLabDastScannerProfileDeleteInput; +} + +export interface IDastScannerProfileUpdateOnXGitLabMutationArguments { + /** + * Parameters for DastScannerProfileUpdate + */ + input: IXGitLabDastScannerProfileUpdateInput; +} + +export interface IDastSiteProfileCreateOnXGitLabMutationArguments { + /** + * Parameters for DastSiteProfileCreate + */ + input: IXGitLabDastSiteProfileCreateInput; +} + +export interface IDastSiteProfileDeleteOnXGitLabMutationArguments { + /** + * Parameters for DastSiteProfileDelete + */ + input: IXGitLabDastSiteProfileDeleteInput; +} + +export interface IDastSiteProfileUpdateOnXGitLabMutationArguments { + /** + * Parameters for DastSiteProfileUpdate + */ + input: IXGitLabDastSiteProfileUpdateInput; +} + +export interface IDastSiteTokenCreateOnXGitLabMutationArguments { + /** + * Parameters for DastSiteTokenCreate + */ + input: IXGitLabDastSiteTokenCreateInput; +} + +export interface IDastSiteValidationCreateOnXGitLabMutationArguments { + /** + * Parameters for DastSiteValidationCreate + */ + input: IXGitLabDastSiteValidationCreateInput; +} + +export interface IDastSiteValidationRevokeOnXGitLabMutationArguments { + /** + * Parameters for DastSiteValidationRevoke + */ + input: IXGitLabDastSiteValidationRevokeInput; +} + +export interface IDeleteAnnotationOnXGitLabMutationArguments { + /** + * Parameters for DeleteAnnotation + */ + input: IXGitLabDeleteAnnotationInput; +} + +export interface IDesignManagementDeleteOnXGitLabMutationArguments { + /** + * Parameters for DesignManagementDelete + */ + input: IXGitLabDesignManagementDeleteInput; +} + +export interface IDesignManagementMoveOnXGitLabMutationArguments { + /** + * Parameters for DesignManagementMove + */ + input: IXGitLabDesignManagementMoveInput; +} + +export interface IDesignManagementUploadOnXGitLabMutationArguments { + /** + * Parameters for DesignManagementUpload + */ + input: IXGitLabDesignManagementUploadInput; +} + +export interface IDestroyBoardOnXGitLabMutationArguments { + /** + * Parameters for DestroyBoard + */ + input: IXGitLabDestroyBoardInput; +} + +export interface IDestroyBoardListOnXGitLabMutationArguments { + /** + * Parameters for DestroyBoardList + */ + input: IXGitLabDestroyBoardListInput; +} + +export interface IDestroyComplianceFrameworkOnXGitLabMutationArguments { + /** + * Parameters for DestroyComplianceFramework + */ + input: IXGitLabDestroyComplianceFrameworkInput; +} + +export interface IDestroyContainerRepositoryOnXGitLabMutationArguments { + /** + * Parameters for DestroyContainerRepository + */ + input: IXGitLabDestroyContainerRepositoryInput; +} + +export interface IDestroyContainerRepositoryTagsOnXGitLabMutationArguments { + /** + * Parameters for DestroyContainerRepositoryTags + */ + input: IXGitLabDestroyContainerRepositoryTagsInput; +} + +export interface IDestroyCustomEmojiOnXGitLabMutationArguments { + /** + * Parameters for DestroyCustomEmoji + */ + input: IXGitLabDestroyCustomEmojiInput; +} + +export interface IDestroyEpicBoardOnXGitLabMutationArguments { + /** + * Parameters for DestroyEpicBoard + */ + input: IXGitLabDestroyEpicBoardInput; +} + +export interface IDestroyNoteOnXGitLabMutationArguments { + /** + * Parameters for DestroyNote + */ + input: IXGitLabDestroyNoteInput; +} + +export interface IDestroyPackageOnXGitLabMutationArguments { + /** + * Parameters for DestroyPackage + */ + input: IXGitLabDestroyPackageInput; +} + +export interface IDestroyPackageFileOnXGitLabMutationArguments { + /** + * Parameters for DestroyPackageFile + */ + input: IXGitLabDestroyPackageFileInput; +} + +export interface IDestroySnippetOnXGitLabMutationArguments { + /** + * Parameters for DestroySnippet + */ + input: IXGitLabDestroySnippetInput; +} + +export interface IDisableDevopsAdoptionNamespaceOnXGitLabMutationArguments { + /** + * Parameters for DisableDevopsAdoptionNamespace + */ + input: IXGitLabDisableDevopsAdoptionNamespaceInput; +} + +export interface IDiscussionToggleResolveOnXGitLabMutationArguments { + /** + * Parameters for DiscussionToggleResolve + */ + input: IXGitLabDiscussionToggleResolveInput; +} + +export interface IEchoCreateOnXGitLabMutationArguments { + /** + * Parameters for EchoCreate + */ + input: IXGitLabEchoCreateInput; +} + +export interface IEnableDevopsAdoptionNamespaceOnXGitLabMutationArguments { + /** + * Parameters for EnableDevopsAdoptionNamespace + */ + input: IXGitLabEnableDevopsAdoptionNamespaceInput; +} + +export interface IEnvironmentsCanaryIngressUpdateOnXGitLabMutationArguments { + /** + * Parameters for EnvironmentsCanaryIngressUpdate + */ + input: IXGitLabEnvironmentsCanaryIngressUpdateInput; +} + +export interface IEpicAddIssueOnXGitLabMutationArguments { + /** + * Parameters for EpicAddIssue + */ + input: IXGitLabEpicAddIssueInput; +} + +export interface IEpicBoardCreateOnXGitLabMutationArguments { + /** + * Parameters for EpicBoardCreate + */ + input: IXGitLabEpicBoardCreateInput; +} + +export interface IEpicBoardListCreateOnXGitLabMutationArguments { + /** + * Parameters for EpicBoardListCreate + */ + input: IXGitLabEpicBoardListCreateInput; +} + +export interface IEpicBoardListDestroyOnXGitLabMutationArguments { + /** + * Parameters for EpicBoardListDestroy + */ + input: IXGitLabEpicBoardListDestroyInput; +} + +export interface IEpicBoardUpdateOnXGitLabMutationArguments { + /** + * Parameters for EpicBoardUpdate + */ + input: IXGitLabEpicBoardUpdateInput; +} + +export interface IEpicMoveListOnXGitLabMutationArguments { + /** + * Parameters for EpicMoveList + */ + input: IXGitLabEpicMoveListInput; +} + +export interface IEpicSetSubscriptionOnXGitLabMutationArguments { + /** + * Parameters for EpicSetSubscription + */ + input: IXGitLabEpicSetSubscriptionInput; +} + +export interface IEpicTreeReorderOnXGitLabMutationArguments { + /** + * Parameters for EpicTreeReorder + */ + input: IXGitLabEpicTreeReorderInput; +} + +export interface IEscalationPolicyCreateOnXGitLabMutationArguments { + /** + * Parameters for EscalationPolicyCreate + */ + input: IXGitLabEscalationPolicyCreateInput; +} + +export interface IEscalationPolicyDestroyOnXGitLabMutationArguments { + /** + * Parameters for EscalationPolicyDestroy + */ + input: IXGitLabEscalationPolicyDestroyInput; +} + +export interface IEscalationPolicyUpdateOnXGitLabMutationArguments { + /** + * Parameters for EscalationPolicyUpdate + */ + input: IXGitLabEscalationPolicyUpdateInput; +} + +export interface IExportRequirementsOnXGitLabMutationArguments { + /** + * Parameters for ExportRequirements + */ + input: IXGitLabExportRequirementsInput; +} + +export interface IExternalAuditEventDestinationCreateOnXGitLabMutationArguments { + /** + * Parameters for ExternalAuditEventDestinationCreate + */ + input: IXGitLabExternalAuditEventDestinationCreateInput; +} + +export interface IExternalAuditEventDestinationDestroyOnXGitLabMutationArguments { + /** + * Parameters for ExternalAuditEventDestinationDestroy + */ + input: IXGitLabExternalAuditEventDestinationDestroyInput; +} + +export interface IExternalAuditEventDestinationUpdateOnXGitLabMutationArguments { + /** + * Parameters for ExternalAuditEventDestinationUpdate + */ + input: IXGitLabExternalAuditEventDestinationUpdateInput; +} + +export interface IGitlabSubscriptionActivateOnXGitLabMutationArguments { + /** + * Parameters for GitlabSubscriptionActivate + */ + input: IXGitLabGitlabSubscriptionActivateInput; +} + +export interface IGroupUpdateOnXGitLabMutationArguments { + /** + * Parameters for GroupUpdate + */ + input: IXGitLabGroupUpdateInput; +} + +export interface IHttpIntegrationCreateOnXGitLabMutationArguments { + /** + * Parameters for HttpIntegrationCreate + */ + input: IXGitLabHttpIntegrationCreateInput; +} + +export interface IHttpIntegrationDestroyOnXGitLabMutationArguments { + /** + * Parameters for HttpIntegrationDestroy + */ + input: IXGitLabHttpIntegrationDestroyInput; +} + +export interface IHttpIntegrationResetTokenOnXGitLabMutationArguments { + /** + * Parameters for HttpIntegrationResetToken + */ + input: IXGitLabHttpIntegrationResetTokenInput; +} + +export interface IHttpIntegrationUpdateOnXGitLabMutationArguments { + /** + * Parameters for HttpIntegrationUpdate + */ + input: IXGitLabHttpIntegrationUpdateInput; +} + +export interface IIssueMoveOnXGitLabMutationArguments { + /** + * Parameters for IssueMove + */ + input: IXGitLabIssueMoveInput; +} + +export interface IIssueMoveListOnXGitLabMutationArguments { + /** + * Parameters for IssueMoveList + */ + input: IXGitLabIssueMoveListInput; +} + +export interface IIssueSetAssigneesOnXGitLabMutationArguments { + /** + * Parameters for IssueSetAssignees + */ + input: IXGitLabIssueSetAssigneesInput; +} + +export interface IIssueSetConfidentialOnXGitLabMutationArguments { + /** + * Parameters for IssueSetConfidential + */ + input: IXGitLabIssueSetConfidentialInput; +} + +export interface IIssueSetDueDateOnXGitLabMutationArguments { + /** + * Parameters for IssueSetDueDate + */ + input: IXGitLabIssueSetDueDateInput; +} + +export interface IIssueSetEpicOnXGitLabMutationArguments { + /** + * Parameters for IssueSetEpic + */ + input: IXGitLabIssueSetEpicInput; +} + +export interface IIssueSetIterationOnXGitLabMutationArguments { + /** + * Parameters for IssueSetIteration + */ + input: IXGitLabIssueSetIterationInput; +} + +export interface IIssueSetLockedOnXGitLabMutationArguments { + /** + * Parameters for IssueSetLocked + */ + input: IXGitLabIssueSetLockedInput; +} + +export interface IIssueSetSeverityOnXGitLabMutationArguments { + /** + * Parameters for IssueSetSeverity + */ + input: IXGitLabIssueSetSeverityInput; +} + +export interface IIssueSetSubscriptionOnXGitLabMutationArguments { + /** + * Parameters for IssueSetSubscription + */ + input: IXGitLabIssueSetSubscriptionInput; +} + +export interface IIssueSetWeightOnXGitLabMutationArguments { + /** + * Parameters for IssueSetWeight + */ + input: IXGitLabIssueSetWeightInput; +} + +export interface IIterationCadenceCreateOnXGitLabMutationArguments { + /** + * Parameters for IterationCadenceCreate + */ + input: IXGitLabIterationCadenceCreateInput; +} + +export interface IIterationCadenceDestroyOnXGitLabMutationArguments { + /** + * Parameters for IterationCadenceDestroy + */ + input: IXGitLabIterationCadenceDestroyInput; +} + +export interface IIterationCadenceUpdateOnXGitLabMutationArguments { + /** + * Parameters for IterationCadenceUpdate + */ + input: IXGitLabIterationCadenceUpdateInput; +} + +export interface IIterationCreateOnXGitLabMutationArguments { + /** + * Parameters for iterationCreate + */ + input: IXGitLabiterationCreateInput; +} + +export interface IIterationDeleteOnXGitLabMutationArguments { + /** + * Parameters for IterationDelete + */ + input: IXGitLabIterationDeleteInput; +} + +export interface IJiraImportStartOnXGitLabMutationArguments { + /** + * Parameters for JiraImportStart + */ + input: IXGitLabJiraImportStartInput; +} + +export interface IJiraImportUsersOnXGitLabMutationArguments { + /** + * Parameters for JiraImportUsers + */ + input: IXGitLabJiraImportUsersInput; +} + +export interface IJobCancelOnXGitLabMutationArguments { + /** + * Parameters for JobCancel + */ + input: IXGitLabJobCancelInput; +} + +export interface IJobPlayOnXGitLabMutationArguments { + /** + * Parameters for JobPlay + */ + input: IXGitLabJobPlayInput; +} + +export interface IJobRetryOnXGitLabMutationArguments { + /** + * Parameters for JobRetry + */ + input: IXGitLabJobRetryInput; +} + +export interface IJobUnscheduleOnXGitLabMutationArguments { + /** + * Parameters for JobUnschedule + */ + input: IXGitLabJobUnscheduleInput; +} + +export interface ILabelCreateOnXGitLabMutationArguments { + /** + * Parameters for LabelCreate + */ + input: IXGitLabLabelCreateInput; +} + +export interface IMarkAsSpamSnippetOnXGitLabMutationArguments { + /** + * Parameters for MarkAsSpamSnippet + */ + input: IXGitLabMarkAsSpamSnippetInput; +} + +export interface IMergeRequestAcceptOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestAccept + */ + input: IXGitLabMergeRequestAcceptInput; +} + +export interface IMergeRequestCreateOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestCreate + */ + input: IXGitLabMergeRequestCreateInput; +} + +export interface IMergeRequestReviewerRereviewOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestReviewerRereview + */ + input: IXGitLabMergeRequestReviewerRereviewInput; +} + +export interface IMergeRequestSetAssigneesOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetAssignees + */ + input: IXGitLabMergeRequestSetAssigneesInput; +} + +export interface IMergeRequestSetDraftOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetDraft + */ + input: IXGitLabMergeRequestSetDraftInput; +} + +export interface IMergeRequestSetLabelsOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetLabels + */ + input: IXGitLabMergeRequestSetLabelsInput; +} + +export interface IMergeRequestSetLockedOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetLocked + */ + input: IXGitLabMergeRequestSetLockedInput; +} + +export interface IMergeRequestSetMilestoneOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetMilestone + */ + input: IXGitLabMergeRequestSetMilestoneInput; +} + +export interface IMergeRequestSetSubscriptionOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetSubscription + */ + input: IXGitLabMergeRequestSetSubscriptionInput; +} + +export interface IMergeRequestSetWipOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestSetWip + */ + input: IXGitLabMergeRequestSetWipInput; +} + +export interface IMergeRequestUpdateOnXGitLabMutationArguments { + /** + * Parameters for MergeRequestUpdate + */ + input: IXGitLabMergeRequestUpdateInput; +} + +export interface INamespaceIncreaseStorageTemporarilyOnXGitLabMutationArguments { + /** + * Parameters for NamespaceIncreaseStorageTemporarily + */ + input: IXGitLabNamespaceIncreaseStorageTemporarilyInput; +} + +export interface IOncallRotationCreateOnXGitLabMutationArguments { + /** + * Parameters for OncallRotationCreate + */ + input: IXGitLabOncallRotationCreateInput; +} + +export interface IOncallRotationDestroyOnXGitLabMutationArguments { + /** + * Parameters for OncallRotationDestroy + */ + input: IXGitLabOncallRotationDestroyInput; +} + +export interface IOncallRotationUpdateOnXGitLabMutationArguments { + /** + * Parameters for OncallRotationUpdate + */ + input: IXGitLabOncallRotationUpdateInput; +} + +export interface IOncallScheduleCreateOnXGitLabMutationArguments { + /** + * Parameters for OncallScheduleCreate + */ + input: IXGitLabOncallScheduleCreateInput; +} + +export interface IOncallScheduleDestroyOnXGitLabMutationArguments { + /** + * Parameters for OncallScheduleDestroy + */ + input: IXGitLabOncallScheduleDestroyInput; +} + +export interface IOncallScheduleUpdateOnXGitLabMutationArguments { + /** + * Parameters for OncallScheduleUpdate + */ + input: IXGitLabOncallScheduleUpdateInput; +} + +export interface IPipelineCancelOnXGitLabMutationArguments { + /** + * Parameters for PipelineCancel + */ + input: IXGitLabPipelineCancelInput; +} + +export interface IPipelineDestroyOnXGitLabMutationArguments { + /** + * Parameters for PipelineDestroy + */ + input: IXGitLabPipelineDestroyInput; +} + +export interface IPipelineRetryOnXGitLabMutationArguments { + /** + * Parameters for PipelineRetry + */ + input: IXGitLabPipelineRetryInput; +} + +export interface IProjectSetComplianceFrameworkOnXGitLabMutationArguments { + /** + * Parameters for ProjectSetComplianceFramework + */ + input: IXGitLabProjectSetComplianceFrameworkInput; +} + +export interface IProjectSetLockedOnXGitLabMutationArguments { + /** + * Parameters for ProjectSetLocked + */ + input: IXGitLabProjectSetLockedInput; +} + +export interface IPrometheusIntegrationCreateOnXGitLabMutationArguments { + /** + * Parameters for PrometheusIntegrationCreate + */ + input: IXGitLabPrometheusIntegrationCreateInput; +} + +export interface IPrometheusIntegrationResetTokenOnXGitLabMutationArguments { + /** + * Parameters for PrometheusIntegrationResetToken + */ + input: IXGitLabPrometheusIntegrationResetTokenInput; +} + +export interface IPrometheusIntegrationUpdateOnXGitLabMutationArguments { + /** + * Parameters for PrometheusIntegrationUpdate + */ + input: IXGitLabPrometheusIntegrationUpdateInput; +} + +export interface IPromoteToEpicOnXGitLabMutationArguments { + /** + * Parameters for PromoteToEpic + */ + input: IXGitLabPromoteToEpicInput; +} + +export interface IReleaseAssetLinkCreateOnXGitLabMutationArguments { + /** + * Parameters for ReleaseAssetLinkCreate + */ + input: IXGitLabReleaseAssetLinkCreateInput; +} + +export interface IReleaseAssetLinkDeleteOnXGitLabMutationArguments { + /** + * Parameters for ReleaseAssetLinkDelete + */ + input: IXGitLabReleaseAssetLinkDeleteInput; +} + +export interface IReleaseAssetLinkUpdateOnXGitLabMutationArguments { + /** + * Parameters for ReleaseAssetLinkUpdate + */ + input: IXGitLabReleaseAssetLinkUpdateInput; +} + +export interface IReleaseCreateOnXGitLabMutationArguments { + /** + * Parameters for ReleaseCreate + */ + input: IXGitLabReleaseCreateInput; +} + +export interface IReleaseDeleteOnXGitLabMutationArguments { + /** + * Parameters for ReleaseDelete + */ + input: IXGitLabReleaseDeleteInput; +} + +export interface IReleaseUpdateOnXGitLabMutationArguments { + /** + * Parameters for ReleaseUpdate + */ + input: IXGitLabReleaseUpdateInput; +} + +export interface IRemoveProjectFromSecurityDashboardOnXGitLabMutationArguments { + /** + * Parameters for RemoveProjectFromSecurityDashboard + */ + input: IXGitLabRemoveProjectFromSecurityDashboardInput; +} + +export interface IRepositionImageDiffNoteOnXGitLabMutationArguments { + /** + * Parameters for RepositionImageDiffNote + */ + input: IXGitLabRepositionImageDiffNoteInput; +} + +export interface IRunnerDeleteOnXGitLabMutationArguments { + /** + * Parameters for RunnerDelete + */ + input: IXGitLabRunnerDeleteInput; +} + +export interface IRunnerUpdateOnXGitLabMutationArguments { + /** + * Parameters for RunnerUpdate + */ + input: IXGitLabRunnerUpdateInput; +} + +export interface IRunnersRegistrationTokenResetOnXGitLabMutationArguments { + /** + * Parameters for RunnersRegistrationTokenReset + */ + input: IXGitLabRunnersRegistrationTokenResetInput; +} + +export interface IScanExecutionPolicyCommitOnXGitLabMutationArguments { + /** + * Parameters for ScanExecutionPolicyCommit + */ + input: IXGitLabScanExecutionPolicyCommitInput; +} + +export interface ISecurityPolicyProjectAssignOnXGitLabMutationArguments { + /** + * Parameters for SecurityPolicyProjectAssign + */ + input: IXGitLabSecurityPolicyProjectAssignInput; +} + +export interface ISecurityPolicyProjectCreateOnXGitLabMutationArguments { + /** + * Parameters for SecurityPolicyProjectCreate + */ + input: IXGitLabSecurityPolicyProjectCreateInput; +} + +export interface ISecurityPolicyProjectUnassignOnXGitLabMutationArguments { + /** + * Parameters for SecurityPolicyProjectUnassign + */ + input: IXGitLabSecurityPolicyProjectUnassignInput; +} + +export interface ITerraformStateDeleteOnXGitLabMutationArguments { + /** + * Parameters for TerraformStateDelete + */ + input: IXGitLabTerraformStateDeleteInput; +} + +export interface ITerraformStateLockOnXGitLabMutationArguments { + /** + * Parameters for TerraformStateLock + */ + input: IXGitLabTerraformStateLockInput; +} + +export interface ITerraformStateUnlockOnXGitLabMutationArguments { + /** + * Parameters for TerraformStateUnlock + */ + input: IXGitLabTerraformStateUnlockInput; +} + +export interface ITodoCreateOnXGitLabMutationArguments { + /** + * Parameters for TodoCreate + */ + input: IXGitLabTodoCreateInput; +} + +export interface ITodoMarkDoneOnXGitLabMutationArguments { + /** + * Parameters for TodoMarkDone + */ + input: IXGitLabTodoMarkDoneInput; +} + +export interface ITodoRestoreOnXGitLabMutationArguments { + /** + * Parameters for TodoRestore + */ + input: IXGitLabTodoRestoreInput; +} + +export interface ITodoRestoreManyOnXGitLabMutationArguments { + /** + * Parameters for TodoRestoreMany + */ + input: IXGitLabTodoRestoreManyInput; +} + +export interface ITodosMarkAllDoneOnXGitLabMutationArguments { + /** + * Parameters for TodosMarkAllDone + */ + input: IXGitLabTodosMarkAllDoneInput; +} + +export interface IUpdateAlertStatusOnXGitLabMutationArguments { + /** + * Parameters for UpdateAlertStatus + */ + input: IXGitLabUpdateAlertStatusInput; +} + +export interface IUpdateBoardOnXGitLabMutationArguments { + /** + * Parameters for UpdateBoard + */ + input: IXGitLabUpdateBoardInput; +} + +export interface IUpdateBoardEpicUserPreferencesOnXGitLabMutationArguments { + /** + * Parameters for UpdateBoardEpicUserPreferences + */ + input: IXGitLabUpdateBoardEpicUserPreferencesInput; +} + +export interface IUpdateBoardListOnXGitLabMutationArguments { + /** + * Parameters for UpdateBoardList + */ + input: IXGitLabUpdateBoardListInput; +} + +export interface IUpdateComplianceFrameworkOnXGitLabMutationArguments { + /** + * Parameters for UpdateComplianceFramework + */ + input: IXGitLabUpdateComplianceFrameworkInput; +} + +export interface IUpdateContainerExpirationPolicyOnXGitLabMutationArguments { + /** + * Parameters for UpdateContainerExpirationPolicy + */ + input: IXGitLabUpdateContainerExpirationPolicyInput; +} + +export interface IUpdateDependencyProxyImageTtlGroupPolicyOnXGitLabMutationArguments { + /** + * Parameters for UpdateDependencyProxyImageTtlGroupPolicy + */ + input: IXGitLabUpdateDependencyProxyImageTtlGroupPolicyInput; +} + +export interface IUpdateDependencyProxySettingsOnXGitLabMutationArguments { + /** + * Parameters for UpdateDependencyProxySettings + */ + input: IXGitLabUpdateDependencyProxySettingsInput; +} + +export interface IUpdateEpicOnXGitLabMutationArguments { + /** + * Parameters for UpdateEpic + */ + input: IXGitLabUpdateEpicInput; +} + +export interface IUpdateEpicBoardListOnXGitLabMutationArguments { + /** + * Parameters for UpdateEpicBoardList + */ + input: IXGitLabUpdateEpicBoardListInput; +} + +export interface IUpdateImageDiffNoteOnXGitLabMutationArguments { + /** + * Parameters for UpdateImageDiffNote + */ + input: IXGitLabUpdateImageDiffNoteInput; +} + +export interface IUpdateIssueOnXGitLabMutationArguments { + /** + * Parameters for UpdateIssue + */ + input: IXGitLabUpdateIssueInput; +} + +export interface IUpdateIterationOnXGitLabMutationArguments { + /** + * Parameters for UpdateIteration + */ + input: IXGitLabUpdateIterationInput; +} + +export interface IUpdateNamespacePackageSettingsOnXGitLabMutationArguments { + /** + * Parameters for UpdateNamespacePackageSettings + */ + input: IXGitLabUpdateNamespacePackageSettingsInput; +} + +export interface IUpdateNoteOnXGitLabMutationArguments { + /** + * Parameters for UpdateNote + */ + input: IXGitLabUpdateNoteInput; +} + +export interface IUpdateRequirementOnXGitLabMutationArguments { + /** + * Parameters for UpdateRequirement + */ + input: IXGitLabUpdateRequirementInput; +} + +export interface IUpdateSnippetOnXGitLabMutationArguments { + /** + * Parameters for UpdateSnippet + */ + input: IXGitLabUpdateSnippetInput; +} + +export interface IUserCalloutCreateOnXGitLabMutationArguments { + /** + * Parameters for UserCalloutCreate + */ + input: IXGitLabUserCalloutCreateInput; +} + +export interface IVulnerabilityConfirmOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityConfirm + */ + input: IXGitLabVulnerabilityConfirmInput; +} + +export interface IVulnerabilityCreateOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityCreate + */ + input: IXGitLabVulnerabilityCreateInput; +} + +export interface IVulnerabilityDismissOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityDismiss + */ + input: IXGitLabVulnerabilityDismissInput; +} + +export interface IVulnerabilityExternalIssueLinkCreateOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityExternalIssueLinkCreate + */ + input: IXGitLabVulnerabilityExternalIssueLinkCreateInput; +} + +export interface IVulnerabilityExternalIssueLinkDestroyOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityExternalIssueLinkDestroy + */ + input: IXGitLabVulnerabilityExternalIssueLinkDestroyInput; +} + +export interface IVulnerabilityResolveOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityResolve + */ + input: IXGitLabVulnerabilityResolveInput; +} + +export interface IVulnerabilityRevertToDetectedOnXGitLabMutationArguments { + /** + * Parameters for VulnerabilityRevertToDetected + */ + input: IXGitLabVulnerabilityRevertToDetectedInput; +} + +/** + * Different toggles for changing mutator behavior + */ +export const enum XGitLabMutationOperationMode { + /** + * Performs a replace operation. + */ + REPLACE = 'REPLACE', + + /** + * Performs an append operation. + */ + APPEND = 'APPEND', + + /** + * Performs a removal operation. + */ + REMOVE = 'REMOVE', +} + +export interface IXGitLabNamespace { + __typename: '_xGitLabNamespace'; + + /** + * Size limit for repositories in the namespace in bytes. + */ + actualRepositorySizeLimit: number | null; + + /** + * Additional storage purchased for the root namespace in bytes. + */ + additionalPurchasedStorageSize: number | null; + + /** + * Compliance frameworks available to projects in this namespace. + */ + complianceFrameworks: IXGitLabComplianceFrameworkConnection | null; + + /** + * Includes at least one project where the repository size exceeds the limit. + */ + containsLockedProjects: boolean; + + /** + * Description of the namespace. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Full name of the namespace. + */ + fullName: string; + + /** + * Full path of the namespace. + */ + fullPath: string; + + /** + * ID of the namespace. + */ + id: string; + + /** + * Status of the temporary storage increase. + */ + isTemporaryStorageIncreaseEnabled: boolean; + + /** + * Indicates if Large File Storage (LFS) is enabled for namespace. + */ + lfsEnabled: boolean | null; + + /** + * Name of the namespace. + */ + name: string; + + /** + * Package settings for the namespace. + */ + packageSettings: IXGitLabPackageSettings | null; + + /** + * Path of the namespace. + */ + path: string; + + /** + * Projects within this namespace. + */ + projects: IXGitLabProjectConnection; + + /** + * Number of projects in the root namespace where the repository size exceeds the limit. + */ + repositorySizeExcessProjectCount: number; + + /** + * Indicates if users can request access to namespace. + */ + requestAccessEnabled: boolean | null; + + /** + * Aggregated storage statistics of the namespace. Only available for root namespaces. + */ + rootStorageStatistics: IXGitLabRootStorageStatistics | null; + + /** + * Shared runners availability for the namespace and its descendants. + */ + sharedRunnersSetting: XGitLabSharedRunnersSetting | null; + + /** + * Total storage limit of the root namespace in bytes. + */ + storageSizeLimit: number | null; + + /** + * Date until the temporary storage increase is active. + */ + temporaryStorageIncreaseEndsOn: any | null; + + /** + * Total repository size of all projects in the root namespace in bytes. + */ + totalRepositorySize: number | null; + + /** + * Total excess repository size of all projects in the root namespace in bytes. + */ + totalRepositorySizeExcess: number | null; + + /** + * Visibility of the namespace. + */ + visibility: string | null; +} + +export interface IComplianceFrameworksOnXGitLabNamespaceArguments { + /** + * Global ID of a specific compliance framework to return. + */ + id?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectsOnXGitLabNamespaceArguments { + /** + * Include also subgroup projects. + * @default false + */ + includeSubgroups?: boolean | null; + + /** + * Search project with most similar names or paths. + * @default null + */ + search?: string | null; + + /** + * Sort projects by this criteria. + * @default null + */ + sort?: XGitLabNamespaceProjectSort | null; + + /** + * Filter projects by IDs. + * @default null + */ + ids?: Array | null; + + /** + * Returns only the projects which have code coverage. + * @default false + */ + hasCodeCoverage?: boolean | null; + + /** + * Returns only the projects which have vulnerabilities. + * @default false + */ + hasVulnerabilities?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for Namespace. + */ +export interface IXGitLabNamespaceConnection { + __typename: '_xGitLabNamespaceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabNamespaceEdge { + __typename: '_xGitLabNamespaceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabNamespace | null; +} + +/** + * Autogenerated input type of NamespaceIncreaseStorageTemporarily + */ +export interface IXGitLabNamespaceIncreaseStorageTemporarilyInput { + /** + * Global ID of the namespace to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of NamespaceIncreaseStorageTemporarily + */ +export interface IXGitLabNamespaceIncreaseStorageTemporarilyPayload { + __typename: '_xGitLabNamespaceIncreaseStorageTemporarilyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Namespace after mutation. + */ + namespace: IXGitLabNamespace | null; +} + +/** + * Values for sorting projects + */ +export const enum XGitLabNamespaceProjectSort { + /** + * Most similar to the search query. + */ + SIMILARITY = 'SIMILARITY', + + /** + * Sort by storage size. + */ + STORAGE = 'STORAGE', +} + +export interface IXGitLabNegatedBoardIssueInput { + /** + * Filter by label name. + */ + labelName?: Array | null; + + /** + * Filter by author username. + */ + authorUsername?: string | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * List of IIDs of issues. For example `["1", "2"]`. + */ + iids?: Array | null; + + /** + * Filter by milestone title. + */ + milestoneTitle?: string | null; + + /** + * Filter by assignee username. + */ + assigneeUsername?: Array | null; + + /** + * Filter by release tag. + */ + releaseTag?: string | null; + + /** + * Filter by the given issue types. + */ + types?: Array | null; + + /** + * Filter by milestone ID wildcard. + */ + milestoneWildcardId?: XGitLabMilestoneWildcardId | null; + + /** + * Filter by epic ID. Incompatible with epicWildcardId. + */ + epicId?: any | null; + + /** + * Filter by iteration title. + */ + iterationTitle?: string | null; + + /** + * Filter by weight. + */ + weight?: string | null; + + /** + * Filter by a list of iteration IDs. Incompatible with iterationWildcardId. + */ + iterationId?: Array | null; + + /** + * Filter by iteration ID wildcard. + */ + iterationWildcardId?: XGitLabNegatedIterationWildcardId | null; +} + +export interface IXGitLabNegatedEpicBoardIssueInput { + /** + * Filter by label name. + */ + labelName?: Array | null; + + /** + * Filter by author username. + */ + authorUsername?: string | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; +} + +export interface IXGitLabNegatedEpicFilterInput { + /** + * Filter by label name. + */ + labelName?: Array | null; + + /** + * Filter by author username. + */ + authorUsername?: string | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; +} + +export interface IXGitLabNegatedIssueFilterInput { + /** + * List of IIDs of issues to exclude. For example, `[1, 2]`. + */ + iids?: Array | null; + + /** + * Labels not applied to this issue. + */ + labelName?: Array | null; + + /** + * Milestone not applied to this issue. + */ + milestoneTitle?: Array | null; + + /** + * Release tag not associated with the issue's milestone. Ignored when parent is a group. + */ + releaseTag?: Array | null; + + /** + * Username of a user who didn't author the issue. + */ + authorUsername?: string | null; + + /** + * Usernames of users not assigned to the issue. + */ + assigneeUsernames?: Array | null; + + /** + * ID of a user not assigned to the issues. + */ + assigneeId?: string | null; + + /** + * Filter by negated milestone wildcard values. + */ + milestoneWildcardId?: XGitLabNegatedMilestoneWildcardId | null; + + /** + * Filter by reaction emoji applied by the current user. + */ + myReactionEmoji?: string | null; + + /** + * Filters out issues by the given issue types. + */ + types?: Array | null; + + /** + * ID of an epic not associated with the issues. + */ + epicId?: string | null; + + /** + * Weight not applied to the issue. + */ + weight?: string | null; + + /** + * List of iteration Global IDs not applied to the issue. + */ + iterationId?: Array | null; + + /** + * Filter by negated iteration ID wildcard. + */ + iterationWildcardId?: XGitLabIterationWildcardId | null; +} + +/** + * Negated Iteration ID wildcard values + */ +export const enum XGitLabNegatedIterationWildcardId { + /** + * Current iteration. + */ + CURRENT = 'CURRENT', +} + +/** + * Negated Milestone ID wildcard values + */ +export const enum XGitLabNegatedMilestoneWildcardId { + /** + * Milestone assigned is open and yet to be started (start date > today). + */ + STARTED = 'STARTED', + + /** + * Milestone assigned is open but due in the past (due date <= today). + */ + UPCOMING = 'UPCOMING', +} + +/** + * Represents the network policy + */ +export interface IXGitLabNetworkPolicy { + __typename: '_xGitLabNetworkPolicy'; + + /** + * Indicates whether this policy is enabled. + */ + enabled: boolean; + + /** + * Environments where this policy is applied. + */ + environments: IXGitLabEnvironmentConnection | null; + + /** + * Indicates whether this policy is created from AutoDevops. + */ + fromAutoDevops: boolean; + + /** + * Kind of the policy. + */ + kind: XGitLabNetworkPolicyKind; + + /** + * Name of the policy. + */ + name: string; + + /** + * Namespace of the policy. + */ + namespace: string; + + /** + * Timestamp of when the policy YAML was last updated. + */ + updatedAt: any; + + /** + * YAML definition of the policy. + */ + yaml: string; +} + +export interface IEnvironmentsOnXGitLabNetworkPolicyArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for NetworkPolicy. + */ +export interface IXGitLabNetworkPolicyConnection { + __typename: '_xGitLabNetworkPolicyConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabNetworkPolicyEdge { + __typename: '_xGitLabNetworkPolicyEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabNetworkPolicy | null; +} + +/** + * Kind of the network policy + */ +export const enum XGitLabNetworkPolicyKind { + /** + * Policy kind of Cilium Network Policy. + */ + CiliumNetworkPolicy = 'CiliumNetworkPolicy', + + /** + * Policy kind of Network Policy. + */ + NetworkPolicy = 'NetworkPolicy', +} + +export interface IXGitLabNote { + __typename: '_xGitLabNote'; + + /** + * User who wrote this note. + */ + author: IXGitLabUserCore; + + /** + * Content of the note. + */ + body: string; + + /** + * The GitLab Flavored Markdown rendering of `note` + */ + bodyHtml: string | null; + + /** + * Indicates if this note is confidential. + */ + confidential: boolean | null; + + /** + * Timestamp of the note creation. + */ + createdAt: any; + + /** + * Discussion this note is a part of. + */ + discussion: IXGitLabDiscussion | null; + + /** + * ID of the note. + */ + id: any; + + /** + * Position of this note on a diff. + */ + position: IXGitLabDiffPosition | null; + + /** + * Project associated with the note. + */ + project: IXGitLabProject | null; + + /** + * Indicates if the object can be resolved. + */ + resolvable: boolean; + + /** + * Indicates if the object is resolved. + */ + resolved: boolean; + + /** + * Timestamp of when the object was resolved. + */ + resolvedAt: any | null; + + /** + * User who resolved the object. + */ + resolvedBy: IXGitLabUserCore | null; + + /** + * Indicates whether this note was created by the system or by a user. + */ + system: boolean; + + /** + * Name of the icon corresponding to a system note. + */ + systemNoteIconName: string | null; + + /** + * Timestamp of the note's last activity. + */ + updatedAt: any; + + /** + * URL to view this Note in the Web UI. + */ + url: string | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabNotePermissions; +} + +export type _xGitLabNoteableInterface = + | IXGitLabAlertManagementAlert + | IXGitLabBoardEpic + | IXGitLabDesign + | IXGitLabEpic + | IXGitLabEpicIssue + | IXGitLabIssue + | IXGitLabMergeRequest + | IXGitLabSnippet + | IXGitLabVulnerability; + +export interface IXGitLabNoteableInterface { + __typename: '_xGitLabNoteableInterface'; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; +} + +export interface IDiscussionsOnXGitLabNoteableInterfaceArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabNoteableInterfaceArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Represents an object that supports notes. + */ +export type _xGitLabNoteableType = + | IXGitLabDesign + | IXGitLabIssue + | IXGitLabMergeRequest; + +/** + * The connection type for Note. + */ +export interface IXGitLabNoteConnection { + __typename: '_xGitLabNoteConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabNoteEdge { + __typename: '_xGitLabNoteEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabNote | null; +} + +export interface IXGitLabNotePermissions { + __typename: '_xGitLabNotePermissions'; + + /** + * Indicates the user can perform `admin_note` on this resource + */ + adminNote: boolean; + + /** + * Indicates the user can perform `award_emoji` on this resource + */ + awardEmoji: boolean; + + /** + * Indicates the user can perform `create_note` on this resource + */ + createNote: boolean; + + /** + * Indicates the user can perform `read_note` on this resource + */ + readNote: boolean; + + /** + * Indicates the user can perform `reposition_note` on this resource + */ + repositionNote: boolean; + + /** + * Indicates the user can perform `resolve_note` on this resource + */ + resolveNote: boolean; +} + +/** + * Nuget dependency link metadata + */ +export interface IXGitLabNugetDependencyLinkMetadata { + __typename: '_xGitLabNugetDependencyLinkMetadata'; + + /** + * ID of the metadatum. + */ + id: any; + + /** + * Target framework of the dependency link package. + */ + targetFramework: string; +} + +/** + * Nuget metadata + */ +export interface IXGitLabNugetMetadata { + __typename: '_xGitLabNugetMetadata'; + + /** + * Icon URL of the Nuget package. + */ + iconUrl: string | null; + + /** + * ID of the metadatum. + */ + id: any; + + /** + * License URL of the Nuget package. + */ + licenseUrl: string | null; + + /** + * Project URL of the Nuget package. + */ + projectUrl: string | null; +} + +/** + * The rotation participant and color palette + */ +export interface IXGitLabOncallParticipantType { + __typename: '_xGitLabOncallParticipantType'; + + /** + * Color palette to assign to the on-call user. For example "blue". + */ + colorPalette: string | null; + + /** + * Color weight to assign to for the on-call user, for example "500". Max 4 chars. For easy identification of the user. + */ + colorWeight: string | null; + + /** + * ID of the on-call participant. + */ + id: any; + + /** + * User who is participating. + */ + user: IXGitLabUserCore; +} + +/** + * The connection type for OncallParticipantType. + */ +export interface IXGitLabOncallParticipantTypeConnection { + __typename: '_xGitLabOncallParticipantTypeConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabOncallParticipantTypeEdge { + __typename: '_xGitLabOncallParticipantTypeEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabOncallParticipantType | null; +} + +/** + * Active period time range for on-call rotation + */ +export interface IXGitLabOncallRotationActivePeriodInputType { + /** + * Start of the rotation active period in 24 hour format. For example, "18:30". + */ + startTime: string; + + /** + * End of the rotation active period in 24 hour format. For example, "18:30". + */ + endTime: string; +} + +/** + * Active period time range for on-call rotation + */ +export interface IXGitLabOncallRotationActivePeriodType { + __typename: '_xGitLabOncallRotationActivePeriodType'; + + /** + * End of the rotation active period. + */ + endTime: string | null; + + /** + * Start of the rotation active period. + */ + startTime: string | null; +} + +/** + * Autogenerated input type of OncallRotationCreate + */ +export interface IXGitLabOncallRotationCreateInput { + /** + * Project to create the on-call schedule in. + */ + projectPath: string; + + /** + * IID of the on-call schedule to create the on-call rotation in. + */ + scheduleIid: string; + + /** + * Name of the on-call rotation. + */ + name: string; + + /** + * Start date and time of the on-call rotation, in the timezone of the on-call schedule. + */ + startsAt: IXGitLabOncallRotationDateInputType; + + /** + * End date and time of the on-call rotation, in the timezone of the on-call schedule. + */ + endsAt?: IXGitLabOncallRotationDateInputType | null; + + /** + * Rotation length of the on-call rotation. + */ + rotationLength: IXGitLabOncallRotationLengthInputType; + + /** + * Active period of time that the on-call rotation should take place. + */ + activePeriod?: IXGitLabOncallRotationActivePeriodInputType | null; + + /** + * Usernames of users participating in the on-call rotation. A maximum limit of 100 participants applies. + */ + participants: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of OncallRotationCreate + */ +export interface IXGitLabOncallRotationCreatePayload { + __typename: '_xGitLabOncallRotationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * On-call rotation. + */ + oncallRotation: IXGitLabIncidentManagementOncallRotation | null; +} + +/** + * Date input type for on-call rotation + */ +export interface IXGitLabOncallRotationDateInputType { + /** + * Date component of the date in YYYY-MM-DD format. + */ + date: string; + + /** + * Time component of the date in 24hr HH:MM format. + */ + time: string; +} + +/** + * Autogenerated input type of OncallRotationDestroy + */ +export interface IXGitLabOncallRotationDestroyInput { + /** + * Project to remove the on-call schedule from. + */ + projectPath: string; + + /** + * IID of the on-call schedule to the on-call rotation belongs to. + */ + scheduleIid: string; + + /** + * ID of the on-call rotation to remove. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of OncallRotationDestroy + */ +export interface IXGitLabOncallRotationDestroyPayload { + __typename: '_xGitLabOncallRotationDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * On-call rotation. + */ + oncallRotation: IXGitLabIncidentManagementOncallRotation | null; +} + +/** + * The rotation length of the on-call rotation + */ +export interface IXGitLabOncallRotationLengthInputType { + /** + * Rotation length of the on-call rotation. + */ + length: number; + + /** + * Unit of the rotation length of the on-call rotation. + */ + unit: XGitLabOncallRotationUnitEnum; +} + +/** + * Rotation length unit of an on-call rotation + */ +export const enum XGitLabOncallRotationUnitEnum { + /** + * Hours + */ + HOURS = 'HOURS', + + /** + * Days + */ + DAYS = 'DAYS', + + /** + * Weeks + */ + WEEKS = 'WEEKS', +} + +/** + * Autogenerated input type of OncallRotationUpdate + */ +export interface IXGitLabOncallRotationUpdateInput { + /** + * ID of the on-call schedule to create the on-call rotation in. + */ + id: any; + + /** + * Name of the on-call rotation. + */ + name?: string | null; + + /** + * Start date and time of the on-call rotation, in the timezone of the on-call schedule. + */ + startsAt?: IXGitLabOncallRotationDateInputType | null; + + /** + * End date and time of the on-call rotation, in the timezone of the on-call schedule. + */ + endsAt?: IXGitLabOncallRotationDateInputType | null; + + /** + * Rotation length of the on-call rotation. + */ + rotationLength?: IXGitLabOncallRotationLengthInputType | null; + + /** + * Active period of time that the on-call rotation should take place. + */ + activePeriod?: IXGitLabOncallRotationActivePeriodInputType | null; + + /** + * Usernames of users participating in the on-call rotation. A maximum limit of 100 participants applies. + */ + participants?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of OncallRotationUpdate + */ +export interface IXGitLabOncallRotationUpdatePayload { + __typename: '_xGitLabOncallRotationUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * On-call rotation. + */ + oncallRotation: IXGitLabIncidentManagementOncallRotation | null; +} + +/** + * Autogenerated input type of OncallScheduleCreate + */ +export interface IXGitLabOncallScheduleCreateInput { + /** + * Project to create the on-call schedule in. + */ + projectPath: string; + + /** + * Name of the on-call schedule. + */ + name: string; + + /** + * Description of the on-call schedule. + */ + description?: string | null; + + /** + * Timezone of the on-call schedule. + */ + timezone: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of OncallScheduleCreate + */ +export interface IXGitLabOncallScheduleCreatePayload { + __typename: '_xGitLabOncallScheduleCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * On-call schedule. + */ + oncallSchedule: IXGitLabIncidentManagementOncallSchedule | null; +} + +/** + * Autogenerated input type of OncallScheduleDestroy + */ +export interface IXGitLabOncallScheduleDestroyInput { + /** + * Project to remove the on-call schedule from. + */ + projectPath: string; + + /** + * On-call schedule internal ID to remove. + */ + iid: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of OncallScheduleDestroy + */ +export interface IXGitLabOncallScheduleDestroyPayload { + __typename: '_xGitLabOncallScheduleDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * On-call schedule. + */ + oncallSchedule: IXGitLabIncidentManagementOncallSchedule | null; +} + +/** + * Autogenerated input type of OncallScheduleUpdate + */ +export interface IXGitLabOncallScheduleUpdateInput { + /** + * Project to update the on-call schedule in. + */ + projectPath: string; + + /** + * On-call schedule internal ID to update. + */ + iid: string; + + /** + * Name of the on-call schedule. + */ + name?: string | null; + + /** + * Description of the on-call schedule. + */ + description?: string | null; + + /** + * Timezone of the on-call schedule. + */ + timezone?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of OncallScheduleUpdate + */ +export interface IXGitLabOncallScheduleUpdatePayload { + __typename: '_xGitLabOncallScheduleUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * On-call schedule. + */ + oncallSchedule: IXGitLabIncidentManagementOncallSchedule | null; +} + +/** + * The rotation user and color palette + */ +export interface IXGitLabOncallUserInputType { + /** + * Username of the user to participate in the on-call rotation. For example, `"user_one"`. + */ + username: string; + + /** + * Value of DataVisualizationColorEnum. The color from the palette to assign to the on-call user. + */ + colorPalette?: XGitLabDataVisualizationColorEnum | null; + + /** + * Color weight to assign to for the on-call user. To view on-call schedules in + * GitLab, do not provide a value below 500. A value between 500 and 950 ensures + * sufficient contrast. + */ + colorWeight?: XGitLabDataVisualizationWeightEnum | null; +} + +/** + * Represents a package in the Package Registry. Note that this type is in beta and susceptible to changes + */ +export interface IXGitLabPackage { + __typename: '_xGitLabPackage'; + + /** + * Whether the user can destroy the package. + */ + canDestroy: boolean; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * ID of the package. + */ + id: any; + + /** + * Package metadata. + */ + metadata: _xGitLabPackageMetadata | null; + + /** + * Name of the package. + */ + name: string; + + /** + * Package type. + */ + packageType: XGitLabPackageTypeEnum; + + /** + * Pipelines that built the package. + */ + pipelines: IXGitLabPipelineConnection | null; + + /** + * Project where the package is stored. + */ + project: IXGitLabProject; + + /** + * Package status. + */ + status: XGitLabPackageStatus; + + /** + * Package tags. + */ + tags: IXGitLabPackageTagConnection | null; + + /** + * Date of most recent update. + */ + updatedAt: any; + + /** + * Version string. + */ + version: string | null; + + /** + * Other versions of the package. Deprecated in 13.11: This field is now only returned in the PackageDetailsType. + * @deprecated "This field is now only returned in the PackageDetailsType. Deprecated in 13.11." + */ + versions: IXGitLabPackageConnection | null; +} + +export interface IPipelinesOnXGitLabPackageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITagsOnXGitLabPackageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVersionsOnXGitLabPackageArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Represents a composer JSON file + */ +export interface IXGitLabPackageComposerJsonType { + __typename: '_xGitLabPackageComposerJsonType'; + + /** + * License set in the Composer JSON file. + */ + license: string | null; + + /** + * Name set in the Composer JSON file. + */ + name: string | null; + + /** + * Type set in the Composer JSON file. + */ + type: string | null; + + /** + * Version set in the Composer JSON file. + */ + version: string | null; +} + +/** + * The connection type for Package. + */ +export interface IXGitLabPackageConnection { + __typename: '_xGitLabPackageConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Represents a package dependency. + */ +export interface IXGitLabPackageDependency { + __typename: '_xGitLabPackageDependency'; + + /** + * ID of the dependency. + */ + id: any; + + /** + * Name of the dependency. + */ + name: string; + + /** + * Version pattern of the dependency. + */ + versionPattern: string; +} + +/** + * Represents a package dependency link + */ +export interface IXGitLabPackageDependencyLink { + __typename: '_xGitLabPackageDependencyLink'; + + /** + * Dependency. + */ + dependency: IXGitLabPackageDependency | null; + + /** + * Dependency type. + */ + dependencyType: XGitLabPackageDependencyType; + + /** + * ID of the dependency link. + */ + id: any; + + /** + * Dependency link metadata. + */ + metadata: _xGitLabDependencyLinkMetadata | null; +} + +/** + * The connection type for PackageDependencyLink. + */ +export interface IXGitLabPackageDependencyLinkConnection { + __typename: '_xGitLabPackageDependencyLinkConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPackageDependencyLinkEdge { + __typename: '_xGitLabPackageDependencyLinkEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPackageDependencyLink | null; +} + +export const enum XGitLabPackageDependencyType { + /** + * dependencies dependency type + */ + DEPENDENCIES = 'DEPENDENCIES', + + /** + * devDependencies dependency type + */ + DEV_DEPENDENCIES = 'DEV_DEPENDENCIES', + + /** + * bundleDependencies dependency type + */ + BUNDLE_DEPENDENCIES = 'BUNDLE_DEPENDENCIES', + + /** + * peerDependencies dependency type + */ + PEER_DEPENDENCIES = 'PEER_DEPENDENCIES', +} + +/** + * Represents a package details in the Package Registry. Note that this type is in beta and susceptible to changes + */ +export interface IXGitLabPackageDetailsType { + __typename: '_xGitLabPackageDetailsType'; + + /** + * Whether the user can destroy the package. + */ + canDestroy: boolean; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * Dependency link. + */ + dependencyLinks: IXGitLabPackageDependencyLinkConnection | null; + + /** + * ID of the package. + */ + id: any; + + /** + * Package metadata. + */ + metadata: _xGitLabPackageMetadata | null; + + /** + * Name of the package. + */ + name: string; + + /** + * Package files. + */ + packageFiles: IXGitLabPackageFileConnection | null; + + /** + * Package type. + */ + packageType: XGitLabPackageTypeEnum; + + /** + * Pipelines that built the package. + */ + pipelines: IXGitLabPipelineConnection | null; + + /** + * Project where the package is stored. + */ + project: IXGitLabProject; + + /** + * Package status. + */ + status: XGitLabPackageStatus; + + /** + * Package tags. + */ + tags: IXGitLabPackageTagConnection | null; + + /** + * Date of most recent update. + */ + updatedAt: any; + + /** + * Version string. + */ + version: string | null; + + /** + * Other versions of the package. + */ + versions: IXGitLabPackageConnection | null; +} + +export interface IDependencyLinksOnXGitLabPackageDetailsTypeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPackageFilesOnXGitLabPackageDetailsTypeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPipelinesOnXGitLabPackageDetailsTypeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITagsOnXGitLabPackageDetailsTypeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVersionsOnXGitLabPackageDetailsTypeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPackageEdge { + __typename: '_xGitLabPackageEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPackage | null; +} + +/** + * Represents a package file + */ +export interface IXGitLabPackageFile { + __typename: '_xGitLabPackageFile'; + + /** + * Created date. + */ + createdAt: any; + + /** + * Download path of the package file. + */ + downloadPath: string; + + /** + * Md5 of the package file. + */ + fileMd5: string | null; + + /** + * File metadata. + */ + fileMetadata: _xGitLabPackageFileMetadata | null; + + /** + * Name of the package file. + */ + fileName: string; + + /** + * Sha1 of the package file. + */ + fileSha1: string | null; + + /** + * Sha256 of the package file. + */ + fileSha256: string | null; + + /** + * ID of the file. + */ + id: any; + + /** + * Size of the package file. + */ + size: string; + + /** + * Updated date. + */ + updatedAt: any; +} + +/** + * The connection type for PackageFile. + */ +export interface IXGitLabPackageFileConnection { + __typename: '_xGitLabPackageFileConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPackageFileEdge { + __typename: '_xGitLabPackageFileEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPackageFile | null; +} + +/** + * Represents metadata associated with a Package file + */ +export type _xGitLabPackageFileMetadata = IXGitLabConanFileMetadata; + +/** + * Represents metadata associated with a Package file + */ +export interface IXGitLabPackageFileMetadata { + __typename: '_xGitLabPackageFileMetadata'; + + /** + * Date of creation. + */ + createdAt: any; + + /** + * Date of most recent update. + */ + updatedAt: any; +} + +/** + * Represents the Geo sync and verification state of a package file + */ +export interface IXGitLabPackageFileRegistry { + __typename: '_xGitLabPackageFileRegistry'; + + /** + * Timestamp when the PackageFileRegistry was created + */ + createdAt: any | null; + + /** + * ID of the PackageFileRegistry + */ + id: string; + + /** + * Error message during sync of the PackageFileRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the PackageFileRegistry + */ + lastSyncedAt: any | null; + + /** + * ID of the PackageFile. + */ + packageFileId: string; + + /** + * Timestamp after which the PackageFileRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the PackageFileRegistry + */ + retryCount: number | null; + + /** + * Sync state of the PackageFileRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for PackageFileRegistry. + */ +export interface IXGitLabPackageFileRegistryConnection { + __typename: '_xGitLabPackageFileRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPackageFileRegistryEdge { + __typename: '_xGitLabPackageFileRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPackageFileRegistry | null; +} + +/** + * Values for sorting group packages + */ +export const enum XGitLabPackageGroupSort { + /** + * Ordered by created_at in descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Ordered by created_at in ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Ordered by name in descending order. + */ + NAME_DESC = 'NAME_DESC', + + /** + * Ordered by name in ascending order. + */ + NAME_ASC = 'NAME_ASC', + + /** + * Ordered by version in descending order. + */ + VERSION_DESC = 'VERSION_DESC', + + /** + * Ordered by version in ascending order. + */ + VERSION_ASC = 'VERSION_ASC', + + /** + * Ordered by type in descending order. + */ + TYPE_DESC = 'TYPE_DESC', + + /** + * Ordered by type in ascending order. + */ + TYPE_ASC = 'TYPE_ASC', + + /** + * Ordered by project path in descending order. + */ + PROJECT_PATH_DESC = 'PROJECT_PATH_DESC', + + /** + * Ordered by project path in ascending order. + */ + PROJECT_PATH_ASC = 'PROJECT_PATH_ASC', +} + +/** + * Represents metadata associated with a Package + */ +export type _xGitLabPackageMetadata = + | IXGitLabComposerMetadata + | IXGitLabConanMetadata + | IXGitLabMavenMetadata + | IXGitLabNugetMetadata + | IXGitLabPypiMetadata; + +/** + * Namespace-level Package Registry settings + */ +export interface IXGitLabPackageSettings { + __typename: '_xGitLabPackageSettings'; + + /** + * When generic_duplicates_allowed is false, you can publish duplicate packages + * with names that match this regex. Otherwise, this setting has no effect. + */ + genericDuplicateExceptionRegex: any | null; + + /** + * Indicates whether duplicate generic packages are allowed for this namespace. + */ + genericDuplicatesAllowed: boolean; + + /** + * When maven_duplicates_allowed is false, you can publish duplicate packages + * with names that match this regex. Otherwise, this setting has no effect. + */ + mavenDuplicateExceptionRegex: any | null; + + /** + * Indicates whether duplicate Maven packages are allowed for this namespace. + */ + mavenDuplicatesAllowed: boolean; +} + +/** + * Values for sorting package + */ +export const enum XGitLabPackageSort { + /** + * Ordered by created_at in descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Ordered by created_at in ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Ordered by name in descending order. + */ + NAME_DESC = 'NAME_DESC', + + /** + * Ordered by name in ascending order. + */ + NAME_ASC = 'NAME_ASC', + + /** + * Ordered by version in descending order. + */ + VERSION_DESC = 'VERSION_DESC', + + /** + * Ordered by version in ascending order. + */ + VERSION_ASC = 'VERSION_ASC', + + /** + * Ordered by type in descending order. + */ + TYPE_DESC = 'TYPE_DESC', + + /** + * Ordered by type in ascending order. + */ + TYPE_ASC = 'TYPE_ASC', +} + +export const enum XGitLabPackageStatus { + /** + * Packages with a default status + */ + DEFAULT = 'DEFAULT', + + /** + * Packages with a hidden status + */ + HIDDEN = 'HIDDEN', + + /** + * Packages with a processing status + */ + PROCESSING = 'PROCESSING', + + /** + * Packages with a error status + */ + ERROR = 'ERROR', +} + +/** + * Represents a package tag + */ +export interface IXGitLabPackageTag { + __typename: '_xGitLabPackageTag'; + + /** + * Created date. + */ + createdAt: any; + + /** + * ID of the tag. + */ + id: string; + + /** + * Name of the tag. + */ + name: string; + + /** + * Updated date. + */ + updatedAt: any; +} + +/** + * The connection type for PackageTag. + */ +export interface IXGitLabPackageTagConnection { + __typename: '_xGitLabPackageTagConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPackageTagEdge { + __typename: '_xGitLabPackageTagEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPackageTag | null; +} + +export const enum XGitLabPackageTypeEnum { + /** + * Packages from the Maven package manager + */ + MAVEN = 'MAVEN', + + /** + * Packages from the npm package manager + */ + NPM = 'NPM', + + /** + * Packages from the Conan package manager + */ + CONAN = 'CONAN', + + /** + * Packages from the Nuget package manager + */ + NUGET = 'NUGET', + + /** + * Packages from the PyPI package manager + */ + PYPI = 'PYPI', + + /** + * Packages from the Composer package manager + */ + COMPOSER = 'COMPOSER', + + /** + * Packages from the Generic package manager + */ + GENERIC = 'GENERIC', + + /** + * Packages from the Golang package manager + */ + GOLANG = 'GOLANG', + + /** + * Packages from the Debian package manager + */ + DEBIAN = 'DEBIAN', + + /** + * Packages from the Rubygems package manager + */ + RUBYGEMS = 'RUBYGEMS', + + /** + * Packages from the Helm package manager + */ + HELM = 'HELM', + + /** + * Packages from the Terraform Module package manager + */ + TERRAFORM_MODULE = 'TERRAFORM_MODULE', +} + +/** + * Information about pagination in a connection. + */ +export interface IXGitLabPageInfo { + __typename: '_xGitLabPageInfo'; + + /** + * When paginating forwards, the cursor to continue. + */ + endCursor: string | null; + + /** + * When paginating forwards, are there more items? + */ + hasNextPage: boolean; + + /** + * When paginating backwards, are there more items? + */ + hasPreviousPage: boolean; + + /** + * When paginating backwards, the cursor to continue. + */ + startCursor: string | null; +} + +/** + * Represents the Geo replication and verification state of a pages_deployment + */ +export interface IXGitLabPagesDeploymentRegistry { + __typename: '_xGitLabPagesDeploymentRegistry'; + + /** + * Timestamp when the PagesDeploymentRegistry was created + */ + createdAt: any | null; + + /** + * ID of the PagesDeploymentRegistry + */ + id: string; + + /** + * Error message during sync of the PagesDeploymentRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the PagesDeploymentRegistry + */ + lastSyncedAt: any | null; + + /** + * ID of the Pages Deployment. + */ + pagesDeploymentId: string; + + /** + * Timestamp after which the PagesDeploymentRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the PagesDeploymentRegistry + */ + retryCount: number | null; + + /** + * Sync state of the PagesDeploymentRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for PagesDeploymentRegistry. + */ +export interface IXGitLabPagesDeploymentRegistryConnection { + __typename: '_xGitLabPagesDeploymentRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPagesDeploymentRegistryEdge { + __typename: '_xGitLabPagesDeploymentRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPagesDeploymentRegistry | null; +} + +/** + * Represents a file or directory in the project repository that has been locked. + */ +export interface IXGitLabPathLock { + __typename: '_xGitLabPathLock'; + + /** + * ID of the path lock. + */ + id: any; + + /** + * Locked path. + */ + path: string | null; + + /** + * User that has locked this path. + */ + user: IXGitLabUserCore | null; +} + +/** + * The connection type for PathLock. + */ +export interface IXGitLabPathLockConnection { + __typename: '_xGitLabPathLockConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPathLockEdge { + __typename: '_xGitLabPathLockEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPathLock | null; +} + +export interface IXGitLabPipeline { + __typename: '_xGitLabPipeline'; + + /** + * Indicates if the pipeline is active. + */ + active: boolean; + + /** + * Base SHA of the source branch. + */ + beforeSha: string | null; + + /** + * Specifies if a pipeline can be canceled. + */ + cancelable: boolean; + + /** + * Code Quality degradations reported on the pipeline. + */ + codeQualityReports: IXGitLabCodeQualityDegradationConnection | null; + + /** + * Path to the commit that triggered the pipeline. + */ + commitPath: string | null; + + /** + * Timestamp of the pipeline's commit. + */ + committedAt: any | null; + + /** + * Indicates if a pipeline is complete. + */ + complete: boolean; + + /** + * Configuration source of the pipeline (UNKNOWN_SOURCE, REPOSITORY_SOURCE, + * AUTO_DEVOPS_SOURCE, WEBIDE_SOURCE, REMOTE_SOURCE, EXTERNAL_PROJECT_SOURCE, + * BRIDGE_SOURCE, PARAMETER_SOURCE, COMPLIANCE_SOURCE) + */ + configSource: XGitLabPipelineConfigSourceEnum | null; + + /** + * Coverage percentage. + */ + coverage: number | null; + + /** + * Timestamp of the pipeline's creation. + */ + createdAt: any; + + /** + * DAST profile associated with the pipeline. Returns `null`if `dast_view_scans` feature flag is disabled. + */ + dastProfile: IXGitLabDastProfile | null; + + /** + * Detailed status of the pipeline. + */ + detailedStatus: IXGitLabDetailedStatus; + + /** + * Pipelines this pipeline will trigger. + */ + downstream: IXGitLabPipelineConnection | null; + + /** + * Duration of the pipeline in seconds. + */ + duration: number | null; + + /** + * Timestamp of the pipeline's completion. + */ + finishedAt: any | null; + + /** + * ID of the pipeline. + */ + id: string; + + /** + * Internal ID of the pipeline. + */ + iid: string; + + /** + * Specific job in this pipeline, either by name or ID. + */ + job: IXGitLabCiJob | null; + + /** + * Jobs belonging to the pipeline. + */ + jobs: IXGitLabCiJobConnection | null; + + /** + * Relative path to the pipeline's page. + */ + path: string | null; + + /** + * Project the pipeline belongs to. + */ + project: IXGitLabProject | null; + + /** + * How long the pipeline was queued before starting. + */ + queuedDuration: any | null; + + /** + * Reference to the branch from which the pipeline was triggered. + */ + ref: string | null; + + /** + * Specifies if a pipeline can be retried. + */ + retryable: boolean; + + /** + * Vulnerability findings reported on the pipeline. + */ + securityReportFindings: IXGitLabPipelineSecurityReportFindingConnection | null; + + /** + * Vulnerability and scanned resource counts for each security scanner of the pipeline. + */ + securityReportSummary: IXGitLabSecurityReportSummary | null; + + /** + * SHA of the pipeline's commit. + */ + sha: string; + + /** + * Job where pipeline was triggered from. + */ + sourceJob: IXGitLabCiJob | null; + + /** + * Stages of the pipeline. + */ + stages: IXGitLabCiStageConnection | null; + + /** + * Timestamp when the pipeline was started. + */ + startedAt: any | null; + + /** + * Status of the pipeline (CREATED, WAITING_FOR_RESOURCE, PREPARING, PENDING, + * RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED) + */ + status: XGitLabPipelineStatusEnum; + + /** + * Summary of the test report generated by the pipeline. + */ + testReportSummary: IXGitLabTestReportSummary; + + /** + * A specific test suite in a pipeline test report. + */ + testSuite: IXGitLabTestSuite | null; + + /** + * Timestamp of the pipeline's last activity. + */ + updatedAt: any; + + /** + * Pipeline that triggered the pipeline. + */ + upstream: IXGitLabPipeline | null; + + /** + * Pipeline user. + */ + user: IXGitLabUserCore | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabPipelinePermissions; + + /** + * Indicates if the pipeline has jobs with `needs` dependencies. + */ + usesNeeds: boolean | null; + + /** + * Indicates if a pipeline has warnings. + */ + warnings: boolean; +} + +export interface ICodeQualityReportsOnXGitLabPipelineArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDownstreamOnXGitLabPipelineArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IJobOnXGitLabPipelineArguments { + /** + * ID of the job. + */ + id?: any | null; + + /** + * Name of the job. + */ + name?: string | null; +} + +export interface IJobsOnXGitLabPipelineArguments { + /** + * Filter jobs by the type of security report they produce. + */ + securityReportTypes?: Array | null; + + /** + * Filter jobs by status. + */ + statuses?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISecurityReportFindingsOnXGitLabPipelineArguments { + /** + * Filter vulnerability findings by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerability findings by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerability findings by Scanner.externalId. + */ + scanner?: Array | null; + + /** + * Filter vulnerability findings by state. + */ + state?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IStagesOnXGitLabPipelineArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITestSuiteOnXGitLabPipelineArguments { + /** + * IDs of the builds used to run the test suite. + */ + buildIds: Array; +} + +export interface IXGitLabPipelineAnalytics { + __typename: '_xGitLabPipelineAnalytics'; + + /** + * Labels for the monthly pipeline count. + */ + monthPipelinesLabels: Array | null; + + /** + * Total monthly successful pipeline count. + */ + monthPipelinesSuccessful: Array | null; + + /** + * Total monthly pipeline count. + */ + monthPipelinesTotals: Array | null; + + /** + * Pipeline times labels. + */ + pipelineTimesLabels: Array | null; + + /** + * Pipeline times. + */ + pipelineTimesValues: Array | null; + + /** + * Labels for the weekly pipeline count. + */ + weekPipelinesLabels: Array | null; + + /** + * Total weekly successful pipeline count. + */ + weekPipelinesSuccessful: Array | null; + + /** + * Total weekly pipeline count. + */ + weekPipelinesTotals: Array | null; + + /** + * Labels for the yearly pipeline count. + */ + yearPipelinesLabels: Array | null; + + /** + * Total yearly successful pipeline count. + */ + yearPipelinesSuccessful: Array | null; + + /** + * Total yearly pipeline count. + */ + yearPipelinesTotals: Array | null; +} + +/** + * Represents the Geo sync and verification state of a pipeline artifact + */ +export interface IXGitLabPipelineArtifactRegistry { + __typename: '_xGitLabPipelineArtifactRegistry'; + + /** + * Timestamp when the PipelineArtifactRegistry was created + */ + createdAt: any | null; + + /** + * ID of the PipelineArtifactRegistry + */ + id: string; + + /** + * Error message during sync of the PipelineArtifactRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the PipelineArtifactRegistry + */ + lastSyncedAt: any | null; + + /** + * ID of the pipeline artifact. + */ + pipelineArtifactId: string; + + /** + * Timestamp after which the PipelineArtifactRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the PipelineArtifactRegistry + */ + retryCount: number | null; + + /** + * Sync state of the PipelineArtifactRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for PipelineArtifactRegistry. + */ +export interface IXGitLabPipelineArtifactRegistryConnection { + __typename: '_xGitLabPipelineArtifactRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPipelineArtifactRegistryEdge { + __typename: '_xGitLabPipelineArtifactRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPipelineArtifactRegistry | null; +} + +/** + * Autogenerated input type of PipelineCancel + */ +export interface IXGitLabPipelineCancelInput { + /** + * ID of the pipeline to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PipelineCancel + */ +export interface IXGitLabPipelineCancelPayload { + __typename: '_xGitLabPipelineCancelPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export const enum XGitLabPipelineConfigSourceEnum { + /** + * Unknown source. + */ + UNKNOWN_SOURCE = 'UNKNOWN_SOURCE', + + /** + * Repository source. + */ + REPOSITORY_SOURCE = 'REPOSITORY_SOURCE', + + /** + * Auto DevOps source. + */ + AUTO_DEVOPS_SOURCE = 'AUTO_DEVOPS_SOURCE', + + /** + * Webide source. + */ + WEBIDE_SOURCE = 'WEBIDE_SOURCE', + + /** + * Remote source. + */ + REMOTE_SOURCE = 'REMOTE_SOURCE', + + /** + * External project source. + */ + EXTERNAL_PROJECT_SOURCE = 'EXTERNAL_PROJECT_SOURCE', + + /** + * Bridge source. + */ + BRIDGE_SOURCE = 'BRIDGE_SOURCE', + + /** + * Parameter source. + */ + PARAMETER_SOURCE = 'PARAMETER_SOURCE', + + /** + * Compliance source. + */ + COMPLIANCE_SOURCE = 'COMPLIANCE_SOURCE', +} + +/** + * The connection type for Pipeline. + */ +export interface IXGitLabPipelineConnection { + __typename: '_xGitLabPipelineConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of PipelineDestroy + */ +export interface IXGitLabPipelineDestroyInput { + /** + * ID of the pipeline to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PipelineDestroy + */ +export interface IXGitLabPipelineDestroyPayload { + __typename: '_xGitLabPipelineDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPipelineEdge { + __typename: '_xGitLabPipelineEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPipeline | null; +} + +export interface IXGitLabPipelinePermissions { + __typename: '_xGitLabPipelinePermissions'; + + /** + * Indicates the user can perform `admin_pipeline` on this resource + */ + adminPipeline: boolean; + + /** + * Indicates the user can perform `destroy_pipeline` on this resource + */ + destroyPipeline: boolean; + + /** + * Indicates the user can perform `update_pipeline` on this resource + */ + updatePipeline: boolean; +} + +/** + * Autogenerated input type of PipelineRetry + */ +export interface IXGitLabPipelineRetryInput { + /** + * ID of the pipeline to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PipelineRetry + */ +export interface IXGitLabPipelineRetryPayload { + __typename: '_xGitLabPipelineRetryPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Pipeline after mutation. + */ + pipeline: IXGitLabPipeline | null; +} + +/** + * Represents vulnerability finding of a security report on the pipeline. + */ +export interface IXGitLabPipelineSecurityReportFinding { + __typename: '_xGitLabPipelineSecurityReportFinding'; + + /** + * Type of the security report that found the vulnerability. + */ + confidence: string | null; + + /** + * Description of the vulnerability finding. + */ + description: string | null; + + /** + * Indicates whether the vulnerability is a false positive. + */ + falsePositive: boolean | null; + + /** + * Identifiers of the vulnerabilit finding. + */ + identifiers: Array; + + /** + * Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability. + */ + location: _xGitLabVulnerabilityLocation | null; + + /** + * Name of the vulnerability finding. + */ + name: string | null; + + /** + * Project on which the vulnerability finding was found. + */ + project: IXGitLabProject | null; + + /** + * Name of the vulnerability finding. + */ + projectFingerprint: string | null; + + /** + * Type of the security report that found the vulnerability finding. + */ + reportType: XGitLabVulnerabilityReportType | null; + + /** + * Scanner metadata for the vulnerability. + */ + scanner: IXGitLabVulnerabilityScanner | null; + + /** + * Severity of the vulnerability finding. + */ + severity: XGitLabVulnerabilitySeverity | null; + + /** + * URL to the vulnerability's details page. + */ + solution: string | null; + + /** + * Finding status. + */ + state: XGitLabVulnerabilityState | null; + + /** + * Name of the vulnerability finding. + */ + uuid: string | null; +} + +/** + * The connection type for PipelineSecurityReportFinding. + */ +export interface IXGitLabPipelineSecurityReportFindingConnection { + __typename: '_xGitLabPipelineSecurityReportFindingConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabPipelineSecurityReportFindingEdge { + __typename: '_xGitLabPipelineSecurityReportFindingEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabPipelineSecurityReportFinding | null; +} + +export const enum XGitLabPipelineStatusEnum { + /** + * Pipeline has been created. + */ + CREATED = 'CREATED', + + /** + * A resource (for example, a runner) that the pipeline requires to run is unavailable. + */ + WAITING_FOR_RESOURCE = 'WAITING_FOR_RESOURCE', + + /** + * Pipeline is preparing to run. + */ + PREPARING = 'PREPARING', + + /** + * Pipeline has not started running yet. + */ + PENDING = 'PENDING', + + /** + * Pipeline is running. + */ + RUNNING = 'RUNNING', + + /** + * At least one stage of the pipeline failed. + */ + FAILED = 'FAILED', + + /** + * Pipeline completed successfully. + */ + SUCCESS = 'SUCCESS', + + /** + * Pipeline was canceled before completion. + */ + CANCELED = 'CANCELED', + + /** + * Pipeline was skipped. + */ + SKIPPED = 'SKIPPED', + + /** + * Pipeline needs to be manually started. + */ + MANUAL = 'MANUAL', + + /** + * Pipeline is scheduled to run. + */ + SCHEDULED = 'SCHEDULED', +} + +export interface IXGitLabProject { + __typename: '_xGitLabProject'; + + /** + * Size limit for the repository in bytes. + */ + actualRepositorySizeLimit: number | null; + + /** + * Agent configurations defined by the project + */ + agentConfigurations: IXGitLabAgentConfigurationConnection | null; + + /** + * A single Alert Management alert of the project. + */ + alertManagementAlert: IXGitLabAlertManagementAlert | null; + + /** + * Counts of alerts by status for the project. + */ + alertManagementAlertStatusCounts: IXGitLabAlertManagementAlertStatusCountsType | null; + + /** + * Alert Management alerts of the project. + */ + alertManagementAlerts: IXGitLabAlertManagementAlertConnection | null; + + /** + * HTTP Integrations which can receive alerts for the project. + */ + alertManagementHttpIntegrations: IXGitLabAlertManagementHttpIntegrationConnection | null; + + /** + * Integrations which can receive alerts for the project. + */ + alertManagementIntegrations: IXGitLabAlertManagementIntegrationConnection | null; + + /** + * Extract alert fields from payload for custom mapping. + */ + alertManagementPayloadFields: Array | null; + + /** + * If `only_allow_merge_if_pipeline_succeeds` is true, indicates if merge + * requests of the project can also be merged with skipped jobs. + */ + allowMergeOnSkippedPipeline: boolean | null; + + /** + * API fuzzing configuration for the project. + */ + apiFuzzingCiConfiguration: IXGitLabApiFuzzingCiConfiguration | null; + + /** + * Indicates the archived status of the project. + */ + archived: boolean | null; + + /** + * Indicates if issues referenced by merge requests and commits within the default branch are closed automatically. + */ + autocloseReferencedIssues: boolean | null; + + /** + * URL to avatar image file of the project. + */ + avatarUrl: string | null; + + /** + * A single board of the project. + */ + board: IXGitLabBoard | null; + + /** + * Boards of the project. + */ + boards: IXGitLabBoardConnection | null; + + /** + * CI/CD settings for the project. + */ + ciCdSettings: IXGitLabProjectCiCdSetting | null; + + /** + * The CI Job Tokens scope of access. + */ + ciJobTokenScope: IXGitLabCiJobTokenScopeType | null; + + /** + * Find a single CI/CD template by name. + */ + ciTemplate: IXGitLabCiTemplate | null; + + /** + * Find a single cluster agent by name. + */ + clusterAgent: IXGitLabClusterAgent | null; + + /** + * Cluster agents associated with the project. + */ + clusterAgents: IXGitLabClusterAgentConnection | null; + + /** + * Code coverage summary associated with the project. + */ + codeCoverageSummary: IXGitLabCodeCoverageSummary | null; + + /** + * Compliance frameworks associated with the project. + */ + complianceFrameworks: IXGitLabComplianceFrameworkConnection | null; + + /** + * Container expiration policy of the project. + */ + containerExpirationPolicy: IXGitLabContainerExpirationPolicy | null; + + /** + * Indicates if Container Registry is enabled for the current user + */ + containerRegistryEnabled: boolean | null; + + /** + * Container repositories of the project. + */ + containerRepositories: IXGitLabContainerRepositoryConnection | null; + + /** + * Number of container repositories in the project. + */ + containerRepositoriesCount: number; + + /** + * Timestamp of the project creation. + */ + createdAt: any | null; + + /** + * DAST Profile associated with the project. + */ + dastProfile: IXGitLabDastProfile | null; + + /** + * DAST Profiles associated with the project. + */ + dastProfiles: IXGitLabDastProfileConnection | null; + + /** + * DAST scanner profiles associated with the project. + */ + dastScannerProfiles: IXGitLabDastScannerProfileConnection | null; + + /** + * DAST Site Profile associated with the project. + */ + dastSiteProfile: IXGitLabDastSiteProfile | null; + + /** + * DAST Site Profiles associated with the project. + */ + dastSiteProfiles: IXGitLabDastSiteProfileConnection | null; + + /** + * DAST Site Validations associated with the project. + */ + dastSiteValidations: IXGitLabDastSiteValidationConnection | null; + + /** + * Short description of the project. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Project's DORA metrics. + */ + dora: IXGitLabDora | null; + + /** + * A single environment of the project. + */ + environment: IXGitLabEnvironment | null; + + /** + * Environments of the project. + */ + environments: IXGitLabEnvironmentConnection | null; + + /** + * Number of times the project has been forked. + */ + forksCount: number; + + /** + * Full path of the project. + */ + fullPath: string; + + /** + * Grafana integration details for the project. + */ + grafanaIntegration: IXGitLabGrafanaIntegration | null; + + /** + * Group of the project. + */ + group: IXGitLabGroup | null; + + /** + * URL to connect to the project via HTTPS. + */ + httpUrlToRepo: string | null; + + /** + * ID of the project. + */ + id: string; + + /** + * Status of import background job of the project. + */ + importStatus: string | null; + + /** + * Incident Management escalation policies of the project. + */ + incidentManagementEscalationPolicies: IXGitLabEscalationPolicyTypeConnection | null; + + /** + * Incident Management escalation policy of the project. + */ + incidentManagementEscalationPolicy: IXGitLabEscalationPolicyType | null; + + /** + * Incident Management On-call schedules of the project. + */ + incidentManagementOncallSchedules: IXGitLabIncidentManagementOncallScheduleConnection | null; + + /** + * A single issue of the project. + */ + issue: IXGitLabIssue | null; + + /** + * Counts of issues by status for the project. + */ + issueStatusCounts: IXGitLabIssueStatusCountsType | null; + + /** + * Issues of the project. + */ + issues: IXGitLabIssueConnection | null; + + /** + * Indicates if Issues are enabled for the current user + */ + issuesEnabled: boolean | null; + + /** + * Find iteration cadences. + */ + iterationCadences: IXGitLabIterationCadenceConnection | null; + + /** + * Find iterations. + */ + iterations: IXGitLabIterationConnection | null; + + /** + * Status of Jira import background job of the project. + */ + jiraImportStatus: string | null; + + /** + * Jira imports into the project. + */ + jiraImports: IXGitLabJiraImportConnection | null; + + /** + * Jobs of a project. This field can only be resolved for one project in any single request. + */ + jobs: IXGitLabCiJobConnection | null; + + /** + * Indicates if CI/CD pipeline jobs are enabled for the current user. + */ + jobsEnabled: boolean | null; + + /** + * Label available on this project. + */ + label: IXGitLabLabel | null; + + /** + * Labels available on this project. + */ + labels: IXGitLabLabelConnection | null; + + /** + * Timestamp of the project last activity. + */ + lastActivityAt: any | null; + + /** + * Indicates if the project has Large File Storage (LFS) enabled. + */ + lfsEnabled: boolean | null; + + /** + * A single merge request of the project. + */ + mergeRequest: IXGitLabMergeRequest | null; + + /** + * Merge requests of the project. + */ + mergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Indicates if Merge Requests are enabled for the current user + */ + mergeRequestsEnabled: boolean | null; + + /** + * Indicates if no merge commits should be created and all merges should instead + * be fast-forwarded, which means that merging is only allowed if the branch + * could be fast-forwarded. + */ + mergeRequestsFfOnlyEnabled: boolean | null; + + /** + * Milestones of the project. + */ + milestones: IXGitLabMilestoneConnection | null; + + /** + * Name of the project (without namespace). + */ + name: string; + + /** + * Full name of the project with its namespace. + */ + nameWithNamespace: string; + + /** + * Namespace of the project. + */ + namespace: IXGitLabNamespace | null; + + /** + * Network Policies of the project + */ + networkPolicies: IXGitLabNetworkPolicyConnection | null; + + /** + * Indicates if merge requests of the project can only be merged when all the discussions are resolved. + */ + onlyAllowMergeIfAllDiscussionsAreResolved: boolean | null; + + /** + * Indicates if merge requests of the project can only be merged with successful jobs. + */ + onlyAllowMergeIfPipelineSucceeds: boolean | null; + + /** + * Number of open issues for the project. + */ + openIssuesCount: number | null; + + /** + * Packages of the project. + */ + packages: IXGitLabPackageConnection | null; + + /** + * Path of the project. + */ + path: string; + + /** + * The project's path locks. + */ + pathLocks: IXGitLabPathLockConnection | null; + + /** + * Build pipeline of the project. + */ + pipeline: IXGitLabPipeline | null; + + /** + * Pipeline analytics. + */ + pipelineAnalytics: IXGitLabPipelineAnalytics | null; + + /** + * Build pipelines of the project. + */ + pipelines: IXGitLabPipelineConnection | null; + + /** + * Indicates if a link to create or view a merge request should display after a + * push to Git repositories of the project from the command line. + */ + printingMergeRequestLinkEnabled: boolean | null; + + /** + * Members of the project. + */ + projectMembers: IXGitLabMemberInterfaceConnection | null; + + /** + * Indicates if there is public access to pipelines and job details of the project, including output logs and artifacts. + */ + publicJobs: boolean | null; + + /** + * Project's push rules settings. + */ + pushRules: IXGitLabPushRules | null; + + /** + * A single release of the project. + */ + release: IXGitLabRelease | null; + + /** + * Releases of the project. + */ + releases: IXGitLabReleaseConnection | null; + + /** + * Indicates if `Delete source branch` option should be enabled by default for all new merge requests of the project. + */ + removeSourceBranchAfterMerge: boolean | null; + + /** + * Git repository of the project. + */ + repository: IXGitLabRepository | null; + + /** + * Size of repository that exceeds the limit in bytes. + */ + repositorySizeExcess: number | null; + + /** + * Indicates if users can request member access to the project. + */ + requestAccessEnabled: boolean | null; + + /** + * Find a single requirement. + */ + requirement: IXGitLabRequirement | null; + + /** + * Number of requirements for the project by their state. + */ + requirementStatesCount: IXGitLabRequirementStatesCount | null; + + /** + * Find requirements. + */ + requirements: IXGitLabRequirementConnection | null; + + /** + * SAST CI configuration for the project. + */ + sastCiConfiguration: IXGitLabSastCiConfiguration | null; + + /** + * Scan Execution Policies of the project + */ + scanExecutionPolicies: IXGitLabScanExecutionPolicyConnection | null; + + /** + * Path to project's security dashboard. + */ + securityDashboardPath: string | null; + + /** + * Information about security analyzers used in the project. + */ + securityScanners: IXGitLabSecurityScanners | null; + + /** + * Detailed version of a Sentry error on the project. + */ + sentryDetailedError: IXGitLabSentryDetailedError | null; + + /** + * Paginated collection of Sentry errors on the project. + */ + sentryErrors: IXGitLabSentryErrorCollection | null; + + /** + * E-mail address of the service desk. + */ + serviceDeskAddress: string | null; + + /** + * Indicates if the project has service desk enabled. + */ + serviceDeskEnabled: boolean | null; + + /** + * Project services. + */ + services: IXGitLabServiceConnection | null; + + /** + * Indicates if shared runners are enabled for the project. + */ + sharedRunnersEnabled: boolean | null; + + /** + * Snippets of the project. + */ + snippets: IXGitLabSnippetConnection | null; + + /** + * Indicates if Snippets are enabled for the current user + */ + snippetsEnabled: boolean | null; + + /** + * Indicates if `squashReadOnly` is enabled. + */ + squashReadOnly: boolean; + + /** + * URL to connect to the project via SSH. + */ + sshUrlToRepo: string | null; + + /** + * Number of times the project has been starred. + */ + starCount: number; + + /** + * Statistics of the project. + */ + statistics: IXGitLabProjectStatistics | null; + + /** + * Commit message used to apply merge request suggestions. + */ + suggestionCommitMessage: string | null; + + /** + * List of project topics (not Git tags). Deprecated in 13.12: Use `topics`. + * @deprecated "Use `topics`. Deprecated in 13.12." + */ + tagList: string | null; + + /** + * Find a single Terraform state by name. + */ + terraformState: IXGitLabTerraformState | null; + + /** + * Terraform states associated with the project. + */ + terraformStates: IXGitLabTerraformStateConnection | null; + + /** + * Time logged on issues and merge requests in the project. + */ + timelogs: IXGitLabTimelogConnection | null; + + /** + * List of project topics. + */ + topics: Array | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabProjectPermissions; + + /** + * Visibility of the project. + */ + visibility: string | null; + + /** + * Vulnerabilities reported on the project. + */ + vulnerabilities: IXGitLabVulnerabilityConnection | null; + + /** + * The historical number of vulnerabilities per day for the project. + */ + vulnerabilitiesCountByDay: IXGitLabVulnerabilitiesCountByDayConnection | null; + + /** + * Vulnerability scanners reported on the project vulnerabilities. + */ + vulnerabilityScanners: IXGitLabVulnerabilityScannerConnection | null; + + /** + * Counts for each vulnerability severity in the project. + */ + vulnerabilitySeveritiesCount: IXGitLabVulnerabilitySeveritiesCount | null; + + /** + * Web URL of the project. + */ + webUrl: string | null; + + /** + * Indicates if Wikis are enabled for the current user + */ + wikiEnabled: boolean | null; +} + +export interface IAgentConfigurationsOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAlertManagementAlertOnXGitLabProjectArguments { + /** + * IID of the alert. For example, "1". + */ + iid?: string | null; + + /** + * Alerts with the specified statues. For example, `[TRIGGERED]`. + */ + statuses?: Array | null; + + /** + * Sort alerts by this criteria. + */ + sort?: XGitLabAlertManagementAlertSort | null; + + /** + * Filter query for given domain. + * @default "operations" + */ + domain: XGitLabAlertManagementDomainFilter; + + /** + * Search query for title, description, service, or monitoring_tool. + */ + search?: string | null; + + /** + * Username of a user assigned to the issue. + */ + assigneeUsername?: string | null; +} + +export interface IAlertManagementAlertStatusCountsOnXGitLabProjectArguments { + /** + * Search query for title, description, service, or monitoring_tool. + */ + search?: string | null; + + /** + * Username of a user assigned to the issue. + */ + assigneeUsername?: string | null; +} + +export interface IAlertManagementAlertsOnXGitLabProjectArguments { + /** + * IID of the alert. For example, "1". + */ + iid?: string | null; + + /** + * Alerts with the specified statues. For example, `[TRIGGERED]`. + */ + statuses?: Array | null; + + /** + * Sort alerts by this criteria. + */ + sort?: XGitLabAlertManagementAlertSort | null; + + /** + * Filter query for given domain. + * @default "operations" + */ + domain: XGitLabAlertManagementDomainFilter; + + /** + * Search query for title, description, service, or monitoring_tool. + */ + search?: string | null; + + /** + * Username of a user assigned to the issue. + */ + assigneeUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAlertManagementHttpIntegrationsOnXGitLabProjectArguments { + /** + * ID of the integration. + */ + id?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAlertManagementIntegrationsOnXGitLabProjectArguments { + /** + * ID of the integration. + */ + id?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAlertManagementPayloadFieldsOnXGitLabProjectArguments { + /** + * Sample payload for extracting alert fields for custom mappings. + */ + payloadExample: string; +} + +export interface IBoardOnXGitLabProjectArguments { + /** + * ID of the board. + */ + id: any; +} + +export interface IBoardsOnXGitLabProjectArguments { + /** + * Find a board by its ID. + */ + id?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICiTemplateOnXGitLabProjectArguments { + /** + * Name of the CI/CD template to search for. Template must be formatted as `Name.gitlab-ci.yml`. + */ + name: string; +} + +export interface IClusterAgentOnXGitLabProjectArguments { + /** + * Name of the cluster agent. + */ + name: string; +} + +export interface IClusterAgentsOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IComplianceFrameworksOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IContainerRepositoriesOnXGitLabProjectArguments { + /** + * Filter the container repositories by their name. + */ + name?: string | null; + + /** + * Sort container repositories by this criteria. + * @default "created_desc" + */ + sort?: XGitLabContainerRepositorySort | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDastProfileOnXGitLabProjectArguments { + /** + * ID of the DAST Profile. + */ + id: any; +} + +export interface IDastProfilesOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDastScannerProfilesOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDastSiteProfileOnXGitLabProjectArguments { + /** + * ID of the site profile. + */ + id: any; +} + +export interface IDastSiteProfilesOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDastSiteValidationsOnXGitLabProjectArguments { + /** + * Normalized URL of the target to be scanned. + */ + normalizedTargetUrls?: Array | null; + + /** + * Status of the site validation. + */ + status?: XGitLabDastSiteValidationStatusEnum | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IEnvironmentOnXGitLabProjectArguments { + /** + * Name of the environment. + */ + name?: string | null; + + /** + * Search query for environment name. + */ + search?: string | null; + + /** + * States of environments that should be included in result. + */ + states?: Array | null; +} + +export interface IEnvironmentsOnXGitLabProjectArguments { + /** + * Name of the environment. + */ + name?: string | null; + + /** + * Search query for environment name. + */ + search?: string | null; + + /** + * States of environments that should be included in result. + */ + states?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIncidentManagementEscalationPoliciesOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIncidentManagementEscalationPolicyOnXGitLabProjectArguments { + /** + * ID of the escalation policy. + */ + id: any; +} + +export interface IIncidentManagementOncallSchedulesOnXGitLabProjectArguments { + /** + * IIDs of on-call schedules. + */ + iids?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIssueOnXGitLabProjectArguments { + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the issue. For example, "1". + */ + iid?: string | null; + + /** + * List of IIDs of issues. For example, `["1", "2"]`. + */ + iids?: Array | null; + + /** + * Labels applied to this issue. + */ + labelName?: Array | null; + + /** + * Milestone applied to this issue. + */ + milestoneTitle?: Array | null; + + /** + * Username of the author of the issue. + */ + authorUsername?: string | null; + + /** + * Usernames of users assigned to the issue. + */ + assigneeUsernames?: Array | null; + + /** + * ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + */ + assigneeId?: string | null; + + /** + * Issues created before this date. + */ + createdBefore?: any | null; + + /** + * Issues created after this date. + */ + createdAfter?: any | null; + + /** + * Issues updated before this date. + */ + updatedBefore?: any | null; + + /** + * Issues updated after this date. + */ + updatedAfter?: any | null; + + /** + * Issues closed before this date. + */ + closedBefore?: any | null; + + /** + * Issues closed after this date. + */ + closedAfter?: any | null; + + /** + * Filter issues by the given issue types. + */ + types?: Array | null; + + /** + * Filter issues by milestone ID wildcard. + */ + milestoneWildcardId?: XGitLabMilestoneWildcardId | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + */ + confidential?: boolean | null; + + /** + * Negated arguments. + */ + not?: IXGitLabNegatedIssueFilterInput | null; + + /** + * Current state of this issue. + */ + state?: XGitLabIssuableState | null; + + /** + * Sort issues by this criteria. + * @default "created_desc" + */ + sort?: XGitLabIssueSort | null; + + /** + * List of iteration Global IDs applied to the issue. + */ + iterationId?: Array | null; + + /** + * Filter by iteration ID wildcard. + */ + iterationWildcardId?: XGitLabIterationWildcardId | null; + + /** + * ID of an epic associated with the issues, "none" and "any" values are supported. + */ + epicId?: string | null; + + /** + * Whether to include subepics when filtering issues by epicId. + */ + includeSubepics?: boolean | null; + + /** + * Weight applied to the issue, "none" and "any" values are supported. + */ + weight?: string | null; + + /** + * Release tag associated with the issue's milestone. + */ + releaseTag?: Array | null; + + /** + * Filter issues by release tag ID wildcard. + */ + releaseTagWildcardId?: XGitLabReleaseTagWildcardId | null; +} + +export interface IIssueStatusCountsOnXGitLabProjectArguments { + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the issue. For example, "1". + */ + iid?: string | null; + + /** + * List of IIDs of issues. For example, `["1", "2"]`. + */ + iids?: Array | null; + + /** + * Labels applied to this issue. + */ + labelName?: Array | null; + + /** + * Milestone applied to this issue. + */ + milestoneTitle?: Array | null; + + /** + * Username of the author of the issue. + */ + authorUsername?: string | null; + + /** + * Usernames of users assigned to the issue. + */ + assigneeUsernames?: Array | null; + + /** + * ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + */ + assigneeId?: string | null; + + /** + * Issues created before this date. + */ + createdBefore?: any | null; + + /** + * Issues created after this date. + */ + createdAfter?: any | null; + + /** + * Issues updated before this date. + */ + updatedBefore?: any | null; + + /** + * Issues updated after this date. + */ + updatedAfter?: any | null; + + /** + * Issues closed before this date. + */ + closedBefore?: any | null; + + /** + * Issues closed after this date. + */ + closedAfter?: any | null; + + /** + * Filter issues by the given issue types. + */ + types?: Array | null; + + /** + * Filter issues by milestone ID wildcard. + */ + milestoneWildcardId?: XGitLabMilestoneWildcardId | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + */ + confidential?: boolean | null; + + /** + * Negated arguments. + */ + not?: IXGitLabNegatedIssueFilterInput | null; + + /** + * Release tag associated with the issue's milestone. + */ + releaseTag?: Array | null; + + /** + * Filter issues by release tag ID wildcard. + */ + releaseTagWildcardId?: XGitLabReleaseTagWildcardId | null; +} + +export interface IIssuesOnXGitLabProjectArguments { + /** + * Search query for title or description. + */ + search?: string | null; + + /** + * IID of the issue. For example, "1". + */ + iid?: string | null; + + /** + * List of IIDs of issues. For example, `["1", "2"]`. + */ + iids?: Array | null; + + /** + * Labels applied to this issue. + */ + labelName?: Array | null; + + /** + * Milestone applied to this issue. + */ + milestoneTitle?: Array | null; + + /** + * Username of the author of the issue. + */ + authorUsername?: string | null; + + /** + * Usernames of users assigned to the issue. + */ + assigneeUsernames?: Array | null; + + /** + * ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + */ + assigneeId?: string | null; + + /** + * Issues created before this date. + */ + createdBefore?: any | null; + + /** + * Issues created after this date. + */ + createdAfter?: any | null; + + /** + * Issues updated before this date. + */ + updatedBefore?: any | null; + + /** + * Issues updated after this date. + */ + updatedAfter?: any | null; + + /** + * Issues closed before this date. + */ + closedBefore?: any | null; + + /** + * Issues closed after this date. + */ + closedAfter?: any | null; + + /** + * Filter issues by the given issue types. + */ + types?: Array | null; + + /** + * Filter issues by milestone ID wildcard. + */ + milestoneWildcardId?: XGitLabMilestoneWildcardId | null; + + /** + * Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + */ + myReactionEmoji?: string | null; + + /** + * Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + */ + confidential?: boolean | null; + + /** + * Negated arguments. + */ + not?: IXGitLabNegatedIssueFilterInput | null; + + /** + * Current state of this issue. + */ + state?: XGitLabIssuableState | null; + + /** + * Sort issues by this criteria. + * @default "created_desc" + */ + sort?: XGitLabIssueSort | null; + + /** + * List of iteration Global IDs applied to the issue. + */ + iterationId?: Array | null; + + /** + * Filter by iteration ID wildcard. + */ + iterationWildcardId?: XGitLabIterationWildcardId | null; + + /** + * ID of an epic associated with the issues, "none" and "any" values are supported. + */ + epicId?: string | null; + + /** + * Whether to include subepics when filtering issues by epicId. + */ + includeSubepics?: boolean | null; + + /** + * Weight applied to the issue, "none" and "any" values are supported. + */ + weight?: string | null; + + /** + * Release tag associated with the issue's milestone. + */ + releaseTag?: Array | null; + + /** + * Filter issues by release tag ID wildcard. + */ + releaseTagWildcardId?: XGitLabReleaseTagWildcardId | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIterationCadencesOnXGitLabProjectArguments { + /** + * Global ID of the iteration cadence to look up. + */ + id?: any | null; + + /** + * Fuzzy search by title. + */ + title?: string | null; + + /** + * Duration in weeks of the iterations within this cadence. + */ + durationInWeeks?: number | null; + + /** + * Whether the iteration cadence should automatically generate future iterations. + */ + automatic?: boolean | null; + + /** + * Whether the iteration cadence is active. + */ + active?: boolean | null; + + /** + * Whether to include ancestor groups to search iterations cadences in. + */ + includeAncestorGroups?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIterationsOnXGitLabProjectArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Filter iterations by state. + */ + state?: XGitLabIterationState | null; + + /** + * Fuzzy search by title. + */ + title?: string | null; + + /** + * Global ID of the Iteration to look up. + */ + id?: string | null; + + /** + * Internal ID of the Iteration to look up. + */ + iid?: string | null; + + /** + * Whether to include ancestor iterations. Defaults to true. + */ + includeAncestors?: boolean | null; + + /** + * Global iteration cadence IDs by which to look up the iterations. + */ + iterationCadenceIds?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IJiraImportsOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IJobsOnXGitLabProjectArguments { + /** + * Filter jobs by status. + */ + statuses?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ILabelOnXGitLabProjectArguments { + /** + * Title of the label. + */ + title: string; +} + +export interface ILabelsOnXGitLabProjectArguments { + /** + * Search term to find labels with. + */ + searchTerm?: string | null; + + /** + * Include labels from ancestor groups. + * @default false + */ + includeAncestorGroups?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMergeRequestOnXGitLabProjectArguments { + /** + * IID of the merge request, for example `1`. + */ + iid: string; +} + +export interface IMergeRequestsOnXGitLabProjectArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMilestonesOnXGitLabProjectArguments { + /** + * List items overlapping the given timeframe. + */ + timeframe?: IXGitLabTimeframe | null; + + /** + * Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`. + */ + ids?: Array | null; + + /** + * Filter milestones by state. + */ + state?: XGitLabMilestoneStateEnum | null; + + /** + * Title of the milestone. + */ + title?: string | null; + + /** + * Search string for the title. + */ + searchTitle?: string | null; + + /** + * Date the milestone contains. + */ + containingDate?: any | null; + + /** + * Sort milestones by this criteria. + * @default "DUE_DATE_ASC" + */ + sort?: XGitLabMilestoneSort | null; + + /** + * Also return milestones in the project's parent group and its ancestors. + */ + includeAncestors?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INetworkPoliciesOnXGitLabProjectArguments { + /** + * Global ID of the environment to filter policies. + */ + environmentId?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPackagesOnXGitLabProjectArguments { + /** + * Sort packages by this criteria. + * @default "CREATED_DESC" + */ + sort?: XGitLabPackageSort | null; + + /** + * Search a package by name. + * @default null + */ + packageName?: string | null; + + /** + * Filter a package by type. + * @default null + */ + packageType?: XGitLabPackageTypeEnum | null; + + /** + * Filter a package by status. + * @default null + */ + status?: XGitLabPackageStatus | null; + + /** + * Include versionless packages. + * @default false + */ + includeVersionless?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPathLocksOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPipelineOnXGitLabProjectArguments { + /** + * IID of the Pipeline. For example, "1". + */ + iid?: string | null; + + /** + * SHA of the Pipeline. For example, "dyd0f15ay83993f5ab66k927w28673882x99100b". + */ + sha?: string | null; +} + +export interface IPipelinesOnXGitLabProjectArguments { + /** + * Filter pipelines by their status. + */ + status?: XGitLabPipelineStatusEnum | null; + + /** + * Filter pipelines by the ref they are run for. + */ + ref?: string | null; + + /** + * Filter pipelines by the sha of the commit they are run for. + */ + sha?: string | null; + + /** + * Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled. + */ + source?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectMembersOnXGitLabProjectArguments { + /** + * Search query. + */ + search?: string | null; + + /** + * Filter members by the given member relations. + * @default ["DIRECT","INHERITED"] + */ + relations?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReleaseOnXGitLabProjectArguments { + /** + * Name of the tag associated to the release. + */ + tagName: string; +} + +export interface IReleasesOnXGitLabProjectArguments { + /** + * Sort releases by this criteria. + * @default "RELEASED_AT_DESC" + */ + sort?: XGitLabReleaseSort | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IRequirementOnXGitLabProjectArguments { + /** + * List requirements by sort order. + */ + sort?: XGitLabSort | null; + + /** + * Filter requirements by state. + */ + state?: XGitLabRequirementState | null; + + /** + * Search query for requirement title. + */ + search?: string | null; + + /** + * Filter requirements by author username. + */ + authorUsername?: Array | null; + + /** + * IID of the requirement, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of requirements, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * State of latest requirement test report. + */ + lastTestReportState?: XGitLabRequirementStatusFilter | null; +} + +export interface IRequirementsOnXGitLabProjectArguments { + /** + * List requirements by sort order. + */ + sort?: XGitLabSort | null; + + /** + * Filter requirements by state. + */ + state?: XGitLabRequirementState | null; + + /** + * Search query for requirement title. + */ + search?: string | null; + + /** + * Filter requirements by author username. + */ + authorUsername?: Array | null; + + /** + * IID of the requirement, e.g., "1". + */ + iid?: string | null; + + /** + * List of IIDs of requirements, e.g., `[1, 2]`. + */ + iids?: Array | null; + + /** + * State of latest requirement test report. + */ + lastTestReportState?: XGitLabRequirementStatusFilter | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IScanExecutionPoliciesOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISentryDetailedErrorOnXGitLabProjectArguments { + /** + * ID of the Sentry issue. + */ + id: any; +} + +export interface IServicesOnXGitLabProjectArguments { + /** + * Indicates if the integration is active. + */ + active?: boolean | null; + + /** + * Type of integration. + */ + type?: XGitLabServiceType | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetsOnXGitLabProjectArguments { + /** + * Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + */ + ids?: Array | null; + + /** + * Visibility of the snippet. + */ + visibility?: XGitLabVisibilityScopesEnum | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITerraformStateOnXGitLabProjectArguments { + /** + * Name of the Terraform state. + */ + name: string; +} + +export interface ITerraformStatesOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabProjectArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitiesOnXGitLabProjectArguments { + /** + * Filter vulnerabilities by project. + */ + projectId?: Array | null; + + /** + * Filter vulnerabilities by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerabilities by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerabilities by state. + */ + state?: Array | null; + + /** + * Filter vulnerabilities by VulnerabilityScanner.externalId. + */ + scanner?: Array | null; + + /** + * Filter vulnerabilities by scanner ID. + */ + scannerId?: Array | null; + + /** + * List vulnerabilities by sort order. + * @default "severity_desc" + */ + sort?: XGitLabVulnerabilitySort | null; + + /** + * Returns only the vulnerabilities which have been resolved on default branch. + */ + hasResolution?: boolean | null; + + /** + * Returns only the vulnerabilities which have linked issues. + */ + hasIssues?: boolean | null; + + /** + * Filter vulnerabilities by location image. When this filter is present, the + * response only matches entries for a `reportType` that includes + * `container_scanning`, `cluster_image_scanning`. + */ + image?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitiesCountByDayOnXGitLabProjectArguments { + /** + * First day for which to fetch vulnerability history. + */ + startDate: any; + + /** + * Last day for which to fetch vulnerability history. + */ + endDate: any; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilityScannersOnXGitLabProjectArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitySeveritiesCountOnXGitLabProjectArguments { + /** + * Filter vulnerabilities by project. + */ + projectId?: Array | null; + + /** + * Filter vulnerabilities by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerabilities by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerabilities by state. + */ + state?: Array | null; + + /** + * Filter vulnerabilities by scanner. + */ + scanner?: Array | null; + + /** + * Filter vulnerabilities by scanner ID. + */ + scannerId?: Array | null; + + /** + * Filter vulnerabilities that do or do not have issues. + */ + hasIssues?: boolean | null; + + /** + * Filter vulnerabilities that do or do not have a resolution. + */ + hasResolution?: boolean | null; +} + +export interface IXGitLabProjectCiCdSetting { + __typename: '_xGitLabProjectCiCdSetting'; + + /** + * Indicates CI job tokens generated in this project have restricted access to resources. + */ + jobTokenScopeEnabled: boolean | null; + + /** + * Whether to keep the latest builds artifacts. + */ + keepLatestArtifact: boolean | null; + + /** + * Whether merge pipelines are enabled. + */ + mergePipelinesEnabled: boolean | null; + + /** + * Whether merge trains are enabled. + */ + mergeTrainsEnabled: boolean | null; + + /** + * Project the CI/CD settings belong to. + */ + project: IXGitLabProject | null; +} + +/** + * The connection type for Project. + */ +export interface IXGitLabProjectConnection { + __typename: '_xGitLabProjectConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabProjectEdge { + __typename: '_xGitLabProjectEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabProject | null; +} + +/** + * Represents a Project Membership + */ +export interface IXGitLabProjectMember { + __typename: '_xGitLabProjectMember'; + + /** + * GitLab::Access level. + */ + accessLevel: IXGitLabAccessLevel | null; + + /** + * Date and time the membership was created. + */ + createdAt: any | null; + + /** + * User that authorized membership. + */ + createdBy: IXGitLabUserCore | null; + + /** + * Date and time the membership expires. + */ + expiresAt: any | null; + + /** + * ID of the member. + */ + id: string; + + /** + * Project that User is a member of. + */ + project: IXGitLabProject | null; + + /** + * Date and time the membership was last updated. + */ + updatedAt: any | null; + + /** + * User that is associated with the member object. + */ + user: IXGitLabUserCore | null; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabProjectPermissions; +} + +/** + * The connection type for ProjectMember. + */ +export interface IXGitLabProjectMemberConnection { + __typename: '_xGitLabProjectMemberConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabProjectMemberEdge { + __typename: '_xGitLabProjectMemberEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabProjectMember | null; +} + +/** + * Project member relation + */ +export const enum XGitLabProjectMemberRelation { + /** + * Direct members + */ + DIRECT = 'DIRECT', + + /** + * Inherited members + */ + INHERITED = 'INHERITED', + + /** + * Descendants members + */ + DESCENDANTS = 'DESCENDANTS', + + /** + * Invited Groups members + */ + INVITED_GROUPS = 'INVITED_GROUPS', +} + +export interface IXGitLabProjectPermissions { + __typename: '_xGitLabProjectPermissions'; + + /** + * Indicates the user can perform `admin_operations` on this resource + */ + adminOperations: boolean; + + /** + * Indicates the user can perform `admin_path_locks` on this resource + */ + adminPathLocks: boolean; + + /** + * Indicates the user can perform `admin_project` on this resource + */ + adminProject: boolean; + + /** + * Indicates the user can perform `admin_remote_mirror` on this resource + */ + adminRemoteMirror: boolean; + + /** + * Indicates the user can perform `admin_wiki` on this resource + */ + adminWiki: boolean; + + /** + * Indicates the user can perform `archive_project` on this resource + */ + archiveProject: boolean; + + /** + * Indicates the user can perform `change_namespace` on this resource + */ + changeNamespace: boolean; + + /** + * Indicates the user can perform `change_visibility_level` on this resource + */ + changeVisibilityLevel: boolean; + + /** + * Indicates the user can perform `create_deployment` on this resource + */ + createDeployment: boolean; + + /** + * Indicates the user can perform `create_design` on this resource + */ + createDesign: boolean; + + /** + * Indicates the user can perform `create_issue` on this resource + */ + createIssue: boolean; + + /** + * Indicates the user can perform `create_label` on this resource + */ + createLabel: boolean; + + /** + * Indicates the user can perform `create_merge_request_from` on this resource + */ + createMergeRequestFrom: boolean; + + /** + * Indicates the user can perform `create_merge_request_in` on this resource + */ + createMergeRequestIn: boolean; + + /** + * Indicates the user can perform `create_pages` on this resource + */ + createPages: boolean; + + /** + * Indicates the user can perform `create_pipeline` on this resource + */ + createPipeline: boolean; + + /** + * Indicates the user can perform `create_pipeline_schedule` on this resource + */ + createPipelineSchedule: boolean; + + /** + * Indicates the user can perform `create_snippet` on this resource + */ + createSnippet: boolean; + + /** + * Indicates the user can perform `create_wiki` on this resource + */ + createWiki: boolean; + + /** + * Indicates the user can perform `destroy_design` on this resource + */ + destroyDesign: boolean; + + /** + * Indicates the user can perform `destroy_pages` on this resource + */ + destroyPages: boolean; + + /** + * Indicates the user can perform `destroy_wiki` on this resource + */ + destroyWiki: boolean; + + /** + * Indicates the user can perform `download_code` on this resource + */ + downloadCode: boolean; + + /** + * Indicates the user can perform `download_wiki_code` on this resource + */ + downloadWikiCode: boolean; + + /** + * Indicates the user can perform `fork_project` on this resource + */ + forkProject: boolean; + + /** + * Indicates the user can perform `push_code` on this resource + */ + pushCode: boolean; + + /** + * Indicates the user can perform `push_to_delete_protected_branch` on this resource + */ + pushToDeleteProtectedBranch: boolean; + + /** + * Indicates the user can perform `read_commit_status` on this resource + */ + readCommitStatus: boolean; + + /** + * Indicates the user can perform `read_cycle_analytics` on this resource + */ + readCycleAnalytics: boolean; + + /** + * Indicates the user can perform `read_design` on this resource + */ + readDesign: boolean; + + /** + * Indicates the user can perform `read_merge_request` on this resource + */ + readMergeRequest: boolean; + + /** + * Indicates the user can perform `read_pages_content` on this resource + */ + readPagesContent: boolean; + + /** + * Indicates the user can perform `read_project` on this resource + */ + readProject: boolean; + + /** + * Indicates the user can perform `read_project_member` on this resource + */ + readProjectMember: boolean; + + /** + * Indicates the user can perform `read_wiki` on this resource + */ + readWiki: boolean; + + /** + * Indicates the user can perform `remove_fork_project` on this resource + */ + removeForkProject: boolean; + + /** + * Indicates the user can perform `remove_pages` on this resource + */ + removePages: boolean; + + /** + * Indicates the user can perform `remove_project` on this resource + */ + removeProject: boolean; + + /** + * Indicates the user can perform `rename_project` on this resource + */ + renameProject: boolean; + + /** + * Indicates the user can perform `request_access` on this resource + */ + requestAccess: boolean; + + /** + * Indicates the user can perform `update_pages` on this resource + */ + updatePages: boolean; + + /** + * Indicates the user can perform `update_wiki` on this resource + */ + updateWiki: boolean; + + /** + * Indicates the user can perform `upload_file` on this resource + */ + uploadFile: boolean; +} + +/** + * Autogenerated input type of ProjectSetComplianceFramework + */ +export interface IXGitLabProjectSetComplianceFrameworkInput { + /** + * ID of the project to change the compliance framework of. + */ + projectId: any; + + /** + * ID of the compliance framework to assign to the project. + */ + complianceFrameworkId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ProjectSetComplianceFramework + */ +export interface IXGitLabProjectSetComplianceFrameworkPayload { + __typename: '_xGitLabProjectSetComplianceFrameworkPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Project after mutation. + */ + project: IXGitLabProject | null; +} + +/** + * Autogenerated input type of ProjectSetLocked + */ +export interface IXGitLabProjectSetLockedInput { + /** + * Full path of the project to mutate. + */ + projectPath: string; + + /** + * Full path to the file. + */ + filePath: string; + + /** + * Whether or not to lock the file path. + */ + lock: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ProjectSetLocked + */ +export interface IXGitLabProjectSetLockedPayload { + __typename: '_xGitLabProjectSetLockedPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Project after mutation. + */ + project: IXGitLabProject | null; +} + +export interface IXGitLabProjectStatistics { + __typename: '_xGitLabProjectStatistics'; + + /** + * Build artifacts size of the project in bytes. + */ + buildArtifactsSize: number; + + /** + * Commit count of the project. + */ + commitCount: number; + + /** + * Large File Storage (LFS) object size of the project in bytes. + */ + lfsObjectsSize: number; + + /** + * Packages size of the project in bytes. + */ + packagesSize: number; + + /** + * CI Pipeline artifacts size in bytes. + */ + pipelineArtifactsSize: number | null; + + /** + * Repository size of the project in bytes. + */ + repositorySize: number; + + /** + * Snippets size of the project in bytes. + */ + snippetsSize: number | null; + + /** + * Storage size of the project in bytes. + */ + storageSize: number; + + /** + * Uploads size of the project in bytes. + */ + uploadsSize: number | null; + + /** + * Wiki size of the project in bytes. + */ + wikiSize: number | null; +} + +/** + * The alert condition for Prometheus + */ +export interface IXGitLabPrometheusAlert { + __typename: '_xGitLabPrometheusAlert'; + + /** + * Human-readable text of the alert condition. + */ + humanizedText: string; + + /** + * ID of the alert condition. + */ + id: string; +} + +/** + * Autogenerated input type of PrometheusIntegrationCreate + */ +export interface IXGitLabPrometheusIntegrationCreateInput { + /** + * Project to create the integration in. + */ + projectPath: string; + + /** + * Whether the integration is receiving alerts. + */ + active: boolean; + + /** + * Endpoint at which Prometheus can be queried. + */ + apiUrl: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PrometheusIntegrationCreate + */ +export interface IXGitLabPrometheusIntegrationCreatePayload { + __typename: '_xGitLabPrometheusIntegrationCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Newly created integration. + */ + integration: IXGitLabAlertManagementPrometheusIntegration | null; +} + +/** + * Autogenerated input type of PrometheusIntegrationResetToken + */ +export interface IXGitLabPrometheusIntegrationResetTokenInput { + /** + * ID of the integration to mutate. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PrometheusIntegrationResetToken + */ +export interface IXGitLabPrometheusIntegrationResetTokenPayload { + __typename: '_xGitLabPrometheusIntegrationResetTokenPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Newly created integration. + */ + integration: IXGitLabAlertManagementPrometheusIntegration | null; +} + +/** + * Autogenerated input type of PrometheusIntegrationUpdate + */ +export interface IXGitLabPrometheusIntegrationUpdateInput { + /** + * ID of the integration to mutate. + */ + id: any; + + /** + * Whether the integration is receiving alerts. + */ + active?: boolean | null; + + /** + * Endpoint at which Prometheus can be queried. + */ + apiUrl?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PrometheusIntegrationUpdate + */ +export interface IXGitLabPrometheusIntegrationUpdatePayload { + __typename: '_xGitLabPrometheusIntegrationUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Newly created integration. + */ + integration: IXGitLabAlertManagementPrometheusIntegration | null; +} + +/** + * Autogenerated input type of PromoteToEpic + */ +export interface IXGitLabPromoteToEpicInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Group the promoted epic will belong to. + */ + groupPath?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of PromoteToEpic + */ +export interface IXGitLabPromoteToEpicPayload { + __typename: '_xGitLabPromoteToEpicPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic after issue promotion. + */ + epic: IXGitLabEpic | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Represents rules that commit pushes must follow. + */ +export interface IXGitLabPushRules { + __typename: '_xGitLabPushRules'; + + /** + * Indicates whether commits not signed through GPG will be rejected. + */ + rejectUnsignedCommits: boolean; +} + +/** + * Pypi metadata + */ +export interface IXGitLabPypiMetadata { + __typename: '_xGitLabPypiMetadata'; + + /** + * ID of the metadatum. + */ + id: any; + + /** + * Required Python version of the Pypi package. + */ + requiredPython: string | null; +} + +export interface IXGitLabQuery { + __typename: '_xGitLabQuery'; + + /** + * Find an issue board list. + */ + boardList: IXGitLabBoardList | null; + + /** + * CI related settings that apply to the entire instance. + */ + ciApplicationSettings: IXGitLabCiApplicationSettings | null; + + /** + * Linted and processed contents of a CI config. + * Should not be requested more than once per request. + */ + ciConfig: IXGitLabCiConfig | null; + + /** + * Monthly CI minutes usage data for the current user. + */ + ciMinutesUsage: IXGitLabCiMinutesNamespaceMonthlyUsageConnection | null; + + /** + * Find a container repository. + */ + containerRepository: IXGitLabContainerRepositoryDetails | null; + + /** + * Fields related to the current license. + */ + currentLicense: IXGitLabCurrentLicense | null; + + /** + * Get information about current user. + */ + currentUser: IXGitLabUserCore | null; + + /** + * Fields related to design management. + */ + designManagement: IXGitLabDesignManagement; + + /** + * Get configured DevOps adoption namespaces. **BETA** This endpoint is subject to change without notice. + */ + devopsAdoptionEnabledNamespaces: IXGitLabDevopsAdoptionEnabledNamespaceConnection | null; + + /** + * Testing endpoint to validate the API with + */ + echo: string; + + /** + * Find a Geo node. + */ + geoNode: IXGitLabGeoNode | null; + + /** + * Find a group. + */ + group: IXGitLabGroup | null; + + /** + * Fields related to Instance Security Dashboard. + */ + instanceSecurityDashboard: IXGitLabInstanceSecurityDashboard | null; + + /** + * Get statistics on the instance. Deprecated in 13.10: This was renamed. + * @deprecated "This was renamed. Please use `Query.usageTrendsMeasurements`. Deprecated in 13.10." + */ + instanceStatisticsMeasurements: IXGitLabUsageTrendsMeasurementConnection | null; + + /** + * Find an issue. + */ + issue: IXGitLabIssue | null; + + /** + * Find an iteration. + */ + iteration: IXGitLabIteration | null; + + /** + * Fields related to entries in the license history. + */ + licenseHistoryEntries: IXGitLabLicenseHistoryEntryConnection | null; + + /** + * Find a merge request. + */ + mergeRequest: IXGitLabMergeRequest | null; + + /** + * Metadata about GitLab. + */ + metadata: IXGitLabMetadata | null; + + /** + * Find a milestone. + */ + milestone: IXGitLabMilestone | null; + + /** + * Find a namespace. + */ + namespace: IXGitLabNamespace | null; + + /** + * Find a package. + */ + package: IXGitLabPackageDetailsType | null; + + /** + * Find a project. + */ + project: IXGitLabProject | null; + + /** + * Find projects visible to the current user. + */ + projects: IXGitLabProjectConnection | null; + + /** + * Information about the complexity of the GraphQL query. + */ + queryComplexity: IXGitLabQueryComplexity | null; + + /** + * Find a runner. + */ + runner: IXGitLabCiRunner | null; + + /** + * Supported runner platforms. + */ + runnerPlatforms: IXGitLabRunnerPlatformConnection | null; + + /** + * Runner setup instructions. + */ + runnerSetup: IXGitLabRunnerSetup | null; + + /** + * Find runners visible to the current user. + */ + runners: IXGitLabCiRunnerConnection | null; + + /** + * Find Snippets visible to the current user. + */ + snippets: IXGitLabSnippetConnection | null; + + /** + * Find timelogs visible to the current user. + */ + timelogs: IXGitLabTimelogConnection | null; + + /** + * Get statistics on the instance. + */ + usageTrendsMeasurements: IXGitLabUsageTrendsMeasurementConnection | null; + + /** + * Find a user. + */ + user: IXGitLabUserCore | null; + + /** + * Find users. + */ + users: IXGitLabUserCoreConnection | null; + + /** + * Vulnerabilities reported on projects on the current user's instance security dashboard. + */ + vulnerabilities: IXGitLabVulnerabilityConnection | null; + + /** + * The historical number of vulnerabilities per day for the projects on the current user's instance security dashboard. + */ + vulnerabilitiesCountByDay: IXGitLabVulnerabilitiesCountByDayConnection | null; + + /** + * Find a vulnerability. + */ + vulnerability: IXGitLabVulnerability | null; +} + +export interface IBoardListOnXGitLabQueryArguments { + /** + * Global ID of the list. + */ + id: any; + + /** + * Filters applied when getting issue metadata in the board list. + */ + issueFilters?: IXGitLabBoardIssueInput | null; +} + +export interface ICiConfigOnXGitLabQueryArguments { + /** + * Project of the CI config. + */ + projectPath: string; + + /** + * Sha for the pipeline. + */ + sha?: string | null; + + /** + * Contents of `.gitlab-ci.yml`. + */ + content: string; + + /** + * Run pipeline creation simulation, or only do static check. + */ + dryRun?: boolean | null; +} + +export interface ICiMinutesUsageOnXGitLabQueryArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IContainerRepositoryOnXGitLabQueryArguments { + /** + * Global ID of the container repository. + */ + id: any; +} + +export interface IDevopsAdoptionEnabledNamespacesOnXGitLabQueryArguments { + /** + * Filter by display namespace. + */ + displayNamespaceId?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IEchoOnXGitLabQueryArguments { + /** + * Text to echo back. + */ + text: string; +} + +export interface IGeoNodeOnXGitLabQueryArguments { + /** + * Name of the Geo node. Defaults to the current Geo node name. + */ + name?: string | null; +} + +export interface IGroupOnXGitLabQueryArguments { + /** + * Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. + */ + fullPath: string; +} + +export interface IInstanceStatisticsMeasurementsOnXGitLabQueryArguments { + /** + * Type of measurement or statistics to retrieve. + */ + identifier: XGitLabMeasurementIdentifier; + + /** + * Measurement recorded after this date. + */ + recordedAfter?: any | null; + + /** + * Measurement recorded before this date. + */ + recordedBefore?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIssueOnXGitLabQueryArguments { + /** + * Global ID of the issue. + */ + id: any; +} + +export interface IIterationOnXGitLabQueryArguments { + /** + * Find an iteration by its ID. + */ + id: any; +} + +export interface ILicenseHistoryEntriesOnXGitLabQueryArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMergeRequestOnXGitLabQueryArguments { + /** + * Global ID of the merge request. + */ + id: any; +} + +export interface IMilestoneOnXGitLabQueryArguments { + /** + * Find a milestone by its ID. + */ + id: any; +} + +export interface INamespaceOnXGitLabQueryArguments { + /** + * Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. + */ + fullPath: string; +} + +export interface IPackageOnXGitLabQueryArguments { + /** + * Global ID of the package. + */ + id: any; +} + +export interface IProjectOnXGitLabQueryArguments { + /** + * Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. + */ + fullPath: string; +} + +export interface IProjectsOnXGitLabQueryArguments { + /** + * Limit projects that the current user is a member of. + */ + membership?: boolean | null; + + /** + * Search query for project name, path, or description. + */ + search?: string | null; + + /** + * Filter projects by IDs. + */ + ids?: Array | null; + + /** + * Include namespace in project search. + */ + searchNamespaces?: boolean | null; + + /** + * Sort order of results. + */ + sort?: string | null; + + /** + * Filters projects by topics. + */ + topics?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IRunnerOnXGitLabQueryArguments { + /** + * Runner ID. + */ + id: any; +} + +export interface IRunnerPlatformsOnXGitLabQueryArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IRunnerSetupOnXGitLabQueryArguments { + /** + * Platform to generate the instructions for. + */ + platform: string; + + /** + * Architecture to generate the instructions for. + */ + architecture: string; +} + +export interface IRunnersOnXGitLabQueryArguments { + /** + * Filter runners by status. + */ + status?: XGitLabCiRunnerStatus | null; + + /** + * Filter runners by type. + */ + type?: XGitLabCiRunnerType | null; + + /** + * Filter by tags associated with the runner (comma-separated or array). + */ + tagList?: Array | null; + + /** + * Filter by full token or partial text in description field. + */ + search?: string | null; + + /** + * Sort order of results. + */ + sort?: XGitLabCiRunnerSort | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetsOnXGitLabQueryArguments { + /** + * Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + */ + ids?: Array | null; + + /** + * Visibility of the snippet. + */ + visibility?: XGitLabVisibilityScopesEnum | null; + + /** + * ID of an author. + */ + authorId?: any | null; + + /** + * ID of a project. + */ + projectId?: any | null; + + /** + * Type of snippet. + */ + type?: XGitLabTypeEnum | null; + + /** + * Explore personal snippets. + */ + explore?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabQueryArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IUsageTrendsMeasurementsOnXGitLabQueryArguments { + /** + * Type of measurement or statistics to retrieve. + */ + identifier: XGitLabMeasurementIdentifier; + + /** + * Measurement recorded after this date. + */ + recordedAfter?: any | null; + + /** + * Measurement recorded before this date. + */ + recordedBefore?: any | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IUserOnXGitLabQueryArguments { + /** + * ID of the User. + */ + id?: any | null; + + /** + * Username of the User. + */ + username?: string | null; +} + +export interface IUsersOnXGitLabQueryArguments { + /** + * List of user Global IDs. + */ + ids?: Array | null; + + /** + * List of usernames. + */ + usernames?: Array | null; + + /** + * Sort users by this criteria. + * @default "created_desc" + */ + sort?: XGitLabSort | null; + + /** + * Query to search users by name, username, or primary email. + */ + search?: string | null; + + /** + * Return only admin users. + * @default false + */ + admins?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitiesOnXGitLabQueryArguments { + /** + * Filter vulnerabilities by project. + */ + projectId?: Array | null; + + /** + * Filter vulnerabilities by report type. + */ + reportType?: Array | null; + + /** + * Filter vulnerabilities by severity. + */ + severity?: Array | null; + + /** + * Filter vulnerabilities by state. + */ + state?: Array | null; + + /** + * Filter vulnerabilities by VulnerabilityScanner.externalId. + */ + scanner?: Array | null; + + /** + * Filter vulnerabilities by scanner ID. + */ + scannerId?: Array | null; + + /** + * List vulnerabilities by sort order. + * @default "severity_desc" + */ + sort?: XGitLabVulnerabilitySort | null; + + /** + * Returns only the vulnerabilities which have been resolved on default branch. + */ + hasResolution?: boolean | null; + + /** + * Returns only the vulnerabilities which have linked issues. + */ + hasIssues?: boolean | null; + + /** + * Filter vulnerabilities by location image. When this filter is present, the + * response only matches entries for a `reportType` that includes + * `container_scanning`, `cluster_image_scanning`. + */ + image?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilitiesCountByDayOnXGitLabQueryArguments { + /** + * First day for which to fetch vulnerability history. + */ + startDate: any; + + /** + * Last day for which to fetch vulnerability history. + */ + endDate: any; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IVulnerabilityOnXGitLabQueryArguments { + /** + * Global ID of the Vulnerability. + */ + id: any; +} + +export interface IXGitLabQueryComplexity { + __typename: '_xGitLabQueryComplexity'; + + /** + * GraphQL query complexity limit. + */ + limit: number | null; + + /** + * GraphQL query complexity score. + */ + score: number | null; +} + +/** + * Recent failure history of a test case. + */ +export interface IXGitLabRecentFailures { + __typename: '_xGitLabRecentFailures'; + + /** + * Name of the base branch of the project. + */ + baseBranch: string | null; + + /** + * Number of times the test case has failed in the past 14 days. + */ + count: number | null; +} + +/** + * State of a Geo registry + */ +export const enum XGitLabRegistryState { + /** + * Registry waiting to be synced. + */ + PENDING = 'PENDING', + + /** + * Registry currently syncing. + */ + STARTED = 'STARTED', + + /** + * Registry that is synced. + */ + SYNCED = 'SYNCED', + + /** + * Registry that failed to sync. + */ + FAILED = 'FAILED', +} + +/** + * Represents a release + */ +export interface IXGitLabRelease { + __typename: '_xGitLabRelease'; + + /** + * Assets of the release. + */ + assets: IXGitLabReleaseAssets | null; + + /** + * User that created the release. + */ + author: IXGitLabUserCore | null; + + /** + * Commit associated with the release. + */ + commit: IXGitLabCommit | null; + + /** + * Timestamp of when the release was created. + */ + createdAt: any | null; + + /** + * Description (also known as "release notes") of the release. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * Evidence for the release. + */ + evidences: IXGitLabReleaseEvidenceConnection | null; + + /** + * Links of the release. + */ + links: IXGitLabReleaseLinks | null; + + /** + * Milestones associated to the release. + */ + milestones: IXGitLabMilestoneConnection | null; + + /** + * Name of the release. + */ + name: string | null; + + /** + * Timestamp of when the release was released. + */ + releasedAt: any | null; + + /** + * Name of the tag associated with the release. + */ + tagName: string | null; + + /** + * Relative web path to the tag associated with the release. + */ + tagPath: string | null; + + /** + * Indicates the release is an upcoming release. + */ + upcomingRelease: boolean | null; +} + +export interface IEvidencesOnXGitLabReleaseArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IMilestonesOnXGitLabReleaseArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Represents an asset link associated with a release + */ +export interface IXGitLabReleaseAssetLink { + __typename: '_xGitLabReleaseAssetLink'; + + /** + * Relative path for the direct asset link. + */ + directAssetPath: string | null; + + /** + * Direct asset URL of the link. + */ + directAssetUrl: string | null; + + /** + * Indicates the link points to an external resource. + */ + external: boolean | null; + + /** + * ID of the link. + */ + id: string; + + /** + * Type of the link: `other`, `runbook`, `image`, `package`; defaults to `other`. + */ + linkType: XGitLabReleaseAssetLinkType | null; + + /** + * Name of the link. + */ + name: string | null; + + /** + * URL of the link. + */ + url: string | null; +} + +/** + * The connection type for ReleaseAssetLink. + */ +export interface IXGitLabReleaseAssetLinkConnection { + __typename: '_xGitLabReleaseAssetLinkConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of ReleaseAssetLinkCreate + */ +export interface IXGitLabReleaseAssetLinkCreateInput { + /** + * Name of the asset link. + */ + name: string; + + /** + * URL of the asset link. + */ + url: string; + + /** + * Relative path for a direct asset link. + */ + directAssetPath?: string | null; + + /** + * Type of the asset link. + * @default "OTHER" + */ + linkType?: XGitLabReleaseAssetLinkType | null; + + /** + * Full path of the project the asset link is associated with. + */ + projectPath: string; + + /** + * Name of the associated release's tag. + */ + tagName: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ReleaseAssetLinkCreate + */ +export interface IXGitLabReleaseAssetLinkCreatePayload { + __typename: '_xGitLabReleaseAssetLinkCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Asset link after mutation. + */ + link: IXGitLabReleaseAssetLink | null; +} + +/** + * Autogenerated input type of ReleaseAssetLinkDelete + */ +export interface IXGitLabReleaseAssetLinkDeleteInput { + /** + * ID of the release asset link to delete. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ReleaseAssetLinkDelete + */ +export interface IXGitLabReleaseAssetLinkDeletePayload { + __typename: '_xGitLabReleaseAssetLinkDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Deleted release asset link. + */ + link: IXGitLabReleaseAssetLink | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabReleaseAssetLinkEdge { + __typename: '_xGitLabReleaseAssetLinkEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabReleaseAssetLink | null; +} + +/** + * Fields that are available when modifying a release asset link + */ +export interface IXGitLabReleaseAssetLinkInput { + /** + * Name of the asset link. + */ + name: string; + + /** + * URL of the asset link. + */ + url: string; + + /** + * Relative path for a direct asset link. + */ + directAssetPath?: string | null; + + /** + * Type of the asset link. + * @default "OTHER" + */ + linkType?: XGitLabReleaseAssetLinkType | null; +} + +/** + * Type of the link: `other`, `runbook`, `image`, `package` + */ +export const enum XGitLabReleaseAssetLinkType { + /** + * Other link type + */ + OTHER = 'OTHER', + + /** + * Runbook link type + */ + RUNBOOK = 'RUNBOOK', + + /** + * Package link type + */ + PACKAGE = 'PACKAGE', + + /** + * Image link type + */ + IMAGE = 'IMAGE', +} + +/** + * Autogenerated input type of ReleaseAssetLinkUpdate + */ +export interface IXGitLabReleaseAssetLinkUpdateInput { + /** + * ID of the release asset link to update. + */ + id: any; + + /** + * Name of the asset link. + */ + name?: string | null; + + /** + * URL of the asset link. + */ + url?: string | null; + + /** + * Relative path for a direct asset link. + */ + directAssetPath?: string | null; + + /** + * Type of the asset link. + */ + linkType?: XGitLabReleaseAssetLinkType | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ReleaseAssetLinkUpdate + */ +export interface IXGitLabReleaseAssetLinkUpdatePayload { + __typename: '_xGitLabReleaseAssetLinkUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Asset link after mutation. + */ + link: IXGitLabReleaseAssetLink | null; +} + +/** + * A container for all assets associated with a release + */ +export interface IXGitLabReleaseAssets { + __typename: '_xGitLabReleaseAssets'; + + /** + * Number of assets of the release. + */ + count: number | null; + + /** + * Asset links of the release. + */ + links: IXGitLabReleaseAssetLinkConnection | null; + + /** + * Sources of the release. + */ + sources: IXGitLabReleaseSourceConnection | null; +} + +export interface ILinksOnXGitLabReleaseAssetsArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISourcesOnXGitLabReleaseAssetsArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Fields that are available when modifying release assets + */ +export interface IXGitLabReleaseAssetsInput { + /** + * List of asset links to associate to the release. + */ + links?: Array | null; +} + +/** + * The connection type for Release. + */ +export interface IXGitLabReleaseConnection { + __typename: '_xGitLabReleaseConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of ReleaseCreate + */ +export interface IXGitLabReleaseCreateInput { + /** + * Full path of the project the release is associated with. + */ + projectPath: string; + + /** + * Name of the tag to associate with the release. + */ + tagName: string; + + /** + * Commit SHA or branch name to use if creating a new tag. + */ + ref?: string | null; + + /** + * Name of the release. + */ + name?: string | null; + + /** + * Description (also known as "release notes") of the release. + */ + description?: string | null; + + /** + * Date and time for the release. Defaults to the current date and time. + */ + releasedAt?: any | null; + + /** + * Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. + */ + milestones?: Array | null; + + /** + * Assets associated to the release. + */ + assets?: IXGitLabReleaseAssetsInput | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ReleaseCreate + */ +export interface IXGitLabReleaseCreatePayload { + __typename: '_xGitLabReleaseCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Release after mutation. + */ + release: IXGitLabRelease | null; +} + +/** + * Autogenerated input type of ReleaseDelete + */ +export interface IXGitLabReleaseDeleteInput { + /** + * Full path of the project the release is associated with. + */ + projectPath: string; + + /** + * Name of the tag associated with the release to delete. + */ + tagName: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ReleaseDelete + */ +export interface IXGitLabReleaseDeletePayload { + __typename: '_xGitLabReleaseDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Deleted release. + */ + release: IXGitLabRelease | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabReleaseEdge { + __typename: '_xGitLabReleaseEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabRelease | null; +} + +/** + * Evidence for a release + */ +export interface IXGitLabReleaseEvidence { + __typename: '_xGitLabReleaseEvidence'; + + /** + * Timestamp when the evidence was collected. + */ + collectedAt: any | null; + + /** + * URL from where the evidence can be downloaded. + */ + filepath: string | null; + + /** + * ID of the evidence. + */ + id: string; + + /** + * SHA1 ID of the evidence hash. + */ + sha: string | null; +} + +/** + * The connection type for ReleaseEvidence. + */ +export interface IXGitLabReleaseEvidenceConnection { + __typename: '_xGitLabReleaseEvidenceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabReleaseEvidenceEdge { + __typename: '_xGitLabReleaseEvidenceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabReleaseEvidence | null; +} + +export interface IXGitLabReleaseLinks { + __typename: '_xGitLabReleaseLinks'; + + /** + * HTTP URL of the issues page, filtered by this release and `state=closed`. + */ + closedIssuesUrl: string | null; + + /** + * HTTP URL of the merge request page , filtered by this release and `state=closed`. + */ + closedMergeRequestsUrl: string | null; + + /** + * HTTP URL of the release's edit page. + */ + editUrl: string | null; + + /** + * HTTP URL of the merge request page , filtered by this release and `state=merged`. + */ + mergedMergeRequestsUrl: string | null; + + /** + * HTTP URL of the issues page, filtered by this release and `state=open`. + */ + openedIssuesUrl: string | null; + + /** + * HTTP URL of the merge request page, filtered by this release and `state=open`. + */ + openedMergeRequestsUrl: string | null; + + /** + * HTTP URL of the release. + */ + selfUrl: string | null; +} + +/** + * Values for sorting releases + */ +export const enum XGitLabReleaseSort { + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', + + /** + * Released at by descending order. + */ + RELEASED_AT_DESC = 'RELEASED_AT_DESC', + + /** + * Released at by ascending order. + */ + RELEASED_AT_ASC = 'RELEASED_AT_ASC', +} + +/** + * Represents the source code attached to a release in a particular format + */ +export interface IXGitLabReleaseSource { + __typename: '_xGitLabReleaseSource'; + + /** + * Format of the source. + */ + format: string | null; + + /** + * Download URL of the source. + */ + url: string | null; +} + +/** + * The connection type for ReleaseSource. + */ +export interface IXGitLabReleaseSourceConnection { + __typename: '_xGitLabReleaseSourceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabReleaseSourceEdge { + __typename: '_xGitLabReleaseSourceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabReleaseSource | null; +} + +/** + * Release tag ID wildcard values + */ +export const enum XGitLabReleaseTagWildcardId { + /** + * No release tag is assigned. + */ + NONE = 'NONE', + + /** + * Release tag is assigned. + */ + ANY = 'ANY', +} + +/** + * Autogenerated input type of ReleaseUpdate + */ +export interface IXGitLabReleaseUpdateInput { + /** + * Full path of the project the release is associated with. + */ + projectPath: string; + + /** + * Name of the tag associated with the release. + */ + tagName: string; + + /** + * Name of the release. + */ + name?: string | null; + + /** + * Description (release notes) of the release. + */ + description?: string | null; + + /** + * Release date. + */ + releasedAt?: any | null; + + /** + * Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. + */ + milestones?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ReleaseUpdate + */ +export interface IXGitLabReleaseUpdatePayload { + __typename: '_xGitLabReleaseUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Release after mutation. + */ + release: IXGitLabRelease | null; +} + +/** + * Autogenerated input type of RemoveProjectFromSecurityDashboard + */ +export interface IXGitLabRemoveProjectFromSecurityDashboardInput { + /** + * ID of the project to remove from the Instance Security Dashboard. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of RemoveProjectFromSecurityDashboard + */ +export interface IXGitLabRemoveProjectFromSecurityDashboardPayload { + __typename: '_xGitLabRemoveProjectFromSecurityDashboardPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of RepositionImageDiffNote + */ +export interface IXGitLabRepositionImageDiffNoteInput { + /** + * Global ID of the DiffNote to update. + */ + id: any; + + /** + * Position of this note on a diff. + */ + position: IXGitLabUpdateDiffImagePositionInput; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of RepositionImageDiffNote + */ +export interface IXGitLabRepositionImageDiffNotePayload { + __typename: '_xGitLabRepositionImageDiffNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +export interface IXGitLabRepository { + __typename: '_xGitLabRepository'; + + /** + * Blobs contained within the repository + */ + blobs: IXGitLabRepositoryBlobConnection | null; + + /** + * Names of branches available in this repository that match the search pattern. + */ + branchNames: Array | null; + + /** + * Shows a disk path of the repository. + */ + diskPath: string | null; + + /** + * Indicates repository has no visible content. + */ + empty: boolean; + + /** + * Indicates a corresponding Git repository exists on disk. + */ + exists: boolean; + + /** + * Paginated tree of the repository. Available only when feature flag + * `paginated_tree_graphql_query` is enabled. This flag is enabled by default. + */ + paginatedTree: IXGitLabTreeConnection | null; + + /** + * Default branch of the repository. + */ + rootRef: string | null; + + /** + * Tree of the repository. + */ + tree: IXGitLabTree | null; +} + +export interface IBlobsOnXGitLabRepositoryArguments { + /** + * Array of desired blob paths. + */ + paths: Array; + + /** + * Commit ref to get the blobs from. Default value is HEAD. + * @default null + */ + ref?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IBranchNamesOnXGitLabRepositoryArguments { + /** + * Pattern to search for branch names by. + */ + searchPattern: string; + + /** + * Number of branch names to skip. + */ + offset: number; + + /** + * Number of branch names to return. + */ + limit: number; +} + +export interface IPaginatedTreeOnXGitLabRepositoryArguments { + /** + * Path to get the tree for. Default value is the root of the repository. + * @default "" + */ + path?: string | null; + + /** + * Commit ref to get the tree for. Default value is HEAD. + * @default "head" + */ + ref?: string | null; + + /** + * Used to get a recursive tree. Default is false. + * @default false + */ + recursive?: boolean | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITreeOnXGitLabRepositoryArguments { + /** + * Path to get the tree for. Default value is the root of the repository. + * @default "" + */ + path?: string | null; + + /** + * Commit ref to get the tree for. Default value is HEAD. + * @default "head" + */ + ref?: string | null; + + /** + * Used to get a recursive tree. Default is false. + * @default false + */ + recursive?: boolean | null; +} + +export interface IXGitLabRepositoryBlob { + __typename: '_xGitLabRepositoryBlob'; + + /** + * Whether the current user can modify the blob. + */ + canModifyBlob: boolean | null; + + /** + * Web path to edit the blob in the old-style editor. + */ + editBlobPath: string | null; + + /** + * Web path to download the raw blob via external storage, if enabled. + */ + externalStorageUrl: string | null; + + /** + * Expected format of the blob based on the extension. + */ + fileType: string | null; + + /** + * Web path to edit this blob using a forked project. + */ + forkAndEditPath: string | null; + + /** + * ID of the blob. + */ + id: string; + + /** + * Web path to edit this blob in the Web IDE. + */ + ideEditPath: string | null; + + /** + * Web path to edit this blob in the Web IDE using a forked project. + */ + ideForkAndEditPath: string | null; + + /** + * LFS OID of the blob. + */ + lfsOid: string | null; + + /** + * Blob mode. + */ + mode: string | null; + + /** + * Blob name. + */ + name: string | null; + + /** + * OID of the blob. + */ + oid: string; + + /** + * Path of the blob. + */ + path: string; + + /** + * Blob plain highlighted data. + */ + plainData: string | null; + + /** + * Raw content of the blob. + */ + rawBlob: string | null; + + /** + * Web path to download the raw blob. + */ + rawPath: string | null; + + /** + * Size (in bytes) of the blob, or the blob target if stored externally. + */ + rawSize: number | null; + + /** + * Raw content of the blob, if the blob is text data. + */ + rawTextBlob: string | null; + + /** + * Web path to replace the blob content. + */ + replacePath: string | null; + + /** + * Blob content rich viewer. + */ + richViewer: IXGitLabBlobViewer | null; + + /** + * Blob content simple viewer. + */ + simpleViewer: IXGitLabBlobViewer; + + /** + * Size (in bytes) of the blob. + */ + size: number | null; + + /** + * Whether the blob's content is stored externally (for instance, in LFS). + */ + storedExternally: boolean | null; + + /** + * Web path of the blob. + */ + webPath: string | null; +} + +/** + * The connection type for RepositoryBlob. + */ +export interface IXGitLabRepositoryBlobConnection { + __typename: '_xGitLabRepositoryBlobConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabRepositoryBlobEdge { + __typename: '_xGitLabRepositoryBlobEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabRepositoryBlob | null; +} + +/** + * Represents a requirement + */ +export interface IXGitLabRequirement { + __typename: '_xGitLabRequirement'; + + /** + * Author of the requirement. + */ + author: IXGitLabUserCore; + + /** + * Timestamp of when the requirement was created. + */ + createdAt: any; + + /** + * Description of the requirement. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * ID of the requirement. + */ + id: string; + + /** + * Internal ID of the requirement. + */ + iid: string; + + /** + * Indicates if latest test report was created by user. + */ + lastTestReportManuallyCreated: boolean | null; + + /** + * Latest requirement test report state. + */ + lastTestReportState: XGitLabTestReportState | null; + + /** + * Project to which the requirement belongs. + */ + project: IXGitLabProject; + + /** + * State of the requirement. + */ + state: XGitLabRequirementState; + + /** + * Test reports of the requirement. + */ + testReports: IXGitLabTestReportConnection | null; + + /** + * Title of the requirement. + */ + title: string | null; + + /** + * The GitLab Flavored Markdown rendering of `title` + */ + titleHtml: string | null; + + /** + * Timestamp of when the requirement was last updated. + */ + updatedAt: any; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabRequirementPermissions; +} + +export interface ITestReportsOnXGitLabRequirementArguments { + /** + * List test reports by sort order. + */ + sort?: XGitLabSort | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for Requirement. + */ +export interface IXGitLabRequirementConnection { + __typename: '_xGitLabRequirementConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabRequirementEdge { + __typename: '_xGitLabRequirementEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabRequirement | null; +} + +/** + * Check permissions for the current user on a requirement + */ +export interface IXGitLabRequirementPermissions { + __typename: '_xGitLabRequirementPermissions'; + + /** + * Indicates the user can perform `admin_requirement` on this resource + */ + adminRequirement: boolean; + + /** + * Indicates the user can perform `create_requirement` on this resource + */ + createRequirement: boolean; + + /** + * Indicates the user can perform `destroy_requirement` on this resource + */ + destroyRequirement: boolean; + + /** + * Indicates the user can perform `read_requirement` on this resource + */ + readRequirement: boolean; + + /** + * Indicates the user can perform `update_requirement` on this resource + */ + updateRequirement: boolean; +} + +/** + * State of a requirement + */ +export const enum XGitLabRequirementState { + /** + * Open requirement. + */ + OPENED = 'OPENED', + + /** + * Archived requirement. + */ + ARCHIVED = 'ARCHIVED', +} + +/** + * Counts of requirements by their state + */ +export interface IXGitLabRequirementStatesCount { + __typename: '_xGitLabRequirementStatesCount'; + + /** + * Number of archived requirements. + */ + archived: number | null; + + /** + * Number of opened requirements. + */ + opened: number | null; +} + +/** + * Status of a requirement based on last test report + */ +export const enum XGitLabRequirementStatusFilter { + /** + * Passed test report. + */ + PASSED = 'PASSED', + + /** + * Failed test report. + */ + FAILED = 'FAILED', + + /** + * Requirements without any test report. + */ + MISSING = 'MISSING', +} + +export type _xGitLabResolvableInterface = IXGitLabDiscussion | IXGitLabNote; + +export interface IXGitLabResolvableInterface { + __typename: '_xGitLabResolvableInterface'; + + /** + * Indicates if the object can be resolved. + */ + resolvable: boolean; + + /** + * Indicates if the object is resolved. + */ + resolved: boolean; + + /** + * Timestamp of when the object was resolved. + */ + resolvedAt: any | null; + + /** + * User who resolved the object. + */ + resolvedBy: IXGitLabUserCore | null; +} + +export interface IXGitLabRootStorageStatistics { + __typename: '_xGitLabRootStorageStatistics'; + + /** + * CI artifacts size in bytes. + */ + buildArtifactsSize: number; + + /** + * LFS objects size in bytes. + */ + lfsObjectsSize: number; + + /** + * Packages size in bytes. + */ + packagesSize: number; + + /** + * CI pipeline artifacts size in bytes. + */ + pipelineArtifactsSize: number; + + /** + * Git repository size in bytes. + */ + repositorySize: number; + + /** + * Snippets size in bytes. + */ + snippetsSize: number; + + /** + * Total storage in bytes. + */ + storageSize: number; + + /** + * Uploads size in bytes. + */ + uploadsSize: number; + + /** + * Wiki size in bytes. + */ + wikiSize: number; +} + +export interface IXGitLabRunnerArchitecture { + __typename: '_xGitLabRunnerArchitecture'; + + /** + * Download location for the runner for the platform architecture. + */ + downloadLocation: string; + + /** + * Name of the runner platform architecture. + */ + name: string; +} + +/** + * The connection type for RunnerArchitecture. + */ +export interface IXGitLabRunnerArchitectureConnection { + __typename: '_xGitLabRunnerArchitectureConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabRunnerArchitectureEdge { + __typename: '_xGitLabRunnerArchitectureEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabRunnerArchitecture | null; +} + +/** + * Autogenerated input type of RunnerDelete + */ +export interface IXGitLabRunnerDeleteInput { + /** + * ID of the runner to delete. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of RunnerDelete + */ +export interface IXGitLabRunnerDeletePayload { + __typename: '_xGitLabRunnerDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Values for filtering runners in namespaces. + */ +export const enum XGitLabRunnerMembershipFilter { + /** + * Include runners that have a direct relationship. + */ + DIRECT = 'DIRECT', + + /** + * Include runners that have either a direct relationship or a relationship with + * descendants. These can be project runners or group runners (in the case where + * group is queried). + */ + DESCENDANTS = 'DESCENDANTS', +} + +export interface IXGitLabRunnerPermissions { + __typename: '_xGitLabRunnerPermissions'; + + /** + * Indicates the user can perform `delete_runner` on this resource + */ + deleteRunner: boolean; + + /** + * Indicates the user can perform `read_runner` on this resource + */ + readRunner: boolean; + + /** + * Indicates the user can perform `update_runner` on this resource + */ + updateRunner: boolean; +} + +export interface IXGitLabRunnerPlatform { + __typename: '_xGitLabRunnerPlatform'; + + /** + * Runner architectures supported for the platform. + */ + architectures: IXGitLabRunnerArchitectureConnection | null; + + /** + * Human readable name of the runner platform. + */ + humanReadableName: string; + + /** + * Name slug of the runner platform. + */ + name: string; +} + +export interface IArchitecturesOnXGitLabRunnerPlatformArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for RunnerPlatform. + */ +export interface IXGitLabRunnerPlatformConnection { + __typename: '_xGitLabRunnerPlatformConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabRunnerPlatformEdge { + __typename: '_xGitLabRunnerPlatformEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabRunnerPlatform | null; +} + +export interface IXGitLabRunnerSetup { + __typename: '_xGitLabRunnerSetup'; + + /** + * Instructions for installing the runner on the specified architecture. + */ + installInstructions: string; + + /** + * Instructions for registering the runner. The actual registration tokens are + * not included in the commands. Instead, a placeholder `$REGISTRATION_TOKEN` is shown. + */ + registerInstructions: string | null; +} + +/** + * Autogenerated input type of RunnersRegistrationTokenReset + */ +export interface IXGitLabRunnersRegistrationTokenResetInput { + /** + * Scope of the object to reset the token for. + */ + type: XGitLabCiRunnerType; + + /** + * ID of the project or group to reset the token for. Omit if resetting instance runner token. + */ + id?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of RunnersRegistrationTokenReset + */ +export interface IXGitLabRunnersRegistrationTokenResetPayload { + __typename: '_xGitLabRunnersRegistrationTokenResetPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Runner token after mutation. + */ + token: string | null; +} + +/** + * Autogenerated input type of RunnerUpdate + */ +export interface IXGitLabRunnerUpdateInput { + /** + * ID of the runner to update. + */ + id: any; + + /** + * Description of the runner. + */ + description?: string | null; + + /** + * Maximum timeout (in seconds) for jobs processed by the runner. + */ + maximumTimeout?: number | null; + + /** + * Access level of the runner. + */ + accessLevel?: XGitLabCiRunnerAccessLevel | null; + + /** + * Indicates the runner is allowed to receive jobs. + */ + active?: boolean | null; + + /** + * Indicates the runner is locked. + */ + locked?: boolean | null; + + /** + * Indicates the runner is able to run untagged jobs. + */ + runUntagged?: boolean | null; + + /** + * Tags associated with the runner. + */ + tagList?: Array | null; + + /** + * Public projects' "minutes cost factor" associated with the runner (GitLab.com only). + */ + publicProjectsMinutesCostFactor?: number | null; + + /** + * Private projects' "minutes cost factor" associated with the runner (GitLab.com only). + */ + privateProjectsMinutesCostFactor?: number | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of RunnerUpdate + */ +export interface IXGitLabRunnerUpdatePayload { + __typename: '_xGitLabRunnerUpdatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Runner after mutation. + */ + runner: IXGitLabCiRunner | null; +} + +/** + * Represents a CI configuration of SAST + */ +export interface IXGitLabSastCiConfiguration { + __typename: '_xGitLabSastCiConfiguration'; + + /** + * List of analyzers entities attached to SAST configuration. + */ + analyzers: IXGitLabSastCiConfigurationAnalyzersEntityConnection | null; + + /** + * List of global entities related to SAST configuration. + */ + global: IXGitLabSastCiConfigurationEntityConnection | null; + + /** + * List of pipeline entities related to SAST configuration. + */ + pipeline: IXGitLabSastCiConfigurationEntityConnection | null; +} + +export interface IAnalyzersOnXGitLabSastCiConfigurationArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGlobalOnXGitLabSastCiConfigurationArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IPipelineOnXGitLabSastCiConfigurationArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Represents an analyzer entity in SAST CI configuration + */ +export interface IXGitLabSastCiConfigurationAnalyzersEntity { + __typename: '_xGitLabSastCiConfigurationAnalyzersEntity'; + + /** + * Analyzer description that is displayed on the form. + */ + description: string | null; + + /** + * Indicates whether an analyzer is enabled. + */ + enabled: boolean | null; + + /** + * Analyzer label used in the config UI. + */ + label: string | null; + + /** + * Name of the analyzer. + */ + name: string | null; + + /** + * List of supported variables. + */ + variables: IXGitLabSastCiConfigurationEntityConnection | null; +} + +export interface IVariablesOnXGitLabSastCiConfigurationAnalyzersEntityArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for SastCiConfigurationAnalyzersEntity. + */ +export interface IXGitLabSastCiConfigurationAnalyzersEntityConnection { + __typename: '_xGitLabSastCiConfigurationAnalyzersEntityConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSastCiConfigurationAnalyzersEntityEdge { + __typename: '_xGitLabSastCiConfigurationAnalyzersEntityEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSastCiConfigurationAnalyzersEntity | null; +} + +/** + * Represents the analyzers entity in SAST CI configuration + */ +export interface IXGitLabSastCiConfigurationAnalyzersEntityInput { + /** + * Name of analyzer. + */ + name: string; + + /** + * State of the analyzer. + */ + enabled: boolean; + + /** + * List of variables for the analyzer. + */ + variables?: Array | null; +} + +/** + * Represents an entity in SAST CI configuration + */ +export interface IXGitLabSastCiConfigurationEntity { + __typename: '_xGitLabSastCiConfigurationEntity'; + + /** + * Default value that is used if value is empty. + */ + defaultValue: string | null; + + /** + * Entity description that is displayed on the form. + */ + description: string | null; + + /** + * CI keyword of entity. + */ + field: string | null; + + /** + * Label for entity used in the form. + */ + label: string | null; + + /** + * Different possible values of the field. + */ + options: IXGitLabSastCiConfigurationOptionsEntityConnection | null; + + /** + * Size of the UI component. + */ + size: XGitLabSastUiComponentSize | null; + + /** + * Type of the field value. + */ + type: string | null; + + /** + * Current value of the entity. + */ + value: string | null; +} + +export interface IOptionsOnXGitLabSastCiConfigurationEntityArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for SastCiConfigurationEntity. + */ +export interface IXGitLabSastCiConfigurationEntityConnection { + __typename: '_xGitLabSastCiConfigurationEntityConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSastCiConfigurationEntityEdge { + __typename: '_xGitLabSastCiConfigurationEntityEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSastCiConfigurationEntity | null; +} + +/** + * Represents an entity in SAST CI configuration + */ +export interface IXGitLabSastCiConfigurationEntityInput { + /** + * CI keyword of entity. + */ + field: string; + + /** + * Default value that is used if value is empty. + */ + defaultValue: string; + + /** + * Current value of the entity. + */ + value: string; +} + +/** + * Represents a CI configuration of SAST + */ +export interface IXGitLabSastCiConfigurationInput { + /** + * List of global entities related to SAST configuration. + */ + global?: Array | null; + + /** + * List of pipeline entities related to SAST configuration. + */ + pipeline?: Array | null; + + /** + * List of analyzers and related variables for the SAST configuration. + */ + analyzers?: Array | null; +} + +/** + * Represents an entity for options in SAST CI configuration + */ +export interface IXGitLabSastCiConfigurationOptionsEntity { + __typename: '_xGitLabSastCiConfigurationOptionsEntity'; + + /** + * Label of option entity. + */ + label: string | null; + + /** + * Value of option entity. + */ + value: string | null; +} + +/** + * The connection type for SastCiConfigurationOptionsEntity. + */ +export interface IXGitLabSastCiConfigurationOptionsEntityConnection { + __typename: '_xGitLabSastCiConfigurationOptionsEntityConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSastCiConfigurationOptionsEntityEdge { + __typename: '_xGitLabSastCiConfigurationOptionsEntityEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSastCiConfigurationOptionsEntity | null; +} + +/** + * Size of UI component in SAST configuration page + */ +export const enum XGitLabSastUiComponentSize { + /** + * Size of UI component in SAST configuration page is small. + */ + SMALL = 'SMALL', + + /** + * Size of UI component in SAST configuration page is medium. + */ + MEDIUM = 'MEDIUM', + + /** + * Size of UI component in SAST configuration page is large. + */ + LARGE = 'LARGE', +} + +/** + * Represents the security scan information + */ +export interface IXGitLabScan { + __typename: '_xGitLabScan'; + + /** + * List of errors. + */ + errors: Array; + + /** + * Name of the scan. + */ + name: string; +} + +/** + * The connection type for Scan. + */ +export interface IXGitLabScanConnection { + __typename: '_xGitLabScanConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabScanEdge { + __typename: '_xGitLabScanEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabScan | null; +} + +/** + * Represents the scan execution policy + */ +export interface IXGitLabScanExecutionPolicy { + __typename: '_xGitLabScanExecutionPolicy'; + + /** + * Description of the policy. + */ + description: string; + + /** + * Indicates whether this policy is enabled. + */ + enabled: boolean; + + /** + * Name of the policy. + */ + name: string; + + /** + * Timestamp of when the policy YAML was last updated. + */ + updatedAt: any; + + /** + * YAML definition of the policy. + */ + yaml: string; +} + +/** + * Autogenerated input type of ScanExecutionPolicyCommit + */ +export interface IXGitLabScanExecutionPolicyCommitInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * YAML snippet of the policy. + */ + policyYaml: string; + + /** + * Changes the operation mode. + */ + operationMode: XGitLabMutationOperationMode; + + /** + * Name of the policy. If the name is null, the `name` field from `policy_yaml` is used. + */ + name?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of ScanExecutionPolicyCommit + */ +export interface IXGitLabScanExecutionPolicyCommitPayload { + __typename: '_xGitLabScanExecutionPolicyCommitPayload'; + + /** + * Name of the branch to which the policy changes are committed. + */ + branch: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * The connection type for ScanExecutionPolicy. + */ +export interface IXGitLabScanExecutionPolicyConnection { + __typename: '_xGitLabScanExecutionPolicyConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabScanExecutionPolicyEdge { + __typename: '_xGitLabScanExecutionPolicyEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabScanExecutionPolicy | null; +} + +/** + * Represents a resource scanned by a security scan + */ +export interface IXGitLabScannedResource { + __typename: '_xGitLabScannedResource'; + + /** + * HTTP request method used to access the URL. + */ + requestMethod: string | null; + + /** + * URL scanned by the scanner. + */ + url: string | null; +} + +/** + * The connection type for ScannedResource. + */ +export interface IXGitLabScannedResourceConnection { + __typename: '_xGitLabScannedResourceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabScannedResourceEdge { + __typename: '_xGitLabScannedResourceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabScannedResource | null; +} + +/** + * Autogenerated input type of SecurityPolicyProjectAssign + */ +export interface IXGitLabSecurityPolicyProjectAssignInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * ID of the security policy project. + */ + securityPolicyProjectId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of SecurityPolicyProjectAssign + */ +export interface IXGitLabSecurityPolicyProjectAssignPayload { + __typename: '_xGitLabSecurityPolicyProjectAssignPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of SecurityPolicyProjectCreate + */ +export interface IXGitLabSecurityPolicyProjectCreateInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of SecurityPolicyProjectCreate + */ +export interface IXGitLabSecurityPolicyProjectCreatePayload { + __typename: '_xGitLabSecurityPolicyProjectCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Security Policy Project that was created. + */ + project: IXGitLabProject | null; +} + +/** + * Autogenerated input type of SecurityPolicyProjectUnassign + */ +export interface IXGitLabSecurityPolicyProjectUnassignInput { + /** + * Full path of the project. + */ + projectPath: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of SecurityPolicyProjectUnassign + */ +export interface IXGitLabSecurityPolicyProjectUnassignPayload { + __typename: '_xGitLabSecurityPolicyProjectUnassignPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Represents summary of a security report + */ +export interface IXGitLabSecurityReportSummary { + __typename: '_xGitLabSecurityReportSummary'; + + /** + * Aggregated counts for the `api_fuzzing` scan + */ + apiFuzzing: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `cluster_image_scanning` scan + */ + clusterImageScanning: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `container_scanning` scan + */ + containerScanning: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `coverage_fuzzing` scan + */ + coverageFuzzing: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `dast` scan + */ + dast: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `dependency_scanning` scan + */ + dependencyScanning: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `generic` scan + */ + generic: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `sast` scan + */ + sast: IXGitLabSecurityReportSummarySection | null; + + /** + * Aggregated counts for the `secret_detection` scan + */ + secretDetection: IXGitLabSecurityReportSummarySection | null; +} + +/** + * Represents a section of a summary of a security report + */ +export interface IXGitLabSecurityReportSummarySection { + __typename: '_xGitLabSecurityReportSummarySection'; + + /** + * List of the first 20 scanned resources. + */ + scannedResources: IXGitLabScannedResourceConnection | null; + + /** + * Total number of scanned resources. + */ + scannedResourcesCount: number | null; + + /** + * Path to download all the scanned resources in CSV format. + */ + scannedResourcesCsvPath: string | null; + + /** + * List of security scans ran for the type. + */ + scans: IXGitLabScanConnection; + + /** + * Total number of vulnerabilities. + */ + vulnerabilitiesCount: number | null; +} + +export interface IScannedResourcesOnXGitLabSecurityReportSummarySectionArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IScansOnXGitLabSecurityReportSummarySectionArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export const enum XGitLabSecurityReportTypeEnum { + /** + * SAST scan report + */ + SAST = 'SAST', + + /** + * DAST scan report + */ + DAST = 'DAST', + + /** + * DEPENDENCY SCANNING scan report + */ + DEPENDENCY_SCANNING = 'DEPENDENCY_SCANNING', + + /** + * CONTAINER SCANNING scan report + */ + CONTAINER_SCANNING = 'CONTAINER_SCANNING', + + /** + * SECRET DETECTION scan report + */ + SECRET_DETECTION = 'SECRET_DETECTION', + + /** + * COVERAGE FUZZING scan report + */ + COVERAGE_FUZZING = 'COVERAGE_FUZZING', + + /** + * API FUZZING scan report + */ + API_FUZZING = 'API_FUZZING', + + /** + * CLUSTER IMAGE SCANNING scan report + */ + CLUSTER_IMAGE_SCANNING = 'CLUSTER_IMAGE_SCANNING', +} + +/** + * Represents a list of security scanners + */ +export interface IXGitLabSecurityScanners { + __typename: '_xGitLabSecurityScanners'; + + /** + * List of analyzers which are available for the project. + */ + available: Array | null; + + /** + * List of analyzers which are enabled for the project. + */ + enabled: Array | null; + + /** + * List of analyzers which ran successfully in the latest pipeline. + */ + pipelineRun: Array | null; +} + +/** + * The type of the security scanner + */ +export const enum XGitLabSecurityScannerType { + /** + * SAST scanner + */ + SAST = 'SAST', + + /** + * DAST scanner + */ + DAST = 'DAST', + + /** + * Dependency Scanning scanner + */ + DEPENDENCY_SCANNING = 'DEPENDENCY_SCANNING', + + /** + * Container Scanning scanner + */ + CONTAINER_SCANNING = 'CONTAINER_SCANNING', + + /** + * Secret Detection scanner + */ + SECRET_DETECTION = 'SECRET_DETECTION', + + /** + * Coverage Fuzzing scanner + */ + COVERAGE_FUZZING = 'COVERAGE_FUZZING', + + /** + * API Fuzzing scanner + */ + API_FUZZING = 'API_FUZZING', + + /** + * Cluster Image Scanning scanner + */ + CLUSTER_IMAGE_SCANNING = 'CLUSTER_IMAGE_SCANNING', +} + +/** + * A Sentry error + */ +export interface IXGitLabSentryDetailedError { + __typename: '_xGitLabSentryDetailedError'; + + /** + * Count of occurrences. + */ + count: number; + + /** + * Culprit of the error. + */ + culprit: string; + + /** + * External Base URL of the Sentry Instance. + */ + externalBaseUrl: string; + + /** + * External URL of the error. + */ + externalUrl: string; + + /** + * Commit the error was first seen. + */ + firstReleaseLastCommit: string | null; + + /** + * Release short version the error was first seen. + */ + firstReleaseShortVersion: string | null; + + /** + * Release version the error was first seen. + */ + firstReleaseVersion: string | null; + + /** + * Timestamp when the error was first seen. + */ + firstSeen: any; + + /** + * Last 24hr stats of the error. + */ + frequency: Array; + + /** + * GitLab commit SHA attributed to the Error based on the release version. + */ + gitlabCommit: string | null; + + /** + * Path to the GitLab page for the GitLab commit attributed to the error. + */ + gitlabCommitPath: string | null; + + /** + * URL of GitLab Issue. + */ + gitlabIssuePath: string | null; + + /** + * ID (global ID) of the error. + */ + id: string; + + /** + * Error tracking backend. + */ + integrated: boolean | null; + + /** + * Commit the error was last seen. + */ + lastReleaseLastCommit: string | null; + + /** + * Release short version the error was last seen. + */ + lastReleaseShortVersion: string | null; + + /** + * Release version the error was last seen. + */ + lastReleaseVersion: string | null; + + /** + * Timestamp when the error was last seen. + */ + lastSeen: any; + + /** + * Sentry metadata message of the error. + */ + message: string | null; + + /** + * ID (Sentry ID) of the error. + */ + sentryId: string; + + /** + * ID of the project (Sentry project). + */ + sentryProjectId: string; + + /** + * Name of the project affected by the error. + */ + sentryProjectName: string; + + /** + * Slug of the project affected by the error. + */ + sentryProjectSlug: string; + + /** + * Short ID (Sentry ID) of the error. + */ + shortId: string; + + /** + * Status of the error. + */ + status: XGitLabSentryErrorStatus; + + /** + * Tags associated with the Sentry Error. + */ + tags: IXGitLabSentryErrorTags; + + /** + * Title of the error. + */ + title: string; + + /** + * Type of the error. + */ + type: string; + + /** + * Count of users affected by the error. + */ + userCount: number; +} + +/** + * A Sentry error. A simplified version of SentryDetailedError + */ +export interface IXGitLabSentryError { + __typename: '_xGitLabSentryError'; + + /** + * Count of occurrences. + */ + count: number; + + /** + * Culprit of the error. + */ + culprit: string; + + /** + * External URL of the error. + */ + externalUrl: string; + + /** + * Timestamp when the error was first seen. + */ + firstSeen: any; + + /** + * Last 24hr stats of the error. + */ + frequency: Array; + + /** + * ID (global ID) of the error. + */ + id: string; + + /** + * Timestamp when the error was last seen. + */ + lastSeen: any; + + /** + * Sentry metadata message of the error. + */ + message: string | null; + + /** + * ID (Sentry ID) of the error. + */ + sentryId: string; + + /** + * ID of the project (Sentry project). + */ + sentryProjectId: string; + + /** + * Name of the project affected by the error. + */ + sentryProjectName: string; + + /** + * Slug of the project affected by the error. + */ + sentryProjectSlug: string; + + /** + * Short ID (Sentry ID) of the error. + */ + shortId: string; + + /** + * Status of the error. + */ + status: XGitLabSentryErrorStatus; + + /** + * Title of the error. + */ + title: string; + + /** + * Type of the error. + */ + type: string; + + /** + * Count of users affected by the error. + */ + userCount: number; +} + +/** + * An object containing a collection of Sentry errors, and a detailed error + */ +export interface IXGitLabSentryErrorCollection { + __typename: '_xGitLabSentryErrorCollection'; + + /** + * Detailed version of a Sentry error on the project. + */ + detailedError: IXGitLabSentryDetailedError | null; + + /** + * Stack Trace of Sentry Error. + */ + errorStackTrace: IXGitLabSentryErrorStackTrace | null; + + /** + * Collection of Sentry Errors. + */ + errors: IXGitLabSentryErrorConnection | null; + + /** + * External URL for Sentry. + */ + externalUrl: string | null; +} + +export interface IDetailedErrorOnXGitLabSentryErrorCollectionArguments { + /** + * ID of the Sentry issue. + */ + id: any; +} + +export interface IErrorStackTraceOnXGitLabSentryErrorCollectionArguments { + /** + * ID of the Sentry issue. + */ + id: any; +} + +export interface IErrorsOnXGitLabSentryErrorCollectionArguments { + /** + * Search query for the Sentry error details. + */ + searchTerm?: string | null; + + /** + * Attribute to sort on. Options are frequency, first_seen, last_seen. last_seen is default. + */ + sort?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for SentryError. + */ +export interface IXGitLabSentryErrorConnection { + __typename: '_xGitLabSentryErrorConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSentryErrorEdge { + __typename: '_xGitLabSentryErrorEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSentryError | null; +} + +export interface IXGitLabSentryErrorFrequency { + __typename: '_xGitLabSentryErrorFrequency'; + + /** + * Count of errors received since the previously recorded time. + */ + count: number; + + /** + * Time the error frequency stats were recorded. + */ + time: any; +} + +/** + * An object containing a stack trace entry for a Sentry error + */ +export interface IXGitLabSentryErrorStackTrace { + __typename: '_xGitLabSentryErrorStackTrace'; + + /** + * Time the stack trace was received by Sentry. + */ + dateReceived: string; + + /** + * ID of the Sentry error. + */ + issueId: string; + + /** + * Stack trace entries for the Sentry error. + */ + stackTraceEntries: Array; +} + +/** + * An object context for a Sentry error stack trace + */ +export interface IXGitLabSentryErrorStackTraceContext { + __typename: '_xGitLabSentryErrorStackTraceContext'; + + /** + * Code number of the context. + */ + code: string; + + /** + * Line number of the context. + */ + line: number; +} + +/** + * An object containing a stack trace entry for a Sentry error + */ +export interface IXGitLabSentryErrorStackTraceEntry { + __typename: '_xGitLabSentryErrorStackTraceEntry'; + + /** + * Function in which the Sentry error occurred. + */ + col: string | null; + + /** + * File in which the Sentry error occurred. + */ + fileName: string | null; + + /** + * Function in which the Sentry error occurred. + */ + function: string | null; + + /** + * Function in which the Sentry error occurred. + */ + line: string | null; + + /** + * Context of the Sentry error. + */ + traceContext: Array | null; +} + +/** + * State of a Sentry error + */ +export const enum XGitLabSentryErrorStatus { + /** + * Error has been resolved. + */ + RESOLVED = 'RESOLVED', + + /** + * Error has been ignored until next release. + */ + RESOLVED_IN_NEXT_RELEASE = 'RESOLVED_IN_NEXT_RELEASE', + + /** + * Error is unresolved. + */ + UNRESOLVED = 'UNRESOLVED', + + /** + * Error has been ignored. + */ + IGNORED = 'IGNORED', +} + +/** + * State of a Sentry error + */ +export interface IXGitLabSentryErrorTags { + __typename: '_xGitLabSentryErrorTags'; + + /** + * Severity level of the Sentry Error. + */ + level: string | null; + + /** + * Logger of the Sentry Error. + */ + logger: string | null; +} + +export type _xGitLabService = IXGitLabBaseService | IXGitLabJiraService; + +export interface IXGitLabService { + __typename: '_xGitLabService'; + + /** + * Indicates if the service is active. + */ + active: boolean | null; + + /** + * Class name of the service. + */ + type: string | null; +} + +/** + * The connection type for Service. + */ +export interface IXGitLabServiceConnection { + __typename: '_xGitLabServiceConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array<_xGitLabService | null> | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabServiceEdge { + __typename: '_xGitLabServiceEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: _xGitLabService | null; +} + +export const enum XGitLabServiceType { + /** + * AsanaService type + */ + ASANA_SERVICE = 'ASANA_SERVICE', + + /** + * AssemblaService type + */ + ASSEMBLA_SERVICE = 'ASSEMBLA_SERVICE', + + /** + * BambooService type + */ + BAMBOO_SERVICE = 'BAMBOO_SERVICE', + + /** + * BugzillaService type + */ + BUGZILLA_SERVICE = 'BUGZILLA_SERVICE', + + /** + * BuildkiteService type + */ + BUILDKITE_SERVICE = 'BUILDKITE_SERVICE', + + /** + * CampfireService type + */ + CAMPFIRE_SERVICE = 'CAMPFIRE_SERVICE', + + /** + * ConfluenceService type + */ + CONFLUENCE_SERVICE = 'CONFLUENCE_SERVICE', + + /** + * CustomIssueTrackerService type + */ + CUSTOM_ISSUE_TRACKER_SERVICE = 'CUSTOM_ISSUE_TRACKER_SERVICE', + + /** + * DatadogService type + */ + DATADOG_SERVICE = 'DATADOG_SERVICE', + + /** + * DiscordService type + */ + DISCORD_SERVICE = 'DISCORD_SERVICE', + + /** + * DroneCiService type + */ + DRONE_CI_SERVICE = 'DRONE_CI_SERVICE', + + /** + * EmailsOnPushService type + */ + EMAILS_ON_PUSH_SERVICE = 'EMAILS_ON_PUSH_SERVICE', + + /** + * EwmService type + */ + EWM_SERVICE = 'EWM_SERVICE', + + /** + * ExternalWikiService type + */ + EXTERNAL_WIKI_SERVICE = 'EXTERNAL_WIKI_SERVICE', + + /** + * FlowdockService type + */ + FLOWDOCK_SERVICE = 'FLOWDOCK_SERVICE', + + /** + * GithubService type + */ + GITHUB_SERVICE = 'GITHUB_SERVICE', + + /** + * GitlabSlackApplicationService type + */ + GITLAB_SLACK_APPLICATION_SERVICE = 'GITLAB_SLACK_APPLICATION_SERVICE', + + /** + * HangoutsChatService type + */ + HANGOUTS_CHAT_SERVICE = 'HANGOUTS_CHAT_SERVICE', + + /** + * IrkerService type + */ + IRKER_SERVICE = 'IRKER_SERVICE', + + /** + * JenkinsService type + */ + JENKINS_SERVICE = 'JENKINS_SERVICE', + + /** + * JiraService type + */ + JIRA_SERVICE = 'JIRA_SERVICE', + + /** + * MattermostService type + */ + MATTERMOST_SERVICE = 'MATTERMOST_SERVICE', + + /** + * MattermostSlashCommandsService type + */ + MATTERMOST_SLASH_COMMANDS_SERVICE = 'MATTERMOST_SLASH_COMMANDS_SERVICE', + + /** + * MicrosoftTeamsService type + */ + MICROSOFT_TEAMS_SERVICE = 'MICROSOFT_TEAMS_SERVICE', + + /** + * PackagistService type + */ + PACKAGIST_SERVICE = 'PACKAGIST_SERVICE', + + /** + * PipelinesEmailService type + */ + PIPELINES_EMAIL_SERVICE = 'PIPELINES_EMAIL_SERVICE', + + /** + * PivotaltrackerService type + */ + PIVOTALTRACKER_SERVICE = 'PIVOTALTRACKER_SERVICE', + + /** + * PrometheusService type + */ + PROMETHEUS_SERVICE = 'PROMETHEUS_SERVICE', + + /** + * PushoverService type + */ + PUSHOVER_SERVICE = 'PUSHOVER_SERVICE', + + /** + * RedmineService type + */ + REDMINE_SERVICE = 'REDMINE_SERVICE', + + /** + * SlackService type + */ + SLACK_SERVICE = 'SLACK_SERVICE', + + /** + * SlackSlashCommandsService type + */ + SLACK_SLASH_COMMANDS_SERVICE = 'SLACK_SLASH_COMMANDS_SERVICE', + + /** + * TeamcityService type + */ + TEAMCITY_SERVICE = 'TEAMCITY_SERVICE', + + /** + * UnifyCircuitService type + */ + UNIFY_CIRCUIT_SERVICE = 'UNIFY_CIRCUIT_SERVICE', + + /** + * WebexTeamsService type + */ + WEBEX_TEAMS_SERVICE = 'WEBEX_TEAMS_SERVICE', + + /** + * YoutrackService type + */ + YOUTRACK_SERVICE = 'YOUTRACK_SERVICE', + + /** + * ZentaoService type + */ + ZENTAO_SERVICE = 'ZENTAO_SERVICE', +} + +export const enum XGitLabSharedRunnersSetting { + /** + * Sharing of runners is disabled and unoverridable. + */ + DISABLED_AND_UNOVERRIDABLE = 'DISABLED_AND_UNOVERRIDABLE', + + /** + * Sharing of runners is disabled with override. + */ + DISABLED_WITH_OVERRIDE = 'DISABLED_WITH_OVERRIDE', + + /** + * Sharing of runners is enabled. + */ + ENABLED = 'ENABLED', +} + +/** + * Represents a snippet entry + */ +export interface IXGitLabSnippet { + __typename: '_xGitLabSnippet'; + + /** + * Owner of the snippet. + */ + author: IXGitLabUserCore | null; + + /** + * Snippet blobs. + */ + blobs: IXGitLabSnippetBlobConnection | null; + + /** + * Timestamp this snippet was created. + */ + createdAt: any; + + /** + * Description of the snippet. + */ + description: string | null; + + /** + * The GitLab Flavored Markdown rendering of `description` + */ + descriptionHtml: string | null; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * File Name of the snippet. + */ + fileName: string | null; + + /** + * HTTP URL to the snippet repository. + */ + httpUrlToRepo: string | null; + + /** + * ID of the snippet. + */ + id: any; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Project the snippet is associated with. + */ + project: IXGitLabProject | null; + + /** + * Raw URL of the snippet. + */ + rawUrl: string; + + /** + * SSH URL to the snippet repository. + */ + sshUrlToRepo: string | null; + + /** + * Title of the snippet. + */ + title: string; + + /** + * Timestamp this snippet was updated. + */ + updatedAt: any; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabSnippetPermissions; + + /** + * Visibility Level of the snippet. + */ + visibilityLevel: XGitLabVisibilityLevelsEnum; + + /** + * Web URL of the snippet. + */ + webUrl: string; +} + +export interface IBlobsOnXGitLabSnippetArguments { + /** + * Paths of the blobs. + */ + paths?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IDiscussionsOnXGitLabSnippetArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabSnippetArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Represents the snippet blob + */ +export interface IXGitLabSnippetBlob { + __typename: '_xGitLabSnippetBlob'; + + /** + * Shows whether the blob is binary. + */ + binary: boolean; + + /** + * Blob external storage. + */ + externalStorage: string | null; + + /** + * Blob mode. + */ + mode: string | null; + + /** + * Blob name. + */ + name: string | null; + + /** + * Blob path. + */ + path: string | null; + + /** + * Blob plain highlighted data. + */ + plainData: string | null; + + /** + * Blob raw content endpoint path. + */ + rawPath: string; + + /** + * Raw content of the blob, if the blob is text data. + */ + rawPlainData: string | null; + + /** + * Shows whether the blob is rendered as text. + */ + renderedAsText: boolean; + + /** + * Blob highlighted data. + */ + richData: string | null; + + /** + * Blob content rich viewer. + */ + richViewer: IXGitLabSnippetBlobViewer | null; + + /** + * Blob content simple viewer. + */ + simpleViewer: IXGitLabSnippetBlobViewer; + + /** + * Blob size. + */ + size: number; +} + +/** + * Type of a snippet blob input action + */ +export const enum XGitLabSnippetBlobActionEnum { + /** + * Create a snippet blob. + */ + create = 'create', + + /** + * Update a snippet blob. + */ + update = 'update', + + /** + * Delete a snippet blob. + */ + delete = 'delete', + + /** + * Move a snippet blob. + */ + move = 'move', +} + +/** + * Represents an action to perform over a snippet file + */ +export interface IXGitLabSnippetBlobActionInputType { + /** + * Type of input action. + */ + action: XGitLabSnippetBlobActionEnum; + + /** + * Previous path of the snippet file. + */ + previousPath?: string | null; + + /** + * Path of the snippet file. + */ + filePath: string; + + /** + * Snippet file content. + */ + content?: string | null; +} + +/** + * The connection type for SnippetBlob. + */ +export interface IXGitLabSnippetBlobConnection { + __typename: '_xGitLabSnippetBlobConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSnippetBlobEdge { + __typename: '_xGitLabSnippetBlobEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSnippetBlob | null; +} + +/** + * Represents how the blob content should be displayed + */ +export interface IXGitLabSnippetBlobViewer { + __typename: '_xGitLabSnippetBlobViewer'; + + /** + * Shows whether the blob should be displayed collapsed. + */ + collapsed: boolean; + + /** + * Content file type. + */ + fileType: string; + + /** + * Shows whether the blob content is loaded asynchronously. + */ + loadAsync: boolean; + + /** + * Loading partial name. + */ + loadingPartialName: string; + + /** + * Error rendering the blob content. + */ + renderError: string | null; + + /** + * Shows whether the blob is too large to be displayed. + */ + tooLarge: boolean; + + /** + * Type of blob viewer. + */ + type: XGitLabBlobViewersType; +} + +/** + * The connection type for Snippet. + */ +export interface IXGitLabSnippetConnection { + __typename: '_xGitLabSnippetConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSnippetEdge { + __typename: '_xGitLabSnippetEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSnippet | null; +} + +export interface IXGitLabSnippetPermissions { + __typename: '_xGitLabSnippetPermissions'; + + /** + * Indicates the user can perform `admin_snippet` on this resource + */ + adminSnippet: boolean; + + /** + * Indicates the user can perform `award_emoji` on this resource + */ + awardEmoji: boolean; + + /** + * Indicates the user can perform `create_note` on this resource + */ + createNote: boolean; + + /** + * Indicates the user can perform `read_snippet` on this resource + */ + readSnippet: boolean; + + /** + * Indicates the user can perform `report_snippet` on this resource + */ + reportSnippet: boolean; + + /** + * Indicates the user can perform `update_snippet` on this resource + */ + updateSnippet: boolean; +} + +/** + * Represents the Geo sync and verification state of a snippet repository + */ +export interface IXGitLabSnippetRepositoryRegistry { + __typename: '_xGitLabSnippetRepositoryRegistry'; + + /** + * Timestamp when the SnippetRepositoryRegistry was created + */ + createdAt: any | null; + + /** + * ID of the SnippetRepositoryRegistry + */ + id: string; + + /** + * Error message during sync of the SnippetRepositoryRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the SnippetRepositoryRegistry + */ + lastSyncedAt: any | null; + + /** + * Timestamp after which the SnippetRepositoryRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the SnippetRepositoryRegistry + */ + retryCount: number | null; + + /** + * ID of the Snippet Repository. + */ + snippetRepositoryId: string; + + /** + * Sync state of the SnippetRepositoryRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for SnippetRepositoryRegistry. + */ +export interface IXGitLabSnippetRepositoryRegistryConnection { + __typename: '_xGitLabSnippetRepositoryRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSnippetRepositoryRegistryEdge { + __typename: '_xGitLabSnippetRepositoryRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSnippetRepositoryRegistry | null; +} + +/** + * Common sort values + */ +export const enum XGitLabSort { + /** + * Updated at descending order. + * @deprecated "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5." + */ + updated_desc = 'updated_desc', + + /** + * Updated at ascending order. + * @deprecated "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5." + */ + updated_asc = 'updated_asc', + + /** + * Created at descending order. + * @deprecated "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5." + */ + created_desc = 'created_desc', + + /** + * Created at ascending order. + * @deprecated "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5." + */ + created_asc = 'created_asc', + + /** + * Updated at descending order. + */ + UPDATED_DESC = 'UPDATED_DESC', + + /** + * Updated at ascending order. + */ + UPDATED_ASC = 'UPDATED_ASC', + + /** + * Created at descending order. + */ + CREATED_DESC = 'CREATED_DESC', + + /** + * Created at ascending order. + */ + CREATED_ASC = 'CREATED_ASC', +} + +export interface IXGitLabStatusAction { + __typename: '_xGitLabStatusAction'; + + /** + * Title for the button, for example: Retry this job. + */ + buttonTitle: string | null; + + /** + * Icon used in the action button. + */ + icon: string | null; + + /** + * ID for a status action. + */ + id: string; + + /** + * Method for the action, for example: :post. + */ + method: string | null; + + /** + * Path for the action. + */ + path: string | null; + + /** + * Title for the action, for example: Retry. + */ + title: string | null; +} + +export interface IXGitLabSubmodule { + __typename: '_xGitLabSubmodule'; + + /** + * Flat path of the entry. + */ + flatPath: string; + + /** + * ID of the entry. + */ + id: string; + + /** + * Name of the entry. + */ + name: string; + + /** + * Path of the entry. + */ + path: string; + + /** + * Last commit SHA for the entry. + */ + sha: string; + + /** + * Tree URL for the sub-module. + */ + treeUrl: string | null; + + /** + * Type of tree entry. + */ + type: XGitLabEntryType; + + /** + * Web URL for the sub-module. + */ + webUrl: string | null; +} + +/** + * The connection type for Submodule. + */ +export interface IXGitLabSubmoduleConnection { + __typename: '_xGitLabSubmoduleConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabSubmoduleEdge { + __typename: '_xGitLabSubmoduleEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabSubmodule | null; +} + +export interface IXGitLabSubscription { + __typename: '_xGitLabSubscription'; + + /** + * Triggered when the assignees of an issuable are updated. + */ + issuableAssigneesUpdated: _xGitLabIssuable | null; +} + +export interface IIssuableAssigneesUpdatedOnXGitLabSubscriptionArguments { + /** + * ID of the issuable. + */ + issuableId: any; +} + +/** + * Completion status of tasks + */ +export interface IXGitLabTaskCompletionStatus { + __typename: '_xGitLabTaskCompletionStatus'; + + /** + * Number of completed tasks. + */ + completedCount: number; + + /** + * Number of total tasks. + */ + count: number; +} + +export interface IXGitLabTerraformState { + __typename: '_xGitLabTerraformState'; + + /** + * Timestamp the Terraform state was created. + */ + createdAt: any; + + /** + * ID of the Terraform state. + */ + id: string; + + /** + * Latest version of the Terraform state. + */ + latestVersion: IXGitLabTerraformStateVersion | null; + + /** + * Timestamp the Terraform state was locked. + */ + lockedAt: any | null; + + /** + * User currently holding a lock on the Terraform state. + */ + lockedByUser: IXGitLabUserCore | null; + + /** + * Name of the Terraform state. + */ + name: string; + + /** + * Timestamp the Terraform state was updated. + */ + updatedAt: any; +} + +/** + * The connection type for TerraformState. + */ +export interface IXGitLabTerraformStateConnection { + __typename: '_xGitLabTerraformStateConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of TerraformStateDelete + */ +export interface IXGitLabTerraformStateDeleteInput { + /** + * Global ID of the Terraform state. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TerraformStateDelete + */ +export interface IXGitLabTerraformStateDeletePayload { + __typename: '_xGitLabTerraformStateDeletePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTerraformStateEdge { + __typename: '_xGitLabTerraformStateEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTerraformState | null; +} + +/** + * Autogenerated input type of TerraformStateLock + */ +export interface IXGitLabTerraformStateLockInput { + /** + * Global ID of the Terraform state. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TerraformStateLock + */ +export interface IXGitLabTerraformStateLockPayload { + __typename: '_xGitLabTerraformStateLockPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of TerraformStateUnlock + */ +export interface IXGitLabTerraformStateUnlockInput { + /** + * Global ID of the Terraform state. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TerraformStateUnlock + */ +export interface IXGitLabTerraformStateUnlockPayload { + __typename: '_xGitLabTerraformStateUnlockPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export interface IXGitLabTerraformStateVersion { + __typename: '_xGitLabTerraformStateVersion'; + + /** + * Timestamp the version was created. + */ + createdAt: any; + + /** + * User that created this version. + */ + createdByUser: IXGitLabUserCore | null; + + /** + * URL for downloading the version's JSON file. + */ + downloadPath: string | null; + + /** + * ID of the Terraform state version. + */ + id: string; + + /** + * Job that created this version. + */ + job: IXGitLabCiJob | null; + + /** + * Serial number of the version. + */ + serial: number | null; + + /** + * Timestamp the version was updated. + */ + updatedAt: any; +} + +/** + * Represents the Geo sync and verification state of a terraform state version + */ +export interface IXGitLabTerraformStateVersionRegistry { + __typename: '_xGitLabTerraformStateVersionRegistry'; + + /** + * Timestamp when the TerraformStateVersionRegistry was created + */ + createdAt: any | null; + + /** + * ID of the TerraformStateVersionRegistry + */ + id: string; + + /** + * Error message during sync of the TerraformStateVersionRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the TerraformStateVersionRegistry + */ + lastSyncedAt: any | null; + + /** + * Timestamp after which the TerraformStateVersionRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the TerraformStateVersionRegistry + */ + retryCount: number | null; + + /** + * Sync state of the TerraformStateVersionRegistry + */ + state: XGitLabRegistryState | null; + + /** + * ID of the terraform state version. + */ + terraformStateVersionId: string; +} + +/** + * The connection type for TerraformStateVersionRegistry. + */ +export interface IXGitLabTerraformStateVersionRegistryConnection { + __typename: '_xGitLabTerraformStateVersionRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTerraformStateVersionRegistryEdge { + __typename: '_xGitLabTerraformStateVersionRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTerraformStateVersionRegistry | null; +} + +/** + * Test case in pipeline test report. + */ +export interface IXGitLabTestCase { + __typename: '_xGitLabTestCase'; + + /** + * URL of the test case attachment file. + */ + attachmentUrl: string | null; + + /** + * Classname of the test case. + */ + classname: string | null; + + /** + * Test case execution time in seconds. + */ + executionTime: number | null; + + /** + * Path to the file of the test case. + */ + file: string | null; + + /** + * Name of the test case. + */ + name: string | null; + + /** + * Recent failure history of the test case on the base branch. + */ + recentFailures: IXGitLabRecentFailures | null; + + /** + * Stack trace of the test case. + */ + stackTrace: string | null; + + /** + * Status of the test case (error, failed, success, skipped). + */ + status: XGitLabTestCaseStatus | null; + + /** + * System output of the test case. + */ + systemOutput: string | null; +} + +/** + * The connection type for TestCase. + */ +export interface IXGitLabTestCaseConnection { + __typename: '_xGitLabTestCaseConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTestCaseEdge { + __typename: '_xGitLabTestCaseEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTestCase | null; +} + +export const enum XGitLabTestCaseStatus { + /** + * Test case that has a status of error. + */ + error = 'error', + + /** + * Test case that has a status of failed. + */ + failed = 'failed', + + /** + * Test case that has a status of success. + */ + success = 'success', + + /** + * Test case that has a status of skipped. + */ + skipped = 'skipped', +} + +/** + * Represents a requirement test report + */ +export interface IXGitLabTestReport { + __typename: '_xGitLabTestReport'; + + /** + * Author of the test report. + */ + author: IXGitLabUserCore | null; + + /** + * Timestamp of when the test report was created. + */ + createdAt: any; + + /** + * ID of the test report. + */ + id: string; + + /** + * State of the test report. + */ + state: XGitLabTestReportState; +} + +/** + * The connection type for TestReport. + */ +export interface IXGitLabTestReportConnection { + __typename: '_xGitLabTestReportConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTestReportEdge { + __typename: '_xGitLabTestReportEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTestReport | null; +} + +/** + * State of a test report + */ +export const enum XGitLabTestReportState { + /** + * Passed test report. + */ + PASSED = 'PASSED', + + /** + * Failed test report. + */ + FAILED = 'FAILED', +} + +/** + * Test report for a pipeline + */ +export interface IXGitLabTestReportSummary { + __typename: '_xGitLabTestReportSummary'; + + /** + * Test suites belonging to a pipeline test report. + */ + testSuites: IXGitLabTestSuiteSummaryConnection; + + /** + * Total report statistics for a pipeline test report. + */ + total: IXGitLabTestReportTotal; +} + +export interface ITestSuitesOnXGitLabTestReportSummaryArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Total test report statistics. + */ +export interface IXGitLabTestReportTotal { + __typename: '_xGitLabTestReportTotal'; + + /** + * Total number of the test cases. + */ + count: number | null; + + /** + * Total number of test cases that had an error. + */ + error: number | null; + + /** + * Total number of test cases that failed. + */ + failed: number | null; + + /** + * Total number of test cases that were skipped. + */ + skipped: number | null; + + /** + * Total number of test cases that succeeded. + */ + success: number | null; + + /** + * Test suite error message. + */ + suiteError: string | null; + + /** + * Total duration of the tests. + */ + time: number | null; +} + +/** + * Test suite in a pipeline test report. + */ +export interface IXGitLabTestSuite { + __typename: '_xGitLabTestSuite'; + + /** + * Total number of test cases that had an error. + */ + errorCount: number | null; + + /** + * Total number of test cases that failed in the test suite. + */ + failedCount: number | null; + + /** + * Name of the test suite. + */ + name: string | null; + + /** + * Total number of test cases that were skipped in the test suite. + */ + skippedCount: number | null; + + /** + * Total number of test cases that succeeded in the test suite. + */ + successCount: number | null; + + /** + * Test suite error message. + */ + suiteError: string | null; + + /** + * Test cases in the test suite. + */ + testCases: IXGitLabTestCaseConnection | null; + + /** + * Total number of the test cases in the test suite. + */ + totalCount: number | null; + + /** + * Total duration of the tests in the test suite. + */ + totalTime: number | null; +} + +export interface ITestCasesOnXGitLabTestSuiteArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Test suite summary in a pipeline test report. + */ +export interface IXGitLabTestSuiteSummary { + __typename: '_xGitLabTestSuiteSummary'; + + /** + * IDs of the builds used to run the test suite. + */ + buildIds: Array | null; + + /** + * Total number of test cases that had an error. + */ + errorCount: number | null; + + /** + * Total number of test cases that failed in the test suite. + */ + failedCount: number | null; + + /** + * Name of the test suite. + */ + name: string | null; + + /** + * Total number of test cases that were skipped in the test suite. + */ + skippedCount: number | null; + + /** + * Total number of test cases that succeeded in the test suite. + */ + successCount: number | null; + + /** + * Test suite error message. + */ + suiteError: string | null; + + /** + * Total number of the test cases in the test suite. + */ + totalCount: number | null; + + /** + * Total duration of the tests in the test suite. + */ + totalTime: number | null; +} + +/** + * The connection type for TestSuiteSummary. + */ +export interface IXGitLabTestSuiteSummaryConnection { + __typename: '_xGitLabTestSuiteSummaryConnection'; + + /** + * Total count of collection. + */ + count: number; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTestSuiteSummaryEdge { + __typename: '_xGitLabTestSuiteSummaryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTestSuiteSummary | null; +} + +/** + * Represents measured stats metrics for timeboxes + */ +export interface IXGitLabTimeboxMetrics { + __typename: '_xGitLabTimeboxMetrics'; + + /** + * Count metric. + */ + count: number; + + /** + * Weight metric. + */ + weight: number; +} + +/** + * Represents a historically accurate report about the timebox + */ +export interface IXGitLabTimeboxReport { + __typename: '_xGitLabTimeboxReport'; + + /** + * Daily scope and completed totals for burnup charts. + */ + burnupTimeSeries: Array | null; + + /** + * Represents the time report stats for the timebox. + */ + stats: IXGitLabTimeReportStats | null; +} + +export type _xGitLabTimeboxReportInterface = + | IXGitLabIteration + | IXGitLabMilestone; + +export interface IXGitLabTimeboxReportInterface { + __typename: '_xGitLabTimeboxReportInterface'; + + /** + * Historically accurate report about the timebox. + */ + report: IXGitLabTimeboxReport | null; +} + +/** + * A time-frame defined as a closed inclusive range of two dates + */ +export interface IXGitLabTimeframe { + /** + * Start of the range. + */ + start: any; + + /** + * End of the range. + */ + end: any; +} + +export interface IXGitLabTimelog { + __typename: '_xGitLabTimelog'; + + /** + * Issue that logged time was added to. + */ + issue: IXGitLabIssue | null; + + /** + * Merge request that logged time was added to. + */ + mergeRequest: IXGitLabMergeRequest | null; + + /** + * Note where the quick action was executed to add the logged time. + */ + note: IXGitLabNote | null; + + /** + * Timestamp of when the time tracked was spent at. + */ + spentAt: any | null; + + /** + * Summary of how the time was spent. + */ + summary: string | null; + + /** + * Time spent displayed in seconds. + */ + timeSpent: number; + + /** + * User that logged the time. + */ + user: IXGitLabUserCore; +} + +/** + * The connection type for Timelog. + */ +export interface IXGitLabTimelogConnection { + __typename: '_xGitLabTimelogConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTimelogEdge { + __typename: '_xGitLabTimelogEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTimelog | null; +} + +/** + * Represents the time report stats for timeboxes + */ +export interface IXGitLabTimeReportStats { + __typename: '_xGitLabTimeReportStats'; + + /** + * Completed issues metrics. + */ + complete: IXGitLabTimeboxMetrics | null; + + /** + * Incomplete issues metrics. + */ + incomplete: IXGitLabTimeboxMetrics | null; + + /** + * Total issues metrics. + */ + total: IXGitLabTimeboxMetrics | null; +} + +/** + * Representing a to-do entry + */ +export interface IXGitLabTodo { + __typename: '_xGitLabTodo'; + + /** + * Action of the to-do item. + */ + action: XGitLabTodoActionEnum; + + /** + * Author of this to-do item. + */ + author: IXGitLabUserCore; + + /** + * Body of the to-do item. + */ + body: string; + + /** + * Timestamp this to-do item was created. + */ + createdAt: any; + + /** + * Group this to-do item is associated with. + */ + group: IXGitLabGroup | null; + + /** + * ID of the to-do item. + */ + id: string; + + /** + * Project this to-do item is associated with. + */ + project: IXGitLabProject | null; + + /** + * State of the to-do item. + */ + state: XGitLabTodoStateEnum; + + /** + * Target type of the to-do item. + */ + targetType: XGitLabTodoTargetEnum; +} + +export const enum XGitLabTodoActionEnum { + /** + * User was assigned. + */ + assigned = 'assigned', + + /** + * User was mentioned. + */ + mentioned = 'mentioned', + + /** + * Build triggered by the user failed. + */ + build_failed = 'build_failed', + + /** + * User added a TODO. + */ + marked = 'marked', + + /** + * User was set as an approver. + */ + approval_required = 'approval_required', + + /** + * Merge request authored by the user could not be merged. + */ + unmergeable = 'unmergeable', + + /** + * User was directly addressed. + */ + directly_addressed = 'directly_addressed', + + /** + * Merge request authored by the user was removed from the merge train. + */ + merge_train_removed = 'merge_train_removed', + + /** + * Review was requested from the user. + */ + review_requested = 'review_requested', +} + +/** + * The connection type for Todo. + */ +export interface IXGitLabTodoConnection { + __typename: '_xGitLabTodoConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of TodoCreate + */ +export interface IXGitLabTodoCreateInput { + /** + * Global ID of the to-do item's parent. Issues, merge requests, designs, and epics are supported. + */ + targetId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TodoCreate + */ +export interface IXGitLabTodoCreatePayload { + __typename: '_xGitLabTodoCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * To-do item created. + */ + todo: IXGitLabTodo | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTodoEdge { + __typename: '_xGitLabTodoEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTodo | null; +} + +/** + * Autogenerated input type of TodoMarkDone + */ +export interface IXGitLabTodoMarkDoneInput { + /** + * Global ID of the to-do item to mark as done. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TodoMarkDone + */ +export interface IXGitLabTodoMarkDonePayload { + __typename: '_xGitLabTodoMarkDonePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Requested to-do item. + */ + todo: IXGitLabTodo; +} + +/** + * Autogenerated input type of TodoRestore + */ +export interface IXGitLabTodoRestoreInput { + /** + * Global ID of the to-do item to restore. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated input type of TodoRestoreMany + */ +export interface IXGitLabTodoRestoreManyInput { + /** + * Global IDs of the to-do items to restore (a maximum of 50 is supported at once). + */ + ids: Array; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TodoRestoreMany + */ +export interface IXGitLabTodoRestoreManyPayload { + __typename: '_xGitLabTodoRestoreManyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Updated to-do items. + */ + todos: Array; +} + +/** + * Autogenerated return type of TodoRestore + */ +export interface IXGitLabTodoRestorePayload { + __typename: '_xGitLabTodoRestorePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Requested to-do item. + */ + todo: IXGitLabTodo; +} + +/** + * Autogenerated input type of TodosMarkAllDone + */ +export interface IXGitLabTodosMarkAllDoneInput { + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of TodosMarkAllDone + */ +export interface IXGitLabTodosMarkAllDonePayload { + __typename: '_xGitLabTodosMarkAllDonePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Updated to-do items. + */ + todos: Array; +} + +export const enum XGitLabTodoStateEnum { + /** + * State of the todo is pending. + */ + pending = 'pending', + + /** + * State of the todo is done. + */ + done = 'done', +} + +export const enum XGitLabTodoTargetEnum { + /** + * Commit. + */ + COMMIT = 'COMMIT', + + /** + * Issue. + */ + ISSUE = 'ISSUE', + + /** + * Merge request. + */ + MERGEREQUEST = 'MERGEREQUEST', + + /** + * Design. + */ + DESIGN = 'DESIGN', + + /** + * Alert. + */ + ALERT = 'ALERT', + + /** + * An Epic. + */ + EPIC = 'EPIC', +} + +export interface IXGitLabTree { + __typename: '_xGitLabTree'; + + /** + * Blobs of the tree. + */ + blobs: IXGitLabBlobConnection; + + /** + * Last commit for the tree. + */ + lastCommit: IXGitLabCommit | null; + + /** + * Sub-modules of the tree. + */ + submodules: IXGitLabSubmoduleConnection; + + /** + * Trees of the tree. + */ + trees: IXGitLabTreeEntryConnection; +} + +export interface IBlobsOnXGitLabTreeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISubmodulesOnXGitLabTreeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITreesOnXGitLabTreeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for Tree. + */ +export interface IXGitLabTreeConnection { + __typename: '_xGitLabTreeConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTreeEdge { + __typename: '_xGitLabTreeEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTree | null; +} + +/** + * Represents a directory + */ +export interface IXGitLabTreeEntry { + __typename: '_xGitLabTreeEntry'; + + /** + * Flat path of the entry. + */ + flatPath: string; + + /** + * ID of the entry. + */ + id: string; + + /** + * Name of the entry. + */ + name: string; + + /** + * Path of the entry. + */ + path: string; + + /** + * Last commit SHA for the entry. + */ + sha: string; + + /** + * Type of tree entry. + */ + type: XGitLabEntryType; + + /** + * Web path for the tree entry (directory). + */ + webPath: string | null; + + /** + * Web URL for the tree entry (directory). + */ + webUrl: string | null; +} + +/** + * The connection type for TreeEntry. + */ +export interface IXGitLabTreeEntryConnection { + __typename: '_xGitLabTreeEntryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabTreeEntryEdge { + __typename: '_xGitLabTreeEntryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabTreeEntry | null; +} + +export const enum XGitLabTypeEnum { + /** + * Snippet created independent of any project. + */ + personal = 'personal', + + /** + * Snippet related to a specific project. + */ + project = 'project', +} + +/** + * Autogenerated input type of UpdateAlertStatus + */ +export interface IXGitLabUpdateAlertStatusInput { + /** + * Project the alert to mutate is in. + */ + projectPath: string; + + /** + * IID of the alert to mutate. + */ + iid: string; + + /** + * Status to set the alert. + */ + status: XGitLabAlertManagementStatus; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateAlertStatus + */ +export interface IXGitLabUpdateAlertStatusPayload { + __typename: '_xGitLabUpdateAlertStatusPayload'; + + /** + * Alert after mutation. + */ + alert: IXGitLabAlertManagementAlert | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue created after mutation. + */ + issue: IXGitLabIssue | null; + + /** + * To-do item after mutation. + */ + todo: IXGitLabTodo | null; +} + +/** + * Autogenerated input type of UpdateBoardEpicUserPreferences + */ +export interface IXGitLabUpdateBoardEpicUserPreferencesInput { + /** + * Board global ID. + */ + boardId: any; + + /** + * ID of an epic to set preferences for. + */ + epicId: any; + + /** + * Whether the epic should be collapsed in the board. + */ + collapsed: boolean; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateBoardEpicUserPreferences + */ +export interface IXGitLabUpdateBoardEpicUserPreferencesPayload { + __typename: '_xGitLabUpdateBoardEpicUserPreferencesPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * User preferences for the epic in the board after mutation. + */ + epicUserPreferences: IXGitLabBoardEpicUserPreferences | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of UpdateBoard + */ +export interface IXGitLabUpdateBoardInput { + /** + * Board name. + */ + name?: string | null; + + /** + * Whether or not backlog list is hidden. + */ + hideBacklogList?: boolean | null; + + /** + * Whether or not closed list is hidden. + */ + hideClosedList?: boolean | null; + + /** + * Board global ID. + */ + id: any; + + /** + * ID of user to be assigned to the board. + */ + assigneeId?: any | null; + + /** + * ID of milestone to be assigned to the board. + */ + milestoneId?: any | null; + + /** + * ID of iteration to be assigned to the board. + */ + iterationId?: any | null; + + /** + * ID of iteration cadence to be assigned to the board. + */ + iterationCadenceId?: any | null; + + /** + * Weight value to be assigned to the board. + */ + weight?: number | null; + + /** + * Labels of the issue. + */ + labels?: Array | null; + + /** + * IDs of labels to be added to the board. + */ + labelIds?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated input type of UpdateBoardList + */ +export interface IXGitLabUpdateBoardListInput { + /** + * Position of list within the board. + */ + position?: number | null; + + /** + * Indicates if the list is collapsed for this user. + */ + collapsed?: boolean | null; + + /** + * Global ID of the list. + */ + listId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateBoardList + */ +export interface IXGitLabUpdateBoardListPayload { + __typename: '_xGitLabUpdateBoardListPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Mutated list. + */ + list: IXGitLabBoardList | null; +} + +/** + * Autogenerated return type of UpdateBoard + */ +export interface IXGitLabUpdateBoardPayload { + __typename: '_xGitLabUpdateBoardPayload'; + + /** + * Board after mutation. + */ + board: IXGitLabBoard | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of UpdateComplianceFramework + */ +export interface IXGitLabUpdateComplianceFrameworkInput { + /** + * Global ID of the compliance framework to update. + */ + id: any; + + /** + * Parameters to update the compliance framework with. + */ + params: IXGitLabComplianceFrameworkInput; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateComplianceFramework + */ +export interface IXGitLabUpdateComplianceFrameworkPayload { + __typename: '_xGitLabUpdateComplianceFrameworkPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Compliance framework after mutation. + */ + complianceFramework: IXGitLabComplianceFramework | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of UpdateContainerExpirationPolicy + */ +export interface IXGitLabUpdateContainerExpirationPolicyInput { + /** + * Project path where the container expiration policy is located. + */ + projectPath: string; + + /** + * Indicates whether this container expiration policy is enabled. + */ + enabled?: boolean | null; + + /** + * This container expiration policy schedule. + */ + cadence?: XGitLabContainerExpirationPolicyCadenceEnum | null; + + /** + * Tags older that this will expire. + */ + olderThan?: XGitLabContainerExpirationPolicyOlderThanEnum | null; + + /** + * Number of tags to retain. + */ + keepN?: XGitLabContainerExpirationPolicyKeepEnum | null; + + /** + * Tags with names matching this regex pattern will expire. + */ + nameRegex?: any | null; + + /** + * Tags with names matching this regex pattern will be preserved. + */ + nameRegexKeep?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateContainerExpirationPolicy + */ +export interface IXGitLabUpdateContainerExpirationPolicyPayload { + __typename: '_xGitLabUpdateContainerExpirationPolicyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Container expiration policy after mutation. + */ + containerExpirationPolicy: IXGitLabContainerExpirationPolicy | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of UpdateDependencyProxyImageTtlGroupPolicy + */ +export interface IXGitLabUpdateDependencyProxyImageTtlGroupPolicyInput { + /** + * Group path for the group dependency proxy image TTL policy. + */ + groupPath: string; + + /** + * Indicates whether the policy is enabled or disabled. + */ + enabled?: boolean | null; + + /** + * Number of days to retain a cached image file. + */ + ttl?: number | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateDependencyProxyImageTtlGroupPolicy + */ +export interface IXGitLabUpdateDependencyProxyImageTtlGroupPolicyPayload { + __typename: '_xGitLabUpdateDependencyProxyImageTtlGroupPolicyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Group image TTL policy after mutation. + */ + dependencyProxyImageTtlPolicy: IXGitLabDependencyProxyImageTtlGroupPolicy | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of UpdateDependencyProxySettings + */ +export interface IXGitLabUpdateDependencyProxySettingsInput { + /** + * Group path for the group dependency proxy. + */ + groupPath: string; + + /** + * Indicates whether the policy is enabled or disabled. + */ + enabled?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateDependencyProxySettings + */ +export interface IXGitLabUpdateDependencyProxySettingsPayload { + __typename: '_xGitLabUpdateDependencyProxySettingsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Group dependency proxy settings after mutation. + */ + dependencyProxySetting: IXGitLabDependencyProxySetting | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +export interface IXGitLabUpdateDiffImagePositionInput { + /** + * X position of the note. + */ + x?: number | null; + + /** + * Y position of the note. + */ + y?: number | null; + + /** + * Total width of the image. + */ + width?: number | null; + + /** + * Total height of the image. + */ + height?: number | null; +} + +/** + * Autogenerated input type of UpdateEpicBoardList + */ +export interface IXGitLabUpdateEpicBoardListInput { + /** + * Position of list within the board. + */ + position?: number | null; + + /** + * Indicates if the list is collapsed for this user. + */ + collapsed?: boolean | null; + + /** + * Global ID of the epic list. + */ + listId: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateEpicBoardList + */ +export interface IXGitLabUpdateEpicBoardListPayload { + __typename: '_xGitLabUpdateEpicBoardListPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Mutated epic list. + */ + list: IXGitLabEpicList | null; +} + +/** + * Autogenerated input type of UpdateEpic + */ +export interface IXGitLabUpdateEpicInput { + /** + * IID of the epic to mutate. + */ + iid: string; + + /** + * Group the epic to mutate is in. + */ + groupPath: string; + + /** + * Title of the epic. + */ + title?: string | null; + + /** + * Description of the epic. + */ + description?: string | null; + + /** + * Indicates if the epic is confidential. + */ + confidential?: boolean | null; + + /** + * Start date of the epic. + */ + startDateFixed?: string | null; + + /** + * End date of the epic. + */ + dueDateFixed?: string | null; + + /** + * Indicates start date should be sourced from start_date_fixed field not the issue milestones. + */ + startDateIsFixed?: boolean | null; + + /** + * Indicates end date should be sourced from due_date_fixed field not the issue milestones. + */ + dueDateIsFixed?: boolean | null; + + /** + * IDs of labels to be added to the epic. + */ + addLabelIds?: Array | null; + + /** + * IDs of labels to be removed from the epic. + */ + removeLabelIds?: Array | null; + + /** + * State event for the epic. + */ + stateEvent?: XGitLabEpicStateEvent | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateEpic + */ +export interface IXGitLabUpdateEpicPayload { + __typename: '_xGitLabUpdateEpicPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Epic after mutation. + */ + epic: IXGitLabEpic | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * Autogenerated input type of UpdateImageDiffNote + */ +export interface IXGitLabUpdateImageDiffNoteInput { + /** + * Global ID of the note to update. + */ + id: any; + + /** + * Content of the note. + */ + body?: string | null; + + /** + * Position of this note on a diff. + */ + position?: IXGitLabUpdateDiffImagePositionInput | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateImageDiffNote + */ +export interface IXGitLabUpdateImageDiffNotePayload { + __typename: '_xGitLabUpdateImageDiffNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +/** + * Autogenerated input type of UpdateIssue + */ +export interface IXGitLabUpdateIssueInput { + /** + * Project the issue to mutate is in. + */ + projectPath: string; + + /** + * IID of the issue to mutate. + */ + iid: string; + + /** + * Description of the issue. + */ + description?: string | null; + + /** + * Due date of the issue. + */ + dueDate?: any | null; + + /** + * Indicates the issue is confidential. + */ + confidential?: boolean | null; + + /** + * Indicates discussion is locked on the issue. + */ + locked?: boolean | null; + + /** + * Type of the issue. + */ + type?: XGitLabIssueType | null; + + /** + * Title of the issue. + */ + title?: string | null; + + /** + * ID of the milestone to assign to the issue. On update milestone will be removed if set to null. + */ + milestoneId?: string | null; + + /** + * IDs of labels to be added to the issue. + */ + addLabelIds?: Array | null; + + /** + * IDs of labels to be removed from the issue. + */ + removeLabelIds?: Array | null; + + /** + * IDs of labels to be set. Replaces existing issue labels. + */ + labelIds?: Array | null; + + /** + * Close or reopen an issue. + */ + stateEvent?: XGitLabIssueStateEvent | null; + + /** + * Desired health status. + */ + healthStatus?: XGitLabHealthStatus | null; + + /** + * Weight of the issue. + */ + weight?: number | null; + + /** + * ID of the parent epic. NULL when removing the association. + */ + epicId?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateIssue + */ +export interface IXGitLabUpdateIssuePayload { + __typename: '_xGitLabUpdateIssuePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Issue after mutation. + */ + issue: IXGitLabIssue | null; +} + +/** + * Autogenerated input type of UpdateIteration + */ +export interface IXGitLabUpdateIterationInput { + /** + * Group of the iteration. + */ + groupPath: string; + + /** + * Global ID of the iteration. + */ + id: string; + + /** + * Title of the iteration. + */ + title?: string | null; + + /** + * Description of the iteration. + */ + description?: string | null; + + /** + * Start date of the iteration. + */ + startDate?: string | null; + + /** + * End date of the iteration. + */ + dueDate?: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateIteration + */ +export interface IXGitLabUpdateIterationPayload { + __typename: '_xGitLabUpdateIterationPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Updated iteration. + */ + iteration: IXGitLabIteration | null; +} + +/** + * Autogenerated input type of UpdateNamespacePackageSettings + */ +export interface IXGitLabUpdateNamespacePackageSettingsInput { + /** + * Namespace path where the namespace package setting is located. + */ + namespacePath: string; + + /** + * Indicates whether duplicate Maven packages are allowed for this namespace. + */ + mavenDuplicatesAllowed?: boolean | null; + + /** + * When maven_duplicates_allowed is false, you can publish duplicate packages + * with names that match this regex. Otherwise, this setting has no effect. + */ + mavenDuplicateExceptionRegex?: any | null; + + /** + * Indicates whether duplicate generic packages are allowed for this namespace. + */ + genericDuplicatesAllowed?: boolean | null; + + /** + * When generic_duplicates_allowed is false, you can publish duplicate packages + * with names that match this regex. Otherwise, this setting has no effect. + */ + genericDuplicateExceptionRegex?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateNamespacePackageSettings + */ +export interface IXGitLabUpdateNamespacePackageSettingsPayload { + __typename: '_xGitLabUpdateNamespacePackageSettingsPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Namespace package setting after mutation. + */ + packageSettings: IXGitLabPackageSettings | null; +} + +/** + * Autogenerated input type of UpdateNote + */ +export interface IXGitLabUpdateNoteInput { + /** + * Global ID of the note to update. + */ + id: any; + + /** + * Content of the note. + */ + body?: string | null; + + /** + * Confidentiality flag of a note. Default is false. + */ + confidential?: boolean | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateNote + */ +export interface IXGitLabUpdateNotePayload { + __typename: '_xGitLabUpdateNotePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Note after mutation. + */ + note: IXGitLabNote | null; +} + +/** + * Autogenerated input type of UpdateRequirement + */ +export interface IXGitLabUpdateRequirementInput { + /** + * Title of the requirement. + */ + title?: string | null; + + /** + * Description of the requirement. + */ + description?: string | null; + + /** + * Full project path the requirement is associated with. + */ + projectPath: string; + + /** + * State of the requirement. + */ + state?: XGitLabRequirementState | null; + + /** + * IID of the requirement to update. + */ + iid: string; + + /** + * Creates a test report for the requirement with the given state. + */ + lastTestReportState?: XGitLabTestReportState | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateRequirement + */ +export interface IXGitLabUpdateRequirementPayload { + __typename: '_xGitLabUpdateRequirementPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Requirement after mutation. + */ + requirement: IXGitLabRequirement | null; +} + +/** + * Autogenerated input type of UpdateSnippet + */ +export interface IXGitLabUpdateSnippetInput { + /** + * Global ID of the snippet to update. + */ + id: any; + + /** + * Title of the snippet. + */ + title?: string | null; + + /** + * Description of the snippet. + */ + description?: string | null; + + /** + * Visibility level of the snippet. + */ + visibilityLevel?: XGitLabVisibilityLevelsEnum | null; + + /** + * Actions to perform over the snippet repository and blobs. + */ + blobActions?: Array | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UpdateSnippet + */ +export interface IXGitLabUpdateSnippetPayload { + __typename: '_xGitLabUpdateSnippetPayload'; + + /** + * CAPTCHA site key which must be used to render a challenge for the user to + * solve to obtain a valid captchaResponse value. Included only when an operation + * was not completed because "NeedsCaptchaResponse" is true. Deprecated in 13.11: + * Use spam protection with HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + captchaSiteKey: string | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Indicates whether the operation was detected as possible spam and not + * completed. If CAPTCHA is enabled, the request must be resubmitted with a valid + * CAPTCHA response and spam_log_id included for the operation to be completed. + * Included only when an operation was not completed because + * "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam protection with + * HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + needsCaptchaResponse: boolean | null; + + /** + * Snippet after mutation. + */ + snippet: IXGitLabSnippet | null; + + /** + * Indicates whether the operation was detected as definite spam. There is no + * option to resubmit the request with a CAPTCHA response. Deprecated in 13.11: + * Use spam protection with HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + spam: boolean | null; + + /** + * Spam log ID which must be passed along with a valid CAPTCHA response for an + * operation to be completed. Included only when an operation was not completed + * because "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam + * protection with HTTP headers instead. + * @deprecated "Use spam protection with HTTP headers instead. Deprecated in 13.11." + */ + spamLogId: number | null; +} + +/** + * Represents the Geo replication and verification state of an upload. + */ +export interface IXGitLabUploadRegistry { + __typename: '_xGitLabUploadRegistry'; + + /** + * Timestamp when the UploadRegistry was created + */ + createdAt: any | null; + + /** + * ID of the Upload. + */ + fileId: string; + + /** + * ID of the UploadRegistry + */ + id: string; + + /** + * Error message during sync of the UploadRegistry + */ + lastSyncFailure: string | null; + + /** + * Timestamp of the most recent successful sync of the UploadRegistry + */ + lastSyncedAt: any | null; + + /** + * Timestamp after which the UploadRegistry should be resynced + */ + retryAt: any | null; + + /** + * Number of consecutive failed sync attempts of the UploadRegistry + */ + retryCount: number | null; + + /** + * Sync state of the UploadRegistry + */ + state: XGitLabRegistryState | null; +} + +/** + * The connection type for UploadRegistry. + */ +export interface IXGitLabUploadRegistryConnection { + __typename: '_xGitLabUploadRegistryConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabUploadRegistryEdge { + __typename: '_xGitLabUploadRegistryEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabUploadRegistry | null; +} + +/** + * Represents a recorded measurement (object count) for the Admins + */ +export interface IXGitLabUsageTrendsMeasurement { + __typename: '_xGitLabUsageTrendsMeasurement'; + + /** + * Object count. + */ + count: number; + + /** + * Type of objects being measured. + */ + identifier: XGitLabMeasurementIdentifier; + + /** + * Time the measurement was recorded. + */ + recordedAt: any | null; +} + +/** + * The connection type for UsageTrendsMeasurement. + */ +export interface IXGitLabUsageTrendsMeasurementConnection { + __typename: '_xGitLabUsageTrendsMeasurementConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabUsageTrendsMeasurementEdge { + __typename: '_xGitLabUsageTrendsMeasurementEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabUsageTrendsMeasurement | null; +} + +/** + * Representation of a GitLab user. + */ +export type _xGitLabUser = + | IXGitLabMergeRequestAssignee + | IXGitLabMergeRequestReviewer + | IXGitLabUserCore; + +/** + * Representation of a GitLab user. + */ +export interface IXGitLabUser { + __typename: '_xGitLabUser'; + + /** + * Merge requests assigned to the user. + */ + assignedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Merge requests authored by the user. + */ + authoredMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * URL of the user's avatar. + */ + avatarUrl: string | null; + + /** + * Indicates if the user is a bot. + */ + bot: boolean; + + /** + * User callouts that belong to the user. + */ + callouts: IXGitLabUserCalloutConnection | null; + + /** + * User email. Deprecated in 13.7: This was renamed. + * @deprecated "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7." + */ + email: string | null; + + /** + * Group count for the user. + */ + groupCount: number | null; + + /** + * Group memberships of the user. + */ + groupMemberships: IXGitLabGroupMemberConnection | null; + + /** + * Groups where the user has access. Will always return `null` if + * `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + */ + groups: IXGitLabGroupConnection | null; + + /** + * ID of the user. + */ + id: string; + + /** + * Location of the user. + */ + location: string | null; + + /** + * Human-readable name of the user. + */ + name: string; + + /** + * Personal namespace of the user. + */ + namespace: IXGitLabNamespace | null; + + /** + * Project memberships of the user. + */ + projectMemberships: IXGitLabProjectMemberConnection | null; + + /** + * User's public email. + */ + publicEmail: string | null; + + /** + * Merge requests assigned to the user for review. + */ + reviewRequestedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Snippets authored by the user. + */ + snippets: IXGitLabSnippetConnection | null; + + /** + * Projects starred by the user. + */ + starredProjects: IXGitLabProjectConnection | null; + + /** + * State of the user. + */ + state: XGitLabUserState; + + /** + * User status. + */ + status: IXGitLabUserStatus | null; + + /** + * Time logged by the user. + */ + timelogs: IXGitLabTimelogConnection | null; + + /** + * To-do items of the user. + */ + todos: IXGitLabTodoConnection | null; + + /** + * Permissions for the current user on the resource. + */ + userPermissions: IXGitLabUserPermissions; + + /** + * Username of the user. Unique within this instance of GitLab. + */ + username: string; + + /** + * Web path of the user. + */ + webPath: string; + + /** + * Web URL of the user. + */ + webUrl: string; +} + +export interface IAssignedMergeRequestsOnXGitLabUserArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAuthoredMergeRequestsOnXGitLabUserArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICalloutsOnXGitLabUserArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupMembershipsOnXGitLabUserArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupsOnXGitLabUserArguments { + /** + * Search by group name or path. + */ + search?: string | null; + + /** + * Filter by permissions the user has on groups. + */ + permissionScope?: XGitLabGroupPermission | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectMembershipsOnXGitLabUserArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReviewRequestedMergeRequestsOnXGitLabUserArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetsOnXGitLabUserArguments { + /** + * Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + */ + ids?: Array | null; + + /** + * Visibility of the snippet. + */ + visibility?: XGitLabVisibilityScopesEnum | null; + + /** + * Type of snippet. + */ + type?: XGitLabTypeEnum | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IStarredProjectsOnXGitLabUserArguments { + /** + * Search query. + */ + search?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabUserArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITodosOnXGitLabUserArguments { + /** + * Action to be filtered. + */ + action?: Array | null; + + /** + * ID of an author. + */ + authorId?: Array | null; + + /** + * ID of a project. + */ + projectId?: Array | null; + + /** + * ID of a group. + */ + groupId?: Array | null; + + /** + * State of the todo. + */ + state?: Array | null; + + /** + * Type of the todo. + */ + type?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IXGitLabUserCallout { + __typename: '_xGitLabUserCallout'; + + /** + * Date when the callout was dismissed. + */ + dismissedAt: any | null; + + /** + * Name of the feature that the callout is for. + */ + featureName: XGitLabUserCalloutFeatureNameEnum | null; +} + +/** + * The connection type for UserCallout. + */ +export interface IXGitLabUserCalloutConnection { + __typename: '_xGitLabUserCalloutConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of UserCalloutCreate + */ +export interface IXGitLabUserCalloutCreateInput { + /** + * Feature name you want to dismiss the callout for. + */ + featureName: string; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of UserCalloutCreate + */ +export interface IXGitLabUserCalloutCreatePayload { + __typename: '_xGitLabUserCalloutCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * User callout dismissed. + */ + userCallout: IXGitLabUserCallout; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabUserCalloutEdge { + __typename: '_xGitLabUserCalloutEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabUserCallout | null; +} + +/** + * Name of the feature that the callout is for. + */ +export const enum XGitLabUserCalloutFeatureNameEnum { + /** + * Callout feature name for gke_cluster_integration. + */ + GKE_CLUSTER_INTEGRATION = 'GKE_CLUSTER_INTEGRATION', + + /** + * Callout feature name for gcp_signup_offer. + */ + GCP_SIGNUP_OFFER = 'GCP_SIGNUP_OFFER', + + /** + * Callout feature name for cluster_security_warning. + */ + CLUSTER_SECURITY_WARNING = 'CLUSTER_SECURITY_WARNING', + + /** + * Callout feature name for ultimate_trial. + */ + ULTIMATE_TRIAL = 'ULTIMATE_TRIAL', + + /** + * Callout feature name for geo_enable_hashed_storage. + */ + GEO_ENABLE_HASHED_STORAGE = 'GEO_ENABLE_HASHED_STORAGE', + + /** + * Callout feature name for geo_migrate_hashed_storage. + */ + GEO_MIGRATE_HASHED_STORAGE = 'GEO_MIGRATE_HASHED_STORAGE', + + /** + * Callout feature name for canary_deployment. + */ + CANARY_DEPLOYMENT = 'CANARY_DEPLOYMENT', + + /** + * Callout feature name for gold_trial_billings. + */ + GOLD_TRIAL_BILLINGS = 'GOLD_TRIAL_BILLINGS', + + /** + * Callout feature name for suggest_popover_dismissed. + */ + SUGGEST_POPOVER_DISMISSED = 'SUGGEST_POPOVER_DISMISSED', + + /** + * Callout feature name for tabs_position_highlight. + */ + TABS_POSITION_HIGHLIGHT = 'TABS_POSITION_HIGHLIGHT', + + /** + * Callout feature name for threat_monitoring_info. + */ + THREAT_MONITORING_INFO = 'THREAT_MONITORING_INFO', + + /** + * Callout feature name for two_factor_auth_recovery_settings_check. + */ + TWO_FACTOR_AUTH_RECOVERY_SETTINGS_CHECK = 'TWO_FACTOR_AUTH_RECOVERY_SETTINGS_CHECK', + + /** + * Callout feature name for web_ide_alert_dismissed. + */ + WEB_IDE_ALERT_DISMISSED = 'WEB_IDE_ALERT_DISMISSED', + + /** + * Callout feature name for active_user_count_threshold. + */ + ACTIVE_USER_COUNT_THRESHOLD = 'ACTIVE_USER_COUNT_THRESHOLD', + + /** + * Callout feature name for buy_pipeline_minutes_notification_dot. + */ + BUY_PIPELINE_MINUTES_NOTIFICATION_DOT = 'BUY_PIPELINE_MINUTES_NOTIFICATION_DOT', + + /** + * Callout feature name for personal_access_token_expiry. + */ + PERSONAL_ACCESS_TOKEN_EXPIRY = 'PERSONAL_ACCESS_TOKEN_EXPIRY', + + /** + * Callout feature name for suggest_pipeline. + */ + SUGGEST_PIPELINE = 'SUGGEST_PIPELINE', + + /** + * Callout feature name for customize_homepage. + */ + CUSTOMIZE_HOMEPAGE = 'CUSTOMIZE_HOMEPAGE', + + /** + * Callout feature name for feature_flags_new_version. + */ + FEATURE_FLAGS_NEW_VERSION = 'FEATURE_FLAGS_NEW_VERSION', + + /** + * Callout feature name for registration_enabled_callout. + */ + REGISTRATION_ENABLED_CALLOUT = 'REGISTRATION_ENABLED_CALLOUT', + + /** + * Callout feature name for new_user_signups_cap_reached. + */ + NEW_USER_SIGNUPS_CAP_REACHED = 'NEW_USER_SIGNUPS_CAP_REACHED', + + /** + * Callout feature name for unfinished_tag_cleanup_callout. + */ + UNFINISHED_TAG_CLEANUP_CALLOUT = 'UNFINISHED_TAG_CLEANUP_CALLOUT', + + /** + * Callout feature name for eoa_bronze_plan_banner. + */ + EOA_BRONZE_PLAN_BANNER = 'EOA_BRONZE_PLAN_BANNER', + + /** + * Callout feature name for pipeline_needs_banner. + */ + PIPELINE_NEEDS_BANNER = 'PIPELINE_NEEDS_BANNER', + + /** + * Callout feature name for pipeline_needs_hover_tip. + */ + PIPELINE_NEEDS_HOVER_TIP = 'PIPELINE_NEEDS_HOVER_TIP', + + /** + * Callout feature name for web_ide_ci_environments_guidance. + */ + WEB_IDE_CI_ENVIRONMENTS_GUIDANCE = 'WEB_IDE_CI_ENVIRONMENTS_GUIDANCE', + + /** + * Callout feature name for security_configuration_upgrade_banner. + */ + SECURITY_CONFIGURATION_UPGRADE_BANNER = 'SECURITY_CONFIGURATION_UPGRADE_BANNER', + + /** + * Callout feature name for cloud_licensing_subscription_activation_banner. + */ + CLOUD_LICENSING_SUBSCRIPTION_ACTIVATION_BANNER = 'CLOUD_LICENSING_SUBSCRIPTION_ACTIVATION_BANNER', + + /** + * Callout feature name for trial_status_reminder_d14. + */ + TRIAL_STATUS_REMINDER_D14 = 'TRIAL_STATUS_REMINDER_D14', + + /** + * Callout feature name for trial_status_reminder_d3. + */ + TRIAL_STATUS_REMINDER_D3 = 'TRIAL_STATUS_REMINDER_D3', + + /** + * Callout feature name for security_configuration_devops_alert. + */ + SECURITY_CONFIGURATION_DEVOPS_ALERT = 'SECURITY_CONFIGURATION_DEVOPS_ALERT', + + /** + * Callout feature name for profile_personal_access_token_expiry. + */ + PROFILE_PERSONAL_ACCESS_TOKEN_EXPIRY = 'PROFILE_PERSONAL_ACCESS_TOKEN_EXPIRY', + + /** + * Callout feature name for terraform_notification_dismissed. + */ + TERRAFORM_NOTIFICATION_DISMISSED = 'TERRAFORM_NOTIFICATION_DISMISSED', + + /** + * Callout feature name for security_newsletter_callout. + */ + SECURITY_NEWSLETTER_CALLOUT = 'SECURITY_NEWSLETTER_CALLOUT', +} + +/** + * Core represention of a GitLab user. + */ +export interface IXGitLabUserCore { + __typename: '_xGitLabUserCore'; + + /** + * Merge requests assigned to the user. + */ + assignedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Merge requests authored by the user. + */ + authoredMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * URL of the user's avatar. + */ + avatarUrl: string | null; + + /** + * Indicates if the user is a bot. + */ + bot: boolean; + + /** + * User callouts that belong to the user. + */ + callouts: IXGitLabUserCalloutConnection | null; + + /** + * User email. Deprecated in 13.7: This was renamed. + * @deprecated "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7." + */ + email: string | null; + + /** + * Group count for the user. + */ + groupCount: number | null; + + /** + * Group memberships of the user. + */ + groupMemberships: IXGitLabGroupMemberConnection | null; + + /** + * Groups where the user has access. Will always return `null` if + * `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + */ + groups: IXGitLabGroupConnection | null; + + /** + * ID of the user. + */ + id: string; + + /** + * Location of the user. + */ + location: string | null; + + /** + * Human-readable name of the user. + */ + name: string; + + /** + * Personal namespace of the user. + */ + namespace: IXGitLabNamespace | null; + + /** + * Project memberships of the user. + */ + projectMemberships: IXGitLabProjectMemberConnection | null; + + /** + * User's public email. + */ + publicEmail: string | null; + + /** + * Merge requests assigned to the user for review. + */ + reviewRequestedMergeRequests: IXGitLabMergeRequestConnection | null; + + /** + * Snippets authored by the user. + */ + snippets: IXGitLabSnippetConnection | null; + + /** + * Projects starred by the user. + */ + starredProjects: IXGitLabProjectConnection | null; + + /** + * State of the user. + */ + state: XGitLabUserState; + + /** + * User status. + */ + status: IXGitLabUserStatus | null; + + /** + * Time logged by the user. + */ + timelogs: IXGitLabTimelogConnection | null; + + /** + * To-do items of the user. + */ + todos: IXGitLabTodoConnection | null; + + /** + * Permissions for the current user on the resource. + */ + userPermissions: IXGitLabUserPermissions; + + /** + * Username of the user. Unique within this instance of GitLab. + */ + username: string; + + /** + * Web path of the user. + */ + webPath: string; + + /** + * Web URL of the user. + */ + webUrl: string; +} + +export interface IAssignedMergeRequestsOnXGitLabUserCoreArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IAuthoredMergeRequestsOnXGitLabUserCoreArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Username of the reviewer. + */ + reviewerUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ICalloutsOnXGitLabUserCoreArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupMembershipsOnXGitLabUserCoreArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IGroupsOnXGitLabUserCoreArguments { + /** + * Search by group name or path. + */ + search?: string | null; + + /** + * Filter by permissions the user has on groups. + */ + permissionScope?: XGitLabGroupPermission | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IProjectMembershipsOnXGitLabUserCoreArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IReviewRequestedMergeRequestsOnXGitLabUserCoreArguments { + /** + * Array of IIDs of merge requests, for example `[1, 2]`. + */ + iids?: Array | null; + + /** + * Array of source branch names. + * All resolved merge requests will have one of these branches as their source. + */ + sourceBranches?: Array | null; + + /** + * Array of target branch names. + * All resolved merge requests will have one of these branches as their target. + */ + targetBranches?: Array | null; + + /** + * Merge request state. If provided, all resolved merge requests will have this state. + */ + state?: XGitLabMergeRequestState | null; + + /** + * Array of label names. All resolved merge requests will have all of these labels. + */ + labels?: Array | null; + + /** + * Merge requests merged after this date. + */ + mergedAfter?: any | null; + + /** + * Merge requests merged before this date. + */ + mergedBefore?: any | null; + + /** + * Title of the milestone. + */ + milestoneTitle?: string | null; + + /** + * Sort merge requests by this criteria. + * @default "created_desc" + */ + sort?: XGitLabMergeRequestSort | null; + + /** + * Merge requests created after this timestamp. + */ + createdAfter?: any | null; + + /** + * Merge requests created before this timestamp. + */ + createdBefore?: any | null; + + /** + * List of negated arguments. + * Warning: this argument is experimental and a subject to change in future. + */ + not?: IXGitLabMergeRequestsResolverNegatedParams | null; + + /** + * The full-path of the project the authored merge requests should be in. + * Incompatible with projectId. + */ + projectPath?: string | null; + + /** + * The global ID of the project the authored merge requests should be in. + * Incompatible with projectPath. + */ + projectId?: any | null; + + /** + * Username of the author. + */ + authorUsername?: string | null; + + /** + * Username of the assignee. + */ + assigneeUsername?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ISnippetsOnXGitLabUserCoreArguments { + /** + * Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + */ + ids?: Array | null; + + /** + * Visibility of the snippet. + */ + visibility?: XGitLabVisibilityScopesEnum | null; + + /** + * Type of snippet. + */ + type?: XGitLabTypeEnum | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IStarredProjectsOnXGitLabUserCoreArguments { + /** + * Search query. + */ + search?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITimelogsOnXGitLabUserCoreArguments { + /** + * List timelogs within a date range where the logged date is equal to or after startDate. + */ + startDate?: any | null; + + /** + * List timelogs within a date range where the logged date is equal to or before endDate. + */ + endDate?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or after startTime. + */ + startTime?: any | null; + + /** + * List timelogs within a time range where the logged time is equal to or before endTime. + */ + endTime?: any | null; + + /** + * List timelogs for a project. + */ + projectId?: any | null; + + /** + * List timelogs for a group. + */ + groupId?: any | null; + + /** + * List timelogs for a user. + */ + username?: string | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface ITodosOnXGitLabUserCoreArguments { + /** + * Action to be filtered. + */ + action?: Array | null; + + /** + * ID of an author. + */ + authorId?: Array | null; + + /** + * ID of a project. + */ + projectId?: Array | null; + + /** + * ID of a group. + */ + groupId?: Array | null; + + /** + * State of the todo. + */ + state?: Array | null; + + /** + * Type of the todo. + */ + type?: Array | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * The connection type for UserCore. + */ +export interface IXGitLabUserCoreConnection { + __typename: '_xGitLabUserCoreConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabUserCoreEdge { + __typename: '_xGitLabUserCoreEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabUserCore | null; +} + +/** + * Information about a merge request given a specific user. + * + * This object has two parts to its state: a `User` and a `MergeRequest`. All + * fields relate to interactions between the two entities. + */ +export interface IXGitLabUserMergeRequestInteraction { + __typename: '_xGitLabUserMergeRequestInteraction'; + + /** + * Approval rules that apply to this user for this merge request. + */ + applicableApprovalRules: Array | null; + + /** + * Whether this user has approved this merge request. + */ + approved: boolean; + + /** + * Whether this user can merge this merge request. + */ + canMerge: boolean; + + /** + * Whether this user can update this merge request. + */ + canUpdate: boolean; + + /** + * State of the review by this user. + */ + reviewState: XGitLabMergeRequestReviewState | null; + + /** + * Whether this user has provided a review for this merge request. + */ + reviewed: boolean; +} + +export interface IXGitLabUserPermissions { + __typename: '_xGitLabUserPermissions'; + + /** + * Indicates the user can perform `create_snippet` on this resource + */ + createSnippet: boolean; +} + +/** + * Possible states of a user + */ +export const enum XGitLabUserState { + /** + * User is active and is able to use the system. + */ + active = 'active', + + /** + * User has been blocked and is prevented from using the system. + */ + blocked = 'blocked', + + /** + * User is no longer active and is unable to use the system. + */ + deactivated = 'deactivated', +} + +export interface IXGitLabUserStatus { + __typename: '_xGitLabUserStatus'; + + /** + * User availability status. + */ + availability: XGitLabAvailabilityEnum; + + /** + * String representation of emoji. + */ + emoji: string | null; + + /** + * User status message. + */ + message: string | null; + + /** + * HTML of the user status message + */ + messageHtml: string | null; +} + +export const enum XGitLabVisibilityLevelsEnum { + /** + * Private visibility level. + */ + private = 'private', + + /** + * Internal visibility level. + */ + internal = 'internal', + + /** + * Public visibility level. + */ + public = 'public', +} + +export const enum XGitLabVisibilityScopesEnum { + /** + * Snippet is visible only to the snippet creator. + */ + private = 'private', + + /** + * Snippet is visible for any logged in user except external users. + */ + internal = 'internal', + + /** + * Snippet can be accessed without any authentication. + */ + public = 'public', +} + +/** + * Represents the count of vulnerabilities by severity on a particular day. This data is retained for 365 days + */ +export interface IXGitLabVulnerabilitiesCountByDay { + __typename: '_xGitLabVulnerabilitiesCountByDay'; + + /** + * Total number of vulnerabilities on a particular day with critical severity + */ + critical: number; + + /** + * Date for the count. + */ + date: any; + + /** + * Total number of vulnerabilities on a particular day with high severity + */ + high: number; + + /** + * Total number of vulnerabilities on a particular day with info severity + */ + info: number; + + /** + * Total number of vulnerabilities on a particular day with low severity + */ + low: number; + + /** + * Total number of vulnerabilities on a particular day with medium severity + */ + medium: number; + + /** + * Total number of vulnerabilities on a particular day. + */ + total: number; + + /** + * Total number of vulnerabilities on a particular day with unknown severity + */ + unknown: number; +} + +/** + * The connection type for VulnerabilitiesCountByDay. + */ +export interface IXGitLabVulnerabilitiesCountByDayConnection { + __typename: '_xGitLabVulnerabilitiesCountByDayConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabVulnerabilitiesCountByDayEdge { + __typename: '_xGitLabVulnerabilitiesCountByDayEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabVulnerabilitiesCountByDay | null; +} + +/** + * Represents a vulnerability + */ +export interface IXGitLabVulnerability { + __typename: '_xGitLabVulnerability'; + + /** + * Timestamp of when the vulnerability state was changed to confirmed. + */ + confirmedAt: any | null; + + /** + * User that confirmed the vulnerability. + */ + confirmedBy: IXGitLabUserCore | null; + + /** + * Description of the vulnerability. + */ + description: string | null; + + /** + * Details of the vulnerability. + */ + details: Array<_xGitLabVulnerabilityDetail>; + + /** + * Timestamp of when the vulnerability was first detected. + */ + detectedAt: any; + + /** + * All discussions on this noteable. + */ + discussions: IXGitLabDiscussionConnection; + + /** + * Timestamp of when the vulnerability state was changed to dismissed. + */ + dismissedAt: any | null; + + /** + * User that dismissed the vulnerability. + */ + dismissedBy: IXGitLabUserCore | null; + + /** + * List of external issue links related to the vulnerability. + */ + externalIssueLinks: IXGitLabVulnerabilityExternalIssueLinkConnection; + + /** + * Indicates whether the vulnerability is a false positive. + */ + falsePositive: boolean | null; + + /** + * Indicates whether there is a solution available for this vulnerability. + */ + hasSolutions: boolean | null; + + /** + * GraphQL ID of the vulnerability. + */ + id: string; + + /** + * Identifiers of the vulnerability. + */ + identifiers: Array; + + /** + * List of issue links related to the vulnerability. + */ + issueLinks: IXGitLabVulnerabilityIssueLinkConnection; + + /** + * List of links associated with the vulnerability. + */ + links: Array; + + /** + * Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability. + */ + location: _xGitLabVulnerabilityLocation | null; + + /** + * Merge request that fixes the vulnerability. + */ + mergeRequest: IXGitLabMergeRequest | null; + + /** + * Short text description of the vulnerability. This may include the finding's specific information. + */ + message: string | null; + + /** + * All notes on this noteable. + */ + notes: IXGitLabNoteConnection; + + /** + * Primary identifier of the vulnerability. + */ + primaryIdentifier: IXGitLabVulnerabilityIdentifier | null; + + /** + * Project on which the vulnerability was found. + */ + project: IXGitLabProject | null; + + /** + * Type of the security report that found the vulnerability (SAST, + * DEPENDENCY_SCANNING, CONTAINER_SCANNING, DAST, SECRET_DETECTION, + * COVERAGE_FUZZING, API_FUZZING, CLUSTER_IMAGE_SCANNING, GENERIC). `Scan Type` in the UI. + */ + reportType: XGitLabVulnerabilityReportType | null; + + /** + * Timestamp of when the vulnerability state was changed to resolved. + */ + resolvedAt: any | null; + + /** + * User that resolved the vulnerability. + */ + resolvedBy: IXGitLabUserCore | null; + + /** + * Indicates whether the vulnerability is fixed on the default branch or not. + */ + resolvedOnDefaultBranch: boolean; + + /** + * Scanner metadata for the vulnerability. + */ + scanner: IXGitLabVulnerabilityScanner | null; + + /** + * Severity of the vulnerability (INFO, UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL) + */ + severity: XGitLabVulnerabilitySeverity | null; + + /** + * State of the vulnerability (DETECTED, CONFIRMED, RESOLVED, DISMISSED) + */ + state: XGitLabVulnerabilityState | null; + + /** + * Title of the vulnerability. + */ + title: string | null; + + /** + * Number of user notes attached to the vulnerability. + */ + userNotesCount: number; + + /** + * Permissions for the current user on the resource + */ + userPermissions: IXGitLabVulnerabilityPermissions; + + /** + * URL to the vulnerability's details page. + */ + vulnerabilityPath: string | null; +} + +export interface IDiscussionsOnXGitLabVulnerabilityArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IExternalIssueLinksOnXGitLabVulnerabilityArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface IIssueLinksOnXGitLabVulnerabilityArguments { + /** + * Filter issue links by link type. + */ + linkType?: XGitLabVulnerabilityIssueLinkType | null; + + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +export interface INotesOnXGitLabVulnerabilityArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Confidence that a given vulnerability is present in the codebase. + */ +export const enum XGitLabVulnerabilityConfidence { + /** + * Ignore confidence + */ + IGNORE = 'IGNORE', + + /** + * Unknown confidence + */ + UNKNOWN = 'UNKNOWN', + + /** + * Experimental confidence + */ + EXPERIMENTAL = 'EXPERIMENTAL', + + /** + * Low confidence + */ + LOW = 'LOW', + + /** + * Medium confidence + */ + MEDIUM = 'MEDIUM', + + /** + * High confidence + */ + HIGH = 'HIGH', + + /** + * Confirmed confidence + */ + CONFIRMED = 'CONFIRMED', +} + +/** + * Autogenerated input type of VulnerabilityConfirm + */ +export interface IXGitLabVulnerabilityConfirmInput { + /** + * ID of the vulnerability to be confirmed. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityConfirm + */ +export interface IXGitLabVulnerabilityConfirmPayload { + __typename: '_xGitLabVulnerabilityConfirmPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Vulnerability after state change. + */ + vulnerability: IXGitLabVulnerability | null; +} + +/** + * The connection type for Vulnerability. + */ +export interface IXGitLabVulnerabilityConnection { + __typename: '_xGitLabVulnerabilityConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of VulnerabilityCreate + */ +export interface IXGitLabVulnerabilityCreateInput { + /** + * ID of the project to attach the vulnerability to. + */ + project: any; + + /** + * Name of the vulnerability. + */ + name: string; + + /** + * Long text section that describes the vulnerability in more detail. + */ + description: string; + + /** + * Information about the scanner used to discover the vulnerability. + */ + scanner: IXGitLabVulnerabilityScannerInput; + + /** + * Array of CVE or CWE identifiers for the vulnerability. + */ + identifiers: Array; + + /** + * State of the vulnerability (defaults to `detected`). + * @default "DETECTED" + */ + state?: XGitLabVulnerabilityState | null; + + /** + * Severity of the vulnerability (defaults to `unknown`). + * @default "UNKNOWN" + */ + severity?: XGitLabVulnerabilitySeverity | null; + + /** + * Confidence of the vulnerability (defaults to `unknown`). + * @default "UNKNOWN" + */ + confidence?: XGitLabVulnerabilityConfidence | null; + + /** + * Instructions for how to fix the vulnerability. + */ + solution?: string | null; + + /** + * Short text section that describes the vulnerability. This may include the finding's specific information. + */ + message?: string | null; + + /** + * Timestamp of when the vulnerability was first detected (defaults to creation time). + */ + detectedAt?: any | null; + + /** + * Timestamp of when the vulnerability state changed to confirmed (defaults to creation time if status is `confirmed`). + */ + confirmedAt?: any | null; + + /** + * Timestamp of when the vulnerability state changed to resolved (defaults to creation time if status is `resolved`). + */ + resolvedAt?: any | null; + + /** + * Timestamp of when the vulnerability state changed to dismissed (defaults to creation time if status is `dismissed`). + */ + dismissedAt?: any | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityCreate + */ +export interface IXGitLabVulnerabilityCreatePayload { + __typename: '_xGitLabVulnerabilityCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Vulnerability created. + */ + vulnerability: IXGitLabVulnerability | null; +} + +/** + * Represents a vulnerability detail field. The fields with data will depend on the vulnerability detail type + */ +export type _xGitLabVulnerabilityDetail = + | IXGitLabVulnerabilityDetailBase + | IXGitLabVulnerabilityDetailBoolean + | IXGitLabVulnerabilityDetailCode + | IXGitLabVulnerabilityDetailCommit + | IXGitLabVulnerabilityDetailDiff + | IXGitLabVulnerabilityDetailFileLocation + | IXGitLabVulnerabilityDetailInt + | IXGitLabVulnerabilityDetailList + | IXGitLabVulnerabilityDetailMarkdown + | IXGitLabVulnerabilityDetailModuleLocation + | IXGitLabVulnerabilityDetailTable + | IXGitLabVulnerabilityDetailText + | IXGitLabVulnerabilityDetailUrl; + +/** + * Represents the vulnerability details base + */ +export interface IXGitLabVulnerabilityDetailBase { + __typename: '_xGitLabVulnerabilityDetailBase'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; +} + +/** + * Represents the vulnerability details boolean value + */ +export interface IXGitLabVulnerabilityDetailBoolean { + __typename: '_xGitLabVulnerabilityDetailBoolean'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Value of the field. + */ + value: boolean; +} + +/** + * Represents the vulnerability details code field + */ +export interface IXGitLabVulnerabilityDetailCode { + __typename: '_xGitLabVulnerabilityDetailCode'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Language of the code. + */ + lang: string | null; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Source code. + */ + value: string; +} + +/** + * Represents the vulnerability details commit field + */ +export interface IXGitLabVulnerabilityDetailCommit { + __typename: '_xGitLabVulnerabilityDetailCommit'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Commit SHA value. + */ + value: string; +} + +/** + * Represents the vulnerability details diff field + */ +export interface IXGitLabVulnerabilityDetailDiff { + __typename: '_xGitLabVulnerabilityDetailDiff'; + + /** + * Value of the field after the change. + */ + after: string; + + /** + * Value of the field before the change. + */ + before: string; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; +} + +/** + * Represents the vulnerability details location within a file in the project + */ +export interface IXGitLabVulnerabilityDetailFileLocation { + __typename: '_xGitLabVulnerabilityDetailFileLocation'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * File name. + */ + fileName: string; + + /** + * End line number of the file location. + */ + lineEnd: number; + + /** + * Start line number of the file location. + */ + lineStart: number; + + /** + * Name of the field. + */ + name: string | null; +} + +/** + * Represents the vulnerability details integer value + */ +export interface IXGitLabVulnerabilityDetailInt { + __typename: '_xGitLabVulnerabilityDetailInt'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Value of the field. + */ + value: number; +} + +/** + * Represents the vulnerability details list value + */ +export interface IXGitLabVulnerabilityDetailList { + __typename: '_xGitLabVulnerabilityDetailList'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * List of details. + */ + items: Array<_xGitLabVulnerabilityDetail>; + + /** + * Name of the field. + */ + name: string | null; +} + +/** + * Represents the vulnerability details Markdown field + */ +export interface IXGitLabVulnerabilityDetailMarkdown { + __typename: '_xGitLabVulnerabilityDetailMarkdown'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Value of the Markdown field. + */ + value: string; +} + +/** + * Represents the vulnerability details location within a file in the project + */ +export interface IXGitLabVulnerabilityDetailModuleLocation { + __typename: '_xGitLabVulnerabilityDetailModuleLocation'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Module name. + */ + moduleName: string; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Offset of the module location. + */ + offset: number; +} + +/** + * Represents the vulnerability details table value + */ +export interface IXGitLabVulnerabilityDetailTable { + __typename: '_xGitLabVulnerabilityDetailTable'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Table headers. + */ + headers: Array<_xGitLabVulnerabilityDetail>; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Table rows. + */ + rows: Array<_xGitLabVulnerabilityDetail>; +} + +/** + * Represents the vulnerability details text field + */ +export interface IXGitLabVulnerabilityDetailText { + __typename: '_xGitLabVulnerabilityDetailText'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Value of the text field. + */ + value: string; +} + +/** + * Represents the vulnerability details URL field + */ +export interface IXGitLabVulnerabilityDetailUrl { + __typename: '_xGitLabVulnerabilityDetailUrl'; + + /** + * Description of the field. + */ + description: string | null; + + /** + * Name of the field. + */ + fieldName: string | null; + + /** + * Href of the URL. + */ + href: string; + + /** + * Name of the field. + */ + name: string | null; + + /** + * Text of the URL. + */ + text: string | null; +} + +/** + * The dismissal reason of the Vulnerability + */ +export const enum XGitLabVulnerabilityDismissalReason { + /** + * The vulnerability is known, and has not been remediated or mitigated, but is considered to be an acceptable business risk. + */ + ACCEPTABLE_RISK = 'ACCEPTABLE_RISK', + + /** + * An error in reporting in which a test result incorrectly indicates the + * presence of a vulnerability in a system when the vulnerability is not present. + */ + FALSE_POSITIVE = 'FALSE_POSITIVE', + + /** + * A management, operational, or technical control (that is, safeguard or + * countermeasure) employed by an organization that provides equivalent or + * comparable protection for an information system. + */ + MITIGATING_CONTROL = 'MITIGATING_CONTROL', + + /** + * The finding is not a vulnerability because it is part of a test or is test data. + */ + USED_IN_TESTS = 'USED_IN_TESTS', + + /** + * The vulnerability is known, and has not been remediated or mitigated, but is + * considered to be in a part of the application that will not be updated. + */ + NOT_APPLICABLE = 'NOT_APPLICABLE', +} + +/** + * Autogenerated input type of VulnerabilityDismiss + */ +export interface IXGitLabVulnerabilityDismissInput { + /** + * ID of the vulnerability to be dismissed. + */ + id: any; + + /** + * Comment why vulnerability should be dismissed. + */ + comment?: string | null; + + /** + * Reason why vulnerability should be dismissed. + */ + dismissalReason?: XGitLabVulnerabilityDismissalReason | null; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityDismiss + */ +export interface IXGitLabVulnerabilityDismissPayload { + __typename: '_xGitLabVulnerabilityDismissPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Vulnerability after dismissal. + */ + vulnerability: IXGitLabVulnerability | null; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabVulnerabilityEdge { + __typename: '_xGitLabVulnerabilityEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabVulnerability | null; +} + +/** + * Represents an external issue link of a vulnerability + */ +export interface IXGitLabVulnerabilityExternalIssueLink { + __typename: '_xGitLabVulnerabilityExternalIssueLink'; + + /** + * The external issue attached to the issue link. + */ + externalIssue: IXGitLabExternalIssue | null; + + /** + * GraphQL ID of the external issue link. + */ + id: any; + + /** + * Type of the external issue link. + */ + linkType: XGitLabVulnerabilityExternalIssueLinkType; +} + +/** + * The connection type for VulnerabilityExternalIssueLink. + */ +export interface IXGitLabVulnerabilityExternalIssueLinkConnection { + __typename: '_xGitLabVulnerabilityExternalIssueLinkConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * Autogenerated input type of VulnerabilityExternalIssueLinkCreate + */ +export interface IXGitLabVulnerabilityExternalIssueLinkCreateInput { + /** + * ID of the vulnerability. + */ + id: any; + + /** + * Type of the external issue link. + */ + linkType: XGitLabVulnerabilityExternalIssueLinkType; + + /** + * External tracker type of the external issue link. + */ + externalTracker: XGitLabVulnerabilityExternalIssueLinkExternalTracker; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityExternalIssueLinkCreate + */ +export interface IXGitLabVulnerabilityExternalIssueLinkCreatePayload { + __typename: '_xGitLabVulnerabilityExternalIssueLinkCreatePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Created external issue link. + */ + externalIssueLink: IXGitLabVulnerabilityExternalIssueLink | null; +} + +/** + * Autogenerated input type of VulnerabilityExternalIssueLinkDestroy + */ +export interface IXGitLabVulnerabilityExternalIssueLinkDestroyInput { + /** + * Global ID of the vulnerability external issue link. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityExternalIssueLinkDestroy + */ +export interface IXGitLabVulnerabilityExternalIssueLinkDestroyPayload { + __typename: '_xGitLabVulnerabilityExternalIssueLinkDestroyPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabVulnerabilityExternalIssueLinkEdge { + __typename: '_xGitLabVulnerabilityExternalIssueLinkEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabVulnerabilityExternalIssueLink | null; +} + +/** + * The external tracker of the external issue link related to a vulnerability + */ +export const enum XGitLabVulnerabilityExternalIssueLinkExternalTracker { + /** + * Jira external tracker + */ + JIRA = 'JIRA', +} + +/** + * The type of the external issue link related to a vulnerability + */ +export const enum XGitLabVulnerabilityExternalIssueLinkType { + /** + * Created link type + */ + CREATED = 'CREATED', +} + +/** + * The grade of the vulnerable project + */ +export const enum XGitLabVulnerabilityGrade { + /** + * A grade + */ + A = 'A', + + /** + * B grade + */ + B = 'B', + + /** + * C grade + */ + C = 'C', + + /** + * D grade + */ + D = 'D', + + /** + * F grade + */ + F = 'F', +} + +/** + * Represents a vulnerability identifier + */ +export interface IXGitLabVulnerabilityIdentifier { + __typename: '_xGitLabVulnerabilityIdentifier'; + + /** + * External ID of the vulnerability identifier. + */ + externalId: string | null; + + /** + * External type of the vulnerability identifier. + */ + externalType: string | null; + + /** + * Name of the vulnerability identifier. + */ + name: string | null; + + /** + * URL of the vulnerability identifier. + */ + url: string | null; +} + +export interface IXGitLabVulnerabilityIdentifierInput { + /** + * Name of the vulnerability identifier. + */ + name: string; + + /** + * URL of the vulnerability identifier. + */ + url: string; + + /** + * External type of the vulnerability identifier. + */ + externalType?: string | null; + + /** + * External ID of the vulnerability identifier. + */ + externalId?: string | null; +} + +/** + * Represents an issue link of a vulnerability + */ +export interface IXGitLabVulnerabilityIssueLink { + __typename: '_xGitLabVulnerabilityIssueLink'; + + /** + * GraphQL ID of the vulnerability. + */ + id: string; + + /** + * Issue attached to issue link. + */ + issue: IXGitLabIssue; + + /** + * Type of the issue link. + */ + linkType: XGitLabVulnerabilityIssueLinkType; +} + +/** + * The connection type for VulnerabilityIssueLink. + */ +export interface IXGitLabVulnerabilityIssueLinkConnection { + __typename: '_xGitLabVulnerabilityIssueLinkConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabVulnerabilityIssueLinkEdge { + __typename: '_xGitLabVulnerabilityIssueLinkEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabVulnerabilityIssueLink | null; +} + +/** + * The type of the issue link related to a vulnerability + */ +export const enum XGitLabVulnerabilityIssueLinkType { + /** + * Has a related issue + */ + RELATED = 'RELATED', + + /** + * Issue is created for the vulnerability + */ + CREATED = 'CREATED', +} + +/** + * Represents a link related to a vulnerability + */ +export interface IXGitLabVulnerabilityLink { + __typename: '_xGitLabVulnerabilityLink'; + + /** + * Name of the link. + */ + name: string | null; + + /** + * URL of the link. + */ + url: string; +} + +/** + * Represents a vulnerability location. The fields with data will depend on the vulnerability report type + */ +export type _xGitLabVulnerabilityLocation = + | IXGitLabVulnerabilityLocationContainerScanning + | IXGitLabVulnerabilityLocationCoverageFuzzing + | IXGitLabVulnerabilityLocationDast + | IXGitLabVulnerabilityLocationDependencyScanning + | IXGitLabVulnerabilityLocationGeneric + | IXGitLabVulnerabilityLocationSast + | IXGitLabVulnerabilityLocationSecretDetection; + +/** + * Represents the location of a vulnerability found by a container security scan + */ +export interface IXGitLabVulnerabilityLocationContainerScanning { + __typename: '_xGitLabVulnerabilityLocationContainerScanning'; + + /** + * Dependency containing the vulnerability. + */ + dependency: IXGitLabVulnerableDependency | null; + + /** + * Name of the vulnerable container image. + */ + image: string | null; + + /** + * Operating system that runs on the vulnerable container image. + */ + operatingSystem: string | null; +} + +/** + * Represents the location of a vulnerability found by a Coverage Fuzzing scan + */ +export interface IXGitLabVulnerabilityLocationCoverageFuzzing { + __typename: '_xGitLabVulnerabilityLocationCoverageFuzzing'; + + /** + * Blob path to the vulnerable file. + */ + blobPath: string | null; + + /** + * Number of the last relevant line in the vulnerable file. + */ + endLine: string | null; + + /** + * Path to the vulnerable file. + */ + file: string | null; + + /** + * Number of the first relevant line in the vulnerable file. + */ + startLine: string | null; + + /** + * Class containing the vulnerability. + */ + vulnerableClass: string | null; + + /** + * Method containing the vulnerability. + */ + vulnerableMethod: string | null; +} + +/** + * Represents the location of a vulnerability found by a DAST scan + */ +export interface IXGitLabVulnerabilityLocationDast { + __typename: '_xGitLabVulnerabilityLocationDast'; + + /** + * Domain name of the vulnerable request. + */ + hostname: string | null; + + /** + * Query parameter for the URL on which the vulnerability occurred. + */ + param: string | null; + + /** + * URL path and query string of the vulnerable request. + */ + path: string | null; + + /** + * HTTP method of the vulnerable request. + */ + requestMethod: string | null; +} + +/** + * Represents the location of a vulnerability found by a dependency security scan + */ +export interface IXGitLabVulnerabilityLocationDependencyScanning { + __typename: '_xGitLabVulnerabilityLocationDependencyScanning'; + + /** + * Blob path to the vulnerable file. + */ + blobPath: string | null; + + /** + * Dependency containing the vulnerability. + */ + dependency: IXGitLabVulnerableDependency | null; + + /** + * Path to the vulnerable file. + */ + file: string | null; +} + +/** + * Represents the location of a vulnerability found by a generic scanner. + */ +export interface IXGitLabVulnerabilityLocationGeneric { + __typename: '_xGitLabVulnerabilityLocationGeneric'; + + /** + * Free-form description of where the vulnerability is located. + */ + description: string | null; +} + +/** + * Represents the location of a vulnerability found by a SAST scan + */ +export interface IXGitLabVulnerabilityLocationSast { + __typename: '_xGitLabVulnerabilityLocationSast'; + + /** + * Blob path to the vulnerable file. + */ + blobPath: string | null; + + /** + * Number of the last relevant line in the vulnerable file. + */ + endLine: string | null; + + /** + * Path to the vulnerable file. + */ + file: string | null; + + /** + * Number of the first relevant line in the vulnerable file. + */ + startLine: string | null; + + /** + * Class containing the vulnerability. + */ + vulnerableClass: string | null; + + /** + * Method containing the vulnerability. + */ + vulnerableMethod: string | null; +} + +/** + * Represents the location of a vulnerability found by a secret detection scan + */ +export interface IXGitLabVulnerabilityLocationSecretDetection { + __typename: '_xGitLabVulnerabilityLocationSecretDetection'; + + /** + * Blob path to the vulnerable file. + */ + blobPath: string | null; + + /** + * Number of the last relevant line in the vulnerable file. + */ + endLine: string | null; + + /** + * Path to the vulnerable file. + */ + file: string | null; + + /** + * Number of the first relevant line in the vulnerable file. + */ + startLine: string | null; + + /** + * Class containing the vulnerability. + */ + vulnerableClass: string | null; + + /** + * Method containing the vulnerability. + */ + vulnerableMethod: string | null; +} + +/** + * Check permissions for the current user on a vulnerability + */ +export interface IXGitLabVulnerabilityPermissions { + __typename: '_xGitLabVulnerabilityPermissions'; + + /** + * Indicates the user can perform `admin_vulnerability` on this resource + */ + adminVulnerability: boolean; + + /** + * Indicates the user can perform `admin_vulnerability_external_issue_link` on this resource + */ + adminVulnerabilityExternalIssueLink: boolean; + + /** + * Indicates the user can perform `admin_vulnerability_issue_link` on this resource + */ + adminVulnerabilityIssueLink: boolean; + + /** + * Indicates the user can perform `create_vulnerability` on this resource + */ + createVulnerability: boolean; + + /** + * Indicates the user can perform `create_vulnerability_export` on this resource + */ + createVulnerabilityExport: boolean; + + /** + * Indicates the user can perform `create_vulnerability_feedback` on this resource + */ + createVulnerabilityFeedback: boolean; + + /** + * Indicates the user can perform `destroy_vulnerability_feedback` on this resource + */ + destroyVulnerabilityFeedback: boolean; + + /** + * Indicates the user can perform `read_vulnerability_feedback` on this resource + */ + readVulnerabilityFeedback: boolean; + + /** + * Indicates the user can perform `update_vulnerability_feedback` on this resource + */ + updateVulnerabilityFeedback: boolean; +} + +/** + * The type of the security scan that found the vulnerability + */ +export const enum XGitLabVulnerabilityReportType { + /** + * SAST report + */ + SAST = 'SAST', + + /** + * Dependency Scanning report + */ + DEPENDENCY_SCANNING = 'DEPENDENCY_SCANNING', + + /** + * Container Scanning report + */ + CONTAINER_SCANNING = 'CONTAINER_SCANNING', + + /** + * DAST report + */ + DAST = 'DAST', + + /** + * Secret Detection report + */ + SECRET_DETECTION = 'SECRET_DETECTION', + + /** + * Coverage Fuzzing report + */ + COVERAGE_FUZZING = 'COVERAGE_FUZZING', + + /** + * API Fuzzing report + */ + API_FUZZING = 'API_FUZZING', + + /** + * Cluster Image Scanning report + */ + CLUSTER_IMAGE_SCANNING = 'CLUSTER_IMAGE_SCANNING', + + /** + * Generic report + */ + GENERIC = 'GENERIC', +} + +/** + * Autogenerated input type of VulnerabilityResolve + */ +export interface IXGitLabVulnerabilityResolveInput { + /** + * ID of the vulnerability to be resolved. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityResolve + */ +export interface IXGitLabVulnerabilityResolvePayload { + __typename: '_xGitLabVulnerabilityResolvePayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Vulnerability after state change. + */ + vulnerability: IXGitLabVulnerability | null; +} + +/** + * Autogenerated input type of VulnerabilityRevertToDetected + */ +export interface IXGitLabVulnerabilityRevertToDetectedInput { + /** + * ID of the vulnerability to be reverted. + */ + id: any; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId?: string | null; +} + +/** + * Autogenerated return type of VulnerabilityRevertToDetected + */ +export interface IXGitLabVulnerabilityRevertToDetectedPayload { + __typename: '_xGitLabVulnerabilityRevertToDetectedPayload'; + + /** + * A unique identifier for the client performing the mutation. + */ + clientMutationId: string | null; + + /** + * Errors encountered during execution of the mutation. + */ + errors: Array; + + /** + * Vulnerability after revert. + */ + vulnerability: IXGitLabVulnerability | null; +} + +/** + * Represents a vulnerability scanner + */ +export interface IXGitLabVulnerabilityScanner { + __typename: '_xGitLabVulnerabilityScanner'; + + /** + * External ID of the vulnerability scanner. + */ + externalId: string | null; + + /** + * ID of the scanner. + */ + id: string | null; + + /** + * Name of the vulnerability scanner. + */ + name: string | null; + + /** + * Type of the vulnerability report. + */ + reportType: XGitLabVulnerabilityReportType | null; + + /** + * Vendor of the vulnerability scanner. + */ + vendor: string | null; +} + +/** + * The connection type for VulnerabilityScanner. + */ +export interface IXGitLabVulnerabilityScannerConnection { + __typename: '_xGitLabVulnerabilityScannerConnection'; + + /** + * A list of edges. + */ + edges: Array | null; + + /** + * A list of nodes. + */ + nodes: Array | null; + + /** + * Information to aid in pagination. + */ + pageInfo: IXGitLabPageInfo; +} + +/** + * An edge in a connection. + */ +export interface IXGitLabVulnerabilityScannerEdge { + __typename: '_xGitLabVulnerabilityScannerEdge'; + + /** + * A cursor for use in pagination. + */ + cursor: string; + + /** + * The item at the end of the edge. + */ + node: IXGitLabVulnerabilityScanner | null; +} + +export interface IXGitLabVulnerabilityScannerInput { + /** + * Unique ID that identifies the scanner. + */ + id: string; + + /** + * Human readable value that identifies the analyzer, not required to be unique. + */ + name: string; + + /** + * Link to more information about the analyzer. + */ + url: string; + + /** + * Information about vendor/maintainer of the scanner. + */ + vendor?: IXGitLabVulnerabilityScannerVendorInput | null; + + /** + * Version of the scanner. + */ + version: string; +} + +export interface IXGitLabVulnerabilityScannerVendorInput { + /** + * Name of the vendor/maintainer. + */ + name: string; +} + +/** + * Represents vulnerability counts by severity + */ +export interface IXGitLabVulnerabilitySeveritiesCount { + __typename: '_xGitLabVulnerabilitySeveritiesCount'; + + /** + * Number of vulnerabilities of CRITICAL severity of the project + */ + critical: number | null; + + /** + * Number of vulnerabilities of HIGH severity of the project + */ + high: number | null; + + /** + * Number of vulnerabilities of INFO severity of the project + */ + info: number | null; + + /** + * Number of vulnerabilities of LOW severity of the project + */ + low: number | null; + + /** + * Number of vulnerabilities of MEDIUM severity of the project + */ + medium: number | null; + + /** + * Number of vulnerabilities of UNKNOWN severity of the project + */ + unknown: number | null; +} + +/** + * The severity of the vulnerability + */ +export const enum XGitLabVulnerabilitySeverity { + /** + * Info severity + */ + INFO = 'INFO', + + /** + * Unknown severity + */ + UNKNOWN = 'UNKNOWN', + + /** + * Low severity + */ + LOW = 'LOW', + + /** + * Medium severity + */ + MEDIUM = 'MEDIUM', + + /** + * High severity + */ + HIGH = 'HIGH', + + /** + * Critical severity + */ + CRITICAL = 'CRITICAL', +} + +/** + * Vulnerability sort values + */ +export const enum XGitLabVulnerabilitySort { + /** + * Severity in descending order. + */ + severity_desc = 'severity_desc', + + /** + * Severity in ascending order. + */ + severity_asc = 'severity_asc', + + /** + * Title in descending order. + * @deprecated "Deprecated due to performance issues. Deprecated in 14.2." + */ + title_desc = 'title_desc', + + /** + * Title in ascending order. + * @deprecated "Deprecated due to performance issues. Deprecated in 14.2." + */ + title_asc = 'title_asc', + + /** + * Detection timestamp in descending order. + */ + detected_desc = 'detected_desc', + + /** + * Detection timestamp in ascending order. + */ + detected_asc = 'detected_asc', + + /** + * Report Type in descending order. + */ + report_type_desc = 'report_type_desc', + + /** + * Report Type in ascending order. + */ + report_type_asc = 'report_type_asc', + + /** + * State in descending order. + */ + state_desc = 'state_desc', + + /** + * State in ascending order. + */ + state_asc = 'state_asc', +} + +/** + * The state of the vulnerability + */ +export const enum XGitLabVulnerabilityState { + /** + * Detected vulnerability + */ + DETECTED = 'DETECTED', + + /** + * Confirmed vulnerability + */ + CONFIRMED = 'CONFIRMED', + + /** + * Resolved vulnerability + */ + RESOLVED = 'RESOLVED', + + /** + * Dismissed vulnerability + */ + DISMISSED = 'DISMISSED', +} + +/** + * Represents a vulnerable dependency. Used in vulnerability location data + */ +export interface IXGitLabVulnerableDependency { + __typename: '_xGitLabVulnerableDependency'; + + /** + * Package associated with the vulnerable dependency. + */ + package: IXGitLabVulnerablePackage | null; + + /** + * Version of the vulnerable dependency. + */ + version: string | null; +} + +/** + * Represents a vulnerable package. Used in vulnerability dependency data + */ +export interface IXGitLabVulnerablePackage { + __typename: '_xGitLabVulnerablePackage'; + + /** + * Name of the vulnerable package. + */ + name: string | null; +} + +/** + * Represents vulnerability letter grades with associated projects + */ +export interface IXGitLabVulnerableProjectsByGrade { + __typename: '_xGitLabVulnerableProjectsByGrade'; + + /** + * Number of projects within this grade. + */ + count: number; + + /** + * Grade based on the highest severity vulnerability present. + */ + grade: XGitLabVulnerabilityGrade; + + /** + * Projects within this grade. + */ + projects: IXGitLabProjectConnection; +} + +export interface IProjectsOnXGitLabVulnerableProjectsByGradeArguments { + /** + * Returns the elements in the list that come after the specified cursor. + */ + after?: string | null; + + /** + * Returns the elements in the list that come before the specified cursor. + */ + before?: string | null; + + /** + * Returns the first _n_ elements from the list. + */ + first?: number | null; + + /** + * Returns the last _n_ elements from the list. + */ + last?: number | null; +} + +/** + * Weight ID wildcard values + */ +export const enum XGitLabWeightWildcardId { + /** + * No weight is assigned. + */ + NONE = 'NONE', + + /** + * Weight is assigned. + */ + ANY = 'ANY', +} + +export interface IXGitLabErrorLocation { + __typename: '_xGitLabErrorLocation'; + line: number; + column: number; +} + +export interface IXGitLabError { + __typename: '_xGitLabError'; + message: string; + locations: Array | null; + path: Array | null; +} + +export interface IXGitLabApi { + __typename: '_xGitLabApi'; + errors: Array | null; + query: IXGitLabQuery | null; + mutation: IXGitLabMutation | null; +} + // tslint:enable diff --git a/packages/client/utils/GitLabClientManager.ts b/packages/client/utils/GitLabClientManager.ts new file mode 100644 index 00000000000..91d943cc9d5 --- /dev/null +++ b/packages/client/utils/GitLabClientManager.ts @@ -0,0 +1,101 @@ +import { + IntegrationProviderScopesEnum, + IntegrationProviderTypesEnum +} from '~/__generated__/GitLabProviderRow_viewer.graphql' +import Atmosphere from '../Atmosphere' +import {MenuMutationProps} from '../hooks/useMutationProps' +import AddIntegrationTokenMutation from '../mutations/AddIntegrationTokenMutation' +import getOAuthPopupFeatures from './getOAuthPopupFeatures' +import makeHref from './makeHref' + +export interface GitLabIntegrationProvider { + id: string + name: string + scope: IntegrationProviderScopesEnum + type: IntegrationProviderTypesEnum + updatedAt: string + providerMetadata: { + clientId?: string + serverBaseUrl?: string + scopes?: ReadonlyArray + } +} + +class GitLabClientManager { + fetch = window.fetch.bind(window) + + static openOAuth( + atmosphere: Atmosphere, + provider: GitLabIntegrationProvider, + teamId: string, + mutationProps: MenuMutationProps + ) { + const { + id: providerId, + providerMetadata: {clientId, serverBaseUrl, scopes} + } = provider + const {submitting, onError, onCompleted, submitMutation} = mutationProps + const oauthScopes = scopes ? scopes.join(' ') : '' + const providerState = Math.random() + .toString(36) + .substring(5) + + const redirect_uri = makeHref('/auth/gitlab') + const uri = `${serverBaseUrl}/oauth/authorize?client_id=${clientId}&scope=${oauthScopes}&state=${providerState}&redirect_uri=${redirect_uri}&response_type=code` + + const popup = window.open( + uri, + 'OAuth', + getOAuthPopupFeatures({width: 500, height: 750, top: 56}) + ) + const handler = (event) => { + if (typeof event.data !== 'object' || event.origin !== window.location.origin || submitting) { + return + } + const {code, state} = event.data + if (state !== providerState || typeof code !== 'string') return + submitMutation() + AddIntegrationTokenMutation( + atmosphere, + {providerId, oauthCodeOrPat: code, teamId, redirectUri: redirect_uri}, + {onError, onCompleted} + ) + popup && popup.close() + window.removeEventListener('message', handler) + } + window.addEventListener('message', handler) + } + + static getPrimaryProvider(providerList: readonly GitLabIntegrationProvider[]) { + return providerList.find( + (provider) => provider.scope === 'global' && provider.type === 'oauth2' + ) + } + + static getSecondaryProvider(providerList: readonly GitLabIntegrationProvider[]) { + const scopeScore = { + global: 0, + org: 1, + team: 2 + } + const sortedProviders = providerList + .filter((provider) => provider.scope != 'global' && provider.type === 'oauth2') + .map((provider) => ({ + ...provider, + score: scopeScore[provider.scope] + })) + .sort((a, b) => { + const scoreCompare = b.score - a.score + if (scoreCompare !== 0) return scoreCompare + return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime() + }) + if (sortedProviders.length === 0) return null + return sortedProviders[0] + } + + static getTruncatedProviderName(name: string) { + return name.length > 15 ? `${name.slice(0, 15)}…` : name + } +} + +export default GitLabClientManager diff --git a/packages/server/createSSR.ts b/packages/server/createSSR.ts index 5a3a278d052..b0e641cec48 100644 --- a/packages/server/createSSR.ts +++ b/packages/server/createSSR.ts @@ -6,25 +6,13 @@ import {brotliCompressSync} from 'zlib' import acceptsBrotli from './acceptsBrotli' import PROD from './PROD' import dehydrate from './utils/dehydrate' - -export const getClientKeys = () => { - return { - atlassian: process.env.ATLASSIAN_CLIENT_ID, - github: process.env.GITHUB_CLIENT_ID, - google: process.env.GOOGLE_OAUTH_CLIENT_ID, - segment: process.env.SEGMENT_WRITE_KEY, - sentry: process.env.SENTRY_DSN, - slack: process.env.SLACK_CLIENT_ID, - stripe: process.env.STRIPE_PUBLISHABLE_KEY, - prblIn: process.env.INVITATION_SHORTLINK - } -} +import getClientActionVars from '../../scripts/toolboxSrc/getClientActionVars' let minifiedHTML: string let brotliHTML: Buffer const getRaw = () => { if (!minifiedHTML) { - const clientIds = getClientKeys() + const clientIds = getClientActionVars() const PROJECT_ROOT = path.join(__dirname, '../') const htmlPath = PROD ? './build/index.html' : './template.html' const html = fs.readFileSync(path.join(PROJECT_ROOT, htmlPath), 'utf8') diff --git a/packages/server/dataloader/RootDataLoader.ts b/packages/server/dataloader/RootDataLoader.ts index 26a259c1668..742505d6813 100644 --- a/packages/server/dataloader/RootDataLoader.ts +++ b/packages/server/dataloader/RootDataLoader.ts @@ -3,6 +3,8 @@ import {DBType} from '../database/rethinkDriver' import * as pollLoaders from './pollsLoaders' import * as atlassianLoaders from './atlassianLoaders' import * as customLoaderMakers from './customLoaderMakers' +import * as githubLoaders from './githubLoaders' +import * as integrationAuthLoaders from './integrationAuthLoaders' import * as rethinkForeignKeyLoaderMakers from './rethinkForeignKeyLoaderMakers' import * as rethinkPrimaryKeyLoaderMakers from './rethinkPrimaryKeyLoaderMakers' import RethinkForeignKeyLoaderMaker from './RethinkForeignKeyLoaderMaker' @@ -16,10 +18,13 @@ interface LoaderDict { // Register all loaders const loaderMakers = { - ...rethinkPrimaryKeyLoaderMakers, ...rethinkForeignKeyLoaderMakers, + ...rethinkPrimaryKeyLoaderMakers, ...customLoaderMakers, ...atlassianLoaders, + ...customLoaderMakers, + ...githubLoaders, + ...integrationAuthLoaders, ...pollLoaders } as const @@ -36,7 +41,14 @@ type ForeignLoaders = keyof ForeignLoaderMakers type Unforeign = T extends RethinkForeignKeyLoaderMaker ? U : never type TypeFromForeign = TypeFromPrimary> -type CustomLoaderMakers = typeof customLoaderMakers & typeof atlassianLoaders & typeof pollLoaders +/** + * When adding a new loaders file like {@link atlassianLoaders} or {@link githubLoaders} + * this type has to include a typeof of newly added loaders + */ +type CustomLoaderMakers = typeof customLoaderMakers & + typeof atlassianLoaders & + typeof pollLoaders & + typeof integrationAuthLoaders type CustomLoaders = keyof CustomLoaderMakers type Uncustom = T extends (parent: RootDataLoader) => infer U ? U : never type TypeFromCustom = Uncustom diff --git a/packages/server/dataloader/customLoaderMakers.ts b/packages/server/dataloader/customLoaderMakers.ts index 30a59918d01..398e1ce83f3 100644 --- a/packages/server/dataloader/customLoaderMakers.ts +++ b/packages/server/dataloader/customLoaderMakers.ts @@ -17,12 +17,6 @@ import getGitHubDimensionFieldMaps, { GitHubDimensionFieldMap } from '../postgres/queries/getGitHubDimensionFieldMaps' import getLatestTaskEstimates from '../postgres/queries/getLatestTaskEstimates' -import getMattermostAuthByUserIdTeamId, { - GetMattermostAuthByUserIdTeamIdResult -} from '../postgres/queries/getMattermostAuthByUserIdTeamId' -import getMattermostBestAuthByUserIdTeamId, { - GetMattermostBestAuthByUserIdTeamIdResult -} from '../postgres/queries/getMattermostBestAuthByUserIdTeamId' import getMeetingTaskEstimates, { MeetingTaskEstimatesResult } from '../postgres/queries/getMeetingTaskEstimates' @@ -37,6 +31,21 @@ import IUser from '../postgres/types/IUser' import normalizeRethinkDbResults from './normalizeRethinkDbResults' import RootDataLoader from './RootDataLoader' +export interface MeetingSettingsKey { + teamId: string + meetingType: MeetingTypeEnum +} + +export interface MeetingTemplateKey { + teamId: string + meetingType: MeetingTypeEnum +} + +export interface ReactablesKey { + id: string + type: ReactableEnum +} + export interface UserTasksKey { first: number after?: Date @@ -48,21 +57,6 @@ export interface UserTasksKey { includeUnassigned?: boolean } -export interface ReactablesKey { - id: string - type: ReactableEnum -} - -export interface MeetingSettingsKey { - teamId: string - meetingType: MeetingTypeEnum -} - -export interface MeetingTemplateKey { - teamId: string - meetingType: MeetingTypeEnum -} - const reactableLoaders = [ {type: 'COMMENT', loader: 'comments'}, {type: 'REFLECTION', loader: 'retroReflections'} @@ -341,46 +335,6 @@ export const githubDimensionFieldMaps = (parent: RootDataLoader) => { ) } -export const mattermostAuthByUserIdTeamId = (parent: RootDataLoader) => { - return new DataLoader< - {userId: string; teamId: string}, - GetMattermostAuthByUserIdTeamIdResult | null | undefined, - string - >( - async (keys) => { - const results = await Promise.allSettled( - keys.map(async ({userId, teamId}) => getMattermostAuthByUserIdTeamId(userId, teamId)) - ) - const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) - return vals - }, - { - ...parent.dataLoaderOptions, - cacheKeyFn: ({userId, teamId}) => `${userId}:${teamId}` - } - ) -} - -export const mattermostBestAuthByUserIdTeamId = (parent: RootDataLoader) => { - return new DataLoader< - {userId: string; teamId: string}, - GetMattermostBestAuthByUserIdTeamIdResult | null | undefined, - string - >( - async (keys) => { - const results = await Promise.allSettled( - keys.map(async ({userId, teamId}) => getMattermostBestAuthByUserIdTeamId(userId, teamId)) - ) - const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) - return vals - }, - { - ...parent.dataLoaderOptions, - cacheKeyFn: ({userId, teamId}) => `${userId}:${teamId}` - } - ) -} - export const meetingSettingsByType = (parent: RootDataLoader) => { return new DataLoader( async (keys) => { diff --git a/packages/server/dataloader/githubLoaders.ts b/packages/server/dataloader/githubLoaders.ts new file mode 100644 index 00000000000..e5c9832953d --- /dev/null +++ b/packages/server/dataloader/githubLoaders.ts @@ -0,0 +1,47 @@ +import DataLoader from 'dataloader' +import RootDataLoader from './RootDataLoader' +import getGitHubAuthByUserIdTeamId, { + GitHubAuth +} from '../postgres/queries/getGitHubAuthByUserIdTeamId' +import getGitHubDimensionFieldMaps, { + GitHubDimensionFieldMap +} from '../postgres/queries/getGitHubDimensionFieldMaps' + +export const githubAuth = (parent: RootDataLoader) => { + return new DataLoader<{teamId: string; userId: string}, GitHubAuth | null, string>( + async (keys) => { + const results = await Promise.allSettled( + keys.map(async ({teamId, userId}) => getGitHubAuthByUserIdTeamId(userId, teamId)) + ) + const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) + return vals + }, + { + ...parent.dataLoaderOptions, + cacheKeyFn: ({teamId, userId}) => `${userId}:${teamId}` + } + ) +} + +export const githubDimensionFieldMaps = (parent: RootDataLoader) => { + return new DataLoader< + {teamId: string; dimensionName: string; nameWithOwner: string}, + GitHubDimensionFieldMap | null, + string + >( + async (keys) => { + const results = await Promise.allSettled( + keys.map(async ({teamId, dimensionName, nameWithOwner}) => + getGitHubDimensionFieldMaps(teamId, dimensionName, nameWithOwner) + ) + ) + const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) + return vals + }, + { + ...parent.dataLoaderOptions, + cacheKeyFn: ({teamId, dimensionName, nameWithOwner}) => + `${teamId}:${dimensionName}:${nameWithOwner}` + } + ) +} diff --git a/packages/server/dataloader/integrationAuthLoaders.ts b/packages/server/dataloader/integrationAuthLoaders.ts new file mode 100644 index 00000000000..d1e90a8e0a8 --- /dev/null +++ b/packages/server/dataloader/integrationAuthLoaders.ts @@ -0,0 +1,91 @@ +import DataLoader from 'dataloader' +import RootDataLoader from './RootDataLoader' +import getIntegrationProvidersByIds from '../postgres/queries/getIntegrationProvidersByIds' +import getIntegrationProviders from '../postgres/queries/getIntegrationProviders' +import getIntegrationTokenWithProvider from '../postgres/queries/getIntegrationTokenWithProvider' +import getIntegrationTokensByTeamWithProvider from '../postgres/queries/getIntegrationTokensByTeamWithProvider' +import {IntegrationProvider, IntegrationProvidersEnum} from '../postgres/types/IntegrationProvider' +import {IntegrationTokenWithProvider} from '../postgres/types/IntegrationTokenWithProvider' + +export interface IntegrationProviderTeamKey { + provider: IntegrationProvidersEnum + teamId: string +} + +export interface IntegrationProviderTeamOrgKey { + provider: IntegrationProvidersEnum + teamId: string + orgId: string +} + +export interface IntegrationTokenPrimaryKey { + provider: IntegrationProvidersEnum + teamId: string + userId: string +} + +export const integrationProviders = (parent: RootDataLoader) => { + return new DataLoader( + async (providerIds) => { + const rows = await getIntegrationProvidersByIds(providerIds) + return providerIds.map((providerId) => rows.find((row) => row.id === providerId) || null) + }, + { + ...parent.dataLoaderOptions + } + ) +} + +export const integrationProvidersByType = (parent: RootDataLoader) => { + return new DataLoader( + async (keys) => { + const results = await Promise.allSettled( + keys.map(async ({provider, teamId, orgId}) => + getIntegrationProviders(provider, teamId, orgId) + ) + ) + const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) + return vals + }, + { + ...parent.dataLoaderOptions, + cacheKeyFn: ({provider, teamId, orgId}) => `${provider}:${orgId}:${teamId}` + } + ) +} + +export const integrationTokenWithProvider = (parent: RootDataLoader) => { + return new DataLoader( + async (keys) => { + const results = await Promise.allSettled( + keys.map(async ({provider, teamId, userId}) => + getIntegrationTokenWithProvider(provider, teamId, userId) + ) + ) + const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) + return vals + }, + { + ...parent.dataLoaderOptions, + cacheKeyFn: ({provider, teamId, userId}) => `${provider}:${teamId}:${userId}` + } + ) +} + +export const integrationTokensByTeamWithProvider = (parent: RootDataLoader) => { + return new DataLoader( + async (keys) => { + const results = await Promise.allSettled( + keys.map(async ({provider, teamId}) => + getIntegrationTokensByTeamWithProvider(provider, teamId) + ) + ) + const vals = results.map((result) => (result.status === 'fulfilled' ? result.value : null)) + return vals + }, + { + ...parent.dataLoaderOptions, + cacheKeyFn: ({provider, teamId}) => `${provider}:${teamId}` + } + ) +} diff --git a/packages/server/graphql/githubSchema/addGitHubToSchema.ts b/packages/server/graphql/githubSchema/addGitHubToSchema.ts deleted file mode 100644 index cb4db09343c..00000000000 --- a/packages/server/graphql/githubSchema/addGitHubToSchema.ts +++ /dev/null @@ -1,149 +0,0 @@ -import {mergeSchemas} from '@graphql-tools/merge' -import {makeExecutableSchema} from '@graphql-tools/schema' -import {RenameRootTypes, RenameTypes, wrapSchema} from '@graphql-tools/wrap' -import {schema} from '@octokit/graphql-schema' -import {GraphQLResolveInfo, GraphQLSchema} from 'graphql' -import {Threshold} from '../../../client/types/constEnums' -import getRequestDataLoader, {GitHubGraphQLError} from './getRequestDataLoader' -import transformGitHubRequest from './transformGitHubRequest' - -export interface AddToGitHubOptions { - prefix?: string -} - -type ResolveAccessToken = ( - source: any, - args: any, - context: any, - info: GraphQLResolveInfo -) => string | Promise - -const addGitHubToSchema = ( - parentSchema: GraphQLSchema, - parentType: string, - resolveAccessToken: ResolveAccessToken, - options?: AddToGitHubOptions -) => { - const prefix = options?.prefix ?? '_GitHub' - const prefixGitHub = (name: string) => `${prefix}${name}` - const transformedGitHubSchema = wrapSchema({ - schema: makeExecutableSchema({ - typeDefs: schema.idl - }), - createProxyingResolver: () => (parent, _args: unknown, _context, info) => - parent[info.fieldName], - transforms: [new RenameRootTypes(prefixGitHub), new RenameTypes(prefixGitHub)] - }) - - const makeResolve = (isMutation: boolean) => async ( - {accessToken, resolveErrors, errors}, - _args: unknown, - context, - info - ) => { - if (errors) return null - const {document, variables} = transformGitHubRequest(info, prefix) - // Create a new dataloader whenever the context changes (once per execution) - const ghDataLoader = getRequestDataLoader(context) - const res = await ghDataLoader.load({ - document, - variables, - accessToken, - options: { - prefix, - isMutation - } - }) - if (resolveErrors) resolveErrors(res.errors) - return res.data - } - - return mergeSchemas({ - schemas: [transformedGitHubSchema, parentSchema], - typeDefs: ` - type ${prefix}ErrorLocation { - line: Int! - column: Int! - } - type ${prefix}Error { - message: String! - locations: [${prefix}ErrorLocation!] - path: [String!] - } - type GitHubApi { - errors: [${prefix}Error!] - query: ${prefix}Query - mutation: ${prefix}Mutation - } - extend type ${parentType} { - api: GitHubApi - }`, - resolvers: { - [parentType]: { - api: async (source, args, context, info) => { - const {fieldNodes} = info - const [fieldNode] = fieldNodes - const {selectionSet} = fieldNode - const {selections} = selectionSet! - const queryField = selections.find( - (selection) => selection.kind === 'Field' && selection.name.value === 'query' - ) - const mutationField = selections.find( - (selection) => selection.kind === 'Field' && selection.name.value === 'mutation' - ) - if (queryField && mutationField) { - return { - errors: [ - { - message: 'Cannot send a mutation and query at the same time' - } - ] - } - } - if (!queryField && !mutationField) { - return { - errors: [ - { - message: 'No query or mutation operation provided' - } - ] - } - } - const accessToken = await resolveAccessToken(source, args, context, info) - if (!accessToken) { - return { - errors: [ - { - message: 'No access token provided' - } - ] - } - } - return {accessToken} - } - }, - GitHubApi: { - errors: (source) => { - if (source.errors) return source.errors - if (source.errorPromise) { - return source.errorPromise - } - source.errorPromise = new Promise((resolve) => { - const timeout = setTimeout(() => { - resolve([{message: 'Error Resolution Timeout'}]) - }, Threshold.MAX_INTEGRATION_FETCH_TIME + 1000) - source.resolveErrors = (errors: GitHubGraphQLError[]) => { - clearTimeout(timeout) - resolve(errors) - } - }) - return source.errorPromise - }, - query: makeResolve(false), - mutation: makeResolve(true) - } - } - }) -} - -export default addGitHubToSchema diff --git a/packages/server/graphql/githubSchema/dealiasResult.ts b/packages/server/graphql/githubSchema/dealiasResult.ts deleted file mode 100644 index 5f2fed6d074..00000000000 --- a/packages/server/graphql/githubSchema/dealiasResult.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {AliasMapper} from './mergeGQLDocuments' - -const dealiasResult = (data: Record | null, aliasMapper: AliasMapper) => { - const usesAlias = Object.keys(aliasMapper).length > 0 - if (!usesAlias || !data) return data - const returnData = { - ...data - } - Object.entries(aliasMapper).forEach(([alias, name]) => { - returnData[name] = returnData[alias] - delete returnData[alias] - }) - return returnData -} - -export default dealiasResult diff --git a/packages/server/graphql/githubSchema/executeGitHubFetch.ts b/packages/server/graphql/githubSchema/executeGitHubFetch.ts deleted file mode 100644 index 4565c047526..00000000000 --- a/packages/server/graphql/githubSchema/executeGitHubFetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -import AbortController from 'abort-controller' -import {DocumentNode, print} from 'graphql' -import fetch from 'node-fetch' -import {Threshold} from '../../../client/types/constEnums' -import sendToSentry from '../../utils/sendToSentry' -import {GitHubExecutionResult} from './getRequestDataLoader' - -const executeGitHubFetch = async ( - document: DocumentNode, - variables: Record, - accessToken: string -) => { - const controller = new AbortController() - const {signal} = controller - const timeout = setTimeout(() => { - controller.abort() - }, Threshold.MAX_INTEGRATION_FETCH_TIME) - try { - const result = await fetch('https://api.github.com/graphql', { - signal, - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${accessToken}`, - Accept: 'application/json' as const - }, - body: JSON.stringify({ - query: print(document), - variables - }) - }) - clearTimeout(timeout) - const resJSON = await result.json() - if (!resJSON.data && !resJSON.errors) { - const message = String(resJSON.message) || JSON.stringify(resJSON) - return { - errors: [ - { - type: 'GitHub Gateway Error', - message - } - ], - data: null - } - } - return resJSON as GitHubExecutionResult - } catch (e) { - sendToSentry(e) - clearTimeout(timeout) - return { - errors: [ - { - type: 'GitHub is down', - message: String(e.message) - } - ], - data: null - } - } -} -export default executeGitHubFetch diff --git a/packages/server/graphql/githubSchema/filterErrorsForDocument.ts b/packages/server/graphql/githubSchema/filterErrorsForDocument.ts deleted file mode 100644 index 325c2e373a8..00000000000 --- a/packages/server/graphql/githubSchema/filterErrorsForDocument.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {DocumentNode, FieldNode, OperationDefinitionNode, SelectionSetNode} from 'graphql' -import {GitHubGraphQLError} from './getRequestDataLoader' - -const visitDocFotPath = (path: string[], selectionSetNode: SelectionSetNode) => { - let isPathInDoc = true - const findPathInDoc = (pathSlice: string[], node: SelectionSetNode | undefined) => { - if (!pathSlice.length || !node) return - const [firstPathName] = pathSlice - const {selections} = node - const matchingChild = selections.find( - (selection) => selection.kind === 'Field' && selection.name.value === firstPathName - ) as FieldNode | undefined - if (!matchingChild) { - isPathInDoc = false - return - } - const {selectionSet} = matchingChild - const nextPath = pathSlice.slice(1) - findPathInDoc(nextPath, selectionSet) - } - findPathInDoc(path, selectionSetNode) - return isPathInDoc -} -const filterErrorsForDocument = (document: DocumentNode, errors?: GitHubGraphQLError[] | null) => { - if (!errors || !errors.length) return errors - const {definitions} = document - const operationNode = definitions.find( - (definition) => definition.kind === 'OperationDefinition' - ) as OperationDefinitionNode | undefined - if (!operationNode) return errors - const {selectionSet} = operationNode - - const filteredErrors = errors.filter(({path}) => { - // If GitHub doesn't give us the path, don't filter it out - if (!path) return true - return !path || visitDocFotPath(path, selectionSet) - }) - return filteredErrors.length ? filteredErrors : null -} - -export default filterErrorsForDocument diff --git a/packages/server/graphql/githubSchema/getRequestDataLoader.ts b/packages/server/graphql/githubSchema/getRequestDataLoader.ts deleted file mode 100644 index aa66c793b20..00000000000 --- a/packages/server/graphql/githubSchema/getRequestDataLoader.ts +++ /dev/null @@ -1,88 +0,0 @@ -import DataLoader from 'dataloader' -import {DocumentNode} from 'graphql' -import dealiasResult from './dealiasResult' -import executeGitHubFetch from './executeGitHubFetch' -import filterErrorsForDocument from './filterErrorsForDocument' -import mergeGQLDocuments from './mergeGQLDocuments' -import transformGitHubResponse from './transformGitHubResponse' - -interface DataLoaderKey { - document: DocumentNode - variables: Record - accessToken: string - options: { - prefix: string - isMutation: boolean - } -} - -export interface GitHubGraphQLError { - message: string - locations?: { - line: number - column: number - }[] - type?: string - path?: string[] -} - -export interface GitHubExecutionResult { - data: Record | null - errors?: GitHubGraphQLError[] | null -} -type GitHubDataLoader = DataLoader - -const queryDataLoaderWeakMap = new WeakMap, GitHubDataLoader>() - -const batchFn = async (keys: readonly DataLoaderKey[]) => { - const execParamsByToken = {} as { - [accessToken: string]: { - document: DocumentNode - variables: Record - idx: number - }[] - } - keys.forEach((key, idx) => { - const {accessToken} = key - execParamsByToken[accessToken] = execParamsByToken[accessToken] || [] - execParamsByToken[accessToken].push({ - document: key.document, - variables: key.variables, - idx - }) - }) - const [firstKey] = keys - const {options} = firstKey - const {isMutation, prefix} = options - const results = [] as GitHubExecutionResult[] - await Promise.all( - Object.entries(execParamsByToken).map(async ([accessToken, execParams]) => { - const {document, variables, aliasMappers} = mergeGQLDocuments(execParams, isMutation) - const aliasedResult = await executeGitHubFetch(document, variables, accessToken) - transformGitHubResponse(aliasedResult, prefix) - const {errors, data} = aliasedResult - - execParams.forEach((execParam, idx) => { - const aliasMapper = aliasMappers[idx] - const {idx: resultsIdx, document} = execParam - results[resultsIdx] = { - data: dealiasResult(data, aliasMapper), - errors: filterErrorsForDocument(document, errors) - } - }) - }) - ) - return results -} - -const getRequestDataLoader = (key: Record) => { - const existingDataLoader = queryDataLoaderWeakMap.get(key) - if (existingDataLoader) return existingDataLoader - const newDataLoader = new DataLoader(batchFn, { - cache: false - }) - queryDataLoaderWeakMap.set(key, newDataLoader) - return newDataLoader -} - -export default getRequestDataLoader diff --git a/packages/server/graphql/githubSchema/mergeGQLDocuments.ts b/packages/server/graphql/githubSchema/mergeGQLDocuments.ts deleted file mode 100644 index 73b657c5d2d..00000000000 --- a/packages/server/graphql/githubSchema/mergeGQLDocuments.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { - DefinitionNode, - DocumentNode, - FieldNode, - FragmentDefinitionNode, - OperationDefinitionNode, - print, - SelectionNode, - SelectionSetNode, - VariableDefinitionNode -} from 'graphql' - -interface MutableSelectionSetNode extends SelectionSetNode { - selections: SelectionSetNode['selections'][0][] -} - -interface BaseOperationDefinitionNode extends OperationDefinitionNode { - variableDefinitions: NonNullable[0][] - selectionSet: MutableSelectionSetNode -} - -export interface AliasMapper { - [aliasedName: string]: string -} - -interface CachedExecParams { - document: DocumentNode - variables: Record -} - -const addNewFragmentDefinition = ( - baseDefinitions: DefinitionNode[], - definition: FragmentDefinitionNode -) => { - const {name} = definition - const {value: definitionName} = name - const baseFragmentNames = new Set() - baseDefinitions.forEach((definition) => { - if (definition.kind === 'FragmentDefinition') { - baseFragmentNames.add(definition.name.value) - } - }) - if (!baseFragmentNames.has(definitionName)) { - baseDefinitions.push(definition) - } -} - -const getSelectionNamesAndAliases = (selections: SelectionNode[]) => { - const usedNames = new Set() - selections.forEach((selection) => { - if (selection.kind === 'Field') { - usedNames.add(selection.name.value) - const alias = selection.alias?.value - if (alias) { - usedNames.add(alias) - } - } - }) - return usedNames -} - -const gqlNodesAreEqual = (leftNode: FieldNode, rightNode: FieldNode) => { - const leftStr = print(leftNode) - const rightStr = print(rightNode) - return leftStr === rightStr -} - -const aliasFieldNode = (node: FieldNode, alias: string) => { - return { - ...node, - alias: { - kind: 'Name', - value: alias - } - } as FieldNode -} - -const addNewVariableDefinitions = ( - baseVarDefs: VariableDefinitionNode[], - variableDefinitions: VariableDefinitionNode[] -) => { - variableDefinitions.forEach((curVarDef) => { - const {variable} = curVarDef - const {name} = variable - const {value: varDefName} = name - const isPresent = baseVarDefs.find((varDef) => { - varDef.variable.name.value === varDefName - }) - if (!isPresent) { - baseVarDefs.push(curVarDef) - } - }) -} - -const addNewSelections = ( - baseSelections: SelectionNode[], - selections: SelectionNode[], - aliasIdx: number, - aliasMapper: AliasMapper, - isMutation: boolean -) => { - selections.forEach((selection) => { - if (selection.kind === 'InlineFragment') { - // GQL engine will dedupe if there are multiple that are exactly the same - baseSelections.push(selection) - return - } - const {name} = selection - const {value: selectionName} = name - if (selection.kind === 'FragmentSpread') { - // if it's a new fragment spread, add it, else ignore - const existingFrag = baseSelections.find( - (selection) => selection.kind === 'FragmentSpread' && selection.name.value === selectionName - ) - if (!existingFrag) { - baseSelections.push(selection) - } - return - } - - // if it's a new field node, add it - const existingField = baseSelections.find( - (selection) => selection.kind === 'Field' && selection.name.value === selectionName - ) as FieldNode - if (!existingField) { - baseSelections.push(selection) - return - } - - // If this node is already present, don't include it again - // Mutations are the exception. we want to run them all - if (!isMutation && gqlNodesAreEqual(existingField, selection)) return - - // if the node has the same name but different children or arguments, alias it - // there is some high hanging fruit where we could alias the children inside this - const usedNames = getSelectionNamesAndAliases(baseSelections) - let aliasedName = `${selectionName}_${aliasIdx}` - while (usedNames.has(aliasedName)) { - aliasedName = `${aliasedName}X` - } - const aliasedSelection = aliasFieldNode(selection, aliasedName) - aliasMapper[aliasedName] = selection.alias?.value ?? selectionName - baseSelections.push(aliasedSelection) - }) -} - -const addNewOperationDefinition = ( - baseDefinitions: DefinitionNode[], - definition: DefinitionNode, - aliasIdx: number, - aliasMapper: AliasMapper, - isMutation: boolean -) => { - const {operation, variableDefinitions, selectionSet} = definition as BaseOperationDefinitionNode - // add completely new ops - const matchingOp = baseDefinitions.find( - (curDef) => curDef.kind === 'OperationDefinition' && curDef.operation === operation - ) as BaseOperationDefinitionNode - if (!matchingOp) { - baseDefinitions.push(definition) - return - } - // merge var defs - const {variableDefinitions: baseVarDefs, selectionSet: baseSelectionSet} = matchingOp - const {selections: baseSelections} = baseSelectionSet - addNewVariableDefinitions(baseVarDefs, variableDefinitions) - - // merge selection set - const {selections} = selectionSet - addNewSelections(baseSelections, selections, aliasIdx, aliasMapper, isMutation) -} - -const mergeGQLDocuments = (cachedExecParams: CachedExecParams[], isMutation?: boolean) => { - if (cachedExecParams.length === 1) { - return { - ...cachedExecParams[0], - aliasMappers: [{}] as AliasMapper[] - } - } - const aliasMappers = [] as AliasMapper[] - const baseDefinitions = [] as DefinitionNode[] - const baseVariables = {} - - cachedExecParams.forEach((execParams, aliasIdx) => { - const aliasMapper = {} - const {document, variables} = execParams - const {definitions} = document - definitions.forEach((definition) => { - if (definition.kind === 'OperationDefinition') { - addNewOperationDefinition(baseDefinitions, definition, aliasIdx, aliasMapper, !!isMutation) - } else if (definition.kind === 'FragmentDefinition') { - addNewFragmentDefinition(baseDefinitions, definition) - } - }) - Object.assign(baseVariables, variables) - aliasMappers.push(aliasMapper) - }) - const mergedDoc = { - kind: 'Document' as const, - definitions: baseDefinitions - } - return {document: mergedDoc, variables: baseVariables, aliasMappers} -} - -export default mergeGQLDocuments diff --git a/packages/server/graphql/githubSchema/transformGitHubRequest.ts b/packages/server/graphql/githubSchema/transformGitHubRequest.ts deleted file mode 100644 index 51571e6e78b..00000000000 --- a/packages/server/graphql/githubSchema/transformGitHubRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -import {FragmentDefinitionNode, GraphQLResolveInfo, visit} from 'graphql' - -const transformGitHubRequest = (info: GraphQLResolveInfo, prefix: string) => { - const usedVariables = new Set() - const usedFragmentSpreads = new Set() - const fragmentDefinitions = [] as FragmentDefinitionNode[] - const querySelectionSet = { - kind: 'SelectionSet' as const, - selections: info.fieldNodes.flatMap(({selectionSet}) => selectionSet!.selections) - } - const variableDefinitions = info.operation.variableDefinitions || [] - const fragments = info.fragments || {} - const allVariables = info.variableValues || {} - - visit(querySelectionSet, { - Variable(node) { - const {name} = node - const {value} = name - usedVariables.add(value) - }, - FragmentSpread(node) { - const {name} = node - const {value} = name - usedFragmentSpreads.add(value) - } - }) - - const prunedVariableDefinitions = variableDefinitions.filter((varDef) => { - const {variable} = varDef - const {name} = variable - const {value} = name - return usedVariables.has(value) - }) - Object.keys(fragments).forEach((fragmentName) => { - if (usedFragmentSpreads.has(fragmentName)) { - fragmentDefinitions.push(fragments[fragmentName]) - } - }) - - const untransformedDoc = { - kind: 'Document' as const, - definitions: [ - { - kind: info.operation.kind, - operation: info.operation.operation, - variableDefinitions: prunedVariableDefinitions, - selectionSet: querySelectionSet - }, - ...fragmentDefinitions - ] - } - const document = visit(untransformedDoc, { - NamedType(node) { - const {name} = node - const {value} = name - return { - ...node, - name: { - ...node.name, - value: value.startsWith(prefix) ? value.slice(prefix.length) : value - } - } - } - }) - const variables = {} - usedVariables.forEach((variableName) => { - variables[variableName] = allVariables[variableName] - }) - return {document, variables} -} - -export default transformGitHubRequest diff --git a/packages/server/graphql/githubSchema/transformGitHubResponse.ts b/packages/server/graphql/githubSchema/transformGitHubResponse.ts deleted file mode 100644 index 4514314e1cb..00000000000 --- a/packages/server/graphql/githubSchema/transformGitHubResponse.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {GitHubExecutionResult} from './getRequestDataLoader' - -const transformGitHubResponse = (response: GitHubExecutionResult, prefix: string) => { - const prefixGitHub = (name: string) => `${prefix}${name}` - const transformObject = (parent: Record) => { - Object.keys(parent).forEach((key) => { - const val = parent[key] - if (key === '__typename') { - parent[key] = prefixGitHub(val as string) - } else if (Array.isArray(val)) { - val.forEach((child) => { - transformObject(child) - }) - } else if (typeof val === 'object' && val !== null) { - transformObject(val) - } - }) - } - transformObject(response) -} - -export default transformGitHubResponse diff --git a/packages/server/graphql/intranetSchema/mutations/runScheduledJobs.ts b/packages/server/graphql/intranetSchema/mutations/runScheduledJobs.ts index 14bc191646e..aad76f45d45 100644 --- a/packages/server/graphql/intranetSchema/mutations/runScheduledJobs.ts +++ b/packages/server/graphql/intranetSchema/mutations/runScheduledJobs.ts @@ -12,6 +12,7 @@ import publish from '../../../utils/publish' import SlackServerManager from '../../../utils/SlackServerManager' import appOrigin from '../../../appOrigin' import {notifyMattermostTimeLimitEnd} from '../../mutations/helpers/notifications/notifyMattermost' +import MattermostServerManager from '../../../utils/MattermostServerManager' import {ValueOf} from '../../../../client/types/generics' const getSlackNotificationAndAuth = async (teamId, facilitatorUserId) => { @@ -47,13 +48,13 @@ const processMeetingStageTimeLimits = async ( const {meetingId} = job const meeting = await dataLoader.get('newMeetings').load(meetingId) const {teamId, facilitatorUserId} = meeting - const [{slackNotification, slackAuth}, mattermostAuth] = await Promise.all([ + const [{slackNotification, slackAuth}, mattermostWebhook] = await Promise.all([ getSlackNotificationAndAuth(teamId, facilitatorUserId), - dataLoader.get('mattermostBestAuthByUserIdTeamId').load({userId: facilitatorUserId, teamId}) + MattermostServerManager.getBestWebhook(facilitatorUserId, teamId, dataLoader) ]) const meetingUrl = makeAppURL(appOrigin, `meet/${meetingId}`) - const sendViaMattermost = !!mattermostAuth + const sendViaMattermost = !!mattermostWebhook if (slackAuth?.botAccessToken && slackNotification?.channelId) { const manager = new SlackServerManager(slackAuth.botAccessToken) @@ -114,10 +115,10 @@ const runScheduledJobs = { // RESOLUTION const before = new Date(now.getTime() + seconds * 1000) - const upcomingJobs = await r + const upcomingJobs = (await r .table('ScheduledJob') .between(r.minval, before, {index: 'runAt'}) - .run() + .run()) as ScheduledJobUnion[] upcomingJobs.forEach((job) => { const {runAt} = job diff --git a/packages/server/graphql/mutations/addGitHubAuth.ts b/packages/server/graphql/mutations/addGitHubAuth.ts index 4751fefe994..640ade0ae01 100644 --- a/packages/server/graphql/mutations/addGitHubAuth.ts +++ b/packages/server/graphql/mutations/addGitHubAuth.ts @@ -36,7 +36,11 @@ export default { } // RESOLUTION - const {accessToken, scope} = await GitHubServerManager.init(code) + const oAuth2Response = await GitHubServerManager.init(code) + if (oAuth2Response instanceof Error) { + return standardError(oAuth2Response, {userId: viewerId}) + } + const {accessToken, scopes} = oAuth2Response const githubRequest = getGitHubRequest(info, context, { accessToken }) @@ -48,7 +52,7 @@ export default { const {viewer} = data const {login} = viewer - await upsertGitHubAuth({accessToken, login, teamId, userId: viewerId, scope}) + await upsertGitHubAuth({accessToken, login, teamId, userId: viewerId, scope: scopes.join(',')}) segmentIo.track({ userId: viewerId, event: 'Added Integration', diff --git a/packages/server/graphql/mutations/addIntegrationProvider.ts b/packages/server/graphql/mutations/addIntegrationProvider.ts new file mode 100644 index 00000000000..96713fafb2d --- /dev/null +++ b/packages/server/graphql/mutations/addIntegrationProvider.ts @@ -0,0 +1,112 @@ +import {GraphQLNonNull} from 'graphql' +import AddIntegrationProviderPayload from '../types/AddIntegrationProviderPayload' +import {GQLContext} from '../graphql' +import {getUserId} from '../../utils/authorization' +import standardError from '../../utils/standardError' +import {SubscriptionChannel} from 'parabol-client/types/constEnums' +import publish from '../../utils/publish' +import AddIntegrationProviderInput from '../types/AddIntegrationProviderInput' +import insertIntegrationProvider from '../../postgres/queries/insertIntegrationProvider' +import { + IntegrationProviderTokenInput, + IntegrationProviderTokenInputT +} from '../types/AddIntegrationTokenInput' +import upsertGlobalIntegrationProvider from '../../postgres/queries/upsertGlobalIntegrationProvider' +import insertIntegrationProviderWithToken from '../../postgres/queries/insertIntegrationProviderWithToken' +import validateNewIntegrationAuthToken from './helpers/addIntegrationTokenValidation' +import { + checkAuthPermissions, + validateIntegrationProvider +} from './helpers/integrationProviderHelpers' +import { + createGlobalIntegrationProviderUpsertParams, + createIntegrationProviderInsertParams, + IntegrationProviderInput +} from '../../postgres/types/IntegrationProvider' + +export type AddIntegrationProviderInput = Omit + +type AddIntegrationProviderVariables = { + provider: AddIntegrationProviderInput + token: IntegrationProviderTokenInputT | null +} + +const addIntegrationProvider = { + name: 'AddIntegrationProvider', + type: new GraphQLNonNull(AddIntegrationProviderPayload), + description: 'Adds a new Integration Provider configuration', + args: { + provider: { + type: new GraphQLNonNull(AddIntegrationProviderInput), + description: 'The new Integration Provider' + }, + token: { + type: IntegrationProviderTokenInput, + description: 'An optional token to add along with the new provider' + } + }, + resolve: async ( + _source: unknown, + { + provider: integrationProviderInput, + token: integrationTokenInput + }: AddIntegrationProviderVariables, + context: GQLContext + ) => { + const {authToken, dataLoader, socketId: mutatorId} = context + const viewerId = getUserId(authToken) + const {teamId, orgId} = integrationProviderInput + const operationId = dataLoader.share() + const subOptions = {mutatorId, operationId} + + // AUTH + const permissionsCheckResult = checkAuthPermissions( + dataLoader, + integrationProviderInput.scope, + authToken, + teamId, + orgId + ) + if (permissionsCheckResult instanceof Error) return standardError(permissionsCheckResult) + + // VALIDATION + const validationResult = await validateIntegrationProvider( + integrationProviderInput, + viewerId, + dataLoader + ) + if (validationResult instanceof Error) return standardError(validationResult) + + // RESOLUTION + const {scope} = integrationProviderInput + if (scope === 'global') { + const upsertParams = createGlobalIntegrationProviderUpsertParams(integrationProviderInput) + await upsertGlobalIntegrationProvider(upsertParams) + } else if (scope === 'org' || scope === 'team') { + const newIntegrationProvider = createIntegrationProviderInsertParams(integrationProviderInput) + if (integrationTokenInput) { + const integrationTokenMetadata = integrationTokenInput + + const tokenValidationResult = validateNewIntegrationAuthToken( + integrationTokenMetadata, + newIntegrationProvider + ) + if (tokenValidationResult instanceof Error) return standardError(tokenValidationResult) + await insertIntegrationProviderWithToken({ + provider: newIntegrationProvider, + userId: viewerId, + tokenMetadata: integrationTokenMetadata + }) + } else { + await insertIntegrationProvider(newIntegrationProvider) + } + } + + //TODO: add proper subscription scope handling here, teamId only exists in provider with team scope + const data = {userId: viewerId, teamId} + publish(SubscriptionChannel.TEAM, teamId, 'AddIntegrationProvider', data, subOptions) + return data + } +} + +export default addIntegrationProvider diff --git a/packages/server/graphql/mutations/addIntegrationToken.ts b/packages/server/graphql/mutations/addIntegrationToken.ts new file mode 100644 index 00000000000..c491daea62f --- /dev/null +++ b/packages/server/graphql/mutations/addIntegrationToken.ts @@ -0,0 +1,156 @@ +import {GraphQLID, GraphQLNonNull, GraphQLResolveInfo} from 'graphql' +import {SubscriptionChannel} from 'parabol-client/types/constEnums' +import {GQLContext} from '../graphql' +import {getUserId, isTeamMember} from '../../utils/authorization' +import AddIntegrationTokenPayload from '../types/AddIntegrationTokenPayload' +import standardError from '../../utils/standardError' +import publish from '../../utils/publish' +import GraphQLURLType from '../types/GraphQLURLType' +import upsertIntegrationToken from '../../postgres/queries/upsertIntegrationToken' +import { + createAuthorizationManager, + allAuthRequiredIntegrationProviderTypes, + OAuth2IntegrationAuthorizationManager +} from '../../integrations/IntegrationAuthorizationManager' +import { + createIntegrationServerManager, + OAuth2IntegrationServerManager +} from '../../integrations/IntegrationServerManager' + +import IntegrationProviderId from '~/shared/gqlIds/IntegrationProviderId' + +import { + IntegrationProvider, + isOAuth2ProviderMetadata +} from '../../postgres/types/IntegrationProvider' + +const createOAuth2TokenMetadata = async ( + provider: IntegrationProvider, + oauthCodeOrPat: string, + redirectUri: string, + info: GraphQLResolveInfo, + context: GQLContext +) => { + const authorizationManager = + await createAuthorizationManager(provider) + + const authResponse = await authorizationManager.authorize(oauthCodeOrPat, redirectUri) + if (authResponse instanceof Error) return authResponse + const {accessToken, refreshToken, scopes} = authResponse + + const integrationServerManager = + await createIntegrationServerManager(provider, accessToken) + const [tokenTestValid, tokenTestError] = await integrationServerManager.isTokenValid( + info, + context + ) + if (!tokenTestValid) { + return tokenTestError + ? tokenTestError + : new Error(`Unknown error occurred when validating token`) + } + return {accessToken, refreshToken, scopes} +} + +const createTokenMetadata = async ( + provider: IntegrationProvider, + oauthCodeOrPat: string, + redirectUri: string, + info: GraphQLResolveInfo, + context: GQLContext +) => { + const {providerMetadata} = provider + if (isOAuth2ProviderMetadata(providerMetadata)) { + return createOAuth2TokenMetadata(provider, oauthCodeOrPat, redirectUri, info, context) + } + + return null +} + +const addIntegrationToken = { + name: 'AddIntegrationToken', + type: new GraphQLNonNull(AddIntegrationTokenPayload), + description: 'Add integration token material to the team, supported by the GitLab integration', + args: { + providerId: { + type: new GraphQLNonNull(GraphQLID) + }, + oauthCodeOrPat: { + type: new GraphQLNonNull(GraphQLID) + }, + teamId: { + type: new GraphQLNonNull(GraphQLID) + }, + redirectUri: { + type: new GraphQLNonNull(GraphQLURLType) + } + }, + resolve: async ( + _source, + {providerId, oauthCodeOrPat, teamId, redirectUri}, + context: GQLContext, + info: GraphQLResolveInfo + ) => { + const {authToken, dataLoader, socketId: mutatorId} = context + const viewerId = getUserId(authToken) + const operationId = dataLoader.share() + const subOptions = {mutatorId, operationId} + + //AUTH + if (!isTeamMember(authToken, teamId)) { + return standardError(new Error('Attempted teamId spoof'), {userId: viewerId}) + } + + const providerDbId = IntegrationProviderId.split(providerId) + const integrationProvider = await dataLoader.get('integrationProviders').load(providerDbId) + if (!integrationProvider) { + return standardError( + new Error(`Unable to find appropriate integration provider for providerId ${providerId}`), + { + userId: viewerId + } + ) + } + + if (!allAuthRequiredIntegrationProviderTypes.includes(integrationProvider.provider)) { + return standardError( + new Error( + `Adding auth tokens for ${providerId} is not supported! Provider ${providerId} is ${ + integrationProvider.type + }, but only ${allAuthRequiredIntegrationProviderTypes.join(', ')} are supported.` + ), + { + userId: viewerId + } + ) + } + + // VALIDATION + const tokenMetadata = await createTokenMetadata( + integrationProvider, + oauthCodeOrPat, + redirectUri, + info, + context + ) + if (tokenMetadata instanceof Error) { + return standardError(tokenMetadata, { + userId: viewerId + }) + } + + // RESOLUTION + await upsertIntegrationToken({ + providerId: providerDbId, + teamId, + userId: viewerId, + tokenMetadata: {...tokenMetadata} + }) + + const data = {userId: viewerId, teamId} + publish(SubscriptionChannel.TEAM, teamId, 'AddIntegrationToken', data, subOptions) + return data + } +} + +export default addIntegrationToken diff --git a/packages/server/graphql/mutations/addMattermostAuth.ts b/packages/server/graphql/mutations/addMattermostAuth.ts deleted file mode 100644 index 149acc6cd00..00000000000 --- a/packages/server/graphql/mutations/addMattermostAuth.ts +++ /dev/null @@ -1,66 +0,0 @@ -import {GraphQLID, GraphQLNonNull} from 'graphql' -import {SubscriptionChannel} from 'parabol-client/types/constEnums' -import upsertMattermostAuth from '../../postgres/queries/upsertMattermostAuth' -import {getUserId, isTeamMember} from '../../utils/authorization' -import publish from '../../utils/publish' -import segmentIo from '../../utils/segmentIo' -import standardError from '../../utils/standardError' -import {GQLContext} from '../graphql' -import GraphQLURLType from '../types/GraphQLURLType' -import AddMattermostAuthPayload from '../types/AddMattermostAuthPayload' -import {notifyWebhookConfigUpdated} from './helpers/notifications/notifyMattermost' - -export default { - name: 'AddMattermostAuth', - type: new GraphQLNonNull(AddMattermostAuthPayload), - args: { - webhookUrl: { - type: new GraphQLNonNull(GraphQLURLType), - description: 'the url of the Mattermost server the token is good for' - }, - teamId: { - type: new GraphQLNonNull(GraphQLID), - description: - "the teamId, when combined with the viewer's userId, used to upsert the credentials" - } - }, - resolve: async ( - _source, - {webhookUrl, teamId}, - {authToken, dataLoader, socketId: mutatorId}: GQLContext - ) => { - const viewerId = getUserId(authToken) - const operationId = dataLoader.share() - const subOptions = {mutatorId, operationId} - - // AUTH - if (!isTeamMember(authToken, teamId)) { - return standardError(new Error('Attempted teamId spoof'), {userId: viewerId}) - } - - // VALIDATION - const result = await notifyWebhookConfigUpdated(webhookUrl, viewerId, teamId) - if (result instanceof Error) return standardError(result, {userId: viewerId}) - - // RESOLUTION - await upsertMattermostAuth({ - webhookUrl, - userId: viewerId, - teamId - }) - - segmentIo.track({ - userId: viewerId, - event: 'Added Integration', - properties: { - teamId, - service: 'Mattermost' - } - }) - - const data = {userId: viewerId, teamId} - - publish(SubscriptionChannel.TEAM, teamId, 'AddMattermostAuthPayload', data, subOptions) - return data - } -} diff --git a/packages/server/graphql/mutations/helpers/addIntegrationTokenValidation.ts b/packages/server/graphql/mutations/helpers/addIntegrationTokenValidation.ts new file mode 100644 index 00000000000..470957274ce --- /dev/null +++ b/packages/server/graphql/mutations/helpers/addIntegrationTokenValidation.ts @@ -0,0 +1,60 @@ +import { + IntegrationTokenInputT, + IntegrationProviderTokenInputT +} from '../../types/AddIntegrationTokenInput' +import {IntegrationProvider as IntegrationProviderT} from '../../../postgres/types/IntegrationProvider' +import IntegrationProviderId from 'parabol-client/shared/gqlIds/IntegrationProviderId' +import plural from 'parabol-client/utils/plural' + +type TokenInputTypes = IntegrationTokenInputT | IntegrationProviderTokenInputT + +const isIntegrationTokenInputT = ( + maybeIntegrationTokenInput: TokenInputTypes +): maybeIntegrationTokenInput is IntegrationTokenInputT => { + return 'providerId' in maybeIntegrationTokenInput && 'teamId' in maybeIntegrationTokenInput +} + +const validateTokenInput = ( + maybeInputToken: IntegrationTokenInputT, + expectedProviderId: IntegrationProviderT['id'] +): string[] => { + const errors: string[] = [] + if (!maybeInputToken.providerId) errors.push('providerId is required') + else { + const providerId = IntegrationProviderId.split(maybeInputToken.providerId) + providerId !== expectedProviderId && errors.push('providerId does not match provider') + } + !maybeInputToken.teamId && errors.push('teamId is required') + return errors +} + +const validateNewIntegrationAuthToken = ( + maybeInputToken: TokenInputTypes, + providerInfo: { + id?: IntegrationProviderT['id'] + type: IntegrationProviderT['type'] + } +) => { + const errors: string[] = [] + + if (isIntegrationTokenInputT(maybeInputToken)) { + if (!providerInfo.id) throw new Error('expected providerInfo.id to validate token') + errors.push(...validateTokenInput(maybeInputToken, providerInfo.id)) + } + + switch (providerInfo.type) { + case 'oauth2': + case 'pat': + !maybeInputToken.oauthCodeOrPat && errors.push('oauthCodeOrPat is required') + break + case 'webhook': + // nothing to verify + } + + if (errors.length) + return Error(`${plural(errors.length, 'Error')} validating token: ${errors.join(', ')}`) + + return true +} + +export default validateNewIntegrationAuthToken diff --git a/packages/server/graphql/mutations/helpers/integrationProviderHelpers.ts b/packages/server/graphql/mutations/helpers/integrationProviderHelpers.ts new file mode 100644 index 00000000000..8fe7810f7cd --- /dev/null +++ b/packages/server/graphql/mutations/helpers/integrationProviderHelpers.ts @@ -0,0 +1,109 @@ +import { + getUserId, + isSuperUser as checkSuperUser, + isTeamMember as checkTeamMember, + isUserBillingLeader as checkBillingLeader +} from '../../../utils/authorization' +import AuthToken from '../../../database/types/AuthToken' +import {DataLoaderWorker} from '../../graphql' +import linkify from 'parabol-client/utils/linkify' +import {notifyWebhookConfigUpdated} from './notifications/notifyMattermost' +import { + IntegrationProviderMetadata, + IntegrationProviderScopesEnum, + isOAuth2ProviderMetadata, + isWebHookProviderMetadata +} from '../../../postgres/types/IntegrationProvider' +import {AddIntegrationProviderInput} from '../addIntegrationProvider' + +export const checkAuthPermissions = ( + dataLoader: DataLoaderWorker, + scope: IntegrationProviderScopesEnum, + authToken: AuthToken, + teamId: string | null, + orgId: string | null +) => { + const viewerId = getUserId(authToken) + const isSuperUser = checkSuperUser(authToken) + const isTeamMember = teamId ? checkTeamMember(authToken, teamId) : false + const isBillingLeader = orgId ? checkBillingLeader(viewerId, orgId, dataLoader) : false + + switch (scope) { + case 'global': + if (!isSuperUser) return new Error('permission denied modifying globally scoped provider') + break + case 'org': + if (!isBillingLeader && !isSuperUser) + return new Error('permission denied modifying org-wide provider; must be billing leader') + break + case 'team': + if (!isTeamMember && !isBillingLeader && !isSuperUser) + return new Error('persmission denied modifying team provider; must be team member') + } + + return +} + +export const validateIntegrationProvider = async ( + integrationProvider: AddIntegrationProviderInput, + viewerId: string, + dataLoader: DataLoaderWorker +) => { + switch (integrationProvider.scope) { + case 'global': + if (integrationProvider.type !== 'oauth2') + return new Error('globally-scoped token provider must be OAuth2 provider') + break + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore no-fallthrough + case 'org': + if (integrationProvider.type !== 'oauth2') + return new Error('org-scoped token provider must be OAuth2 provider') + // fall-through and verify team and org + case 'team': + const checkTeam = await dataLoader.get('teams').load(integrationProvider.teamId) + if (!checkTeam) return new Error('team not found') + const checkOrg = await dataLoader.get('organizations').load(integrationProvider.orgId) + if (!checkOrg) return new Error('organization not found') + } + + let providerMetadata: IntegrationProviderMetadata | null = null + if (integrationProvider.type === 'oauth2') { + providerMetadata = integrationProvider.oAuth2ProviderMetadataInput! + } else if (integrationProvider.type === 'webhook') { + providerMetadata = integrationProvider.webhookProviderMetadataInput! + } + if (!providerMetadata) return new Error('Provider metadata is required') + + if (isOAuth2ProviderMetadata(providerMetadata)) { + if (!providerMetadata.scopes) return new Error('scopes required for OAuth2 provider') + if (!providerMetadata.clientId) return new Error('oauthClientId required for OAuth2 provider') + if (!providerMetadata.clientSecret) + return new Error('oauthClientSecret required for OAuth2 provider') + } + + if (isWebHookProviderMetadata(providerMetadata)) { + const links = linkify.match(providerMetadata.webhookUrl) + if (!links || links.length === 0) return new Error('invalid webhook url') + } + + // TODO: refactor to use MakeIntegrationServerManager.fromProviderId(...) + // and support pat, oauth2, and webhooks here. Method should be shared + // with addIntegrationToken implementation. See addIntegrationToken for + // inspriation. + switch (integrationProvider.provider) { + case 'mattermost': + if (!isWebHookProviderMetadata(providerMetadata)) { + return + } + + const result = await notifyWebhookConfigUpdated( + providerMetadata.webhookUrl, + viewerId, + integrationProvider.teamId + ) + if (result instanceof Error) return result + } + + return +} diff --git a/packages/server/graphql/mutations/helpers/notifications/notifyMattermost.ts b/packages/server/graphql/mutations/helpers/notifications/notifyMattermost.ts index 52eeeafea91..2169a84bf95 100644 --- a/packages/server/graphql/mutations/helpers/notifications/notifyMattermost.ts +++ b/packages/server/graphql/mutations/helpers/notifications/notifyMattermost.ts @@ -20,15 +20,6 @@ import formatWeekday from 'parabol-client/utils/date/formatWeekday' import formatTime from 'parabol-client/utils/date/formatTime' import {toEpochSeconds} from '../../../../utils/epochTime' -const getWebhookForUserIdTeamId = async ( - userId: string, - teamId: string, - dataLoader: DataLoaderWorker -) => { - const mattermost = await dataLoader.get('mattermostBestAuthByUserIdTeamId').load({userId, teamId}) - return mattermost?.webhookUrl -} - const notifyMattermost = async ( event: EventEnum, webhookUrl: string, @@ -75,7 +66,7 @@ export const notifyWebhookConfigUpdated = async ( } ) ] - return await notifyMattermost('meetingEnd', webhookUrl, userId, teamId, attachments) + return notifyMattermost('meetingEnd', webhookUrl, userId, teamId, attachments) } export const startMattermostMeeting = async ( @@ -84,7 +75,11 @@ export const startMattermostMeeting = async ( dataLoader: DataLoaderWorker ) => { const meeting = await dataLoader.get('newMeetings').load(meetingId) - const webhookUrl = await getWebhookForUserIdTeamId(meeting.facilitatorUserId, teamId, dataLoader) + const webhookUrl = await MattermostServerManager.getBestWebhook( + meeting.facilitatorUserId, + teamId, + dataLoader + ) if (!webhookUrl) return null const searchParams = { @@ -121,7 +116,7 @@ export const startMattermostMeeting = async ( } ) ] - return await notifyMattermost('meetingStart', webhookUrl, userId, teamId, attachments) + return notifyMattermost('meetingStart', webhookUrl, userId, teamId, attachments) } const makeEndMeetingButtons = (meeting: MeetingRetrospective | MeetingAction | MeetingPoker) => { @@ -166,7 +161,11 @@ export const endMattermostMeeting = async ( dataLoader: DataLoaderWorker ) => { const meeting = await dataLoader.get('newMeetings').load(meetingId) - const webhookUrl = await getWebhookForUserIdTeamId(meeting.facilitatorUserId, teamId, dataLoader) + const webhookUrl = await MattermostServerManager.getBestWebhook( + meeting.facilitatorUserId, + teamId, + dataLoader + ) if (!webhookUrl) return null const team = await dataLoader.get('teams').load(teamId) const {facilitatorUserId: userId} = meeting @@ -199,7 +198,7 @@ export const endMattermostMeeting = async ( } ) ] - return await notifyMattermost('meetingEnd', webhookUrl, userId, teamId, attachments) + return notifyMattermost('meetingEnd', webhookUrl, userId, teamId, attachments) } export const notifyMattermostTimeLimitStart = async ( @@ -209,7 +208,11 @@ export const notifyMattermostTimeLimitStart = async ( dataLoader: DataLoaderWorker ) => { const meeting = await dataLoader.get('newMeetings').load(meetingId) - const webhookUrl = await getWebhookForUserIdTeamId(meeting.facilitatorUserId, teamId, dataLoader) + const webhookUrl = await MattermostServerManager.getBestWebhook( + meeting.facilitatorUserId, + teamId, + dataLoader + ) if (!webhookUrl) return null const team = await dataLoader.get('teams').load(teamId) @@ -268,13 +271,7 @@ export const notifyMattermostTimeLimitStart = async ( ) ] - return await notifyMattermost( - 'MEETING_STAGE_TIME_LIMIT_START', - webhookUrl, - userId, - teamId, - attachments - ) + return notifyMattermost('MEETING_STAGE_TIME_LIMIT_START', webhookUrl, userId, teamId, attachments) } export const notifyMattermostTimeLimitEnd = async ( @@ -284,17 +281,15 @@ export const notifyMattermostTimeLimitEnd = async ( ) => { const meeting = await dataLoader.get('newMeetings').load(meetingId) const {facilitatorUserId: userId} = meeting - const webhookUrl = await getWebhookForUserIdTeamId(userId, teamId, dataLoader) + const webhookUrl = await MattermostServerManager.getBestWebhook( + meeting.facilitatorUserId, + teamId, + dataLoader + ) if (!webhookUrl) return null const meetingUrl = makeAppURL(appOrigin, `meet/${meetingId}`) const messageText = `Time’s up! Advance your meeting to the next phase: ${meetingUrl}` - return await notifyMattermost( - 'MEETING_STAGE_TIME_LIMIT_END', - webhookUrl, - teamId, - userId, - messageText - ) + return notifyMattermost('MEETING_STAGE_TIME_LIMIT_END', webhookUrl, teamId, userId, messageText) } diff --git a/packages/server/graphql/mutations/helpers/notifications/notifySlack.ts b/packages/server/graphql/mutations/helpers/notifications/notifySlack.ts index a1179d8223e..92bae3d4aa1 100644 --- a/packages/server/graphql/mutations/helpers/notifications/notifySlack.ts +++ b/packages/server/graphql/mutations/helpers/notifications/notifySlack.ts @@ -1,25 +1,25 @@ import formatTime from 'parabol-client/utils/date/formatTime' import formatWeekday from 'parabol-client/utils/date/formatWeekday' -import makeAppURL from 'parabol-client/utils/makeAppURL' import findStageById from 'parabol-client/utils/meetings/findStageById' import {phaseLabelLookup} from 'parabol-client/utils/meetings/lookups' -import appOrigin from '../../../../appOrigin' import getRethink from '../../../../database/rethinkDriver' -import MeetingAction from '../../../../database/types/MeetingAction' -import MeetingPoker from '../../../../database/types/MeetingPoker' -import MeetingRetrospective from '../../../../database/types/MeetingRetrospective' import SlackAuth from '../../../../database/types/SlackAuth' import SlackNotification, { SlackNotificationEvent } from '../../../../database/types/SlackNotification' import {toEpochSeconds} from '../../../../utils/epochTime' +import makeAppURL from 'parabol-client/utils/makeAppURL' import segmentIo from '../../../../utils/segmentIo' import sendToSentry from '../../../../utils/sendToSentry' import SlackServerManager from '../../../../utils/SlackServerManager' import errorFilter from '../../../errorFilter' import {DataLoaderWorker} from '../../../graphql' +import MeetingRetrospective from '../../../../database/types/MeetingRetrospective' +import MeetingAction from '../../../../database/types/MeetingAction' +import MeetingPoker from '../../../../database/types/MeetingPoker' +import {makeSection, makeSections, makeButtons} from './makeSlackBlocks' import getSummaryText from './getSummaryText' -import {makeButtons, makeSection, makeSections} from './makeSlackBlocks' +import appOrigin from '../../../../appOrigin' const getSlackDetails = async ( event: SlackNotificationEvent, @@ -191,7 +191,10 @@ export const notifySlackTimeLimitStart = async ( const {name: teamName} = team const stageRes = findStageById(phases, facilitatorStageId) const {stage} = stageRes! - const maybeMeetingShortLink = makeAppURL(process.env.INVITATION_SHORTLINK!, `${meetingId}`) + const maybeMeetingShortLink = makeAppURL( + process.env.INVITATION_SHORTLINK || appOrigin, + `${meetingId}` + ) const meetingUrl = makeAppURL(appOrigin, `meet/${meetingId}`) const {phaseType} = stage const phaseLabel = phaseLabelLookup[phaseType] diff --git a/packages/server/graphql/mutations/removeIntegrationProvider.ts b/packages/server/graphql/mutations/removeIntegrationProvider.ts new file mode 100644 index 00000000000..4ce9d27ed6e --- /dev/null +++ b/packages/server/graphql/mutations/removeIntegrationProvider.ts @@ -0,0 +1,45 @@ +import {GraphQLID, GraphQLNonNull} from 'graphql' +import {getUserId} from '../../utils/authorization' +import publish from '../../utils/publish' +import RemoveIntegrationProviderPayload from '../types/RemoveIntegrationProviderPayload' +import {SubscriptionChannel} from 'parabol-client/types/constEnums' +import {GQLContext} from '../graphql' +import IntegrationProviderId from 'parabol-client/shared/gqlIds/IntegrationProviderId' +import {checkAuthPermissions} from './helpers/integrationProviderHelpers' +import removeIntegrationProviderQuery from '../../postgres/queries/removeIntegrationProvider' +import standardError from '../../utils/standardError' + +const removeIntegrationProvider = { + name: 'RemoveIntegrationProvider', + type: new GraphQLNonNull(RemoveIntegrationProviderPayload), + description: 'Remove an Integration Provider, and any associated tokens', + args: { + providerId: { + type: new GraphQLNonNull(GraphQLID), + description: 'Id of the Integration Provider to remove' + } + }, + resolve: async (_source, {providerId}: {providerId: string}, context: GQLContext) => { + const {authToken, dataLoader, socketId: mutatorId} = context + const operationId = dataLoader.share() + const subOptions = {mutatorId, operationId} + + // AUTH + const providerDbId = IntegrationProviderId.split(providerId) + const provider = await dataLoader.get('integrationProviders').load(providerDbId) + if (!provider) return standardError(new Error('Integration Provider not found')) + const {teamId, orgId} = provider + const authResult = checkAuthPermissions(dataLoader, provider.scope, authToken, teamId, orgId) + if (authResult instanceof Error) return standardError(authResult) + + // RESOLUTION + await removeIntegrationProviderQuery(providerDbId) + + //TODO: add proper scopes handling here, teamId only exists in provider with team scope + const data = {userId: getUserId(authToken), teamId} + publish(SubscriptionChannel.TEAM, teamId!, 'RemoveIntegrationProvider', data, subOptions) + return data + } +} + +export default removeIntegrationProvider diff --git a/packages/server/graphql/mutations/removeIntegrationToken.ts b/packages/server/graphql/mutations/removeIntegrationToken.ts new file mode 100644 index 00000000000..227bd33fb5d --- /dev/null +++ b/packages/server/graphql/mutations/removeIntegrationToken.ts @@ -0,0 +1,51 @@ +import {GraphQLID, GraphQLNonNull} from 'graphql' +import {getUserId, isSuperUser, isTeamMember} from '../../utils/authorization' +import publish from '../../utils/publish' +import RemoveIntegrationTokenPayload from '../types/RemoveIntegrationTokenPayload' +import {SubscriptionChannel} from 'parabol-client/types/constEnums' +import {GQLContext} from '../graphql' +import standardError from '../../utils/standardError' +import IntegrationProviderId from 'parabol-client/shared/gqlIds/IntegrationProviderId' +import removeIntegrationTokenQuery from '../../postgres/queries/removeIntegrationToken' + +const removeIntegrationToken = { + type: GraphQLNonNull(RemoveIntegrationTokenPayload), + description: ``, + args: { + providerId: { + type: GraphQLNonNull(GraphQLID), + description: 'The Integration Provider id related to the token' + }, + teamId: { + type: GraphQLNonNull(GraphQLID), + description: 'The team id related to the token' + } + }, + resolve: async ( + _source, + {providerId, teamId}: {providerId: string; teamId: string}, + context: GQLContext + ) => { + const {authToken, dataLoader, socketId: mutatorId} = context + const viewerId = getUserId(authToken) + const operationId = dataLoader.share() + const subOptions = {mutatorId, operationId} + + // AUTH + if (!isTeamMember(authToken, teamId) && !isSuperUser(authToken)) + return standardError(new Error('persmission denied; must be team member')) + + // VALIDATION + const providerDbId = IntegrationProviderId.split(providerId) + if (!providerDbId) return standardError(new Error('invalid providerId')) + + // RESOLUTION + await removeIntegrationTokenQuery(providerDbId, teamId, viewerId) + + const data = {userId: viewerId, teamId} + publish(SubscriptionChannel.TEAM, teamId, 'RemoveIntegrationToken', data, subOptions) + return data + } +} + +export default removeIntegrationToken diff --git a/packages/server/graphql/mutations/removeMattermostAuth.ts b/packages/server/graphql/mutations/removeMattermostAuth.ts deleted file mode 100644 index ebe76387162..00000000000 --- a/packages/server/graphql/mutations/removeMattermostAuth.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {GraphQLID, GraphQLNonNull} from 'graphql' -import RemoveMattermostAuthPayload from '../types/RemoveMattermostAuthPayload' -import {getUserId, isTeamMember} from '../../utils/authorization' -import publish from '../../utils/publish' -import standardError from '../../utils/standardError' -import {SubscriptionChannel} from 'parabol-client/types/constEnums' -import removeMattermostAuthDB from '../../postgres/queries/removeMattermostAuth' - -export default { - name: 'RemoveMattermostAuth', - type: new GraphQLNonNull(RemoveMattermostAuthPayload), - description: 'Disconnect a team member from Slack', - args: { - teamId: { - type: new GraphQLNonNull(GraphQLID), - description: 'the teamId to disconnect from Mattermost' - } - }, - resolve: async (_source, {teamId}, {authToken, socketId: mutatorId, dataLoader}) => { - const operationId = dataLoader.share() - const subOptions = {mutatorId, operationId} - const viewerId = getUserId(authToken) - - // AUTH - if (!isTeamMember(authToken, teamId)) { - return standardError(new Error('Team not found'), {userId: viewerId}) - } - - // RESOLUTION - await removeMattermostAuthDB(viewerId, teamId) - - const data = {teamId, userId: viewerId} - publish(SubscriptionChannel.TEAM, teamId, 'RemoveMattermostAuthPayload', data, subOptions) - return data - } -} diff --git a/packages/server/graphql/mutations/updateIntegrationProvider.ts b/packages/server/graphql/mutations/updateIntegrationProvider.ts new file mode 100644 index 00000000000..490ce46adce --- /dev/null +++ b/packages/server/graphql/mutations/updateIntegrationProvider.ts @@ -0,0 +1,64 @@ +import {GraphQLNonNull} from 'graphql' +import {getUserId} from '../../utils/authorization' +import standardError from '../../utils/standardError' +import publish from '../../utils/publish' +import UpdateIntegrationProviderPayload from '../types/UpdateIntegrationProviderPayload' +import {SubscriptionChannel} from 'parabol-client/types/constEnums' +import {GQLContext} from '../graphql' +import UpdateIntegrationProviderInput from '../types/UpdateIntegrationProviderInput' +import { + checkAuthPermissions, + validateIntegrationProvider +} from './helpers/integrationProviderHelpers' +import IntegrationProviderId from 'parabol-client/shared/gqlIds/IntegrationProviderId' +import updateIntegrationProviderQuery from '../../postgres/queries/updateIntegrationProvider' +import { + createIntegrationProviderInsertParams, + IntegrationProviderInput +} from '../../postgres/types/IntegrationProvider' + +const updateIntegrationProvider = { + name: 'UpdateIntegrationProvider', + type: GraphQLNonNull(UpdateIntegrationProviderPayload), + description: 'Update the Integration Provider settings', + args: { + provider: { + type: GraphQLNonNull(UpdateIntegrationProviderInput), + description: 'The new Integration Provider' + } + }, + resolve: async ( + _source, + {provider}: {provider: IntegrationProviderInput}, + context: GQLContext + ) => { + const {authToken, dataLoader, socketId: mutatorId} = context + const viewerId = getUserId(authToken) + const {teamId, orgId} = provider + const operationId = dataLoader.share() + const subOptions = {mutatorId, operationId} + + // AUTH + const authResult = checkAuthPermissions(dataLoader, provider.scope, authToken, teamId, orgId) + if (authResult instanceof Error) return standardError(authResult) + + // VALIDATION + const providerDbId = IntegrationProviderId.split(provider.id) + const validationResult = await validateIntegrationProvider(provider, viewerId, dataLoader) + if (validationResult instanceof Error) return standardError(validationResult) + + // RESOLUTION + const dbProvider = { + ...createIntegrationProviderInsertParams(provider), + ids: [providerDbId] + } + await updateIntegrationProviderQuery(dbProvider) + + //TODO: add proper scopes handling here, teamId only exists in provider with team scope + const data = {userId: viewerId, teamId} + publish(SubscriptionChannel.TEAM, teamId, 'UpdateIntegrationProvider', data, subOptions) + return data + } +} + +export default updateIntegrationProvider diff --git a/packages/server/graphql/nestedSchema/GitLab/gitlabSchema.graphql b/packages/server/graphql/nestedSchema/GitLab/gitlabSchema.graphql new file mode 100644 index 00000000000..ba5eefbc723 --- /dev/null +++ b/packages/server/graphql/nestedSchema/GitLab/gitlabSchema.graphql @@ -0,0 +1,28642 @@ +""" +Represents the access level of a relationship between a User and object that it is related to +""" +type AccessLevel { + """Integer representation of access level.""" + integerValue: Int + + """String representation of access level.""" + stringValue: AccessLevelEnum +} + +"""Access level to a resource""" +enum AccessLevelEnum { + """No access.""" + NO_ACCESS + + """Minimal access.""" + MINIMAL_ACCESS + + """Guest access.""" + GUEST + + """Reporter access.""" + REPORTER + + """Developer access.""" + DEVELOPER + + """Maintainer access.""" + MAINTAINER + + """Owner access.""" + OWNER +} + +"""Autogenerated input type of AddProjectToSecurityDashboard""" +input AddProjectToSecurityDashboardInput { + """ID of the project to be added to Instance Security Dashboard.""" + id: ProjectID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AddProjectToSecurityDashboard""" +type AddProjectToSecurityDashboardPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Project that was added to the Instance Security Dashboard.""" + project: Project +} + +"""Autogenerated input type of AdminSidekiqQueuesDeleteJobs""" +input AdminSidekiqQueuesDeleteJobsInput { + """Delete jobs matching user in the context metadata.""" + user: String + + """Delete jobs matching project in the context metadata.""" + project: String + + """Delete jobs matching root_namespace in the context metadata.""" + rootNamespace: String + + """Delete jobs matching subscription_plan in the context metadata.""" + subscriptionPlan: String + + """Delete jobs matching caller_id in the context metadata.""" + callerId: String + + """Delete jobs matching remote_ip in the context metadata.""" + remoteIp: String + + """Delete jobs matching related_class in the context metadata.""" + relatedClass: String + + """Delete jobs matching feature_category in the context metadata.""" + featureCategory: String + + """Delete jobs matching client_id in the context metadata.""" + clientId: String + + """Delete jobs with the given worker class.""" + workerClass: String + + """Name of the queue to delete jobs from.""" + queueName: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AdminSidekiqQueuesDeleteJobs""" +type AdminSidekiqQueuesDeleteJobsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Information about the status of the deletion request.""" + result: DeleteJobsResponse +} + +"""Configuration details for an Agent""" +type AgentConfiguration { + """Name of the agent.""" + agentName: String +} + +"""The connection type for AgentConfiguration.""" +type AgentConfigurationConnection { + """A list of edges.""" + edges: [AgentConfigurationEdge] + + """A list of nodes.""" + nodes: [AgentConfiguration] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type AgentConfigurationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: AgentConfiguration +} + +"""Information about a connected Agent""" +type AgentMetadata { + """Agent version commit.""" + commit: String + + """Name of the pod running the Agent.""" + podName: String + + """Namespace of the pod running the Agent.""" + podNamespace: String + + """Agent version tag.""" + version: String +} + +"""Describes an alert from the project's Alert Management""" +type AlertManagementAlert implements NoteableInterface { + """Assignees of the alert.""" + assignees( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """Timestamp the alert was created.""" + createdAt: Time + + """Description of the alert.""" + description: String + + """Alert details.""" + details: JSON + + """URL of the alert detail page.""" + detailsUrl: String! + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Timestamp the alert ended.""" + endedAt: Time + + """Environment for the alert.""" + environment: Environment + + """Number of events of this alert.""" + eventCount: Int + + """List of hosts the alert came from.""" + hosts: [String!] + + """Internal ID of the alert.""" + iid: ID! + + """Issue attached to the alert.""" + issue: Issue + + """ + Internal ID of the GitLab issue attached to the alert. Deprecated in 13.10: Use issue field. + """ + issueIid: ID @deprecated(reason: "Use issue field. Deprecated in 13.10.") + + """URL for metrics embed for the alert.""" + metricsDashboardUrl: String + + """Monitoring tool the alert came from.""" + monitoringTool: String + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """Alert condition for Prometheus.""" + prometheusAlert: PrometheusAlert + + """Runbook for the alert as defined in alert details.""" + runbook: String + + """Service the alert came from.""" + service: String + + """Severity of the alert.""" + severity: AlertManagementSeverity + + """Timestamp the alert was raised.""" + startedAt: Time + + """Status of the alert.""" + status: AlertManagementStatus + + """Title of the alert.""" + title: String + + """To-do items of the current user for the alert.""" + todos( + """Action to be filtered.""" + action: [TodoActionEnum!] + + """ID of an author.""" + authorId: [ID!] + + """ID of a project.""" + projectId: [ID!] + + """ID of a group.""" + groupId: [ID!] + + """State of the todo.""" + state: [TodoStateEnum!] + + """Type of the todo.""" + type: [TodoTargetEnum!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TodoConnection + + """Timestamp the alert was last updated.""" + updatedAt: Time +} + +"""The connection type for AlertManagementAlert.""" +type AlertManagementAlertConnection { + """A list of edges.""" + edges: [AlertManagementAlertEdge] + + """A list of nodes.""" + nodes: [AlertManagementAlert] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type AlertManagementAlertEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: AlertManagementAlert +} + +"""Values for sorting alerts""" +enum AlertManagementAlertSort { + """Updated at descending order.""" + updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.") + + """Updated at ascending order.""" + updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.") + + """Created at descending order.""" + created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.") + + """Created at ascending order.""" + created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.") + + """Updated at descending order.""" + UPDATED_DESC + + """Updated at ascending order.""" + UPDATED_ASC + + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC + + """Start time by ascending order.""" + STARTED_AT_ASC + + """Start time by descending order.""" + STARTED_AT_DESC + + """End time by ascending order.""" + ENDED_AT_ASC + + """End time by descending order.""" + ENDED_AT_DESC + + """Created time by ascending order.""" + CREATED_TIME_ASC + + """Created time by descending order.""" + CREATED_TIME_DESC + + """Created time by ascending order.""" + UPDATED_TIME_ASC + + """Created time by descending order.""" + UPDATED_TIME_DESC + + """Events count by ascending order.""" + EVENT_COUNT_ASC + + """Events count by descending order.""" + EVENT_COUNT_DESC + + """Severity from less critical to more critical.""" + SEVERITY_ASC + + """Severity from more critical to less critical.""" + SEVERITY_DESC + + """Status by order: `Ignored > Resolved > Acknowledged > Triggered`.""" + STATUS_ASC + + """Status by order: `Triggered > Acknowledged > Resolved > Ignored`.""" + STATUS_DESC +} + +"""Represents total number of alerts for the represented categories""" +type AlertManagementAlertStatusCountsType { + """Number of alerts with status ACKNOWLEDGED for the project""" + acknowledged: Int + + """Total number of alerts for the project.""" + all: Int + + """Number of alerts with status IGNORED for the project""" + ignored: Int + + """ + Number of alerts with status TRIGGERED or ACKNOWLEDGED for the project. + """ + open: Int + + """Number of alerts with status RESOLVED for the project""" + resolved: Int + + """Number of alerts with status TRIGGERED for the project""" + triggered: Int +} + +"""Filters the alerts based on given domain""" +enum AlertManagementDomainFilter { + """Alerts for operations domain.""" + operations + + """Alerts for threat monitoring domain.""" + threat_monitoring +} + +"""An endpoint and credentials used to accept alerts for a project""" +type AlertManagementHttpIntegration implements AlertManagementIntegration { + """Whether the endpoint is currently accepting alerts.""" + active: Boolean + + """ + URL at which Prometheus metrics can be queried to populate the metrics dashboard. + """ + apiUrl: String + + """ID of the integration.""" + id: ID! + + """Name of the integration.""" + name: String + + """Extract alert fields from payload example for custom mapping.""" + payloadAlertFields: [AlertManagementPayloadAlertField!] + + """ + The custom mapping of GitLab alert attributes to fields from the payload_example. + """ + payloadAttributeMappings: [AlertManagementPayloadAlertMappingField!] + + """Example of an alert payload.""" + payloadExample: JsonString + + """Token used to authenticate alert notification requests.""" + token: String + + """Type of integration.""" + type: AlertManagementIntegrationType! + + """Endpoint which accepts alert notifications.""" + url: String +} + +"""The connection type for AlertManagementHttpIntegration.""" +type AlertManagementHttpIntegrationConnection { + """A list of edges.""" + edges: [AlertManagementHttpIntegrationEdge] + + """A list of nodes.""" + nodes: [AlertManagementHttpIntegration] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type AlertManagementHttpIntegrationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: AlertManagementHttpIntegration +} + +""" +A `AlertManagementHttpIntegrationID` is a global ID. It is encoded as a string. + +An example `AlertManagementHttpIntegrationID` is: `"gid://gitlab/AlertManagement::HttpIntegration/1"`. +""" +scalar AlertManagementHttpIntegrationID + +interface AlertManagementIntegration { + """Whether the endpoint is currently accepting alerts.""" + active: Boolean + + """ + URL at which Prometheus metrics can be queried to populate the metrics dashboard. + """ + apiUrl: String + + """ID of the integration.""" + id: ID! + + """Name of the integration.""" + name: String + + """Token used to authenticate alert notification requests.""" + token: String + + """Type of integration.""" + type: AlertManagementIntegrationType! + + """Endpoint which accepts alert notifications.""" + url: String +} + +"""The connection type for AlertManagementIntegration.""" +type AlertManagementIntegrationConnection { + """A list of edges.""" + edges: [AlertManagementIntegrationEdge] + + """A list of nodes.""" + nodes: [AlertManagementIntegration] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type AlertManagementIntegrationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: AlertManagementIntegration +} + +"""Values of types of integrations""" +enum AlertManagementIntegrationType { + """Prometheus integration.""" + PROMETHEUS + + """Integration with any monitoring tool.""" + HTTP +} + +"""Parsed field from an alert used for custom mappings""" +type AlertManagementPayloadAlertField { + """Human-readable label of the payload path.""" + label: String + + """Path to value inside payload JSON.""" + path: [PayloadAlertFieldPathSegment!] + + """Type of the parsed value.""" + type: AlertManagementPayloadAlertFieldType +} + +""" +Field that are available while modifying the custom mapping attributes for an HTTP integration +""" +input AlertManagementPayloadAlertFieldInput { + """GitLab alert field name.""" + fieldName: AlertManagementPayloadAlertFieldName! + + """Path to value inside payload JSON.""" + path: [PayloadAlertFieldPathSegment!]! + + """Human-readable label of the payload path.""" + label: String + + """Type of the parsed value.""" + type: AlertManagementPayloadAlertFieldType! +} + +"""Values for alert field names used in the custom mapping""" +enum AlertManagementPayloadAlertFieldName { + """The title of the incident.""" + TITLE + + """A high-level summary of the problem.""" + DESCRIPTION + + """The time of the incident.""" + START_TIME + + """The resolved time of the incident.""" + END_TIME + + """The affected service.""" + SERVICE + + """The name of the associated monitoring tool.""" + MONITORING_TOOL + + """One or more hosts, as to where this incident occurred.""" + HOSTS + + """The severity of the alert.""" + SEVERITY + + """ + The unique identifier of the alert. This can be used to group occurrences of the same alert. + """ + FINGERPRINT + + """The name of the associated GitLab environment.""" + GITLAB_ENVIRONMENT_NAME +} + +"""Values for alert field types used in the custom mapping""" +enum AlertManagementPayloadAlertFieldType { + """Array field type.""" + ARRAY + + """DateTime field type.""" + DATETIME + + """String field type.""" + STRING +} + +"""Parsed field (with its name) from an alert used for custom mappings""" +type AlertManagementPayloadAlertMappingField { + """GitLab alert field name.""" + fieldName: AlertManagementPayloadAlertFieldName + + """Human-readable label of the payload path.""" + label: String + + """Path to value inside payload JSON.""" + path: [PayloadAlertFieldPathSegment!] + + """Type of the parsed value.""" + type: AlertManagementPayloadAlertFieldType +} + +""" +An endpoint and credentials used to accept Prometheus alerts for a project +""" +type AlertManagementPrometheusIntegration implements AlertManagementIntegration { + """Whether the endpoint is currently accepting alerts.""" + active: Boolean + + """ + URL at which Prometheus metrics can be queried to populate the metrics dashboard. + """ + apiUrl: String + + """ID of the integration.""" + id: ID! + + """Name of the integration.""" + name: String + + """Token used to authenticate alert notification requests.""" + token: String + + """Type of integration.""" + type: AlertManagementIntegrationType! + + """Endpoint which accepts alert notifications.""" + url: String +} + +"""Alert severity values""" +enum AlertManagementSeverity { + """Critical severity""" + CRITICAL + + """High severity""" + HIGH + + """Medium severity""" + MEDIUM + + """Low severity""" + LOW + + """Info severity""" + INFO + + """Unknown severity""" + UNKNOWN +} + +"""Alert status values""" +enum AlertManagementStatus { + """Investigation has not started.""" + TRIGGERED + + """Someone is actively investigating the problem.""" + ACKNOWLEDGED + + """The problem has been addressed.""" + RESOLVED + + """No action will be taken.""" + IGNORED +} + +"""Autogenerated input type of AlertSetAssignees""" +input AlertSetAssigneesInput { + """Project the alert to mutate is in.""" + projectPath: ID! + + """IID of the alert to mutate.""" + iid: String! + + """ + Usernames to assign to the alert. Replaces existing assignees by default. + """ + assigneeUsernames: [String!]! + + """Operation to perform. Defaults to REPLACE.""" + operationMode: MutationOperationMode + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AlertSetAssignees""" +type AlertSetAssigneesPayload { + """Alert after mutation.""" + alert: AlertManagementAlert + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue created after mutation.""" + issue: Issue + + """To-do item after mutation.""" + todo: Todo +} + +"""Autogenerated input type of AlertTodoCreate""" +input AlertTodoCreateInput { + """Project the alert to mutate is in.""" + projectPath: ID! + + """IID of the alert to mutate.""" + iid: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AlertTodoCreate""" +type AlertTodoCreatePayload { + """Alert after mutation.""" + alert: AlertManagementAlert + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue created after mutation.""" + issue: Issue + + """To-do item after mutation.""" + todo: Todo +} + +""" +A `AnalyticsDevopsAdoptionEnabledNamespaceID` is a global ID. It is encoded as a string. + +An example `AnalyticsDevopsAdoptionEnabledNamespaceID` is: `"gid://gitlab/Analytics::DevopsAdoption::EnabledNamespace/1"`. +""" +scalar AnalyticsDevopsAdoptionEnabledNamespaceID + +"""Data associated with configuring API fuzzing scans in GitLab CI""" +type ApiFuzzingCiConfiguration { + """All available scan modes.""" + scanModes: [ApiFuzzingScanMode!] + + """All default scan profiles.""" + scanProfiles: [ApiFuzzingScanProfile!] +} + +"""Autogenerated input type of ApiFuzzingCiConfigurationCreate""" +input ApiFuzzingCiConfigurationCreateInput { + """Full path of the project.""" + projectPath: ID! + + """ + File path or URL to the file that defines the API surface for scanning. Must + be in the format specified by the `scanMode` argument. + """ + apiSpecificationFile: String! + + """ + CI variable containing the password for authenticating with the target API. + """ + authPassword: String + + """ + CI variable containing the username for authenticating with the target API. + """ + authUsername: String + + """Mode for API fuzzing scans.""" + scanMode: ApiFuzzingScanMode! + + """Name of a default profile to use for scanning. Ex: Quick-10.""" + scanProfile: String + + """URL for the target of API fuzzing scans.""" + target: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ApiFuzzingCiConfigurationCreate""" +type ApiFuzzingCiConfigurationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """ + A YAML snippet that can be inserted into the project's `.gitlab-ci.yml` to set up API fuzzing scans. + """ + configurationYaml: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + Location at which the project's `.gitlab-ci.yml` file can be edited in the browser. + """ + gitlabCiYamlEditPath: String +} + +"""All possible ways to specify the API surface for an API fuzzing scan.""" +enum ApiFuzzingScanMode { + """The API surface is specified by a HAR file.""" + HAR + + """The API surface is specified by a OPENAPI file.""" + OPENAPI + + """The API surface is specified by a POSTMAN file.""" + POSTMAN +} + +"""An API Fuzzing scan profile.""" +type ApiFuzzingScanProfile { + """Short description of the profile.""" + description: String + + """Unique name of the profile.""" + name: String + + """Syntax highlighted HTML representation of the YAML.""" + yaml: String +} + +"""Describes a rule for who can approve merge requests.""" +type ApprovalRule { + """Number of required approvals.""" + approvalsRequired: Int + + """Indicates if the rule is satisfied.""" + approved: Boolean + + """List of users defined in the rule that approved the merge request.""" + approvedBy( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """Indicates if the rule contains approvers from a hidden group.""" + containsHiddenGroups: Boolean + + """ + List of all users eligible to approve the merge request (defined explicitly and from associated groups). + """ + eligibleApprovers: [UserCore!] + + """List of groups added as approvers for the rule.""" + groups( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupConnection + + """ID of the rule.""" + id: GlobalID! + + """Name of the rule.""" + name: String + + """Indicates if the rule was overridden for the merge request.""" + overridden: Boolean + + """Named section of the Code Owners file that the rule applies to.""" + section: String + + """Source rule used to create the rule.""" + sourceRule: ApprovalRule + + """Type of the rule.""" + type: ApprovalRuleType + + """List of users added as approvers for the rule.""" + users( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection +} + +"""The kind of an approval rule.""" +enum ApprovalRuleType { + """A `regular` approval rule.""" + REGULAR + + """A `code_owner` approval rule.""" + CODE_OWNER + + """A `report_approver` approval rule.""" + REPORT_APPROVER + + """A `any_approver` approval rule.""" + ANY_APPROVER +} + +"""Assignee ID wildcard values""" +enum AssigneeWildcardId { + """No assignee is assigned.""" + NONE + + """An assignee is assigned.""" + ANY +} + +""" +A `AuditEventsExternalAuditEventDestinationID` is a global ID. It is encoded as a string. + +An example `AuditEventsExternalAuditEventDestinationID` is: `"gid://gitlab/AuditEvents::ExternalAuditEventDestination/1"`. +""" +scalar AuditEventsExternalAuditEventDestinationID + +"""User availability status""" +enum AvailabilityEnum { + """Not Set""" + NOT_SET + + """Busy""" + BUSY +} + +""" +A `AwardableID` is a global ID. It is encoded as a string. + +An example `AwardableID` is: `"gid://gitlab/Awardable/1"`. +""" +scalar AwardableID + +"""An emoji awarded by a user""" +type AwardEmoji { + """Emoji description.""" + description: String! + + """Emoji as an icon.""" + emoji: String! + + """Emoji name.""" + name: String! + + """Emoji in Unicode.""" + unicode: String! + + """Unicode version for this emoji.""" + unicodeVersion: String! + + """User who awarded the emoji.""" + user: UserCore! +} + +"""Autogenerated input type of AwardEmojiAdd""" +input AwardEmojiAddInput { + """Global ID of the awardable resource.""" + awardableId: AwardableID! + + """Emoji name.""" + name: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AwardEmojiAdd""" +type AwardEmojiAddPayload { + """Award emoji after mutation.""" + awardEmoji: AwardEmoji + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""The connection type for AwardEmoji.""" +type AwardEmojiConnection { + """A list of edges.""" + edges: [AwardEmojiEdge] + + """A list of nodes.""" + nodes: [AwardEmoji] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type AwardEmojiEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: AwardEmoji +} + +"""Autogenerated input type of AwardEmojiRemove""" +input AwardEmojiRemoveInput { + """Global ID of the awardable resource.""" + awardableId: AwardableID! + + """Emoji name.""" + name: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AwardEmojiRemove""" +type AwardEmojiRemovePayload { + """Award emoji after mutation.""" + awardEmoji: AwardEmoji + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of AwardEmojiToggle""" +input AwardEmojiToggleInput { + """Global ID of the awardable resource.""" + awardableId: AwardableID! + + """Emoji name.""" + name: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of AwardEmojiToggle""" +type AwardEmojiTogglePayload { + """Award emoji after mutation.""" + awardEmoji: AwardEmoji + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji. + """ + toggledOn: Boolean! +} + +type BaseService implements Service { + """Indicates if the service is active.""" + active: Boolean + + """Class name of the service.""" + type: String +} + +""" +Represents non-fractional signed whole numeric values. Since the value may +exceed the size of a 32-bit integer, it's encoded as a string. +""" +scalar BigInt + +type Blob implements Entry { + """Flat path of the entry.""" + flatPath: String! + + """ID of the entry.""" + id: ID! + + """LFS ID of the blob.""" + lfsOid: String + + """Blob mode in numeric format.""" + mode: String + + """Name of the entry.""" + name: String! + + """Path of the entry.""" + path: String! + + """Last commit SHA for the entry.""" + sha: String! + + """Type of tree entry.""" + type: EntryType! + + """Web path of the blob.""" + webPath: String + + """Web URL of the blob.""" + webUrl: String +} + +"""The connection type for Blob.""" +type BlobConnection { + """A list of edges.""" + edges: [BlobEdge] + + """A list of nodes.""" + nodes: [Blob] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type BlobEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Blob +} + +"""Represents how the blob content should be displayed""" +type BlobViewer { + """Shows whether the blob should be displayed collapsed.""" + collapsed: Boolean! + + """Content file type.""" + fileType: String! + + """Shows whether the blob content is loaded asynchronously.""" + loadAsync: Boolean! + + """Loading partial name.""" + loadingPartialName: String! + + """Error rendering the blob content.""" + renderError: String + + """Shows whether the blob is too large to be displayed.""" + tooLarge: Boolean! + + """Type of blob viewer.""" + type: BlobViewersType! +} + +"""Types of blob viewers""" +enum BlobViewersType { + """Rich blob viewers type.""" + rich + + """Simple blob viewers type.""" + simple + + """Auxiliary blob viewers type.""" + auxiliary +} + +"""Represents a project or group issue board""" +type Board { + """Board assignee.""" + assignee: UserCore + + """Timestamp of when the board was created.""" + createdAt: Time! + + """Epics associated with board issues.""" + epics( + """Filters applied when selecting issues on the board.""" + issueFilters: BoardIssueInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): BoardEpicConnection + + """Whether or not backlog list is hidden.""" + hideBacklogList: Boolean + + """Whether or not closed list is hidden.""" + hideClosedList: Boolean + + """ID (global ID) of the board.""" + id: ID! + + """Board iteration.""" + iteration: Iteration + + """Board iteration cadence.""" + iterationCadence: IterationCadence + + """Labels of the board.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """Lists of the board.""" + lists( + """Find a list by its global ID.""" + id: ListID + + """Filters applied when getting issue metadata in the board list.""" + issueFilters: BoardIssueInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): BoardListConnection + + """Board milestone.""" + milestone: Milestone + + """Name of the board.""" + name: String + + """Timestamp of when the board was last updated.""" + updatedAt: Time! + + """Web path of the board.""" + webPath: String! + + """Web URL of the board.""" + webUrl: String! + + """Weight of the board.""" + weight: Int +} + +"""The connection type for Board.""" +type BoardConnection { + """A list of edges.""" + edges: [BoardEdge] + + """A list of nodes.""" + nodes: [Board] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type BoardEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Board +} + +"""Represents an epic on an issue board""" +type BoardEpic implements NoteableInterface & CurrentUserTodos & Eventable { + """Ancestors (parents) of the epic.""" + ancestors( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Search query for title or description.""" + search: String + + """IID of the epic, e.g., "1".""" + iid: ID + + """List of IIDs of epics, e.g., `[1, 2]`.""" + iids: [ID!] + + """Filter epics by state.""" + state: EpicState + + """ + Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + """ + in: [IssuableSearchableField!] + + """List epics by sort order.""" + sort: EpicSort + + """Filter epics by author.""" + authorUsername: String + + """Filter epics by labels.""" + labelName: [String!] + + """Filter epics by milestone title, computed from epic's issues.""" + milestoneTitle: String + + """Filter epics by IID for autocomplete.""" + iidStartsWith: String + + """Include epics from ancestor groups.""" + includeAncestorGroups: Boolean = true + + """Include epics from descendant groups.""" + includeDescendantGroups: Boolean = true + + """Filter epics by given confidentiality.""" + confidential: Boolean + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicFilterInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicConnection + + """Author of the epic.""" + author: UserCore! + + """List of award emojis associated with the epic.""" + awardEmoji( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): AwardEmojiConnection + + """Children (sub-epics) of the epic.""" + children( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Search query for title or description.""" + search: String + + """IID of the epic, e.g., "1".""" + iid: ID + + """List of IIDs of epics, e.g., `[1, 2]`.""" + iids: [ID!] + + """Filter epics by state.""" + state: EpicState + + """ + Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + """ + in: [IssuableSearchableField!] + + """List epics by sort order.""" + sort: EpicSort + + """Filter epics by author.""" + authorUsername: String + + """Filter epics by labels.""" + labelName: [String!] + + """Filter epics by milestone title, computed from epic's issues.""" + milestoneTitle: String + + """Filter epics by IID for autocomplete.""" + iidStartsWith: String + + """Include epics from ancestor groups.""" + includeAncestorGroups: Boolean = false + + """Include epics from descendant groups.""" + includeDescendantGroups: Boolean = true + + """Filter epics by given confidentiality.""" + confidential: Boolean + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicFilterInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicConnection + + """Timestamp of when the epic was closed.""" + closedAt: Time + + """Indicates if the epic is confidential.""" + confidential: Boolean + + """Timestamp of when the epic was created.""" + createdAt: Time + + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! + + """Number of open and closed descendant epics and issues.""" + descendantCounts: EpicDescendantCount + + """ + Total weight of open and closed issues in the epic and its descendants. + """ + descendantWeightSum: EpicDescendantWeights + + """Description of the epic.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Number of downvotes the epic has received.""" + downvotes: Int! + + """Due date of the epic.""" + dueDate: Time + + """Fixed due date of the epic.""" + dueDateFixed: Time + + """Inherited due date of the epic from milestones.""" + dueDateFromMilestones: Time + + """Indicates if the due date has been manually set.""" + dueDateIsFixed: Boolean + + """List of events associated with the object.""" + events( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EventConnection + + """Group to which the epic belongs.""" + group: Group! + + """Indicates if the epic has children.""" + hasChildren: Boolean! + + """Indicates if the epic has direct issues.""" + hasIssues: Boolean! + + """Indicates if the epic has a parent epic.""" + hasParent: Boolean! + + """Current health status of the epic.""" + healthStatus: EpicHealthStatus + + """ID of the epic.""" + id: ID! + + """Internal ID of the epic.""" + iid: ID! + + """A list of issues associated with the epic.""" + issues( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicIssueConnection + + """Labels assigned to the epic.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """Parent epic of the epic.""" + parent: Epic + + """List of participants for the epic.""" + participants( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """ + Internal reference of the epic. Returned in shortened format by default. + """ + reference( + """Indicates if the reference should be returned in full.""" + full: Boolean = false + ): String! + + """URI path of the epic-issue relationship.""" + relationPath: String + + """Relative position of the epic in the epic tree.""" + relativePosition: Int + + """Start date of the epic.""" + startDate: Time + + """Fixed start date of the epic.""" + startDateFixed: Time + + """Inherited start date of the epic from milestones.""" + startDateFromMilestones: Time + + """Indicates if the start date has been manually set.""" + startDateIsFixed: Boolean + + """State of the epic.""" + state: EpicState! + + """Indicates the currently logged in user is subscribed to the epic.""" + subscribed: Boolean! + + """Title of the epic.""" + title: String + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Timestamp of when the epic was updated.""" + updatedAt: Time + + """Number of upvotes the epic has received.""" + upvotes: Int! + + """Number of user discussions in the epic.""" + userDiscussionsCount: Int! + + """Number of user notes of the epic.""" + userNotesCount: Int! + + """Permissions for the current user on the resource""" + userPermissions: EpicPermissions! + + """User preferences for the epic on the issue board.""" + userPreferences: BoardEpicUserPreferences + + """Web path of the epic.""" + webPath: String! + + """Web URL of the epic.""" + webUrl: String! +} + +"""The connection type for BoardEpic.""" +type BoardEpicConnection { + """A list of edges.""" + edges: [BoardEpicEdge] + + """A list of nodes.""" + nodes: [BoardEpic] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of BoardEpicCreate""" +input BoardEpicCreateInput { + """Group the epic to create is in.""" + groupPath: ID! + + """Global ID of the board that the epic is in.""" + boardId: BoardsEpicBoardID! + + """Global ID of the epic board list in which epic will be created.""" + listId: BoardsEpicListID! + + """Title of the epic.""" + title: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of BoardEpicCreate""" +type BoardEpicCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic after creation.""" + epic: Epic + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type BoardEpicEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: BoardEpic +} + +"""Represents user preferences for a board epic""" +type BoardEpicUserPreferences { + """Indicates epic should be displayed as collapsed.""" + collapsed: Boolean! +} + +""" +A `BoardID` is a global ID. It is encoded as a string. + +An example `BoardID` is: `"gid://gitlab/Board/1"`. +""" +scalar BoardID + +input BoardIssueInput { + """Filter by label name.""" + labelName: [String] + + """Filter by author username.""" + authorUsername: String + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """List of IIDs of issues. For example `["1", "2"]`.""" + iids: [String!] + + """Filter by milestone title.""" + milestoneTitle: String + + """Filter by assignee username.""" + assigneeUsername: [String] + + """Filter by release tag.""" + releaseTag: String + + """Filter by the given issue types.""" + types: [IssueType!] + + """Filter by milestone ID wildcard.""" + milestoneWildcardId: MilestoneWildcardId + + """Filter by epic ID. Incompatible with epicWildcardId.""" + epicId: EpicID + + """Filter by iteration title.""" + iterationTitle: String + + """Filter by weight.""" + weight: String + + """ + Filter by a list of iteration IDs. Incompatible with iterationWildcardId. + """ + iterationId: [IterationID!] + + """List of negated arguments.""" + not: NegatedBoardIssueInput + + """Search query for issue title or description.""" + search: String + + """Filter by assignee wildcard. Incompatible with assigneeUsername.""" + assigneeWildcardId: AssigneeWildcardId + + """Filter by epic ID wildcard. Incompatible with epicId.""" + epicWildcardId: EpicWildcardId + + """Filter by iteration ID wildcard.""" + iterationWildcardId: IterationWildcardId + + """Filter by weight ID wildcard. Incompatible with weight.""" + weightWildcardId: WeightWildcardId +} + +"""Represents a list for an issue board""" +type BoardList { + """Assignee in the list.""" + assignee: UserCore + + """Indicates if the list is collapsed for this user.""" + collapsed: Boolean + + """ID (global ID) of the list.""" + id: ID! + + """Board issues.""" + issues( + """Filters applied when selecting issues in the board list.""" + filters: BoardIssueInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IssueConnection + + """Count of issues in the list.""" + issuesCount: Int + + """Iteration of the list.""" + iteration: Iteration + + """Label of the list.""" + label: Label + + """Current limit metric for the list.""" + limitMetric: ListLimitMetric + + """Type of the list.""" + listType: String! + + """Maximum number of issues in the list.""" + maxIssueCount: Int + + """Maximum weight of issues in the list.""" + maxIssueWeight: Int + + """Milestone of the list.""" + milestone: Milestone + + """Position of list within the board.""" + position: Int + + """Title of the list.""" + title: String! + + """Total weight of all issues in the list.""" + totalWeight: Int +} + +"""The connection type for BoardList.""" +type BoardListConnection { + """A list of edges.""" + edges: [BoardListEdge] + + """A list of nodes.""" + nodes: [BoardList] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of BoardListCreate""" +input BoardListCreateInput { + """Create the backlog list.""" + backlog: Boolean + + """Global ID of an existing label.""" + labelId: LabelID + + """Global ID of the issue board to mutate.""" + boardId: BoardID! + + """Global ID of an existing milestone.""" + milestoneId: MilestoneID + + """Global ID of an existing iteration.""" + iterationId: IterationID + + """Global ID of an existing user.""" + assigneeId: UserID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of BoardListCreate""" +type BoardListCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue list in the issue board.""" + list: BoardList +} + +"""An edge in a connection.""" +type BoardListEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: BoardList +} + +"""Autogenerated input type of BoardListUpdateLimitMetrics""" +input BoardListUpdateLimitMetricsInput { + """Global ID of the list.""" + listId: ListID! + + """New limit metric type for the list.""" + limitMetric: ListLimitMetric + + """New maximum issue count limit.""" + maxIssueCount: Int + + """New maximum issue weight limit.""" + maxIssueWeight: Int + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of BoardListUpdateLimitMetrics""" +type BoardListUpdateLimitMetricsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Updated list.""" + list: BoardList +} + +""" +A `BoardsEpicBoardID` is a global ID. It is encoded as a string. + +An example `BoardsEpicBoardID` is: `"gid://gitlab/Boards::EpicBoard/1"`. +""" +scalar BoardsEpicBoardID + +""" +A `BoardsEpicListID` is a global ID. It is encoded as a string. + +An example `BoardsEpicListID` is: `"gid://gitlab/Boards::EpicList/1"`. +""" +scalar BoardsEpicListID + +type Branch { + """Commit for the branch.""" + commit: Commit + + """Name of the branch.""" + name: String! +} + +"""Autogenerated input type of BulkEnableDevopsAdoptionNamespaces""" +input BulkEnableDevopsAdoptionNamespacesInput { + """List of Namespace IDs.""" + namespaceIds: [NamespaceID!]! + + """Display namespace ID.""" + displayNamespaceId: NamespaceID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of BulkEnableDevopsAdoptionNamespaces""" +type BulkEnableDevopsAdoptionNamespacesPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Enabled namespaces after mutation.""" + enabledNamespaces: [DevopsAdoptionEnabledNamespace!] + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +""" +Represents the total number of issues and their weights for a particular day +""" +type BurnupChartDailyTotals { + """Number of closed issues as of this day.""" + completedCount: Int! + + """Total weight of closed issues as of this day.""" + completedWeight: Int! + + """Date for burnup totals.""" + date: ISO8601Date! + + """Number of issues as of this day.""" + scopeCount: Int! + + """Total weight of issues as of this day.""" + scopeWeight: Int! +} + +type CiApplicationSettings { + """Whether to keep the latest jobs artifacts.""" + keepLatestArtifact: Boolean +} + +""" +A `CiBuildID` is a global ID. It is encoded as a string. + +An example `CiBuildID` is: `"gid://gitlab/Ci::Build/1"`. +""" +scalar CiBuildID + +type CiBuildNeed { + """ID of the job we need to complete.""" + id: ID! + + """Name of the job we need to complete.""" + name: String +} + +"""The connection type for CiBuildNeed.""" +type CiBuildNeedConnection { + """A list of edges.""" + edges: [CiBuildNeedEdge] + + """A list of nodes.""" + nodes: [CiBuildNeed] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiBuildNeedEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiBuildNeed +} + +"""Autogenerated input type of CiCdSettingsUpdate""" +input CiCdSettingsUpdateInput { + """Full Path of the project the settings belong to.""" + fullPath: ID! + + """Indicates if the latest artifact should be kept for this project.""" + keepLatestArtifact: Boolean + + """ + Indicates CI job tokens generated in this project have restricted access to resources. + """ + jobTokenScopeEnabled: Boolean + + """Indicates if merge pipelines are enabled for the project.""" + mergePipelinesEnabled: Boolean + + """Indicates if merge trains are enabled for the project.""" + mergeTrainsEnabled: Boolean + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CiCdSettingsUpdate""" +type CiCdSettingsUpdatePayload { + """CI/CD settings after mutation.""" + ciCdSettings: ProjectCiCdSetting! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +type CiConfig { + """Linting errors.""" + errors: [String!] + + """Merged CI configuration YAML.""" + mergedYaml: String + + """Stages of the pipeline.""" + stages( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiConfigStageConnection + + """Status of linting, can be either valid or invalid.""" + status: CiConfigStatus +} + +type CiConfigGroup { + """Jobs in group.""" + jobs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiConfigJobConnection + + """Name of the job group.""" + name: String + + """Size of the job group.""" + size: Int +} + +"""The connection type for CiConfigGroup.""" +type CiConfigGroupConnection { + """A list of edges.""" + edges: [CiConfigGroupEdge] + + """A list of nodes.""" + nodes: [CiConfigGroup] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiConfigGroupEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiConfigGroup +} + +type CiConfigJob { + """Override a set of commands that are executed after the job.""" + afterScript: [String!] + + """Allow job to fail.""" + allowFailure: Boolean + + """Override a set of commands that are executed before the job.""" + beforeScript: [String!] + + """Name of an environment to which the job deploys.""" + environment: String + + """Limit when jobs are not created.""" + except: CiConfigJobRestriction + + """Name of the job group.""" + groupName: String + + """Name of the job.""" + name: String + + """Builds that must complete before the jobs run.""" + needs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiConfigNeedConnection + + """Jobs are created when these conditions do not apply.""" + only: CiConfigJobRestriction + + """Shell script that is executed by a runner.""" + script: [String!] + + """Name of the job stage.""" + stage: String + + """List of tags that are used to select a runner.""" + tags: [String!] + + """When to run the job.""" + when: String +} + +"""The connection type for CiConfigJob.""" +type CiConfigJobConnection { + """A list of edges.""" + edges: [CiConfigJobEdge] + + """A list of nodes.""" + nodes: [CiConfigJob] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiConfigJobEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiConfigJob +} + +type CiConfigJobRestriction { + """Git refs the job restriction applies to.""" + refs: [String!] +} + +type CiConfigNeed { + """Name of the need.""" + name: String +} + +"""The connection type for CiConfigNeed.""" +type CiConfigNeedConnection { + """A list of edges.""" + edges: [CiConfigNeedEdge] + + """A list of nodes.""" + nodes: [CiConfigNeed] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiConfigNeedEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiConfigNeed +} + +type CiConfigStage { + """Groups of jobs for the stage.""" + groups( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiConfigGroupConnection + + """Name of the stage.""" + name: String +} + +"""The connection type for CiConfigStage.""" +type CiConfigStageConnection { + """A list of edges.""" + edges: [CiConfigStageEdge] + + """A list of nodes.""" + nodes: [CiConfigStage] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiConfigStageEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiConfigStage +} + +"""Values for YAML processor result""" +enum CiConfigStatus { + """Configuration file is valid.""" + VALID + + """Configuration file is not valid.""" + INVALID +} + +type CiGroup { + """Detailed status of the group.""" + detailedStatus: DetailedStatus + + """ID for a group.""" + id: String! + + """Jobs in group.""" + jobs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiJobConnection + + """Name of the job group.""" + name: String + + """Size of the group.""" + size: Int +} + +"""The connection type for CiGroup.""" +type CiGroupConnection { + """A list of edges.""" + edges: [CiGroupEdge] + + """A list of nodes.""" + nodes: [CiGroup] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiGroupEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiGroup +} + +type CiJob { + """Indicates the job is active.""" + active: Boolean! + + """Whether the job is allowed to fail.""" + allowFailure: Boolean! + + """Artifacts generated by the job.""" + artifacts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiJobArtifactConnection + + """Indicates the job can be canceled.""" + cancelable: Boolean! + + """Path to the commit that triggered the job.""" + commitPath: String + + """Coverage level of the job.""" + coverage: Float + + """When the job was created.""" + createdAt: Time! + + """Whether the job was created by a tag.""" + createdByTag: Boolean! + + """Detailed status of the job.""" + detailedStatus: DetailedStatus + + """Duration of the job in seconds.""" + duration: Int + + """When a job has finished running.""" + finishedAt: Time + + """ID of the job.""" + id: JobID + + """Whether the job has a manual action.""" + manualJob: Boolean + + """Name of the job.""" + name: String + + """References to builds that must complete before the jobs run.""" + needs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiBuildNeedConnection + + """Pipeline the job belongs to.""" + pipeline: Pipeline + + """Indicates the job can be played.""" + playable: Boolean! + + """When the job was enqueued and marked as pending.""" + queuedAt: Time + + """How long the job was enqueued before starting.""" + queuedDuration: Duration + + """Ref name of the job.""" + refName: String + + """Path to the ref.""" + refPath: String + + """Indicates the job can be retried.""" + retryable: Boolean! + + """Schedule for the build.""" + scheduledAt: Time + + """ + Type of job scheduling. Value is `dag` if the job uses the `needs` keyword, and `stage` otherwise. + """ + schedulingType: String + + """Short SHA1 ID of the commit.""" + shortSha: String! + + """Stage of the job.""" + stage: CiStage + + """When the job was started.""" + startedAt: Time + + """Status of the job.""" + status: CiJobStatus + + """Indicates the job is stuck.""" + stuck: Boolean! + + """Tags for the current job.""" + tags: [String!] + + """Whether the job was triggered.""" + triggered: Boolean + + """Permissions for the current user on the resource""" + userPermissions: JobPermissions! +} + +type CiJobArtifact { + """URL for downloading the artifact's file.""" + downloadPath: String + + """File type of the artifact.""" + fileType: JobArtifactFileType +} + +"""The connection type for CiJobArtifact.""" +type CiJobArtifactConnection { + """A list of edges.""" + edges: [CiJobArtifactEdge] + + """A list of nodes.""" + nodes: [CiJobArtifact] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiJobArtifactEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiJobArtifact +} + +"""The connection type for CiJob.""" +type CiJobConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [CiJobEdge] + + """A list of nodes.""" + nodes: [CiJob] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiJobEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiJob +} + +enum CiJobStatus { + """A job that is created.""" + CREATED + + """A job that is waiting for resource.""" + WAITING_FOR_RESOURCE + + """A job that is preparing.""" + PREPARING + + """A job that is pending.""" + PENDING + + """A job that is running.""" + RUNNING + + """A job that is success.""" + SUCCESS + + """A job that is failed.""" + FAILED + + """A job that is canceled.""" + CANCELED + + """A job that is skipped.""" + SKIPPED + + """A job that is manual.""" + MANUAL + + """A job that is scheduled.""" + SCHEDULED +} + +"""Autogenerated input type of CiJobTokenScopeAddProject""" +input CiJobTokenScopeAddProjectInput { + """Project that the CI job token scope belongs to.""" + projectPath: ID! + + """Project to be added to the CI job token scope.""" + targetProjectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CiJobTokenScopeAddProject""" +type CiJobTokenScopeAddProjectPayload { + """CI job token's scope of access.""" + ciJobTokenScope: CiJobTokenScopeType + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CiJobTokenScopeRemoveProject""" +input CiJobTokenScopeRemoveProjectInput { + """Project that the CI job token scope belongs to.""" + projectPath: ID! + + """Project to be removed from the CI job token scope.""" + targetProjectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CiJobTokenScopeRemoveProject""" +type CiJobTokenScopeRemoveProjectPayload { + """CI job token's scope of access.""" + ciJobTokenScope: CiJobTokenScopeType + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +type CiJobTokenScopeType { + """ + Allow list of projects that can be accessed by CI Job tokens created by this project. + """ + projects( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection! +} + +type CiMinutesNamespaceMonthlyUsage { + """Total number of minutes used by all projects in the namespace.""" + minutes: Int + + """Month related to the usage data.""" + month: String + + """CI minutes usage data for projects in the namespace.""" + projects( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiMinutesProjectMonthlyUsageConnection +} + +"""The connection type for CiMinutesNamespaceMonthlyUsage.""" +type CiMinutesNamespaceMonthlyUsageConnection { + """A list of edges.""" + edges: [CiMinutesNamespaceMonthlyUsageEdge] + + """A list of nodes.""" + nodes: [CiMinutesNamespaceMonthlyUsage] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiMinutesNamespaceMonthlyUsageEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiMinutesNamespaceMonthlyUsage +} + +type CiMinutesProjectMonthlyUsage { + """Number of CI minutes used by the project in the month.""" + minutes: Int + + """Name of the project.""" + name: String +} + +"""The connection type for CiMinutesProjectMonthlyUsage.""" +type CiMinutesProjectMonthlyUsageConnection { + """A list of edges.""" + edges: [CiMinutesProjectMonthlyUsageEdge] + + """A list of nodes.""" + nodes: [CiMinutesProjectMonthlyUsage] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiMinutesProjectMonthlyUsageEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiMinutesProjectMonthlyUsage +} + +""" +A `CiPipelineID` is a global ID. It is encoded as a string. + +An example `CiPipelineID` is: `"gid://gitlab/Ci::Pipeline/1"`. +""" +scalar CiPipelineID + +type CiRunner { + """Access level of the runner.""" + accessLevel: CiRunnerAccessLevel! + + """Indicates the runner is allowed to receive jobs.""" + active: Boolean! + + """Admin URL of the runner. Only available for adminstrators.""" + adminUrl: String + + """Last contact from the runner.""" + contactedAt: Time + + """Description of the runner.""" + description: String + + """ID of the runner.""" + id: CiRunnerID! + + """IP address of the runner.""" + ipAddress: String + + """ + Number of jobs processed by the runner (limited to 1000, plus one to indicate that more items exist). + """ + jobCount: Int + + """Indicates the runner is locked.""" + locked: Boolean + + """Maximum timeout (in seconds) for jobs processed by the runner.""" + maximumTimeout: Int + + """ + Private projects' "minutes cost factor" associated with the runner (GitLab.com only). + """ + privateProjectsMinutesCostFactor: Float + + """Number of projects that the runner is associated with.""" + projectCount: Int + + """ + Public projects' "minutes cost factor" associated with the runner (GitLab.com only). + """ + publicProjectsMinutesCostFactor: Float + + """Revision of the runner.""" + revision: String + + """Indicates the runner is able to run untagged jobs.""" + runUntagged: Boolean! + + """Type of the runner.""" + runnerType: CiRunnerType! + + """ + First eight characters of the runner's token used to authenticate new job requests. Used as the runner's unique ID. + """ + shortSha: String + + """Status of the runner.""" + status: CiRunnerStatus! + + """Tags associated with the runner.""" + tagList: [String!] + + """Permissions for the current user on the resource""" + userPermissions: RunnerPermissions! + + """Version of the runner.""" + version: String +} + +enum CiRunnerAccessLevel { + """A runner that is not protected.""" + NOT_PROTECTED + + """A runner that is ref protected.""" + REF_PROTECTED +} + +"""The connection type for CiRunner.""" +type CiRunnerConnection { + """A list of edges.""" + edges: [CiRunnerEdge] + + """A list of nodes.""" + nodes: [CiRunner] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiRunnerEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiRunner + + """ + Web URL of the runner. The value depends on where you put this field in the query. You can use it for projects or groups. + """ + webUrl: String +} + +""" +A `CiRunnerID` is a global ID. It is encoded as a string. + +An example `CiRunnerID` is: `"gid://gitlab/Ci::Runner/1"`. +""" +scalar CiRunnerID + +"""Values for sorting runners""" +enum CiRunnerSort { + """Ordered by contacted_at in ascending order.""" + CONTACTED_ASC + + """Ordered by contacted_at in descending order.""" + CONTACTED_DESC + + """Ordered by created_at in ascending order.""" + CREATED_ASC + + """Ordered by created_at in descending order.""" + CREATED_DESC +} + +enum CiRunnerStatus { + """A runner that is not paused.""" + ACTIVE + + """A runner that is paused.""" + PAUSED + + """A runner that contacted this instance within the last 2 hours.""" + ONLINE + + """A runner that has not contacted this instance within the last 2 hours.""" + OFFLINE + + """A runner that has never contacted this instance.""" + NOT_CONNECTED +} + +enum CiRunnerType { + """A runner that is instance type.""" + INSTANCE_TYPE + + """A runner that is group type.""" + GROUP_TYPE + + """A runner that is project type.""" + PROJECT_TYPE +} + +type CiStage { + """Detailed status of the stage.""" + detailedStatus: DetailedStatus + + """Group of jobs for the stage.""" + groups( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiGroupConnection + + """ID of the stage.""" + id: ID! + + """Jobs for the stage.""" + jobs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiJobConnection + + """Name of the stage.""" + name: String + + """Status of the pipeline stage.""" + status: String +} + +"""The connection type for CiStage.""" +type CiStageConnection { + """A list of edges.""" + edges: [CiStageEdge] + + """A list of nodes.""" + nodes: [CiStage] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CiStageEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CiStage +} + +"""GitLab CI/CD configuration template.""" +type CiTemplate { + """Contents of the CI template.""" + content: String! + + """Name of the CI template.""" + name: String! +} + +type ClusterAgent { + """Active connections for the cluster agent""" + connections( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ConnectedAgentConnection + + """Timestamp the cluster agent was created.""" + createdAt: Time + + """ + User object, containing information about the person who created the agent. + """ + createdByUser: UserCore + + """ID of the cluster agent.""" + id: ID! + + """Name of the cluster agent.""" + name: String + + """Project this cluster agent is associated with.""" + project: Project + + """Tokens associated with the cluster agent.""" + tokens( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ClusterAgentTokenConnection + + """Timestamp the cluster agent was updated.""" + updatedAt: Time + + """Web path of the cluster agent.""" + webPath: String +} + +"""The connection type for ClusterAgent.""" +type ClusterAgentConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [ClusterAgentEdge] + + """A list of nodes.""" + nodes: [ClusterAgent] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of ClusterAgentDelete""" +input ClusterAgentDeleteInput { + """Global ID of the cluster agent that will be deleted.""" + id: ClustersAgentID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ClusterAgentDelete""" +type ClusterAgentDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type ClusterAgentEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ClusterAgent +} + +type ClusterAgentToken { + """Cluster agent this token is associated with.""" + clusterAgent: ClusterAgent + + """Timestamp the token was created.""" + createdAt: Time + + """User who created the token.""" + createdByUser: UserCore + + """Description of the token.""" + description: String + + """Global ID of the token.""" + id: ClustersAgentTokenID! + + """Timestamp the token was last used.""" + lastUsedAt: Time + + """Name given to the token.""" + name: String +} + +"""The connection type for ClusterAgentToken.""" +type ClusterAgentTokenConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [ClusterAgentTokenEdge] + + """A list of nodes.""" + nodes: [ClusterAgentToken] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of ClusterAgentTokenCreate""" +input ClusterAgentTokenCreateInput { + """ + Global ID of the cluster agent that will be associated with the new token. + """ + clusterAgentId: ClustersAgentID! + + """Description of the token.""" + description: String + + """Name of the token.""" + name: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ClusterAgentTokenCreate""" +type ClusterAgentTokenCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + Token secret value. Make sure you save it - you won't be able to access it again. + """ + secret: String + + """Token created after mutation.""" + token: ClusterAgentToken +} + +"""Autogenerated input type of ClusterAgentTokenDelete""" +input ClusterAgentTokenDeleteInput { + """Global ID of the cluster agent token that will be deleted.""" + id: ClustersAgentTokenID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ClusterAgentTokenDelete""" +type ClusterAgentTokenDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type ClusterAgentTokenEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ClusterAgentToken +} + +""" +A `ClustersAgentID` is a global ID. It is encoded as a string. + +An example `ClustersAgentID` is: `"gid://gitlab/Clusters::Agent/1"`. +""" +scalar ClustersAgentID + +""" +A `ClustersAgentTokenID` is a global ID. It is encoded as a string. + +An example `ClustersAgentTokenID` is: `"gid://gitlab/Clusters::AgentToken/1"`. +""" +scalar ClustersAgentTokenID + +""" +A `ClustersClusterID` is a global ID. It is encoded as a string. + +An example `ClustersClusterID` is: `"gid://gitlab/Clusters::Cluster/1"`. +""" +scalar ClustersClusterID + +"""Represents the code coverage activity for a group""" +type CodeCoverageActivity { + """ + Average percentage of the different code coverage results available for the group. + """ + averageCoverage: Float + + """Number of different code coverage results available for the group.""" + coverageCount: Int + + """Date when the code coverage was created.""" + date: Date! + + """Number of projects with code coverage results for the group.""" + projectCount: Int +} + +"""The connection type for CodeCoverageActivity.""" +type CodeCoverageActivityConnection { + """A list of edges.""" + edges: [CodeCoverageActivityEdge] + + """A list of nodes.""" + nodes: [CodeCoverageActivity] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CodeCoverageActivityEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CodeCoverageActivity +} + +"""Represents the code coverage summary for a project""" +type CodeCoverageSummary { + """ + Average percentage of the different code coverage results available for the project. + """ + averageCoverage: Float + + """Number of different code coverage results available.""" + coverageCount: Int + + """Latest date when the code coverage was created for the project.""" + lastUpdatedOn: Date +} + +"""Represents a code quality degradation on the pipeline.""" +type CodeQualityDegradation { + """Description of the code quality degradation.""" + description: String! + + """ + Unique fingerprint to identify the code quality degradation. For example, an MD5 hash. + """ + fingerprint: String! + + """Line on which the code quality degradation occurred.""" + line: Int! + + """Relative path to the file containing the code quality degradation.""" + path: String! + + """Status of the degradation (BLOCKER, CRITICAL, MAJOR, MINOR, INFO).""" + severity: CodeQualityDegradationSeverity! +} + +"""The connection type for CodeQualityDegradation.""" +type CodeQualityDegradationConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [CodeQualityDegradationEdge] + + """A list of nodes.""" + nodes: [CodeQualityDegradation] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CodeQualityDegradationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CodeQualityDegradation +} + +enum CodeQualityDegradationSeverity { + """Code Quality degradation has a status of blocker.""" + BLOCKER + + """Code Quality degradation has a status of critical.""" + CRITICAL + + """Code Quality degradation has a status of major.""" + MAJOR + + """Code Quality degradation has a status of minor.""" + MINOR + + """Code Quality degradation has a status of info.""" + INFO +} + +type Commit { + """Author of the commit.""" + author: UserCore + + """Commit authors gravatar.""" + authorGravatar: String + + """Commit authors name.""" + authorName: String + + """Timestamp of when the commit was authored.""" + authoredDate: Time + + """Description of the commit message.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """ID (global ID) of the commit.""" + id: ID! + + """Raw commit message.""" + message: String + + """Pipelines of the commit ordered latest first.""" + pipelines( + """Filter pipelines by their status.""" + status: PipelineStatusEnum + + """Filter pipelines by the ref they are run for.""" + ref: String + + """Filter pipelines by the sha of the commit they are run for.""" + sha: String + + """ + Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled. + """ + source: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineConnection + + """SHA1 ID of the commit.""" + sha: String! + + """Short SHA1 ID of the commit.""" + shortId: String! + + """Rendered HTML of the commit signature.""" + signatureHtml: String + + """Title of the commit message.""" + title: String + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Web path of the commit.""" + webPath: String! + + """Web URL of the commit.""" + webUrl: String! +} + +input CommitAction { + """Action to perform: create, delete, move, update, or chmod.""" + action: CommitActionMode! + + """Full path to the file.""" + filePath: String! + + """Content of the file.""" + content: String + + """Original full path to the file being moved.""" + previousPath: String + + """Last known file commit ID.""" + lastCommitId: String + + """Enables/disables the execute flag on the file.""" + executeFilemode: Boolean + + """Encoding of the file. Default is text.""" + encoding: CommitEncoding +} + +"""Mode of a commit action""" +enum CommitActionMode { + """Create command.""" + CREATE + + """Delete command.""" + DELETE + + """Move command.""" + MOVE + + """Update command.""" + UPDATE + + """Chmod command.""" + CHMOD +} + +"""The connection type for Commit.""" +type CommitConnection { + """A list of edges.""" + edges: [CommitEdge] + + """A list of nodes.""" + nodes: [Commit] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of CommitCreate""" +input CommitCreateInput { + """Project full path the branch is associated with.""" + projectPath: ID! + + """Name of the branch to commit into, it can be a new branch.""" + branch: String! + + """If on a new branch, name of the original branch.""" + startBranch: String + + """Raw commit message.""" + message: String! + + """Array of action hashes to commit as a batch.""" + actions: [CommitAction!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CommitCreate""" +type CommitCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Commit after mutation.""" + commit: Commit + + """ETag path for the commit's pipeline.""" + commitPipelinePath: String + + """Contents of the commit.""" + content: [String!] + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type CommitEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Commit +} + +enum CommitEncoding { + """Text encoding.""" + TEXT + + """Base64 encoding.""" + BASE64 +} + +"""Represents a ComplianceFramework associated with a Project""" +type ComplianceFramework { + """Hexadecimal representation of compliance framework's label color.""" + color: String! + + """Description of the compliance framework.""" + description: String! + + """Compliance framework ID.""" + id: ID! + + """Name of the compliance framework.""" + name: String! + + """ + Full path of the compliance pipeline configuration stored in a project + repository, such as `.gitlab/.compliance-gitlab-ci.yml@compliance/hipaa` + **(ULTIMATE)**. + """ + pipelineConfigurationFullPath: String +} + +"""The connection type for ComplianceFramework.""" +type ComplianceFrameworkConnection { + """A list of edges.""" + edges: [ComplianceFrameworkEdge] + + """A list of nodes.""" + nodes: [ComplianceFramework] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ComplianceFrameworkEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ComplianceFramework +} + +input ComplianceFrameworkInput { + """New name for the compliance framework.""" + name: String + + """New description for the compliance framework.""" + description: String + + """ + New color representation of the compliance framework in hex format. e.g. #FCA121. + """ + color: String + + """ + Full path of the compliance pipeline configuration stored in a project + repository, such as `.gitlab/.compliance-gitlab-ci.yml@compliance/hipaa` + **(ULTIMATE)**. + """ + pipelineConfigurationFullPath: String +} + +""" +A `ComplianceManagementFrameworkID` is a global ID. It is encoded as a string. + +An example `ComplianceManagementFrameworkID` is: `"gid://gitlab/ComplianceManagement::Framework/1"`. +""" +scalar ComplianceManagementFrameworkID + +"""Composer metadata""" +type ComposerMetadata { + """Data of the Composer JSON file.""" + composerJson: PackageComposerJsonType! + + """Target SHA of the package.""" + targetSha: String! +} + +"""Conan file metadata""" +type ConanFileMetadata implements PackageFileMetadata { + """Type of the Conan file.""" + conanFileType: ConanMetadatumFileTypeEnum! + + """Reference of the Conan package.""" + conanPackageReference: String + + """Date of creation.""" + createdAt: Time! + + """ID of the metadatum.""" + id: PackagesConanFileMetadatumID! + + """Revision of the package.""" + packageRevision: String + + """Revision of the Conan recipe.""" + recipeRevision: String! + + """Date of most recent update.""" + updatedAt: Time! +} + +"""Conan metadata""" +type ConanMetadata { + """Date of creation.""" + createdAt: Time! + + """ID of the metadatum.""" + id: PackagesConanMetadatumID! + + """Channel of the Conan package.""" + packageChannel: String! + + """Username of the Conan package.""" + packageUsername: String! + + """Recipe of the Conan package.""" + recipe: String! + + """Recipe path of the Conan package.""" + recipePath: String! + + """Date of most recent update.""" + updatedAt: Time! +} + +"""Conan file types""" +enum ConanMetadatumFileTypeEnum { + """A recipe file type.""" + RECIPE_FILE + + """A package file type.""" + PACKAGE_FILE +} + +"""Autogenerated input type of ConfigureDependencyScanning""" +input ConfigureDependencyScanningInput { + """Full path of the project.""" + projectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ConfigureDependencyScanning""" +type ConfigureDependencyScanningPayload { + """Branch that has the new/modified `.gitlab-ci.yml` file.""" + branch: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Redirect path to use when the response is successful.""" + successPath: String +} + +"""Autogenerated input type of ConfigureSast""" +input ConfigureSastInput { + """Full path of the project.""" + projectPath: ID! + + """SAST CI configuration for the project.""" + configuration: SastCiConfigurationInput! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ConfigureSast""" +type ConfigureSastPayload { + """Branch that has the new/modified `.gitlab-ci.yml` file.""" + branch: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Redirect path to use when the response is successful.""" + successPath: String +} + +"""Autogenerated input type of ConfigureSecretDetection""" +input ConfigureSecretDetectionInput { + """Full path of the project.""" + projectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ConfigureSecretDetection""" +type ConfigureSecretDetectionPayload { + """Branch that has the new/modified `.gitlab-ci.yml` file.""" + branch: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Redirect path to use when the response is successful.""" + successPath: String +} + +"""Connection details for an Agent""" +type ConnectedAgent { + """When the connection was established.""" + connectedAt: Time + + """ID of the connection.""" + connectionId: BigInt + + """Information about the Agent.""" + metadata: AgentMetadata +} + +"""The connection type for ConnectedAgent.""" +type ConnectedAgentConnection { + """A list of edges.""" + edges: [ConnectedAgentEdge] + + """A list of nodes.""" + nodes: [ConnectedAgent] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ConnectedAgentEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ConnectedAgent +} + +""" +A tag expiration policy designed to keep only the images that matter most +""" +type ContainerExpirationPolicy { + """This container expiration policy schedule.""" + cadence: ContainerExpirationPolicyCadenceEnum! + + """Timestamp of when the container expiration policy was created.""" + createdAt: Time! + + """Indicates whether this container expiration policy is enabled.""" + enabled: Boolean! + + """Number of tags to retain.""" + keepN: ContainerExpirationPolicyKeepEnum + + """Tags with names matching this regex pattern will expire.""" + nameRegex: UntrustedRegexp + + """Tags with names matching this regex pattern will be preserved.""" + nameRegexKeep: UntrustedRegexp + + """Next time that this container expiration policy will get executed.""" + nextRunAt: Time + + """Tags older that this will expire.""" + olderThan: ContainerExpirationPolicyOlderThanEnum + + """Timestamp of when the container expiration policy was updated.""" + updatedAt: Time! +} + +enum ContainerExpirationPolicyCadenceEnum { + """Every day""" + EVERY_DAY + + """Every week""" + EVERY_WEEK + + """Every two weeks""" + EVERY_TWO_WEEKS + + """Every month""" + EVERY_MONTH + + """Every three months""" + EVERY_THREE_MONTHS +} + +enum ContainerExpirationPolicyKeepEnum { + """1 tag per image name""" + ONE_TAG + + """5 tags per image name""" + FIVE_TAGS + + """10 tags per image name""" + TEN_TAGS + + """25 tags per image name""" + TWENTY_FIVE_TAGS + + """50 tags per image name""" + FIFTY_TAGS + + """100 tags per image name""" + ONE_HUNDRED_TAGS +} + +enum ContainerExpirationPolicyOlderThanEnum { + """7 days until tags are automatically removed""" + SEVEN_DAYS + + """14 days until tags are automatically removed""" + FOURTEEN_DAYS + + """30 days until tags are automatically removed""" + THIRTY_DAYS + + """60 days until tags are automatically removed""" + SIXTY_DAYS + + """90 days until tags are automatically removed""" + NINETY_DAYS +} + +"""A container repository""" +type ContainerRepository { + """Can the current user delete the container repository.""" + canDelete: Boolean! + + """Timestamp when the container repository was created.""" + createdAt: Time! + + """Tags cleanup status for the container repository.""" + expirationPolicyCleanupStatus: ContainerRepositoryCleanupStatus + + """ + Timestamp when the cleanup done by the expiration policy was started on the container repository. + """ + expirationPolicyStartedAt: Time + + """ID of the container repository.""" + id: ID! + + """URL of the container repository.""" + location: String! + + """Name of the container repository.""" + name: String! + + """Path of the container repository.""" + path: String! + + """Project of the container registry.""" + project: Project! + + """Status of the container repository.""" + status: ContainerRepositoryStatus + + """Number of tags associated with this image.""" + tagsCount: Int! + + """Timestamp when the container repository was updated.""" + updatedAt: Time! +} + +"""Status of the tags cleanup of a container repository""" +enum ContainerRepositoryCleanupStatus { + """Tags cleanup is not scheduled. This is the default state.""" + UNSCHEDULED + + """Tags cleanup is scheduled and is going to be executed shortly.""" + SCHEDULED + + """ + Tags cleanup has been partially executed. There are still remaining tags to delete. + """ + UNFINISHED + + """Tags cleanup is ongoing.""" + ONGOING +} + +"""The connection type for ContainerRepository.""" +type ContainerRepositoryConnection { + """A list of edges.""" + edges: [ContainerRepositoryEdge] + + """A list of nodes.""" + nodes: [ContainerRepository] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Details of a container repository""" +type ContainerRepositoryDetails { + """Can the current user delete the container repository.""" + canDelete: Boolean! + + """Timestamp when the container repository was created.""" + createdAt: Time! + + """Tags cleanup status for the container repository.""" + expirationPolicyCleanupStatus: ContainerRepositoryCleanupStatus + + """ + Timestamp when the cleanup done by the expiration policy was started on the container repository. + """ + expirationPolicyStartedAt: Time + + """ID of the container repository.""" + id: ID! + + """URL of the container repository.""" + location: String! + + """Name of the container repository.""" + name: String! + + """Path of the container repository.""" + path: String! + + """Project of the container registry.""" + project: Project! + + """Status of the container repository.""" + status: ContainerRepositoryStatus + + """Tags of the container repository.""" + tags( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ContainerRepositoryTagConnection + + """Number of tags associated with this image.""" + tagsCount: Int! + + """Timestamp when the container repository was updated.""" + updatedAt: Time! +} + +"""An edge in a connection.""" +type ContainerRepositoryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ContainerRepository +} + +""" +A `ContainerRepositoryID` is a global ID. It is encoded as a string. + +An example `ContainerRepositoryID` is: `"gid://gitlab/ContainerRepository/1"`. +""" +scalar ContainerRepositoryID + +"""Values for sorting container repositories""" +enum ContainerRepositorySort { + """Updated at descending order.""" + updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.") + + """Updated at ascending order.""" + updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.") + + """Created at descending order.""" + created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.") + + """Created at ascending order.""" + created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.") + + """Updated at descending order.""" + UPDATED_DESC + + """Updated at ascending order.""" + UPDATED_ASC + + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC + + """Name by ascending order.""" + NAME_ASC + + """Name by descending order.""" + NAME_DESC +} + +"""Status of a container repository""" +enum ContainerRepositoryStatus { + """Delete Scheduled status.""" + DELETE_SCHEDULED + + """Delete Failed status.""" + DELETE_FAILED +} + +"""A tag from a container repository""" +type ContainerRepositoryTag { + """Can the current user delete this tag.""" + canDelete: Boolean! + + """Timestamp when the tag was created.""" + createdAt: Time + + """Digest of the tag.""" + digest: String + + """URL of the tag.""" + location: String! + + """Name of the tag.""" + name: String! + + """Path of the tag.""" + path: String! + + """Revision of the tag.""" + revision: String + + """Short revision of the tag.""" + shortRevision: String + + """Size of the tag.""" + totalSize: BigInt +} + +"""The connection type for ContainerRepositoryTag.""" +type ContainerRepositoryTagConnection { + """A list of edges.""" + edges: [ContainerRepositoryTagEdge] + + """A list of nodes.""" + nodes: [ContainerRepositoryTag] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ContainerRepositoryTagEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ContainerRepositoryTag +} + +"""Autogenerated input type of CreateAlertIssue""" +input CreateAlertIssueInput { + """Project the alert to mutate is in.""" + projectPath: ID! + + """IID of the alert to mutate.""" + iid: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateAlertIssue""" +type CreateAlertIssuePayload { + """Alert after mutation.""" + alert: AlertManagementAlert + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue created after mutation.""" + issue: Issue + + """To-do item after mutation.""" + todo: Todo +} + +"""Autogenerated input type of CreateAnnotation""" +input CreateAnnotationInput { + """Global ID of the environment to add an annotation to.""" + environmentId: EnvironmentID + + """Global ID of the cluster to add an annotation to.""" + clusterId: ClustersClusterID + + """Timestamp indicating starting moment to which the annotation relates.""" + startingAt: Time! + + """Timestamp indicating ending moment to which the annotation relates.""" + endingAt: Time + + """ + Path to a file defining the dashboard on which the annotation should be added. + """ + dashboardPath: String! + + """Description of the annotation.""" + description: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateAnnotation""" +type CreateAnnotationPayload { + """Created annotation.""" + annotation: MetricsDashboardAnnotation + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CreateBoard""" +input CreateBoardInput { + """Full path of the project with which the resource is associated.""" + projectPath: ID + + """Full path of the group with which the resource is associated.""" + groupPath: ID + + """Board name.""" + name: String + + """Whether or not backlog list is hidden.""" + hideBacklogList: Boolean + + """Whether or not closed list is hidden.""" + hideClosedList: Boolean + + """ID of user to be assigned to the board.""" + assigneeId: UserID + + """ID of milestone to be assigned to the board.""" + milestoneId: MilestoneID + + """ID of iteration to be assigned to the board.""" + iterationId: IterationID + + """ID of iteration cadence to be assigned to the board.""" + iterationCadenceId: IterationsCadenceID + + """Weight value to be assigned to the board.""" + weight: Int + + """Labels of the issue.""" + labels: [String!] + + """IDs of labels to be added to the board.""" + labelIds: [LabelID!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateBoard""" +type CreateBoardPayload { + """Board after mutation.""" + board: Board + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CreateBranch""" +input CreateBranchInput { + """Project full path the branch is associated with.""" + projectPath: ID! + + """Name of the branch.""" + name: String! + + """Branch name or commit SHA to create branch from.""" + ref: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateBranch""" +type CreateBranchPayload { + """Branch after mutation.""" + branch: Branch + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CreateClusterAgent""" +input CreateClusterAgentInput { + """Full path of the associated project for this cluster agent.""" + projectPath: ID! + + """Name of the cluster agent.""" + name: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateClusterAgent""" +type CreateClusterAgentPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Cluster agent created after mutation.""" + clusterAgent: ClusterAgent + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CreateComplianceFramework""" +input CreateComplianceFrameworkInput { + """Full path of the namespace to add the compliance framework to.""" + namespacePath: ID! + + """Parameters to update the compliance framework with.""" + params: ComplianceFrameworkInput! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateComplianceFramework""" +type CreateComplianceFrameworkPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Created compliance framework.""" + framework: ComplianceFramework +} + +"""Autogenerated input type of CreateCustomEmoji""" +input CreateCustomEmojiInput { + """Namespace full path the emoji is associated with.""" + groupPath: ID! + + """Name of the emoji.""" + name: String! + + """Location of the emoji file.""" + url: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateCustomEmoji""" +type CreateCustomEmojiPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """New custom emoji.""" + customEmoji: CustomEmoji + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CreateDiffNote""" +input CreateDiffNoteInput { + """Global ID of the resource to add a note to.""" + noteableId: NoteableID! + + """Content of the note.""" + body: String! + + """Confidentiality flag of a note. Default is false.""" + confidential: Boolean + + """Position of this note on a diff.""" + position: DiffPositionInput! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateDiffNote""" +type CreateDiffNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +"""Autogenerated input type of CreateEpic""" +input CreateEpicInput { + """Group the epic to mutate is in.""" + groupPath: ID! + + """Title of the epic.""" + title: String + + """Description of the epic.""" + description: String + + """Indicates if the epic is confidential.""" + confidential: Boolean + + """Start date of the epic.""" + startDateFixed: String + + """End date of the epic.""" + dueDateFixed: String + + """ + Indicates start date should be sourced from start_date_fixed field not the issue milestones. + """ + startDateIsFixed: Boolean + + """ + Indicates end date should be sourced from due_date_fixed field not the issue milestones. + """ + dueDateIsFixed: Boolean + + """IDs of labels to be added to the epic.""" + addLabelIds: [ID!] + + """IDs of labels to be removed from the epic.""" + removeLabelIds: [ID!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateEpic""" +type CreateEpicPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Created epic.""" + epic: Epic + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of CreateImageDiffNote""" +input CreateImageDiffNoteInput { + """Global ID of the resource to add a note to.""" + noteableId: NoteableID! + + """Content of the note.""" + body: String! + + """Confidentiality flag of a note. Default is false.""" + confidential: Boolean + + """Position of this note on a diff.""" + position: DiffImagePositionInput! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateImageDiffNote""" +type CreateImageDiffNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +"""Autogenerated input type of CreateIssue""" +input CreateIssueInput { + """Description of the issue.""" + description: String + + """Due date of the issue.""" + dueDate: ISO8601Date + + """Indicates the issue is confidential.""" + confidential: Boolean + + """Indicates discussion is locked on the issue.""" + locked: Boolean + + """Type of the issue.""" + type: IssueType + + """Project full path the issue is associated with.""" + projectPath: ID! + + """ + IID (internal ID) of a project issue. Only admins and project owners can modify. + """ + iid: Int + + """Title of the issue.""" + title: String! + + """ + ID of the milestone to assign to the issue. On update milestone will be removed if set to null. + """ + milestoneId: MilestoneID + + """Labels of the issue.""" + labels: [String!] + + """IDs of labels to be added to the issue.""" + labelIds: [LabelID!] + + """ + Timestamp when the issue was created. Available only for admins and project owners. + """ + createdAt: Time + + """IID of a merge request for which to resolve discussions.""" + mergeRequestToResolveDiscussionsOf: MergeRequestID + + """ + ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`. + """ + discussionToResolve: String + + """Array of user IDs to assign to the issue.""" + assigneeIds: [UserID!] + + """Desired health status.""" + healthStatus: HealthStatus + + """Weight of the issue.""" + weight: Int + + """ID of an epic to associate the issue with.""" + epicId: EpicID + + """ + Global iteration ID. Mutually exlusive argument with `iterationWildcardId`. + """ + iterationId: IterationID + + """ + Iteration wildcard ID. Supported values are: `CURRENT`. Mutually exclusive + argument with `iterationId`. iterationCadenceId also required when this + argument is provided. + """ + iterationWildcardId: IssueCreationIterationWildcardId + + """ + Global iteration cadence ID. Required when `iterationWildcardId` is provided. + """ + iterationCadenceId: IterationsCadenceID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateIssue""" +type CreateIssuePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of CreateIteration""" +input CreateIterationInput { + """Full path of the project with which the resource is associated.""" + projectPath: ID + + """Full path of the group with which the resource is associated.""" + groupPath: ID + + """ + Global ID of the iterations cadence to be assigned to newly created iteration. + """ + iterationsCadenceId: IterationsCadenceID + + """Title of the iteration.""" + title: String + + """Description of the iteration.""" + description: String + + """Start date of the iteration.""" + startDate: String + + """End date of the iteration.""" + dueDate: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateIteration""" +type CreateIterationPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Created iteration.""" + iteration: Iteration +} + +"""Autogenerated input type of CreateNote""" +input CreateNoteInput { + """Global ID of the resource to add a note to.""" + noteableId: NoteableID! + + """Content of the note.""" + body: String! + + """Confidentiality flag of a note. Default is false.""" + confidential: Boolean + + """Global ID of the discussion this note is in reply to.""" + discussionId: DiscussionID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateNote""" +type CreateNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +"""Autogenerated input type of CreateRequirement""" +input CreateRequirementInput { + """Title of the requirement.""" + title: String + + """Description of the requirement.""" + description: String + + """Full project path the requirement is associated with.""" + projectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateRequirement""" +type CreateRequirementPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Requirement after mutation.""" + requirement: Requirement +} + +"""Autogenerated input type of CreateSnippet""" +input CreateSnippetInput { + """Title of the snippet.""" + title: String! + + """Description of the snippet.""" + description: String + + """Visibility level of the snippet.""" + visibilityLevel: VisibilityLevelsEnum! + + """Full path of the project the snippet is associated with.""" + projectPath: ID + + """Paths to files uploaded in the snippet description.""" + uploadedFiles: [String!] + + """Actions to perform over the snippet repository and blobs.""" + blobActions: [SnippetBlobActionInputType!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateSnippet""" +type CreateSnippetPayload { + """ + CAPTCHA site key which must be used to render a challenge for the user to + solve to obtain a valid captchaResponse value. Included only when an operation + was not completed because "NeedsCaptchaResponse" is true. Deprecated in 13.11: + Use spam protection with HTTP headers instead. + """ + captchaSiteKey: String @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + Indicates whether the operation was detected as possible spam and not + completed. If CAPTCHA is enabled, the request must be resubmitted with a valid + CAPTCHA response and spam_log_id included for the operation to be completed. + Included only when an operation was not completed because + "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam protection with + HTTP headers instead. + """ + needsCaptchaResponse: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") + + """Snippet after mutation.""" + snippet: Snippet + + """ + Indicates whether the operation was detected as definite spam. There is no + option to resubmit the request with a CAPTCHA response. Deprecated in 13.11: + Use spam protection with HTTP headers instead. + """ + spam: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") + + """ + Spam log ID which must be passed along with a valid CAPTCHA response for an + operation to be completed. Included only when an operation was not completed + because "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam + protection with HTTP headers instead. + """ + spamLogId: Int @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") +} + +"""Autogenerated input type of CreateTestCase""" +input CreateTestCaseInput { + """Test case title.""" + title: String! + + """Test case description.""" + description: String + + """IDs of labels to be added to the test case.""" + labelIds: [ID!] + + """Project full path to create the test case in.""" + projectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CreateTestCase""" +type CreateTestCasePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Test case created.""" + testCase: Issue +} + +"""Represents the current license""" +type CurrentLicense { + """Date when the license was activated.""" + activatedAt: Date + + """Number of billable users on the system.""" + billableUsersCount: Int + + """Date, including grace period, when licensed features will be blocked.""" + blockChangesAt: Date + + """Company of the licensee.""" + company: String + + """Email of the licensee.""" + email: String + + """Date when the license expires.""" + expiresAt: Date + + """ID of the license.""" + id: ID! + + """Date when the license was last synced.""" + lastSync: Time + + """ + Highest number of billable users on the system during the term of the current license. + """ + maximumUserCount: Int + + """Name of the licensee.""" + name: String + + """Name of the subscription plan.""" + plan: String! + + """Date when the license started.""" + startsAt: Date + + """Type of the license.""" + type: String! + + """Number of paid users in the license.""" + usersInLicenseCount: Int + + """Number of users over the paid users in the license.""" + usersOverLicenseCount: Int +} + +interface CurrentUserTodos { + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! +} + +"""A custom emoji uploaded by user""" +type CustomEmoji { + """Whether the emoji is an external link.""" + external: Boolean! + + """ID of the emoji.""" + id: CustomEmojiID! + + """Name of the emoji.""" + name: String! + + """Link to file of the emoji.""" + url: String! +} + +"""The connection type for CustomEmoji.""" +type CustomEmojiConnection { + """A list of edges.""" + edges: [CustomEmojiEdge] + + """A list of nodes.""" + nodes: [CustomEmoji] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type CustomEmojiEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CustomEmoji +} + +""" +A `CustomEmojiID` is a global ID. It is encoded as a string. + +An example `CustomEmojiID` is: `"gid://gitlab/CustomEmoji/1"`. +""" +scalar CustomEmojiID + +type CustomerRelationsContact { + """Timestamp the contact was created.""" + createdAt: Time! + + """Description of or notes for the contact.""" + description: String + + """Email address of the contact.""" + email: String + + """First name of the contact.""" + firstName: String! + + """Internal ID of the contact.""" + id: ID! + + """Last name of the contact.""" + lastName: String! + + """Organization of the contact.""" + organization: CustomerRelationsOrganization + + """Phone number of the contact.""" + phone: String + + """Timestamp the contact was last updated.""" + updatedAt: Time! +} + +"""The connection type for CustomerRelationsContact.""" +type CustomerRelationsContactConnection { + """A list of edges.""" + edges: [CustomerRelationsContactEdge] + + """A list of nodes.""" + nodes: [CustomerRelationsContact] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of CustomerRelationsContactCreate""" +input CustomerRelationsContactCreateInput { + """Group for the contact.""" + groupId: GroupID! + + """Organization for the contact.""" + organizationId: CustomerRelationsOrganizationID + + """First name of the contact.""" + firstName: String! + + """Last name of the contact.""" + lastName: String! + + """Phone number of the contact.""" + phone: String + + """Email address of the contact.""" + email: String + + """Description of or notes for the contact.""" + description: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CustomerRelationsContactCreate""" +type CustomerRelationsContactCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Contact after the mutation.""" + contact: CustomerRelationsContact + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type CustomerRelationsContactEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CustomerRelationsContact +} + +""" +A `CustomerRelationsContactID` is a global ID. It is encoded as a string. + +An example `CustomerRelationsContactID` is: `"gid://gitlab/CustomerRelations::Contact/1"`. +""" +scalar CustomerRelationsContactID + +"""Autogenerated input type of CustomerRelationsContactUpdate""" +input CustomerRelationsContactUpdateInput { + """Global ID of the contact.""" + id: CustomerRelationsContactID! + + """Organization of the contact.""" + organizationId: CustomerRelationsOrganizationID + + """First name of the contact.""" + firstName: String + + """Last name of the contact.""" + lastName: String + + """Phone number of the contact.""" + phone: String + + """Email address of the contact.""" + email: String + + """Description of or notes for the contact.""" + description: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CustomerRelationsContactUpdate""" +type CustomerRelationsContactUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Contact after the mutation.""" + contact: CustomerRelationsContact + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +type CustomerRelationsOrganization { + """Timestamp the organization was created.""" + createdAt: Time! + + """Standard billing rate for the organization.""" + defaultRate: Float + + """Description of or notes for the organization.""" + description: String + + """Internal ID of the organization.""" + id: ID! + + """Name of the organization.""" + name: String! + + """Timestamp the organization was last updated.""" + updatedAt: Time! +} + +"""The connection type for CustomerRelationsOrganization.""" +type CustomerRelationsOrganizationConnection { + """A list of edges.""" + edges: [CustomerRelationsOrganizationEdge] + + """A list of nodes.""" + nodes: [CustomerRelationsOrganization] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of CustomerRelationsOrganizationCreate""" +input CustomerRelationsOrganizationCreateInput { + """Group for the organization.""" + groupId: GroupID! + + """Name of the organization.""" + name: String! + + """Standard billing rate for the organization.""" + defaultRate: Float + + """Description of or notes for the organization.""" + description: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CustomerRelationsOrganizationCreate""" +type CustomerRelationsOrganizationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Organization after the mutation.""" + organization: CustomerRelationsOrganization +} + +"""An edge in a connection.""" +type CustomerRelationsOrganizationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: CustomerRelationsOrganization +} + +""" +A `CustomerRelationsOrganizationID` is a global ID. It is encoded as a string. + +An example `CustomerRelationsOrganizationID` is: `"gid://gitlab/CustomerRelations::Organization/1"`. +""" +scalar CustomerRelationsOrganizationID + +"""Autogenerated input type of CustomerRelationsOrganizationUpdate""" +input CustomerRelationsOrganizationUpdateInput { + """Global ID of the organization.""" + id: CustomerRelationsOrganizationID! + + """Name of the organization.""" + name: String + + """Standard billing rate for the organization.""" + defaultRate: Float + + """Description of or notes for the organization.""" + description: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of CustomerRelationsOrganizationUpdate""" +type CustomerRelationsOrganizationUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Organization after the mutation.""" + organization: CustomerRelationsOrganization! +} + +"""Autogenerated input type of DastOnDemandScanCreate""" +input DastOnDemandScanCreateInput { + """Project the site profile belongs to.""" + fullPath: ID! + + """ID of the site profile to be used for the scan.""" + dastSiteProfileId: DastSiteProfileID! + + """ID of the scanner profile to be used for the scan.""" + dastScannerProfileId: DastScannerProfileID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastOnDemandScanCreate""" +type DastOnDemandScanCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """URL of the pipeline that was created.""" + pipelineUrl: String +} + +"""Represents a DAST Profile""" +type DastProfile { + """Associated branch.""" + branch: DastProfileBranch + + """Associated profile schedule.""" + dastProfileSchedule: DastProfileSchedule + + """Associated scanner profile.""" + dastScannerProfile: DastScannerProfile + + """Associated site profile.""" + dastSiteProfile: DastSiteProfile + + """Description of the scan.""" + description: String + + """Relative web path to the edit page of a profile.""" + editPath: String + + """ID of the profile.""" + id: DastProfileID! + + """Name of the profile.""" + name: String +} + +"""Represents a DAST Profile Branch""" +type DastProfileBranch { + """Indicates whether or not the branch exists.""" + exists: Boolean + + """Name of the branch.""" + name: String +} + +"""Represents DAST Profile Cadence.""" +type DastProfileCadence { + """Duration of the DAST profile cadence.""" + duration: Int + + """Unit for the duration of DAST profile cadence.""" + unit: DastProfileCadenceUnit +} + +"""Represents DAST Profile Cadence.""" +input DastProfileCadenceInput { + """Unit for the duration of DAST Profile Cadence.""" + unit: DastProfileCadenceUnit + + """Duration of the DAST Profile Cadence.""" + duration: Int +} + +"""Unit for the duration of Dast Profile Cadence.""" +enum DastProfileCadenceUnit { + """DAST Profile Cadence duration in days.""" + DAY + + """DAST Profile Cadence duration in weeks.""" + WEEK + + """DAST Profile Cadence duration in months.""" + MONTH + + """DAST Profile Cadence duration in years.""" + YEAR +} + +"""The connection type for DastProfile.""" +type DastProfileConnection { + """A list of edges.""" + edges: [DastProfileEdge] + + """A list of nodes.""" + nodes: [DastProfile] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of DastProfileCreate""" +input DastProfileCreateInput { + """Project the profile belongs to.""" + fullPath: ID! + + """Represents a DAST Profile Schedule.""" + dastProfileSchedule: DastProfileScheduleInput + + """Name of the profile.""" + name: String! + + """Description of the profile. Defaults to an empty string.""" + description: String = "" + + """Associated branch.""" + branchName: String + + """ID of the site profile to be associated.""" + dastSiteProfileId: DastSiteProfileID! + + """ID of the scanner profile to be associated.""" + dastScannerProfileId: DastScannerProfileID! + + """Run scan using profile after creation. Defaults to false.""" + runAfterCreate: Boolean = false + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastProfileCreate""" +type DastProfileCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Created profile.""" + dastProfile: DastProfile + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + URL of the pipeline that was created. Requires `runAfterCreate` to be set to `true`. + """ + pipelineUrl: String +} + +"""Autogenerated input type of DastProfileDelete""" +input DastProfileDeleteInput { + """ID of the profile to be deleted.""" + id: DastProfileID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastProfileDelete""" +type DastProfileDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type DastProfileEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DastProfile +} + +""" +A `DastProfileID` is a global ID. It is encoded as a string. + +An example `DastProfileID` is: `"gid://gitlab/Dast::Profile/1"`. +""" +scalar DastProfileID + +"""Autogenerated input type of DastProfileRun""" +input DastProfileRunInput { + """ID of the profile to be used for the scan.""" + id: DastProfileID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastProfileRun""" +type DastProfileRunPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """URL of the pipeline that was created.""" + pipelineUrl: String +} + +"""Represents a DAST profile schedule.""" +type DastProfileSchedule { + """Status of the DAST profile schedule.""" + active: Boolean + + """Cadence of the DAST profile schedule.""" + cadence: DastProfileCadence + + """ID of the DAST profile schedule.""" + id: DastProfileScheduleID! + + """Next run time of the DAST profile schedule in the given timezone.""" + nextRunAt: Time + + """Start time of the DAST profile schedule in the given timezone.""" + startsAt: Time + + """Time zone of the start time of the DAST profile schedule.""" + timezone: String +} + +""" +A `DastProfileScheduleID` is a global ID. It is encoded as a string. + +An example `DastProfileScheduleID` is: `"gid://gitlab/Dast::ProfileSchedule/1"`. +""" +scalar DastProfileScheduleID + +"""Input type for DAST Profile Schedules""" +input DastProfileScheduleInput { + """Status of a Dast Profile Schedule.""" + active: Boolean + + """Start time of a Dast Profile Schedule.""" + startsAt: Time + + """Time Zone for the Start time of a Dast Profile Schedule.""" + timezone: String + + """Cadence of a Dast Profile Schedule.""" + cadence: DastProfileCadenceInput +} + +"""Autogenerated input type of DastProfileUpdate""" +input DastProfileUpdateInput { + """ID of the profile to be deleted.""" + id: DastProfileID! + + """Represents a DAST profile schedule.""" + dastProfileSchedule: DastProfileScheduleInput + + """Name of the profile.""" + name: String + + """Description of the profile. Defaults to an empty string.""" + description: String = "" + + """Associated branch.""" + branchName: String + + """ID of the site profile to be associated.""" + dastSiteProfileId: DastSiteProfileID + + """ID of the scanner profile to be associated.""" + dastScannerProfileId: DastScannerProfileID + + """Run scan using profile after update. Defaults to false.""" + runAfterUpdate: Boolean = false + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastProfileUpdate""" +type DastProfileUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Updated profile.""" + dastProfile: DastProfile + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + The URL of the pipeline that was created. Requires the input argument + `runAfterUpdate` to be set to `true` when calling the mutation, otherwise no + pipeline will be created. + """ + pipelineUrl: String +} + +"""Represents a DAST scanner profile""" +type DastScannerProfile { + """Relative web path to the edit page of a scanner profile.""" + editPath: String + + """ID of the DAST scanner profile.""" + id: DastScannerProfileID! + + """Name of the DAST scanner profile.""" + profileName: String + + """List of security policy names that are referencing given project.""" + referencedInSecurityPolicies: [String!] + + """ + Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan. + """ + scanType: DastScanTypeEnum + + """ + Indicates if debug messages should be included in DAST console output. True to include the debug messages. + """ + showDebugMessages: Boolean! + + """Maximum number of minutes allowed for the spider to traverse the site.""" + spiderTimeout: Int + + """ + Maximum number of seconds allowed for the site under test to respond to a request. + """ + targetTimeout: Int + + """ + Indicates if the AJAX spider should be used to crawl the target site. True to + run the AJAX spider in addition to the traditional spider, and false to run + only the traditional spider. + """ + useAjaxSpider: Boolean! +} + +"""The connection type for DastScannerProfile.""" +type DastScannerProfileConnection { + """A list of edges.""" + edges: [DastScannerProfileEdge] + + """A list of nodes.""" + nodes: [DastScannerProfile] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of DastScannerProfileCreate""" +input DastScannerProfileCreateInput { + """Project the scanner profile belongs to.""" + fullPath: ID! + + """Name of the scanner profile.""" + profileName: String! + + """Maximum number of minutes allowed for the spider to traverse the site.""" + spiderTimeout: Int + + """ + Maximum number of seconds allowed for the site under test to respond to a request. + """ + targetTimeout: Int + + """ + Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan. + """ + scanType: DastScanTypeEnum = PASSIVE + + """ + Indicates if the AJAX spider should be used to crawl the target site. True to + run the AJAX spider in addition to the traditional spider, and false to run + only the traditional spider. + """ + useAjaxSpider: Boolean = false + + """ + Indicates if debug messages should be included in DAST console output. True to include the debug messages. + """ + showDebugMessages: Boolean = false + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastScannerProfileCreate""" +type DastScannerProfileCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ID of the scanner profile.""" + id: DastScannerProfileID +} + +"""Autogenerated input type of DastScannerProfileDelete""" +input DastScannerProfileDeleteInput { + """ID of the scanner profile to be deleted.""" + id: DastScannerProfileID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastScannerProfileDelete""" +type DastScannerProfileDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type DastScannerProfileEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DastScannerProfile +} + +""" +A `DastScannerProfileID` is a global ID. It is encoded as a string. + +An example `DastScannerProfileID` is: `"gid://gitlab/DastScannerProfile/1"`. +""" +scalar DastScannerProfileID + +"""Autogenerated input type of DastScannerProfileUpdate""" +input DastScannerProfileUpdateInput { + """ID of the scanner profile to be updated.""" + id: DastScannerProfileID! + + """Name of the scanner profile.""" + profileName: String! + + """Maximum number of minutes allowed for the spider to traverse the site.""" + spiderTimeout: Int! + + """ + Maximum number of seconds allowed for the site under test to respond to a request. + """ + targetTimeout: Int! + + """ + Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan. + """ + scanType: DastScanTypeEnum + + """ + Indicates if the AJAX spider should be used to crawl the target site. True to + run the AJAX spider in addition to the traditional spider, and false to run + only the traditional spider. + """ + useAjaxSpider: Boolean + + """ + Indicates if debug messages should be included in DAST console output. True to include the debug messages. + """ + showDebugMessages: Boolean + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastScannerProfileUpdate""" +type DastScannerProfileUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ID of the scanner profile.""" + id: DastScannerProfileID +} + +enum DastScanTypeEnum { + """ + Passive DAST scan. This scan will not make active attacks against the target site. + """ + PASSIVE + + """ + Active DAST scan. This scan will make active attacks against the target site. + """ + ACTIVE +} + +"""Represents a DAST Site Profile""" +type DastSiteProfile { + """Target authentication details.""" + auth: DastSiteProfileAuth + + """Relative web path to the edit page of a site profile.""" + editPath: String + + """URLs to skip during an authenticated scan.""" + excludedUrls: [String!] + + """ID of the site profile.""" + id: DastSiteProfileID! + + """Normalized URL of the target to be scanned.""" + normalizedTargetUrl: String + + """Name of the site profile.""" + profileName: String + + """List of security policy names that are referencing given project.""" + referencedInSecurityPolicies: [String!] + + """ + Comma-separated list of request header names and values to be added to every request made by DAST. + """ + requestHeaders: String + + """Type of target to be scanned.""" + targetType: DastTargetTypeEnum + + """URL of the target to be scanned.""" + targetUrl: String + + """Permissions for the current user on the resource""" + userPermissions: DastSiteProfilePermissions! + + """Current validation status of the site profile.""" + validationStatus: DastSiteProfileValidationStatusEnum +} + +"""Input type for DastSiteProfile authentication""" +type DastSiteProfileAuth { + """Indicates whether authentication is enabled.""" + enabled: Boolean + + """Redacted password to authenticate with on the target website.""" + password: String + + """Name of password field at the sign-in HTML form.""" + passwordField: String + + """ + The URL of the page containing the sign-in HTML form on the target website. + """ + url: String + + """Username to authenticate with on the target website.""" + username: String + + """Name of username field at the sign-in HTML form.""" + usernameField: String +} + +"""Input type for DastSiteProfile authentication""" +input DastSiteProfileAuthInput { + """Indicates whether authentication is enabled.""" + enabled: Boolean + + """ + The URL of the page containing the sign-in HTML form on the target website. + """ + url: String + + """Name of username field at the sign-in HTML form.""" + usernameField: String + + """Name of password field at the sign-in HTML form.""" + passwordField: String + + """Username to authenticate with on the target website.""" + username: String + + """Password to authenticate with on the target website.""" + password: String +} + +"""The connection type for DastSiteProfile.""" +type DastSiteProfileConnection { + """A list of edges.""" + edges: [DastSiteProfileEdge] + + """A list of nodes.""" + nodes: [DastSiteProfile] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of DastSiteProfileCreate""" +input DastSiteProfileCreateInput { + """Name of the site profile.""" + profileName: String! + + """URL of the target to be scanned.""" + targetUrl: String + + """Type of target to be scanned.""" + targetType: DastTargetTypeEnum + + """ + Comma-separated list of request header names and values to be added to every request made by DAST. + """ + requestHeaders: String + + """Parameters for authentication.""" + auth: DastSiteProfileAuthInput + + """Project the site profile belongs to.""" + fullPath: ID! + + """URLs to skip during an authenticated scan. Defaults to `[]`.""" + excludedUrls: [String!] = [] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastSiteProfileCreate""" +type DastSiteProfileCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ID of the site profile.""" + id: DastSiteProfileID +} + +"""Autogenerated input type of DastSiteProfileDelete""" +input DastSiteProfileDeleteInput { + """ID of the site profile to be deleted.""" + id: DastSiteProfileID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastSiteProfileDelete""" +type DastSiteProfileDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type DastSiteProfileEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DastSiteProfile +} + +""" +A `DastSiteProfileID` is a global ID. It is encoded as a string. + +An example `DastSiteProfileID` is: `"gid://gitlab/DastSiteProfile/1"`. +""" +scalar DastSiteProfileID + +"""Check permissions for the current user on site profile""" +type DastSiteProfilePermissions { + """ + Indicates the user can perform `create_on_demand_dast_scan` on this resource + """ + createOnDemandDastScan: Boolean! +} + +"""Autogenerated input type of DastSiteProfileUpdate""" +input DastSiteProfileUpdateInput { + """Name of the site profile.""" + profileName: String! + + """URL of the target to be scanned.""" + targetUrl: String + + """Type of target to be scanned.""" + targetType: DastTargetTypeEnum + + """ + Comma-separated list of request header names and values to be added to every request made by DAST. + """ + requestHeaders: String + + """Parameters for authentication.""" + auth: DastSiteProfileAuthInput + + """ID of the site profile to be updated.""" + id: DastSiteProfileID! + + """URLs to skip during an authenticated scan.""" + excludedUrls: [String!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastSiteProfileUpdate""" +type DastSiteProfileUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ID of the site profile.""" + id: DastSiteProfileID +} + +enum DastSiteProfileValidationStatusEnum { + """No site validation exists.""" + NONE + + """Site validation process has not started.""" + PENDING_VALIDATION + + """Site validation process is in progress.""" + INPROGRESS_VALIDATION + + """Site validation process finished successfully.""" + PASSED_VALIDATION + + """Site validation process finished but failed.""" + FAILED_VALIDATION +} + +"""Autogenerated input type of DastSiteTokenCreate""" +input DastSiteTokenCreateInput { + """Project the site token belongs to.""" + fullPath: ID! + + """URL of the target to be validated.""" + targetUrl: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastSiteTokenCreate""" +type DastSiteTokenCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ID of the site token.""" + id: DastSiteTokenID + + """Current validation status of the target.""" + status: DastSiteProfileValidationStatusEnum + + """Token string.""" + token: String +} + +""" +A `DastSiteTokenID` is a global ID. It is encoded as a string. + +An example `DastSiteTokenID` is: `"gid://gitlab/DastSiteToken/1"`. +""" +scalar DastSiteTokenID + +"""Represents a DAST Site Validation""" +type DastSiteValidation { + """Global ID of the site validation.""" + id: DastSiteValidationID! + + """Normalized URL of the target to be validated.""" + normalizedTargetUrl: String + + """Status of the site validation.""" + status: DastSiteProfileValidationStatusEnum! +} + +"""The connection type for DastSiteValidation.""" +type DastSiteValidationConnection { + """A list of edges.""" + edges: [DastSiteValidationEdge] + + """A list of nodes.""" + nodes: [DastSiteValidation] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of DastSiteValidationCreate""" +input DastSiteValidationCreateInput { + """Project the site profile belongs to.""" + fullPath: ID! + + """ID of the site token.""" + dastSiteTokenId: DastSiteTokenID! + + """Path to be requested during validation.""" + validationPath: String! + + """Validation strategy to be used.""" + strategy: DastSiteValidationStrategyEnum + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastSiteValidationCreate""" +type DastSiteValidationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ID of the site validation.""" + id: DastSiteValidationID + + """Current validation status.""" + status: DastSiteProfileValidationStatusEnum +} + +"""An edge in a connection.""" +type DastSiteValidationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DastSiteValidation +} + +""" +A `DastSiteValidationID` is a global ID. It is encoded as a string. + +An example `DastSiteValidationID` is: `"gid://gitlab/DastSiteValidation/1"`. +""" +scalar DastSiteValidationID + +"""Autogenerated input type of DastSiteValidationRevoke""" +input DastSiteValidationRevokeInput { + """Project the site validation belongs to.""" + fullPath: ID! + + """Normalized URL of the target to be revoked.""" + normalizedTargetUrl: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DastSiteValidationRevoke""" +type DastSiteValidationRevokePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +enum DastSiteValidationStatusEnum { + """Site validation process has not started.""" + PENDING_VALIDATION + + """Site validation process is in progress.""" + INPROGRESS_VALIDATION + + """Site validation process finished successfully.""" + PASSED_VALIDATION + + """Site validation process finished but failed.""" + FAILED_VALIDATION +} + +enum DastSiteValidationStrategyEnum { + """Text file validation.""" + TEXT_FILE + + """Header validation.""" + HEADER + + """Meta tag validation.""" + META_TAG +} + +enum DastTargetTypeEnum { + """Website target.""" + WEBSITE + + """API target.""" + API +} + +"""Color of the data visualization palette""" +enum DataVisualizationColorEnum { + """Blue color""" + BLUE + + """Orange color""" + ORANGE + + """Aqua color""" + AQUA + + """Green color""" + GREEN + + """Magenta color""" + MAGENTA +} + +"""Weight of the data visualization palette""" +enum DataVisualizationWeightEnum { + """50 weight""" + WEIGHT_50 + + """100 weight""" + WEIGHT_100 + + """200 weight""" + WEIGHT_200 + + """300 weight""" + WEIGHT_300 + + """400 weight""" + WEIGHT_400 + + """500 weight""" + WEIGHT_500 + + """600 weight""" + WEIGHT_600 + + """700 weight""" + WEIGHT_700 + + """800 weight""" + WEIGHT_800 + + """900 weight""" + WEIGHT_900 + + """950 weight""" + WEIGHT_950 +} + +"""Date represented in ISO 8601""" +scalar Date + +"""Autogenerated input type of DeleteAnnotation""" +input DeleteAnnotationInput { + """Global ID of the annotation to delete.""" + id: MetricsDashboardAnnotationID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DeleteAnnotation""" +type DeleteAnnotationPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""The response from the AdminSidekiqQueuesDeleteJobs mutation""" +type DeleteJobsResponse { + """ + Whether or not the entire queue was processed in time; if not, retrying the same request is safe. + """ + completed: Boolean + + """Number of matching jobs deleted.""" + deletedJobs: Int + + """Queue size after processing.""" + queueSize: Int +} + +"""Represents metadata associated with a dependency link""" +union DependencyLinkMetadata = NugetDependencyLinkMetadata + +"""Dependency proxy blob""" +type DependencyProxyBlob { + """Date of creation.""" + createdAt: Time! + + """Name of the blob.""" + fileName: String! + + """Size of the blob file.""" + size: String! + + """Date of most recent update.""" + updatedAt: Time! +} + +"""The connection type for DependencyProxyBlob.""" +type DependencyProxyBlobConnection { + """A list of edges.""" + edges: [DependencyProxyBlobEdge] + + """A list of nodes.""" + nodes: [DependencyProxyBlob] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DependencyProxyBlobEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DependencyProxyBlob +} + +"""Group-level Dependency Proxy TTL policy settings""" +type DependencyProxyImageTtlGroupPolicy { + """Timestamp of creation.""" + createdAt: Time + + """Indicates whether the policy is enabled or disabled.""" + enabled: Boolean! + + """Number of days to retain a cached image file.""" + ttl: Int + + """Timestamp of the most recent update.""" + updatedAt: Time +} + +"""Dependency proxy manifest""" +type DependencyProxyManifest { + """Date of creation.""" + createdAt: Time! + + """Digest of the manifest.""" + digest: String! + + """Name of the manifest.""" + fileName: String! + + """Name of the image.""" + imageName: String! + + """Size of the manifest file.""" + size: String! + + """Date of most recent update.""" + updatedAt: Time! +} + +"""The connection type for DependencyProxyManifest.""" +type DependencyProxyManifestConnection { + """A list of edges.""" + edges: [DependencyProxyManifestEdge] + + """A list of nodes.""" + nodes: [DependencyProxyManifest] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DependencyProxyManifestEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DependencyProxyManifest +} + +"""Group-level Dependency Proxy settings""" +type DependencyProxySetting { + """Indicates whether the dependency proxy is enabled for the group.""" + enabled: Boolean! +} + +"""All environment deployment tiers.""" +enum DeploymentTier { + """Production.""" + PRODUCTION + + """Staging.""" + STAGING + + """Testing.""" + TESTING + + """Development.""" + DEVELOPMENT + + """Other.""" + OTHER +} + +"""A single design""" +type Design implements NoteableInterface & DesignFields & CurrentUserTodos { + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! + + """Diff refs for this design.""" + diffRefs: DiffRefs! + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """How this design was changed in the current version.""" + event: DesignVersionEvent! + + """Filename of the design.""" + filename: String! + + """Full path to the design file.""" + fullPath: String! + + """ID of this design.""" + id: ID! + + """URL of the full-sized image.""" + image: String! + + """ + The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated + """ + imageV432x230: String + + """Issue the design belongs to.""" + issue: Issue! + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """Total count of user-created notes for this design.""" + notesCount: Int! + + """Project the design belongs to.""" + project: Project! + + """All versions related to this design ordered newest first.""" + versions( + """SHA256 of the most recent acceptable version.""" + earlierOrEqualToSha: String + + """Global ID of the most recent acceptable version.""" + earlierOrEqualToId: DesignManagementVersionID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DesignVersionConnection! +} + +""" +A design pinned to a specific version. The image field reflects the design as of the associated version +""" +type DesignAtVersion implements DesignFields { + """Underlying design.""" + design: Design! + + """Diff refs for this design.""" + diffRefs: DiffRefs! + + """How this design was changed in the current version.""" + event: DesignVersionEvent! + + """Filename of the design.""" + filename: String! + + """Full path to the design file.""" + fullPath: String! + + """ID of this design.""" + id: ID! + + """URL of the full-sized image.""" + image: String! + + """ + The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated + """ + imageV432x230: String + + """Issue the design belongs to.""" + issue: Issue! + + """Total count of user-created notes for this design.""" + notesCount: Int! + + """Project the design belongs to.""" + project: Project! + + """Version this design-at-versions is pinned to.""" + version: DesignVersion! +} + +"""The connection type for DesignAtVersion.""" +type DesignAtVersionConnection { + """A list of edges.""" + edges: [DesignAtVersionEdge] + + """A list of nodes.""" + nodes: [DesignAtVersion] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DesignAtVersionEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DesignAtVersion +} + +"""A collection of designs""" +type DesignCollection { + """Copy state of the design collection.""" + copyState: DesignCollectionCopyState + + """Find a specific design.""" + design( + """Find a design by its ID.""" + id: DesignManagementDesignID + + """Find a design by its filename.""" + filename: String + ): Design + + """Find a design as of a version.""" + designAtVersion( + """Global ID of the design at this version.""" + id: DesignManagementDesignAtVersionID! + ): DesignAtVersion + + """All designs for the design collection.""" + designs( + """Filters designs by their ID.""" + ids: [DesignManagementDesignID!] + + """Filters designs by their filename.""" + filenames: [String!] + + """ + Filters designs to only those that existed at the version. If argument is + omitted or nil then all designs will reflect the latest version + """ + atVersion: DesignManagementVersionID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DesignConnection! + + """Issue associated with the design collection.""" + issue: Issue! + + """Project associated with the design collection.""" + project: Project! + + """A specific version.""" + version( + """SHA256 of a specific version.""" + sha: String + + """Global ID of the version.""" + id: DesignManagementVersionID + ): DesignVersion + + """All versions related to all designs, ordered newest first.""" + versions( + """SHA256 of the most recent acceptable version.""" + earlierOrEqualToSha: String + + """Global ID of the most recent acceptable version.""" + earlierOrEqualToId: DesignManagementVersionID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DesignVersionConnection! +} + +"""Copy state of a DesignCollection""" +enum DesignCollectionCopyState { + """The DesignCollection has no copy in progress""" + READY + + """The DesignCollection is being copied""" + IN_PROGRESS + + """The DesignCollection encountered an error during a copy""" + ERROR +} + +"""The connection type for Design.""" +type DesignConnection { + """A list of edges.""" + edges: [DesignEdge] + + """A list of nodes.""" + nodes: [Design] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DesignEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Design +} + +interface DesignFields { + """Diff refs for this design.""" + diffRefs: DiffRefs! + + """How this design was changed in the current version.""" + event: DesignVersionEvent! + + """Filename of the design.""" + filename: String! + + """Full path to the design file.""" + fullPath: String! + + """ID of this design.""" + id: ID! + + """URL of the full-sized image.""" + image: String! + + """ + The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated + """ + imageV432x230: String + + """Issue the design belongs to.""" + issue: Issue! + + """Total count of user-created notes for this design.""" + notesCount: Int! + + """Project the design belongs to.""" + project: Project! +} + +type DesignManagement { + """Find a design as of a version.""" + designAtVersion( + """Global ID of the design at this version.""" + id: DesignManagementDesignAtVersionID! + ): DesignAtVersion + + """Find a version.""" + version( + """Global ID of the version.""" + id: DesignManagementVersionID! + ): DesignVersion +} + +"""Autogenerated input type of DesignManagementDelete""" +input DesignManagementDeleteInput { + """Project where the issue is to upload designs for.""" + projectPath: ID! + + """IID of the issue to modify designs for.""" + iid: ID! + + """Filenames of the designs to delete.""" + filenames: [String!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DesignManagementDelete""" +type DesignManagementDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """New version in which the designs are deleted.""" + version: DesignVersion +} + +""" +A `DesignManagementDesignAtVersionID` is a global ID. It is encoded as a string. + +An example `DesignManagementDesignAtVersionID` is: `"gid://gitlab/DesignManagement::DesignAtVersion/1"`. +""" +scalar DesignManagementDesignAtVersionID + +""" +A `DesignManagementDesignID` is a global ID. It is encoded as a string. + +An example `DesignManagementDesignID` is: `"gid://gitlab/DesignManagement::Design/1"`. +""" +scalar DesignManagementDesignID + +"""Autogenerated input type of DesignManagementMove""" +input DesignManagementMoveInput { + """ID of the design to move.""" + id: DesignManagementDesignID! + + """ID of the immediately preceding design.""" + previous: DesignManagementDesignID + + """ID of the immediately following design.""" + next: DesignManagementDesignID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DesignManagementMove""" +type DesignManagementMovePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Current state of the collection.""" + designCollection: DesignCollection + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DesignManagementUpload""" +input DesignManagementUploadInput { + """Project where the issue is to upload designs for.""" + projectPath: ID! + + """IID of the issue to modify designs for.""" + iid: ID! + + """Files to upload.""" + files: [Upload!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DesignManagementUpload""" +type DesignManagementUploadPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Designs that were uploaded by the mutation.""" + designs: [Design!]! + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + Any designs that were skipped from the upload due to there being no change to their content since their last version + """ + skippedDesigns: [Design!]! +} + +""" +A `DesignManagementVersionID` is a global ID. It is encoded as a string. + +An example `DesignManagementVersionID` is: `"gid://gitlab/DesignManagement::Version/1"`. +""" +scalar DesignManagementVersionID + +"""A specific version in which designs were added, modified or deleted""" +type DesignVersion { + """Author of the version.""" + author: UserCore! + + """Timestamp of when the version was created.""" + createdAt: Time! + + """ + A particular design as of this version, provided it is visible at this version. + """ + designAtVersion( + """ID of the DesignAtVersion.""" + id: DesignManagementDesignAtVersionID + + """ID of a specific design.""" + designId: DesignManagementDesignID + + """Filename of a specific design.""" + filename: String + ): DesignAtVersion! + + """All designs that were changed in the version.""" + designs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DesignConnection! + + """All designs that are visible at this version, as of this version.""" + designsAtVersion( + """Filters designs by their ID.""" + ids: [DesignManagementDesignID!] + + """Filters designs by their filename.""" + filenames: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DesignAtVersionConnection! + + """ID of the design version.""" + id: ID! + + """SHA of the design version.""" + sha: ID! +} + +"""The connection type for DesignVersion.""" +type DesignVersionConnection { + """A list of edges.""" + edges: [DesignVersionEdge] + + """A list of nodes.""" + nodes: [DesignVersion] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DesignVersionEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DesignVersion +} + +"""Mutation event of a design within a version""" +enum DesignVersionEvent { + """No change.""" + NONE + + """A creation event""" + CREATION + + """A modification event""" + MODIFICATION + + """A deletion event""" + DELETION +} + +"""Autogenerated input type of DestroyBoard""" +input DestroyBoardInput { + """Global ID of the board to destroy.""" + id: BoardID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated input type of DestroyBoardList""" +input DestroyBoardListInput { + """Global ID of the list to destroy. Only label lists are accepted.""" + listId: ListID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyBoardList""" +type DestroyBoardListPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """List after mutation.""" + list: BoardList +} + +"""Autogenerated return type of DestroyBoard""" +type DestroyBoardPayload { + """Board after mutation.""" + board: Board + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyComplianceFramework""" +input DestroyComplianceFrameworkInput { + """Global ID of the compliance framework to destroy.""" + id: ComplianceManagementFrameworkID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyComplianceFramework""" +type DestroyComplianceFrameworkPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyContainerRepository""" +input DestroyContainerRepositoryInput { + """ID of the container repository.""" + id: ContainerRepositoryID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyContainerRepository""" +type DestroyContainerRepositoryPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Container repository policy after scheduling the deletion.""" + containerRepository: ContainerRepository! + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyContainerRepositoryTags""" +input DestroyContainerRepositoryTagsInput { + """ID of the container repository.""" + id: ContainerRepositoryID! + + """ + Container repository tag(s) to delete. Total number can't be greater than 20 + """ + tagNames: [String!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyContainerRepositoryTags""" +type DestroyContainerRepositoryTagsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Deleted container repository tags.""" + deletedTagNames: [String!]! + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyCustomEmoji""" +input DestroyCustomEmojiInput { + """Global ID of the custom emoji to destroy.""" + id: CustomEmojiID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyCustomEmoji""" +type DestroyCustomEmojiPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Deleted custom emoji.""" + customEmoji: CustomEmoji + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyEpicBoard""" +input DestroyEpicBoardInput { + """Global ID of the board to destroy.""" + id: BoardsEpicBoardID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyEpicBoard""" +type DestroyEpicBoardPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic board after mutation.""" + epicBoard: EpicBoard + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyNote""" +input DestroyNoteInput { + """Global ID of the note to destroy.""" + id: NoteID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyNote""" +type DestroyNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +"""Autogenerated input type of DestroyPackageFile""" +input DestroyPackageFileInput { + """ID of the Package file.""" + id: PackagesPackageFileID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyPackageFile""" +type DestroyPackageFilePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroyPackage""" +input DestroyPackageInput { + """ID of the Package.""" + id: PackagesPackageID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroyPackage""" +type DestroyPackagePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of DestroySnippet""" +input DestroySnippetInput { + """Global ID of the snippet to destroy.""" + id: SnippetID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DestroySnippet""" +type DestroySnippetPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Snippet after mutation.""" + snippet: Snippet +} + +type DetailedStatus { + """ + Action information for the status. This includes method, button title, icon, path, and title. + """ + action: StatusAction + + """Path of the details for the status.""" + detailsPath: String + + """Favicon of the status.""" + favicon: String + + """Group of the status.""" + group: String + + """Indicates if the status has further details.""" + hasDetails: Boolean + + """Icon of the status.""" + icon: String + + """ID for a detailed status.""" + id: String! + + """Label of the status.""" + label: String + + """Text of the status.""" + text: String + + """Tooltip associated with the status.""" + tooltip: String +} + +"""Enabled namespace for DevopsAdoption""" +type DevopsAdoptionEnabledNamespace { + """Namespace where data should be displayed.""" + displayNamespace: Namespace + + """ID of the enabled namespace.""" + id: ID! + + """Metrics snapshot for previous month for the enabled namespace.""" + latestSnapshot: DevopsAdoptionSnapshot + + """Namespace which should be calculated.""" + namespace: Namespace + + """Data snapshots of the namespace.""" + snapshots( + """Filter to snapshots with month end before the provided date.""" + endTimeBefore: Time + + """Filter to snapshots with month end after the provided date.""" + endTimeAfter: Time + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DevopsAdoptionSnapshotConnection +} + +"""The connection type for DevopsAdoptionEnabledNamespace.""" +type DevopsAdoptionEnabledNamespaceConnection { + """A list of edges.""" + edges: [DevopsAdoptionEnabledNamespaceEdge] + + """A list of nodes.""" + nodes: [DevopsAdoptionEnabledNamespace] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DevopsAdoptionEnabledNamespaceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DevopsAdoptionEnabledNamespace +} + +"""Snapshot""" +type DevopsAdoptionSnapshot { + """Total number of projects with existing CODEOWNERS file.""" + codeOwnersUsedCount: Int + + """Total number of projects with enabled coverage fuzzing.""" + coverageFuzzingEnabledCount: Int + + """Total number of projects with enabled DAST.""" + dastEnabledCount: Int + + """Total number of projects with enabled dependency scanning.""" + dependencyScanningEnabledCount: Int + + """At least one deployment succeeded.""" + deploySucceeded: Boolean! + + """End time for the snapshot where the data points were collected.""" + endTime: Time! + + """At least one issue was opened.""" + issueOpened: Boolean! + + """At least one merge request was approved.""" + mergeRequestApproved: Boolean! + + """At least one merge request was opened.""" + mergeRequestOpened: Boolean! + + """At least one pipeline succeeded.""" + pipelineSucceeded: Boolean! + + """Time the snapshot was recorded.""" + recordedAt: Time! + + """At least one runner was used.""" + runnerConfigured: Boolean! + + """Total number of projects with enabled SAST.""" + sastEnabledCount: Int + + """ + At least one security scan succeeded. Deprecated in 14.1: Substituted with specific security metrics. Always false. + """ + securityScanSucceeded: Boolean! @deprecated(reason: "Substituted with specific security metrics. Always false. Deprecated in 14.1.") + + """Start time for the snapshot where the data points were collected.""" + startTime: Time! + + """Total number of projects.""" + totalProjectsCount: Int + + """ + Total number of projects with vulnerability management used at least once. + """ + vulnerabilityManagementUsedCount: Int +} + +"""The connection type for DevopsAdoptionSnapshot.""" +type DevopsAdoptionSnapshotConnection { + """A list of edges.""" + edges: [DevopsAdoptionSnapshotEdge] + + """A list of nodes.""" + nodes: [DevopsAdoptionSnapshot] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DevopsAdoptionSnapshotEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: DevopsAdoptionSnapshot +} + +input DiffImagePositionInput { + """SHA of the HEAD at the time the comment was made.""" + headSha: String! + + """Merge base of the branch the comment was made on.""" + baseSha: String + + """SHA of the branch being compared against.""" + startSha: String! + + """ + The paths of the file that was changed. Both of the properties of this input + are optional, but at least one of them is required + """ + paths: DiffPathsInput! + + """X position of the note.""" + x: Int! + + """Y position of the note.""" + y: Int! + + """Total width of the image.""" + width: Int! + + """Total height of the image.""" + height: Int! +} + +""" +A `DiffNoteID` is a global ID. It is encoded as a string. + +An example `DiffNoteID` is: `"gid://gitlab/DiffNote/1"`. +""" +scalar DiffNoteID + +input DiffPathsInput { + """Path of the file on the start SHA.""" + oldPath: String + + """Path of the file on the HEAD SHA.""" + newPath: String +} + +type DiffPosition { + """ + Information about the branch, HEAD, and base at the time of commenting. + """ + diffRefs: DiffRefs! + + """Path of the file that was changed.""" + filePath: String! + + """Total height of the image.""" + height: Int + + """Line on HEAD SHA that was changed.""" + newLine: Int + + """Path of the file on the HEAD SHA.""" + newPath: String + + """Line on start SHA that was changed.""" + oldLine: Int + + """Path of the file on the start SHA.""" + oldPath: String + + """Type of file the position refers to.""" + positionType: DiffPositionType! + + """Total width of the image.""" + width: Int + + """X position of the note.""" + x: Int + + """Y position of the note.""" + y: Int +} + +input DiffPositionInput { + """SHA of the HEAD at the time the comment was made.""" + headSha: String! + + """Merge base of the branch the comment was made on.""" + baseSha: String + + """SHA of the branch being compared against.""" + startSha: String! + + """ + The paths of the file that was changed. Both of the properties of this input + are optional, but at least one of them is required + """ + paths: DiffPathsInput! + + """Line on start SHA that was changed.""" + oldLine: Int + + """Line on HEAD SHA that was changed.""" + newLine: Int +} + +"""Type of file the position refers to""" +enum DiffPositionType { + """Text file.""" + text + + """An image.""" + image +} + +type DiffRefs { + """Merge base of the branch the comment was made on.""" + baseSha: String + + """SHA of the HEAD at the time the comment was made.""" + headSha: String! + + """SHA of the branch being compared against.""" + startSha: String! +} + +"""Changes to a single file""" +type DiffStats { + """Number of lines added to this file.""" + additions: Int! + + """Number of lines deleted from this file.""" + deletions: Int! + + """File path, relative to repository root.""" + path: String! +} + +"""Aggregated summary of changes""" +type DiffStatsSummary { + """Number of lines added.""" + additions: Int! + + """Number of lines changed.""" + changes: Int! + + """Number of lines deleted.""" + deletions: Int! + + """Number of files changed.""" + fileCount: Int! +} + +"""Autogenerated input type of DisableDevopsAdoptionNamespace""" +input DisableDevopsAdoptionNamespaceInput { + """One or many IDs of the enabled namespaces to disable.""" + id: [AnalyticsDevopsAdoptionEnabledNamespaceID!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DisableDevopsAdoptionNamespace""" +type DisableDevopsAdoptionNamespacePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +type Discussion implements ResolvableInterface { + """Timestamp of the discussion's creation.""" + createdAt: Time! + + """ID of this discussion.""" + id: DiscussionID! + + """Object which the discussion belongs to.""" + noteable: NoteableType + + """All notes in the discussion.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """ID used to reply to this discussion.""" + replyId: DiscussionID! + + """Indicates if the object can be resolved.""" + resolvable: Boolean! + + """Indicates if the object is resolved.""" + resolved: Boolean! + + """Timestamp of when the object was resolved.""" + resolvedAt: Time + + """User who resolved the object.""" + resolvedBy: UserCore +} + +"""The connection type for Discussion.""" +type DiscussionConnection { + """A list of edges.""" + edges: [DiscussionEdge] + + """A list of nodes.""" + nodes: [Discussion] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type DiscussionEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Discussion +} + +""" +A `DiscussionID` is a global ID. It is encoded as a string. + +An example `DiscussionID` is: `"gid://gitlab/Discussion/1"`. +""" +scalar DiscussionID + +"""Autogenerated input type of DiscussionToggleResolve""" +input DiscussionToggleResolveInput { + """Global ID of the discussion.""" + id: DiscussionID! + + """ + Will resolve the discussion when true, and unresolve the discussion when false. + """ + resolve: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of DiscussionToggleResolve""" +type DiscussionToggleResolvePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Discussion after mutation.""" + discussion: Discussion + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""All information related to DORA metrics.""" +type Dora { + """DORA metrics for the current group or project.""" + metrics( + """Type of metric to return.""" + metric: DoraMetricType! + + """Date range to start from. Default is 3 months ago.""" + startDate: Date + + """Date range to end at. Default is the current date.""" + endDate: Date + + """ + How the metric should be aggregrated. Defaults to `DAILY`. In the case of + `ALL`, the `date` field in the response will be `null`. + """ + interval: DoraMetricBucketingInterval + + """ + Deployment tier of the environments to return. Defaults to `PRODUCTION`. + """ + environmentTier: DeploymentTier + ): [DoraMetric!] +} + +type DoraMetric { + """Date of the data point.""" + date: String + + """Value of the data point.""" + value: Int +} + +"""All possible ways that DORA metrics can be aggregated.""" +enum DoraMetricBucketingInterval { + """All data points are combined into a single value.""" + ALL + + """Data points are combined into chunks by month.""" + MONTHLY + + """Data points are combined into chunks by day.""" + DAILY +} + +"""All supported DORA metric types.""" +enum DoraMetricType { + """Deployment frequency.""" + DEPLOYMENT_FREQUENCY + + """Lead time for changes.""" + LEAD_TIME_FOR_CHANGES +} + +""" +Duration between two instants, represented as a fractional number of seconds. + +For example: 12.3334 + +""" +scalar Duration + +"""Autogenerated input type of EchoCreate""" +input EchoCreateInput { + """Errors to return to the user.""" + errors: [String!] + + """Messages to return to the user.""" + messages: [String!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EchoCreate""" +type EchoCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Messages returned to the user.""" + echoes: [String!] + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of EnableDevopsAdoptionNamespace""" +input EnableDevopsAdoptionNamespaceInput { + """Namespace ID.""" + namespaceId: NamespaceID! + + """Display namespace ID.""" + displayNamespaceId: NamespaceID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EnableDevopsAdoptionNamespace""" +type EnableDevopsAdoptionNamespacePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Enabled namespace after mutation.""" + enabledNamespace: DevopsAdoptionEnabledNamespace + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +interface Entry { + """Flat path of the entry.""" + flatPath: String! + + """ID of the entry.""" + id: ID! + + """Name of the entry.""" + name: String! + + """Path of the entry.""" + path: String! + + """Last commit SHA for the entry.""" + sha: String! + + """Type of tree entry.""" + type: EntryType! +} + +"""Type of a tree entry""" +enum EntryType { + """Directory tree type.""" + tree + + """File tree type.""" + blob + + """Commit tree type.""" + commit +} + +"""Describes where code is deployed for a project""" +type Environment { + """ID of the environment.""" + id: ID! + + """ + Most severe open alert for the environment. If multiple alerts have equal severity, the most recent is returned. + """ + latestOpenedMostSevereAlert: AlertManagementAlert + + """Metrics dashboard schema for the environment.""" + metricsDashboard( + """ + Path to a file which defines a metrics dashboard eg: `"config/prometheus/common_metrics.yml"`. + + """ + path: String! + ): MetricsDashboard + + """Human-readable name of the environment.""" + name: String! + + """Path to the environment.""" + path: String! + + """State of the environment, for example: available/stopped.""" + state: String! +} + +"""The connection type for Environment.""" +type EnvironmentConnection { + """A list of edges.""" + edges: [EnvironmentEdge] + + """A list of nodes.""" + nodes: [Environment] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type EnvironmentEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Environment +} + +""" +A `EnvironmentID` is a global ID. It is encoded as a string. + +An example `EnvironmentID` is: `"gid://gitlab/Environment/1"`. +""" +scalar EnvironmentID + +"""Autogenerated input type of EnvironmentsCanaryIngressUpdate""" +input EnvironmentsCanaryIngressUpdateInput { + """Global ID of the environment to update.""" + id: EnvironmentID! + + """Weight of the Canary Ingress.""" + weight: Int! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EnvironmentsCanaryIngressUpdate""" +type EnvironmentsCanaryIngressUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Represents an epic""" +type Epic implements NoteableInterface & CurrentUserTodos & Eventable { + """Ancestors (parents) of the epic.""" + ancestors( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Search query for title or description.""" + search: String + + """IID of the epic, e.g., "1".""" + iid: ID + + """List of IIDs of epics, e.g., `[1, 2]`.""" + iids: [ID!] + + """Filter epics by state.""" + state: EpicState + + """ + Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + """ + in: [IssuableSearchableField!] + + """List epics by sort order.""" + sort: EpicSort + + """Filter epics by author.""" + authorUsername: String + + """Filter epics by labels.""" + labelName: [String!] + + """Filter epics by milestone title, computed from epic's issues.""" + milestoneTitle: String + + """Filter epics by IID for autocomplete.""" + iidStartsWith: String + + """Include epics from ancestor groups.""" + includeAncestorGroups: Boolean = true + + """Include epics from descendant groups.""" + includeDescendantGroups: Boolean = true + + """Filter epics by given confidentiality.""" + confidential: Boolean + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicFilterInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicConnection + + """Author of the epic.""" + author: UserCore! + + """List of award emojis associated with the epic.""" + awardEmoji( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): AwardEmojiConnection + + """Children (sub-epics) of the epic.""" + children( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Search query for title or description.""" + search: String + + """IID of the epic, e.g., "1".""" + iid: ID + + """List of IIDs of epics, e.g., `[1, 2]`.""" + iids: [ID!] + + """Filter epics by state.""" + state: EpicState + + """ + Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + """ + in: [IssuableSearchableField!] + + """List epics by sort order.""" + sort: EpicSort + + """Filter epics by author.""" + authorUsername: String + + """Filter epics by labels.""" + labelName: [String!] + + """Filter epics by milestone title, computed from epic's issues.""" + milestoneTitle: String + + """Filter epics by IID for autocomplete.""" + iidStartsWith: String + + """Include epics from ancestor groups.""" + includeAncestorGroups: Boolean = false + + """Include epics from descendant groups.""" + includeDescendantGroups: Boolean = true + + """Filter epics by given confidentiality.""" + confidential: Boolean + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicFilterInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicConnection + + """Timestamp of when the epic was closed.""" + closedAt: Time + + """Indicates if the epic is confidential.""" + confidential: Boolean + + """Timestamp of when the epic was created.""" + createdAt: Time + + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! + + """Number of open and closed descendant epics and issues.""" + descendantCounts: EpicDescendantCount + + """ + Total weight of open and closed issues in the epic and its descendants. + """ + descendantWeightSum: EpicDescendantWeights + + """Description of the epic.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Number of downvotes the epic has received.""" + downvotes: Int! + + """Due date of the epic.""" + dueDate: Time + + """Fixed due date of the epic.""" + dueDateFixed: Time + + """Inherited due date of the epic from milestones.""" + dueDateFromMilestones: Time + + """Indicates if the due date has been manually set.""" + dueDateIsFixed: Boolean + + """List of events associated with the object.""" + events( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EventConnection + + """Group to which the epic belongs.""" + group: Group! + + """Indicates if the epic has children.""" + hasChildren: Boolean! + + """Indicates if the epic has direct issues.""" + hasIssues: Boolean! + + """Indicates if the epic has a parent epic.""" + hasParent: Boolean! + + """Current health status of the epic.""" + healthStatus: EpicHealthStatus + + """ID of the epic.""" + id: ID! + + """Internal ID of the epic.""" + iid: ID! + + """A list of issues associated with the epic.""" + issues( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicIssueConnection + + """Labels assigned to the epic.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """Parent epic of the epic.""" + parent: Epic + + """List of participants for the epic.""" + participants( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """ + Internal reference of the epic. Returned in shortened format by default. + """ + reference( + """Indicates if the reference should be returned in full.""" + full: Boolean = false + ): String! + + """URI path of the epic-issue relationship.""" + relationPath: String + + """Relative position of the epic in the epic tree.""" + relativePosition: Int + + """Start date of the epic.""" + startDate: Time + + """Fixed start date of the epic.""" + startDateFixed: Time + + """Inherited start date of the epic from milestones.""" + startDateFromMilestones: Time + + """Indicates if the start date has been manually set.""" + startDateIsFixed: Boolean + + """State of the epic.""" + state: EpicState! + + """Indicates the currently logged in user is subscribed to the epic.""" + subscribed: Boolean! + + """Title of the epic.""" + title: String + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Timestamp of when the epic was updated.""" + updatedAt: Time + + """Number of upvotes the epic has received.""" + upvotes: Int! + + """Number of user discussions in the epic.""" + userDiscussionsCount: Int! + + """Number of user notes of the epic.""" + userNotesCount: Int! + + """Permissions for the current user on the resource""" + userPermissions: EpicPermissions! + + """Web path of the epic.""" + webPath: String! + + """Web URL of the epic.""" + webUrl: String! +} + +"""Autogenerated input type of EpicAddIssue""" +input EpicAddIssueInput { + """IID of the epic to mutate.""" + iid: ID! + + """Group the epic to mutate belongs to.""" + groupPath: ID! + + """Full path of the project the issue belongs to.""" + projectPath: ID! + + """IID of the issue to be added.""" + issueIid: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicAddIssue""" +type EpicAddIssuePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic after mutation.""" + epic: Epic + + """Epic-issue relationship.""" + epicIssue: EpicIssue + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Represents an epic board""" +type EpicBoard { + """Whether or not backlog list is hidden.""" + hideBacklogList: Boolean + + """Whether or not closed list is hidden.""" + hideClosedList: Boolean + + """Global ID of the epic board.""" + id: BoardsEpicBoardID! + + """Labels of the board.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """Epic board lists.""" + lists( + """Find an epic board list by ID.""" + id: BoardsEpicListID + + """Filters applied when getting epic metadata in the epic board list.""" + epicFilters: EpicFilters + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicListConnection + + """Name of the epic board.""" + name: String + + """Web path of the epic board.""" + webPath: String! + + """Web URL of the epic board.""" + webUrl: String! +} + +"""The connection type for EpicBoard.""" +type EpicBoardConnection { + """A list of edges.""" + edges: [EpicBoardEdge] + + """A list of nodes.""" + nodes: [EpicBoard] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of EpicBoardCreate""" +input EpicBoardCreateInput { + """Board name.""" + name: String + + """Whether or not backlog list is hidden.""" + hideBacklogList: Boolean + + """Whether or not closed list is hidden.""" + hideClosedList: Boolean + + """Labels of the issue.""" + labels: [String!] + + """IDs of labels to be added to the board.""" + labelIds: [LabelID!] + + """Full path of the group with which the resource is associated.""" + groupPath: ID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicBoardCreate""" +type EpicBoardCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Created epic board.""" + epicBoard: EpicBoard + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type EpicBoardEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: EpicBoard +} + +"""Autogenerated input type of EpicBoardListCreate""" +input EpicBoardListCreateInput { + """Create the backlog list.""" + backlog: Boolean + + """Global ID of an existing label.""" + labelId: LabelID + + """Global ID of the issue board to mutate.""" + boardId: BoardsEpicBoardID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicBoardListCreate""" +type EpicBoardListCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Epic list in the epic board.""" + list: EpicList +} + +"""Autogenerated input type of EpicBoardListDestroy""" +input EpicBoardListDestroyInput { + """Global ID of the epic board list to destroy.""" + listId: BoardsEpicListID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicBoardListDestroy""" +type EpicBoardListDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Epic board list. `null` if the board was destroyed successfully.""" + list: EpicList +} + +"""Autogenerated input type of EpicBoardUpdate""" +input EpicBoardUpdateInput { + """Board name.""" + name: String + + """Whether or not backlog list is hidden.""" + hideBacklogList: Boolean + + """Whether or not closed list is hidden.""" + hideClosedList: Boolean + + """Labels of the issue.""" + labels: [String!] + + """IDs of labels to be added to the board.""" + labelIds: [LabelID!] + + """Epic board global ID.""" + id: BoardsEpicBoardID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicBoardUpdate""" +type EpicBoardUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Updated epic board.""" + epicBoard: EpicBoard + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""The connection type for Epic.""" +type EpicConnection { + """A list of edges.""" + edges: [EpicEdge] + + """A list of nodes.""" + nodes: [Epic] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Counts of descendent epics""" +type EpicDescendantCount { + """Number of closed child epics.""" + closedEpics: Int + + """Number of closed epic issues.""" + closedIssues: Int + + """Number of opened child epics.""" + openedEpics: Int + + """Number of opened epic issues.""" + openedIssues: Int +} + +"""Total weight of open and closed descendant issues""" +type EpicDescendantWeights { + """ + Total weight of completed (closed) issues in this epic, including epic descendants. + """ + closedIssues: Int + + """ + Total weight of opened issues in this epic, including epic descendants. + """ + openedIssues: Int +} + +"""An edge in a connection.""" +type EpicEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Epic +} + +input EpicFilters { + """Filter by label name.""" + labelName: [String] + + """Filter by author username.""" + authorUsername: String + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicBoardIssueInput + + """Search query for epic title or description.""" + search: String +} + +"""Health status of child issues""" +type EpicHealthStatus { + """Number of issues at risk.""" + issuesAtRisk: Int + + """Number of issues that need attention.""" + issuesNeedingAttention: Int + + """Number of issues on track.""" + issuesOnTrack: Int +} + +""" +A `EpicID` is a global ID. It is encoded as a string. + +An example `EpicID` is: `"gid://gitlab/Epic/1"`. +""" +scalar EpicID + +"""Relationship between an epic and an issue""" +type EpicIssue implements NoteableInterface & CurrentUserTodos { + """Alert associated to this issue.""" + alertManagementAlert: AlertManagementAlert + + """Assignees of the issue.""" + assignees( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """User that created the issue.""" + author: UserCore! + + """Indicates the issue is blocked.""" + blocked: Boolean! + + """Count of issues blocking this issue.""" + blockedByCount: Int + + """Issues blocking this issue.""" + blockedByIssues( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IssueConnection + + """Count of issues this issue is blocking.""" + blockingCount: Int! + + """Timestamp of when the issue was closed.""" + closedAt: Time + + """Indicates the issue is confidential.""" + confidential: Boolean! + + """User specific email address for the issue.""" + createNoteEmail: String + + """Timestamp of when the issue was created.""" + createdAt: Time! + + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! + + """Customer relations contacts of the issue.""" + customerRelationsContacts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CustomerRelationsContactConnection + + """Description of the issue.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Collection of design images associated with this issue.""" + designCollection: DesignCollection + + """Indicates discussion is locked on the issue.""" + discussionLocked: Boolean! + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Number of downvotes the issue has received.""" + downvotes: Int! + + """Due date of the issue.""" + dueDate: Time + + """ + Indicates if a project has email notifications disabled: `true` if email notifications are disabled. + """ + emailsDisabled: Boolean! + + """Epic to which this issue belongs.""" + epic: Epic + + """ID of the epic-issue relation.""" + epicIssueId: ID! + + """Current health status.""" + healthStatus: HealthStatus + + """ + Indicates the issue is hidden because the author has been banned. Will always + return `null` if `ban_user_feature_flag` feature flag is disabled. + """ + hidden: Boolean + + """Human-readable time estimate of the issue.""" + humanTimeEstimate: String + + """Human-readable total time reported as spent on the issue.""" + humanTotalTimeSpent: String + + """Global ID of the epic-issue relation.""" + id: ID + + """Internal ID of the issue.""" + iid: ID! + + """Iteration of the issue.""" + iteration: Iteration + + """Labels of the issue.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """Number of merge requests that close the issue on merge.""" + mergeRequestsCount: Int! + + """Metric images associated to the issue.""" + metricImages: [MetricImage!] + + """Milestone of the issue.""" + milestone: Milestone + + """Indicates if issue got moved from other project.""" + moved: Boolean + + """Updated Issue after it got moved to another project.""" + movedTo: Issue + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """List of participants in the issue.""" + participants( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """ID of the issue project.""" + projectId: Int! + + """ + Internal reference of the issue. Returned in shortened format by default. + """ + reference( + """ + Boolean option specifying whether the reference should be returned in full. + """ + full: Boolean = false + ): String! + + """URI path of the epic-issue relation.""" + relationPath: String + + """ + Relative position of the issue (used for positioning in epic tree and issue boards). + """ + relativePosition: Int + + """Severity level of the incident.""" + severity: IssuableSeverity + + """Timestamp of when the issue SLA expires.""" + slaDueAt: Time + + """State of the issue.""" + state: IssueState! + + """Indicates whether an issue is published to the status page.""" + statusPagePublishedIncident: Boolean + + """Indicates the currently logged in user is subscribed to the issue.""" + subscribed: Boolean! + + """Task completion status of the issue.""" + taskCompletionStatus: TaskCompletionStatus! + + """Time estimate of the issue.""" + timeEstimate: Int! + + """Timelogs on the issue.""" + timelogs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection! + + """Title of the issue.""" + title: String! + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Total time reported as spent on the issue.""" + totalTimeSpent: Int! + + """Type of the issue.""" + type: IssueType + + """Timestamp of when the issue was last updated.""" + updatedAt: Time! + + """User that last updated the issue.""" + updatedBy: UserCore + + """Number of upvotes the issue has received.""" + upvotes: Int! + + """Number of user discussions in the issue.""" + userDiscussionsCount: Int! + + """Number of user notes of the issue.""" + userNotesCount: Int! + + """Permissions for the current user on the resource""" + userPermissions: IssuePermissions! + + """Web path of the issue.""" + webPath: String! + + """Web URL of the issue.""" + webUrl: String! + + """Weight of the issue.""" + weight: Int +} + +"""The connection type for EpicIssue.""" +type EpicIssueConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [EpicIssueEdge] + + """A list of nodes.""" + nodes: [EpicIssue] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Total weight of issues collection.""" + weight: Int! +} + +"""An edge in a connection.""" +type EpicIssueEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: EpicIssue +} + +"""Represents an epic board list""" +type EpicList { + """Indicates if this list is collapsed for this user.""" + collapsed: Boolean + + """List epics.""" + epics( + """Filters applied when selecting epics in the board list.""" + filters: EpicFilters + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicConnection + + """Count of epics in the list.""" + epicsCount: Int + + """Global ID of the board list.""" + id: BoardsEpicListID! + + """Label of the list.""" + label: Label + + """Type of the list.""" + listType: String! + + """Position of the list within the board.""" + position: Int + + """Title of the list.""" + title: String! +} + +"""The connection type for EpicList.""" +type EpicListConnection { + """A list of edges.""" + edges: [EpicListEdge] + + """A list of nodes.""" + nodes: [EpicList] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type EpicListEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: EpicList +} + +"""Autogenerated input type of EpicMoveList""" +input EpicMoveListInput { + """Global ID of the board that the epic is in.""" + boardId: BoardsEpicBoardID! + + """ID of the epic to mutate.""" + epicId: EpicID! + + """ + ID of the board list that the epic will be moved from. Required if moving between lists. + """ + fromListId: BoardsEpicListID + + """ID of the list the epic will be in after mutation.""" + toListId: BoardsEpicListID! + + """ID of epic that should be placed before the current epic.""" + moveBeforeId: EpicID + + """ID of epic that should be placed after the current epic.""" + moveAfterId: EpicID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicMoveList""" +type EpicMoveListPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic after mutation.""" + epic: Epic + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Check permissions for the current user on an epic""" +type EpicPermissions { + """Indicates the user can perform `admin_epic` on this resource""" + adminEpic: Boolean! + + """Indicates the user can perform `award_emoji` on this resource""" + awardEmoji: Boolean! + + """Indicates the user can perform `create_epic` on this resource""" + createEpic: Boolean! + + """Indicates the user can perform `create_note` on this resource""" + createNote: Boolean! + + """Indicates the user can perform `destroy_epic` on this resource""" + destroyEpic: Boolean! + + """Indicates the user can perform `read_epic` on this resource""" + readEpic: Boolean! + + """Indicates the user can perform `read_epic_iid` on this resource""" + readEpicIid: Boolean! + + """Indicates the user can perform `update_epic` on this resource""" + updateEpic: Boolean! +} + +"""Autogenerated input type of EpicSetSubscription""" +input EpicSetSubscriptionInput { + """IID of the epic to mutate.""" + iid: ID! + + """Group the epic to mutate belongs to.""" + groupPath: ID! + + """Desired state of the subscription.""" + subscribedState: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicSetSubscription""" +type EpicSetSubscriptionPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic after mutation.""" + epic: Epic + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Roadmap sort values""" +enum EpicSort { + """Start date at descending order.""" + start_date_desc @deprecated(reason: "Use START_DATE_DESC. Deprecated in 13.11.") + + """Start date at ascending order.""" + start_date_asc @deprecated(reason: "Use START_DATE_ASC. Deprecated in 13.11.") + + """End date at descending order.""" + end_date_desc @deprecated(reason: "Use END_DATE_DESC. Deprecated in 13.11.") + + """End date at ascending order.""" + end_date_asc @deprecated(reason: "Use END_DATE_ASC. Deprecated in 13.11.") + + """Sort by start date in descending order.""" + START_DATE_DESC + + """Sort by start date in ascending order.""" + START_DATE_ASC + + """Sort by end date in descending order.""" + END_DATE_DESC + + """Sort by end date in ascending order.""" + END_DATE_ASC + + """Sort by title in descending order.""" + TITLE_DESC + + """Sort by title in ascending order.""" + TITLE_ASC +} + +"""State of an epic""" +enum EpicState { + """All epics.""" + all + + """Open epics.""" + opened + + """Closed epics.""" + closed +} + +"""State event of an epic""" +enum EpicStateEvent { + """Reopen the epic.""" + REOPEN + + """Close the epic.""" + CLOSE +} + +"""A node of an epic tree.""" +input EpicTreeNodeFieldsInputType { + """ID of the epic issue or epic that is being moved.""" + id: EpicTreeSortingID! + + """ID of the epic issue or issue the epic or issue is switched with.""" + adjacentReferenceId: EpicTreeSortingID + + """Type of switch. Valid values are `after` or `before`.""" + relativePosition: MoveType + + """ID of the new parent epic.""" + newParentId: EpicID +} + +"""Autogenerated input type of EpicTreeReorder""" +input EpicTreeReorderInput { + """ID of the base epic of the tree.""" + baseEpicId: EpicID! + + """Parameters for updating the tree positions.""" + moved: EpicTreeNodeFieldsInputType! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EpicTreeReorder""" +type EpicTreeReorderPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +""" +A `EpicTreeSortingID` is a global ID. It is encoded as a string. + +An example `EpicTreeSortingID` is: `"gid://gitlab/EpicTreeSorting/1"`. +""" +scalar EpicTreeSortingID + +"""Epic ID wildcard values""" +enum EpicWildcardId { + """No epic is assigned.""" + NONE + + """Any epic is assigned.""" + ANY +} + +"""Autogenerated input type of EscalationPolicyCreate""" +input EscalationPolicyCreateInput { + """Project to create the escalation policy for.""" + projectPath: ID! + + """Name of the escalation policy.""" + name: String! + + """Description of the escalation policy.""" + description: String + + """Steps of the escalation policy.""" + rules: [EscalationRuleInput!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EscalationPolicyCreate""" +type EscalationPolicyCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Escalation policy.""" + escalationPolicy: EscalationPolicyType +} + +"""Autogenerated input type of EscalationPolicyDestroy""" +input EscalationPolicyDestroyInput { + """Escalation policy internal ID to remove.""" + id: IncidentManagementEscalationPolicyID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EscalationPolicyDestroy""" +type EscalationPolicyDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Escalation policy.""" + escalationPolicy: EscalationPolicyType +} + +"""Represents an escalation policy""" +type EscalationPolicyType { + """Description of the escalation policy.""" + description: String + + """ID of the escalation policy.""" + id: IncidentManagementEscalationPolicyID + + """Name of the escalation policy.""" + name: String + + """Steps of the escalation policy.""" + rules: [EscalationRuleType!] +} + +"""The connection type for EscalationPolicyType.""" +type EscalationPolicyTypeConnection { + """A list of edges.""" + edges: [EscalationPolicyTypeEdge] + + """A list of nodes.""" + nodes: [EscalationPolicyType] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type EscalationPolicyTypeEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: EscalationPolicyType +} + +"""Autogenerated input type of EscalationPolicyUpdate""" +input EscalationPolicyUpdateInput { + """ID of the on-call schedule to create the on-call rotation in.""" + id: IncidentManagementEscalationPolicyID! + + """Name of the escalation policy.""" + name: String + + """Description of the escalation policy.""" + description: String + + """Steps of the escalation policy.""" + rules: [EscalationRuleInput!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of EscalationPolicyUpdate""" +type EscalationPolicyUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Escalation policy.""" + escalationPolicy: EscalationPolicyType +} + +"""Represents an escalation rule""" +input EscalationRuleInput { + """On-call schedule to notify.""" + oncallScheduleIid: ID + + """Username of the user to notify.""" + username: String + + """Time in seconds before the rule is activated.""" + elapsedTimeSeconds: Int! + + """Status required to prevent the rule from activating.""" + status: EscalationRuleStatus! +} + +"""Escalation rule statuses""" +enum EscalationRuleStatus { + """.""" + ACKNOWLEDGED + + """.""" + RESOLVED +} + +"""Represents an escalation rule for an escalation policy""" +type EscalationRuleType { + """Time in seconds before the rule is activated.""" + elapsedTimeSeconds: Int + + """ID of the escalation policy.""" + id: IncidentManagementEscalationRuleID + + """On-call schedule to notify.""" + oncallSchedule: IncidentManagementOncallSchedule + + """Status required to prevent the rule from activating.""" + status: EscalationRuleStatus + + """User to notify.""" + user: UserCore +} + +"""Representing an event""" +type Event { + """Action of the event.""" + action: EventAction! + + """Author of this event.""" + author: UserCore! + + """When this event was created.""" + createdAt: Time! + + """ID of the event.""" + id: ID! + + """When this event was updated.""" + updatedAt: Time! +} + +interface Eventable { + """List of events associated with the object.""" + events( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EventConnection +} + +"""Event action""" +enum EventAction { + """Created action""" + CREATED + + """Updated action""" + UPDATED + + """Closed action""" + CLOSED + + """Reopened action""" + REOPENED + + """Pushed action""" + PUSHED + + """Commented action""" + COMMENTED + + """Merged action""" + MERGED + + """Joined action""" + JOINED + + """Left action""" + LEFT + + """Destroyed action""" + DESTROYED + + """Expired action""" + EXPIRED + + """Approved action""" + APPROVED +} + +"""The connection type for Event.""" +type EventConnection { + """A list of edges.""" + edges: [EventEdge] + + """A list of nodes.""" + nodes: [Event] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type EventEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Event +} + +"""Autogenerated input type of ExportRequirements""" +input ExportRequirementsInput { + """List requirements by sort order.""" + sort: Sort + + """Filter requirements by state.""" + state: RequirementState + + """Search query for requirement title.""" + search: String + + """Filter requirements by author username.""" + authorUsername: [String!] + + """Full project path the requirements are associated with.""" + projectPath: ID! + + """List of selected requirements fields to be exported.""" + selectedFields: [String!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ExportRequirements""" +type ExportRequirementsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Represents an external resource to send audit events to""" +type ExternalAuditEventDestination { + """External destination to send audit events to.""" + destinationUrl: String! + + """Group the destination belongs to.""" + group: Group! + + """ID of the destination.""" + id: ID! +} + +"""Autogenerated input type of ExternalAuditEventDestinationCreate""" +input ExternalAuditEventDestinationCreateInput { + """Destination URL.""" + destinationUrl: String! + + """Group path.""" + groupPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ExternalAuditEventDestinationCreate""" +type ExternalAuditEventDestinationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Destination created.""" + externalAuditEventDestination: ExternalAuditEventDestination +} + +"""Autogenerated input type of ExternalAuditEventDestinationDestroy""" +input ExternalAuditEventDestinationDestroyInput { + """ID of external audit event destination to destroy.""" + id: AuditEventsExternalAuditEventDestinationID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ExternalAuditEventDestinationDestroy""" +type ExternalAuditEventDestinationDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of ExternalAuditEventDestinationUpdate""" +input ExternalAuditEventDestinationUpdateInput { + """ID of external audit event destination to destroy.""" + id: AuditEventsExternalAuditEventDestinationID! + + """Destination URL to change.""" + destinationUrl: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ExternalAuditEventDestinationUpdate""" +type ExternalAuditEventDestinationUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Updated destination.""" + externalAuditEventDestination: ExternalAuditEventDestination +} + +"""Represents an external issue""" +type ExternalIssue { + """Timestamp of when the issue was created.""" + createdAt: Time + + """Type of external tracker.""" + externalTracker: String + + """Relative reference of the issue in the external tracker.""" + relativeReference: String + + """Status of the issue in the external tracker.""" + status: String + + """Title of the issue in the external tracker.""" + title: String + + """Timestamp of when the issue was updated.""" + updatedAt: Time + + """URL to the issue in the external tracker.""" + webUrl: String +} + +type GeoNode { + """ + Maximum concurrency of container repository sync for this secondary node. + """ + containerRepositoriesMaxCapacity: Int + + """Indicates whether this Geo node is enabled.""" + enabled: Boolean + + """ + Maximum concurrency of LFS/attachment backfill for this secondary node. + """ + filesMaxCapacity: Int + + """Find group wiki repository registries on this Geo node.""" + groupWikiRepositoryRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupWikiRepositoryRegistryConnection + + """ID of this GeoNode.""" + id: ID! + + """ + URL defined on the primary node secondary nodes should use to contact it. + """ + internalUrl: String + + """Find LFS object registries on this Geo node.""" + lfsObjectRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LfsObjectRegistryConnection + + """Find merge request diff registries on this Geo node.""" + mergeRequestDiffRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestDiffRegistryConnection + + """ + Interval (in days) in which the repository verification is valid. After expiry, it is reverted. + """ + minimumReverificationInterval: Int + + """Unique identifier for this Geo node.""" + name: String + + """Package file registries of the GeoNode.""" + packageFileRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageFileRegistryConnection + + """Find Pages Deployment registries on this Geo node""" + pagesDeploymentRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PagesDeploymentRegistryConnection + + """Find pipeline artifact registries on this Geo node.""" + pipelineArtifactRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineArtifactRegistryConnection + + """Indicates whether this Geo node is the primary.""" + primary: Boolean + + """Maximum concurrency of repository backfill for this secondary node.""" + reposMaxCapacity: Int + + """ + Namespaces that should be synced, if `selective_sync_type` == `namespaces`. + """ + selectiveSyncNamespaces( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NamespaceConnection + + """ + Repository storages whose projects should be synced, if `selective_sync_type` == `shards`. + """ + selectiveSyncShards: [String!] + + """Indicates if syncing is limited to only specific groups, or shards.""" + selectiveSyncType: String + + """Find snippet repository registries on this Geo node.""" + snippetRepositoryRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetRepositoryRegistryConnection + + """ + Indicates if this secondary node will replicate blobs in Object Storage. + """ + syncObjectStorage: Boolean + + """Find terraform state version registries on this Geo node.""" + terraformStateVersionRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TerraformStateVersionRegistryConnection + + """Find Upload registries on this Geo node""" + uploadRegistries( + """Filters registries by their ID.""" + ids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UploadRegistryConnection + + """User-facing URL for this Geo node.""" + url: String + + """ + Maximum concurrency of repository verification for this secondary node. + """ + verificationMaxCapacity: Int +} + +""" +A `GitlabErrorTrackingDetailedErrorID` is a global ID. It is encoded as a string. + +An example `GitlabErrorTrackingDetailedErrorID` is: `"gid://gitlab/Gitlab::ErrorTracking::DetailedError/1"`. +""" +scalar GitlabErrorTrackingDetailedErrorID + +"""Autogenerated input type of GitlabSubscriptionActivate""" +input GitlabSubscriptionActivateInput { + """Activation code received after purchasing a GitLab subscription.""" + activationCode: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of GitlabSubscriptionActivate""" +type GitlabSubscriptionActivatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Current license.""" + license: CurrentLicense +} + +""" +A global identifier. + +A global identifier represents an object uniquely across the application. +An example of such an identifier is `"gid://gitlab/User/1"`. + +Global identifiers are encoded as strings. + +""" +scalar GlobalID + +type GrafanaIntegration { + """Timestamp of the issue's creation.""" + createdAt: Time! + + """Indicates whether Grafana integration is enabled.""" + enabled: Boolean! + + """URL for the Grafana host for the Grafana integration.""" + grafanaUrl: String! + + """Internal ID of the Grafana integration.""" + id: ID! + + """Timestamp of the issue's last activity.""" + updatedAt: Time! +} + +type Group { + """Size limit for repositories in the namespace in bytes.""" + actualRepositorySizeLimit: Float + + """Additional storage purchased for the root namespace in bytes.""" + additionalPurchasedStorageSize: Float + + """ + Indicates whether Auto DevOps is enabled for all projects within this group. + """ + autoDevopsEnabled: Boolean + + """Avatar URL of the group.""" + avatarUrl: String + + """Number of billable users in the group.""" + billableMembersCount: Int + + """A single board of the group.""" + board( + """ID of the board.""" + id: BoardID! + ): Board + + """Boards of the group.""" + boards( + """Find a board by its ID.""" + id: BoardID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): BoardConnection + + """Represents the code coverage activity for this group.""" + codeCoverageActivities( + """ + First day for which to fetch code coverage activity (maximum time window is set to 90 days). + """ + startDate: Date! + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CodeCoverageActivityConnection + + """Compliance frameworks available to projects in this namespace.""" + complianceFrameworks( + """Global ID of a specific compliance framework to return.""" + id: ComplianceManagementFrameworkID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ComplianceFrameworkConnection + + """Find contacts of this group.""" + contacts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CustomerRelationsContactConnection + + """Container repositories of the group.""" + containerRepositories( + """Filter the container repositories by their name.""" + name: String + + """Sort container repositories by this criteria.""" + sort: ContainerRepositorySort = created_desc + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ContainerRepositoryConnection + + """Number of container repositories in the group.""" + containerRepositoriesCount: Int! + + """ + Includes at least one project where the repository size exceeds the limit. + """ + containsLockedProjects: Boolean! + + """ + Custom emoji within this namespace. Available only when feature flag + `custom_emoji` is enabled. This flag is disabled by default, because the + feature is experimental and is subject to change without notice. + """ + customEmoji( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CustomEmojiConnection + + """Number of dependency proxy blobs cached in the group.""" + dependencyProxyBlobCount: Int! + + """Dependency Proxy blobs.""" + dependencyProxyBlobs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DependencyProxyBlobConnection + + """Number of dependency proxy images cached in the group.""" + dependencyProxyImageCount: Int! + + """Prefix for pulling images when using the dependency proxy.""" + dependencyProxyImagePrefix: String! + + """Dependency proxy TTL policy for the group.""" + dependencyProxyImageTtlPolicy: DependencyProxyImageTtlGroupPolicy + + """Dependency Proxy manifests.""" + dependencyProxyManifests( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DependencyProxyManifestConnection + + """Dependency Proxy settings for the group.""" + dependencyProxySetting: DependencyProxySetting + + """Total size of the dependency proxy cached images.""" + dependencyProxyTotalSize: String! + + """List of descendant groups of this group.""" + descendantGroups( + """List of descendant groups of the parent group.""" + includeParentDescendants: Boolean = true + + """Limit result to groups owned by authenticated user.""" + owned: Boolean + + """Search query for group name or group full path.""" + search: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupConnection + + """Description of the namespace.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Group's DORA metrics.""" + dora: Dora + + """Indicates if a group has email notifications disabled.""" + emailsDisabled: Boolean + + """Find a single epic.""" + epic( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Search query for title or description.""" + search: String + + """IID of the epic, e.g., "1".""" + iid: ID + + """List of IIDs of epics, e.g., `[1, 2]`.""" + iids: [ID!] + + """Filter epics by state.""" + state: EpicState + + """ + Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + """ + in: [IssuableSearchableField!] + + """List epics by sort order.""" + sort: EpicSort + + """Filter epics by author.""" + authorUsername: String + + """Filter epics by labels.""" + labelName: [String!] + + """Filter epics by milestone title, computed from epic's issues.""" + milestoneTitle: String + + """Filter epics by IID for autocomplete.""" + iidStartsWith: String + + """Include epics from ancestor groups.""" + includeAncestorGroups: Boolean = false + + """Include epics from descendant groups.""" + includeDescendantGroups: Boolean = true + + """Filter epics by given confidentiality.""" + confidential: Boolean + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicFilterInput + ): Epic + + """Find a single epic board.""" + epicBoard( + """Find an epic board by ID.""" + id: BoardsEpicBoardID! + ): EpicBoard + + """Find epic boards.""" + epicBoards( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicBoardConnection + + """Find epics.""" + epics( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Search query for title or description.""" + search: String + + """IID of the epic, e.g., "1".""" + iid: ID + + """List of IIDs of epics, e.g., `[1, 2]`.""" + iids: [ID!] + + """Filter epics by state.""" + state: EpicState + + """ + Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument. + """ + in: [IssuableSearchableField!] + + """List epics by sort order.""" + sort: EpicSort + + """Filter epics by author.""" + authorUsername: String + + """Filter epics by labels.""" + labelName: [String!] + + """Filter epics by milestone title, computed from epic's issues.""" + milestoneTitle: String + + """Filter epics by IID for autocomplete.""" + iidStartsWith: String + + """Include epics from ancestor groups.""" + includeAncestorGroups: Boolean = false + + """Include epics from descendant groups.""" + includeDescendantGroups: Boolean = true + + """Filter epics by given confidentiality.""" + confidential: Boolean + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Negated epic arguments.""" + not: NegatedEpicFilterInput + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EpicConnection + + """Indicates if Epics are enabled for namespace""" + epicsEnabled: Boolean + + """Full name of the namespace.""" + fullName: String! + + """Full path of the namespace.""" + fullPath: ID! + + """A membership of a user within this group.""" + groupMembers( + """Search query.""" + search: String + + """Filter members by the given member relations.""" + relations: [GroupMemberRelation!] = [DIRECT, INHERITED] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupMemberConnection + + """ID of the namespace.""" + id: ID! + + """Status of the temporary storage increase.""" + isTemporaryStorageIncreaseEnabled: Boolean! + + """Issues for projects in this group.""" + issues( + """Search query for title or description.""" + search: String + + """IID of the issue. For example, "1".""" + iid: String + + """List of IIDs of issues. For example, `["1", "2"]`.""" + iids: [String!] + + """Labels applied to this issue.""" + labelName: [String] + + """Milestone applied to this issue.""" + milestoneTitle: [String] + + """Username of the author of the issue.""" + authorUsername: String + + """Usernames of users assigned to the issue.""" + assigneeUsernames: [String!] + + """ + ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + """ + assigneeId: String + + """Issues created before this date.""" + createdBefore: Time + + """Issues created after this date.""" + createdAfter: Time + + """Issues updated before this date.""" + updatedBefore: Time + + """Issues updated after this date.""" + updatedAfter: Time + + """Issues closed before this date.""" + closedBefore: Time + + """Issues closed after this date.""" + closedAfter: Time + + """Filter issues by the given issue types.""" + types: [IssueType!] + + """Filter issues by milestone ID wildcard.""" + milestoneWildcardId: MilestoneWildcardId + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """ + Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + """ + confidential: Boolean + + """Negated arguments.""" + not: NegatedIssueFilterInput + + """Current state of this issue.""" + state: IssuableState + + """Sort issues by this criteria.""" + sort: IssueSort = created_desc + + """List of iteration Global IDs applied to the issue.""" + iterationId: [ID] + + """Filter by iteration ID wildcard.""" + iterationWildcardId: IterationWildcardId + + """ + ID of an epic associated with the issues, "none" and "any" values are supported. + """ + epicId: String + + """Whether to include subepics when filtering issues by epicId.""" + includeSubepics: Boolean + + """Weight applied to the issue, "none" and "any" values are supported.""" + weight: String + + """Include issues belonging to subgroups""" + includeSubgroups: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IssueConnection + + """Find iteration cadences.""" + iterationCadences( + """Global ID of the iteration cadence to look up.""" + id: IterationsCadenceID + + """Fuzzy search by title.""" + title: String + + """Duration in weeks of the iterations within this cadence.""" + durationInWeeks: Int + + """ + Whether the iteration cadence should automatically generate future iterations. + """ + automatic: Boolean + + """Whether the iteration cadence is active.""" + active: Boolean + + """Whether to include ancestor groups to search iterations cadences in.""" + includeAncestorGroups: Boolean + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IterationCadenceConnection + + """Find iterations.""" + iterations( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Filter iterations by state.""" + state: IterationState + + """Fuzzy search by title.""" + title: String + + """Global ID of the Iteration to look up.""" + id: ID + + """Internal ID of the Iteration to look up.""" + iid: ID + + """Whether to include ancestor iterations. Defaults to true.""" + includeAncestors: Boolean + + """Global iteration cadence IDs by which to look up the iterations.""" + iterationCadenceIds: [IterationsCadenceID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IterationConnection + + """Label available on this group.""" + label( + """Title of the label.""" + title: String! + ): Label + + """Labels available on this group.""" + labels( + """Search term to find labels with.""" + searchTerm: String + + """Include labels from ancestor groups.""" + includeAncestorGroups: Boolean = false + + """Include labels from descendant groups.""" + includeDescendantGroups: Boolean = false + + """Include only group level labels.""" + onlyGroupLabels: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """Indicates if Large File Storage (LFS) is enabled for namespace.""" + lfsEnabled: Boolean + + """Indicates if a group is disabled from getting mentioned.""" + mentionsDisabled: Boolean + + """Merge requests for projects in this group.""" + mergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """Include merge requests belonging to subgroups""" + includeSubgroups: Boolean = false + + """Username of the assignee.""" + assigneeUsername: String + + """Username of the author.""" + authorUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Milestones of the group.""" + milestones( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`.""" + ids: [ID!] + + """Filter milestones by state.""" + state: MilestoneStateEnum + + """Title of the milestone.""" + title: String + + """Search string for the title.""" + searchTitle: String + + """Date the milestone contains.""" + containingDate: Time + + """Sort milestones by this criteria.""" + sort: MilestoneSort = DUE_DATE_ASC + + """Include milestones from all subgroups and subprojects.""" + includeDescendants: Boolean + + """Include milestones from all parent groups.""" + includeAncestors: Boolean + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MilestoneConnection + + """Name of the namespace.""" + name: String! + + """Find organizations of this group.""" + organizations( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CustomerRelationsOrganizationConnection + + """Package settings for the namespace.""" + packageSettings: PackageSettings + + """Packages of the group.""" + packages( + """Sort packages by this criteria.""" + sort: PackageGroupSort = CREATED_DESC + + """Search a package by name.""" + packageName: String = null + + """Filter a package by type.""" + packageType: PackageTypeEnum = null + + """Filter a package by status.""" + status: PackageStatus = null + + """Include versionless packages.""" + includeVersionless: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageConnection + + """Parent group.""" + parent: Group + + """Path of the namespace.""" + path: String! + + """Permission level required to create projects in the group.""" + projectCreationLevel: String + + """Projects within this namespace.""" + projects( + """Include also subgroup projects.""" + includeSubgroups: Boolean = false + + """Search project with most similar names or paths.""" + search: String = null + + """Sort projects by this criteria.""" + sort: NamespaceProjectSort = null + + """Filter projects by IDs.""" + ids: [ID!] = null + + """Returns only the projects which have code coverage.""" + hasCodeCoverage: Boolean = false + + """Returns only the projects which have vulnerabilities.""" + hasVulnerabilities: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection! + + """ + Number of projects in the root namespace where the repository size exceeds the limit. + """ + repositorySizeExcessProjectCount: Int! + + """Indicates if users can request access to namespace.""" + requestAccessEnabled: Boolean + + """ + Indicates if all users in this group are required to set up two-factor authentication. + """ + requireTwoFactorAuthentication: Boolean + + """ + Aggregated storage statistics of the namespace. Only available for root namespaces. + """ + rootStorageStatistics: RootStorageStatistics + + """Find runners visible to the current user.""" + runners( + """Filter runners by status.""" + status: CiRunnerStatus + + """Filter runners by type.""" + type: CiRunnerType + + """Filter by tags associated with the runner (comma-separated or array).""" + tagList: [String!] + + """Filter by full token or partial text in description field.""" + search: String + + """Sort order of results.""" + sort: CiRunnerSort + + """Control which runners to include in the results.""" + membership: RunnerMembershipFilter = DESCENDANTS + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiRunnerConnection + + """ + Indicates if sharing a project with another group within this group is prevented. + """ + shareWithGroupLock: Boolean + + """Shared runners availability for the namespace and its descendants.""" + sharedRunnersSetting: SharedRunnersSetting + + """Group statistics.""" + stats: GroupStats + + """Total storage limit of the root namespace in bytes.""" + storageSizeLimit: Float + + """Permission level required to create subgroups within the group.""" + subgroupCreationLevel: String + + """Date until the temporary storage increase is active.""" + temporaryStorageIncreaseEndsOn: Time + + """ + Time logged on issues and merge requests in the group and its subgroups. + """ + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection! + + """Total repository size of all projects in the root namespace in bytes.""" + totalRepositorySize: Float + + """ + Total excess repository size of all projects in the root namespace in bytes. + """ + totalRepositorySizeExcess: Float + + """Time before two-factor authentication is enforced.""" + twoFactorGracePeriod: Int + + """Permissions for the current user on the resource""" + userPermissions: GroupPermissions! + + """Visibility of the namespace.""" + visibility: String + + """ + Vulnerabilities reported on the projects in the group and its subgroups. + """ + vulnerabilities( + """Filter vulnerabilities by project.""" + projectId: [ID!] + + """Filter vulnerabilities by report type.""" + reportType: [VulnerabilityReportType!] + + """Filter vulnerabilities by severity.""" + severity: [VulnerabilitySeverity!] + + """Filter vulnerabilities by state.""" + state: [VulnerabilityState!] + + """Filter vulnerabilities by VulnerabilityScanner.externalId.""" + scanner: [String!] + + """Filter vulnerabilities by scanner ID.""" + scannerId: [VulnerabilitiesScannerID!] + + """List vulnerabilities by sort order.""" + sort: VulnerabilitySort = severity_desc + + """ + Returns only the vulnerabilities which have been resolved on default branch. + """ + hasResolution: Boolean + + """Returns only the vulnerabilities which have linked issues.""" + hasIssues: Boolean + + """ + Filter vulnerabilities by location image. When this filter is present, the + response only matches entries for a `reportType` that includes + `container_scanning`, `cluster_image_scanning`. + """ + image: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityConnection + + """ + The historical number of vulnerabilities per day for the projects in the group and its subgroups. + """ + vulnerabilitiesCountByDay( + """First day for which to fetch vulnerability history.""" + startDate: ISO8601Date! + + """Last day for which to fetch vulnerability history.""" + endDate: ISO8601Date! + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilitiesCountByDayConnection + + """Represents vulnerable project counts for each grade.""" + vulnerabilityGrades( + """Include grades belonging to subgroups.""" + includeSubgroups: Boolean = false + ): [VulnerableProjectsByGrade!]! + + """ + Vulnerability scanners reported on the project vulnerabilities of the group and its subgroups. + """ + vulnerabilityScanners( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityScannerConnection + + """Counts for each vulnerability severity in the group and its subgroups.""" + vulnerabilitySeveritiesCount( + """Filter vulnerabilities by project.""" + projectId: [ID!] + + """Filter vulnerabilities by report type.""" + reportType: [VulnerabilityReportType!] + + """Filter vulnerabilities by severity.""" + severity: [VulnerabilitySeverity!] + + """Filter vulnerabilities by state.""" + state: [VulnerabilityState!] + + """Filter vulnerabilities by scanner.""" + scanner: [String!] + + """Filter vulnerabilities by scanner ID.""" + scannerId: [VulnerabilitiesScannerID!] + + """Filter vulnerabilities that do or do not have issues.""" + hasIssues: Boolean + + """Filter vulnerabilities that do or do not have a resolution.""" + hasResolution: Boolean + ): VulnerabilitySeveritiesCount + + """Web URL of the group.""" + webUrl: String! +} + +"""The connection type for Group.""" +type GroupConnection { + """A list of edges.""" + edges: [GroupEdge] + + """A list of nodes.""" + nodes: [Group] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type GroupEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Group +} + +""" +A `GroupID` is a global ID. It is encoded as a string. + +An example `GroupID` is: `"gid://gitlab/Group/1"`. +""" +scalar GroupID + +"""Represents a Group Membership""" +type GroupMember implements MemberInterface { + """GitLab::Access level.""" + accessLevel: AccessLevel + + """Date and time the membership was created.""" + createdAt: Time + + """User that authorized membership.""" + createdBy: UserCore + + """Date and time the membership expires.""" + expiresAt: Time + + """Group that a User is a member of.""" + group: Group + + """ID of the member.""" + id: ID! + + """Date and time the membership was last updated.""" + updatedAt: Time + + """User that is associated with the member object.""" + user: UserCore + + """Permissions for the current user on the resource""" + userPermissions: GroupPermissions! +} + +"""The connection type for GroupMember.""" +type GroupMemberConnection { + """A list of edges.""" + edges: [GroupMemberEdge] + + """A list of nodes.""" + nodes: [GroupMember] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type GroupMemberEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: GroupMember +} + +"""Group member relation""" +enum GroupMemberRelation { + """Members in the group itself.""" + DIRECT + + """Members in the group's ancestor groups.""" + INHERITED + + """Members in the group's subgroups.""" + DESCENDANTS +} + +"""User permission on groups""" +enum GroupPermission { + """Groups where the user can create projects.""" + CREATE_PROJECTS +} + +type GroupPermissions { + """Indicates the user can perform `create_projects` on this resource""" + createProjects: Boolean! + + """Indicates the user can perform `read_group` on this resource""" + readGroup: Boolean! +} + +"""Contains release-related statistics about a group""" +type GroupReleaseStats { + """Total number of releases in all descendant projects of the group.""" + releasesCount: Int + + """ + Percentage of the group's descendant projects that have at least one release. + """ + releasesPercentage: Int +} + +"""Contains statistics about a group""" +type GroupStats { + """Statistics related to releases within the group.""" + releaseStats: GroupReleaseStats +} + +"""Autogenerated input type of GroupUpdate""" +input GroupUpdateInput { + """Full path of the group that will be updated.""" + fullPath: ID! + + """Shared runners availability for the namespace and its descendants.""" + sharedRunnersSetting: SharedRunnersSetting! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of GroupUpdate""" +type GroupUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Group after update.""" + group: Group +} + +""" +Represents the Geo sync and verification state of a group wiki repository +""" +type GroupWikiRepositoryRegistry { + """Timestamp when the GroupWikiRepositoryRegistry was created""" + createdAt: Time + + """ID of the Group Wiki Repository.""" + groupWikiRepositoryId: ID! + + """ID of the GroupWikiRepositoryRegistry""" + id: ID! + + """Error message during sync of the GroupWikiRepositoryRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the GroupWikiRepositoryRegistry + """ + lastSyncedAt: Time + + """ + Timestamp after which the GroupWikiRepositoryRegistry should be resynced + """ + retryAt: Time + + """ + Number of consecutive failed sync attempts of the GroupWikiRepositoryRegistry + """ + retryCount: Int + + """Sync state of the GroupWikiRepositoryRegistry""" + state: RegistryState +} + +"""The connection type for GroupWikiRepositoryRegistry.""" +type GroupWikiRepositoryRegistryConnection { + """A list of edges.""" + edges: [GroupWikiRepositoryRegistryEdge] + + """A list of nodes.""" + nodes: [GroupWikiRepositoryRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type GroupWikiRepositoryRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: GroupWikiRepositoryRegistry +} + +"""Health status of an issue or epic""" +enum HealthStatus { + """On track""" + onTrack + + """Needs attention""" + needsAttention + + """At risk""" + atRisk +} + +"""Autogenerated input type of HttpIntegrationCreate""" +input HttpIntegrationCreateInput { + """Project to create the integration in.""" + projectPath: ID! + + """Name of the integration.""" + name: String! + + """Whether the integration is receiving alerts.""" + active: Boolean! + + """Example of an alert payload.""" + payloadExample: JsonString + + """ + Custom mapping of GitLab alert attributes to fields from the payload example. + """ + payloadAttributeMappings: [AlertManagementPayloadAlertFieldInput!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of HttpIntegrationCreate""" +type HttpIntegrationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """HTTP integration.""" + integration: AlertManagementHttpIntegration +} + +"""Autogenerated input type of HttpIntegrationDestroy""" +input HttpIntegrationDestroyInput { + """ID of the integration to remove.""" + id: AlertManagementHttpIntegrationID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of HttpIntegrationDestroy""" +type HttpIntegrationDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """HTTP integration.""" + integration: AlertManagementHttpIntegration +} + +"""Autogenerated input type of HttpIntegrationResetToken""" +input HttpIntegrationResetTokenInput { + """ID of the integration to mutate.""" + id: AlertManagementHttpIntegrationID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of HttpIntegrationResetToken""" +type HttpIntegrationResetTokenPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """HTTP integration.""" + integration: AlertManagementHttpIntegration +} + +"""Autogenerated input type of HttpIntegrationUpdate""" +input HttpIntegrationUpdateInput { + """ID of the integration to mutate.""" + id: AlertManagementHttpIntegrationID! + + """Name of the integration.""" + name: String + + """Whether the integration is receiving alerts.""" + active: Boolean + + """Example of an alert payload.""" + payloadExample: JsonString + + """ + Custom mapping of GitLab alert attributes to fields from the payload example. + """ + payloadAttributeMappings: [AlertManagementPayloadAlertFieldInput!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of HttpIntegrationUpdate""" +type HttpIntegrationUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """HTTP integration.""" + integration: AlertManagementHttpIntegration +} + +""" +A `IncidentManagementEscalationPolicyID` is a global ID. It is encoded as a string. + +An example `IncidentManagementEscalationPolicyID` is: `"gid://gitlab/IncidentManagement::EscalationPolicy/1"`. +""" +scalar IncidentManagementEscalationPolicyID + +""" +A `IncidentManagementEscalationRuleID` is a global ID. It is encoded as a string. + +An example `IncidentManagementEscalationRuleID` is: `"gid://gitlab/IncidentManagement::EscalationRule/1"`. +""" +scalar IncidentManagementEscalationRuleID + +""" +A `IncidentManagementOncallParticipantID` is a global ID. It is encoded as a string. + +An example `IncidentManagementOncallParticipantID` is: `"gid://gitlab/IncidentManagement::OncallParticipant/1"`. +""" +scalar IncidentManagementOncallParticipantID + +"""Describes an incident management on-call rotation""" +type IncidentManagementOncallRotation { + """Active period for the on-call rotation.""" + activePeriod: OncallRotationActivePeriodType + + """End date and time of the on-call rotation.""" + endsAt: Time + + """ID of the on-call rotation.""" + id: IncidentManagementOncallRotationID! + + """Length of the on-call schedule, in the units specified by lengthUnit.""" + length: Int + + """Unit of the on-call rotation length.""" + lengthUnit: OncallRotationUnitEnum + + """Name of the on-call rotation.""" + name: String! + + """Participants of the on-call rotation.""" + participants( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): OncallParticipantTypeConnection + + """ + Blocks of time for which a participant is on-call within a given time frame. Time frame cannot exceed one month. + """ + shifts( + """Start of timeframe to include shifts for.""" + startTime: Time! + + """ + End of timeframe to include shifts for. Cannot exceed one month after start. + """ + endTime: Time! + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IncidentManagementOncallShiftConnection + + """Start date of the on-call rotation.""" + startsAt: Time +} + +"""The connection type for IncidentManagementOncallRotation.""" +type IncidentManagementOncallRotationConnection { + """A list of edges.""" + edges: [IncidentManagementOncallRotationEdge] + + """A list of nodes.""" + nodes: [IncidentManagementOncallRotation] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type IncidentManagementOncallRotationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: IncidentManagementOncallRotation +} + +""" +A `IncidentManagementOncallRotationID` is a global ID. It is encoded as a string. + +An example `IncidentManagementOncallRotationID` is: `"gid://gitlab/IncidentManagement::OncallRotation/1"`. +""" +scalar IncidentManagementOncallRotationID + +"""Describes an incident management on-call schedule""" +type IncidentManagementOncallSchedule { + """Description of the on-call schedule.""" + description: String + + """Internal ID of the on-call schedule.""" + iid: ID! + + """Name of the on-call schedule.""" + name: String! + oncallUsers: [UserCore!] + + """On-call rotation for the on-call schedule.""" + rotation( + """ID of the on-call rotation.""" + id: IncidentManagementOncallRotationID! + ): IncidentManagementOncallRotation + + """On-call rotations for the on-call schedule.""" + rotations( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IncidentManagementOncallRotationConnection! + + """Time zone of the on-call schedule.""" + timezone: String! +} + +"""The connection type for IncidentManagementOncallSchedule.""" +type IncidentManagementOncallScheduleConnection { + """A list of edges.""" + edges: [IncidentManagementOncallScheduleEdge] + + """A list of nodes.""" + nodes: [IncidentManagementOncallSchedule] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type IncidentManagementOncallScheduleEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: IncidentManagementOncallSchedule +} + +"""A block of time for which a participant is on-call.""" +type IncidentManagementOncallShift { + """End time of the on-call shift.""" + endsAt: Time + + """Participant assigned to the on-call shift.""" + participant: OncallParticipantType + + """Start time of the on-call shift.""" + startsAt: Time +} + +"""The connection type for IncidentManagementOncallShift.""" +type IncidentManagementOncallShiftConnection { + """A list of edges.""" + edges: [IncidentManagementOncallShiftEdge] + + """A list of nodes.""" + nodes: [IncidentManagementOncallShift] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type IncidentManagementOncallShiftEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: IncidentManagementOncallShift +} + +type InstanceSecurityDashboard { + """Projects selected in Instance Security Dashboard.""" + projects( + """Search query for project name, path, or description.""" + search: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection! + + """Represents vulnerable project counts for each grade.""" + vulnerabilityGrades: [VulnerableProjectsByGrade!]! + + """ + Vulnerability scanners reported on the vulnerabilities from projects selected in Instance Security Dashboard. + """ + vulnerabilityScanners( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityScannerConnection + + """ + Counts for each vulnerability severity from projects selected in Instance Security Dashboard. + """ + vulnerabilitySeveritiesCount( + """Filter vulnerabilities by project.""" + projectId: [ID!] + + """Filter vulnerabilities by report type.""" + reportType: [VulnerabilityReportType!] + + """Filter vulnerabilities by severity.""" + severity: [VulnerabilitySeverity!] + + """Filter vulnerabilities by state.""" + state: [VulnerabilityState!] + + """Filter vulnerabilities by scanner.""" + scanner: [String!] + + """Filter vulnerabilities by scanner ID.""" + scannerId: [VulnerabilitiesScannerID!] + + """Filter vulnerabilities that do or do not have issues.""" + hasIssues: Boolean + + """Filter vulnerabilities that do or do not have a resolution.""" + hasResolution: Boolean + ): VulnerabilitySeveritiesCount +} + +""" +A `IntegrationsPrometheusID` is a global ID. It is encoded as a string. + +An example `IntegrationsPrometheusID` is: `"gid://gitlab/Integrations::Prometheus/1"`. +The older format `"gid://gitlab/PrometheusService/1"` was deprecated in 14.1. +""" +scalar IntegrationsPrometheusID + +"""An ISO 8601-encoded date""" +scalar ISO8601Date + +"""Represents an issuable.""" +union Issuable = Epic | Issue | MergeRequest + +""" +A `IssuableID` is a global ID. It is encoded as a string. + +An example `IssuableID` is: `"gid://gitlab/Issuable/1"`. +""" +scalar IssuableID + +"""Fields to perform the search in""" +enum IssuableSearchableField { + """Search in title field.""" + TITLE + + """Search in description field.""" + DESCRIPTION +} + +"""Incident severity""" +enum IssuableSeverity { + """Unknown severity""" + UNKNOWN + + """Low severity""" + LOW + + """Medium severity""" + MEDIUM + + """High severity""" + HIGH + + """Critical severity""" + CRITICAL +} + +"""State of a GitLab issue or merge request""" +enum IssuableState { + """In open state.""" + opened + + """In closed state.""" + closed + + """Discussion has been locked.""" + locked + + """All available.""" + all +} + +type Issue implements NoteableInterface & CurrentUserTodos { + """Alert associated to this issue.""" + alertManagementAlert: AlertManagementAlert + + """Assignees of the issue.""" + assignees( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """User that created the issue.""" + author: UserCore! + + """Indicates the issue is blocked.""" + blocked: Boolean! + + """Count of issues blocking this issue.""" + blockedByCount: Int + + """Issues blocking this issue.""" + blockedByIssues( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IssueConnection + + """Count of issues this issue is blocking.""" + blockingCount: Int! + + """Timestamp of when the issue was closed.""" + closedAt: Time + + """Indicates the issue is confidential.""" + confidential: Boolean! + + """User specific email address for the issue.""" + createNoteEmail: String + + """Timestamp of when the issue was created.""" + createdAt: Time! + + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! + + """Customer relations contacts of the issue.""" + customerRelationsContacts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CustomerRelationsContactConnection + + """Description of the issue.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Collection of design images associated with this issue.""" + designCollection: DesignCollection + + """Indicates discussion is locked on the issue.""" + discussionLocked: Boolean! + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Number of downvotes the issue has received.""" + downvotes: Int! + + """Due date of the issue.""" + dueDate: Time + + """ + Indicates if a project has email notifications disabled: `true` if email notifications are disabled. + """ + emailsDisabled: Boolean! + + """Epic to which this issue belongs.""" + epic: Epic + + """Current health status.""" + healthStatus: HealthStatus + + """ + Indicates the issue is hidden because the author has been banned. Will always + return `null` if `ban_user_feature_flag` feature flag is disabled. + """ + hidden: Boolean + + """Human-readable time estimate of the issue.""" + humanTimeEstimate: String + + """Human-readable total time reported as spent on the issue.""" + humanTotalTimeSpent: String + + """ID of the issue.""" + id: ID! + + """Internal ID of the issue.""" + iid: ID! + + """Iteration of the issue.""" + iteration: Iteration + + """Labels of the issue.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """Number of merge requests that close the issue on merge.""" + mergeRequestsCount: Int! + + """Metric images associated to the issue.""" + metricImages: [MetricImage!] + + """Milestone of the issue.""" + milestone: Milestone + + """Indicates if issue got moved from other project.""" + moved: Boolean + + """Updated Issue after it got moved to another project.""" + movedTo: Issue + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """List of participants in the issue.""" + participants( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """ID of the issue project.""" + projectId: Int! + + """ + Internal reference of the issue. Returned in shortened format by default. + """ + reference( + """ + Boolean option specifying whether the reference should be returned in full. + """ + full: Boolean = false + ): String! + + """ + Relative position of the issue (used for positioning in epic tree and issue boards). + """ + relativePosition: Int + + """Severity level of the incident.""" + severity: IssuableSeverity + + """Timestamp of when the issue SLA expires.""" + slaDueAt: Time + + """State of the issue.""" + state: IssueState! + + """Indicates whether an issue is published to the status page.""" + statusPagePublishedIncident: Boolean + + """Indicates the currently logged in user is subscribed to the issue.""" + subscribed: Boolean! + + """Task completion status of the issue.""" + taskCompletionStatus: TaskCompletionStatus! + + """Time estimate of the issue.""" + timeEstimate: Int! + + """Timelogs on the issue.""" + timelogs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection! + + """Title of the issue.""" + title: String! + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Total time reported as spent on the issue.""" + totalTimeSpent: Int! + + """Type of the issue.""" + type: IssueType + + """Timestamp of when the issue was last updated.""" + updatedAt: Time! + + """User that last updated the issue.""" + updatedBy: UserCore + + """Number of upvotes the issue has received.""" + upvotes: Int! + + """Number of user discussions in the issue.""" + userDiscussionsCount: Int! + + """Number of user notes of the issue.""" + userNotesCount: Int! + + """Permissions for the current user on the resource""" + userPermissions: IssuePermissions! + + """Web path of the issue.""" + webPath: String! + + """Web URL of the issue.""" + webUrl: String! + + """Weight of the issue.""" + weight: Int +} + +"""The connection type for Issue.""" +type IssueConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [IssueEdge] + + """A list of nodes.""" + nodes: [Issue] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Total weight of issues collection.""" + weight: Int! +} + +"""Iteration ID wildcard values for issue creation""" +enum IssueCreationIterationWildcardId { + """Current iteration.""" + CURRENT +} + +"""An edge in a connection.""" +type IssueEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Issue +} + +""" +A `IssueID` is a global ID. It is encoded as a string. + +An example `IssueID` is: `"gid://gitlab/Issue/1"`. +""" +scalar IssueID + +"""Autogenerated input type of IssueMove""" +input IssueMoveInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Project to move the issue to.""" + targetProjectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated input type of IssueMoveList""" +input IssueMoveListInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Global ID of the board that the issue is in.""" + boardId: BoardID! + + """ID of the board list that the issue will be moved from.""" + fromListId: ID + + """ID of the board list that the issue will be moved to.""" + toListId: ID + + """ID of issue that should be placed before the current issue.""" + moveBeforeId: ID + + """ID of issue that should be placed after the current issue.""" + moveAfterId: ID + + """ID of the parent epic. NULL when removing the association.""" + epicId: EpicID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueMoveList""" +type IssueMoveListPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated return type of IssueMove""" +type IssueMovePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Check permissions for the current user on a issue""" +type IssuePermissions { + """Indicates the user can perform `admin_issue` on this resource""" + adminIssue: Boolean! + + """Indicates the user can perform `create_design` on this resource""" + createDesign: Boolean! + + """Indicates the user can perform `create_note` on this resource""" + createNote: Boolean! + + """Indicates the user can perform `destroy_design` on this resource""" + destroyDesign: Boolean! + + """Indicates the user can perform `read_design` on this resource""" + readDesign: Boolean! + + """Indicates the user can perform `read_issue` on this resource""" + readIssue: Boolean! + + """Indicates the user can perform `reopen_issue` on this resource""" + reopenIssue: Boolean! + + """Indicates the user can perform `update_issue` on this resource""" + updateIssue: Boolean! +} + +"""Autogenerated input type of IssueSetAssignees""" +input IssueSetAssigneesInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """ + Usernames to assign to the resource. Replaces existing assignees by default. + """ + assigneeUsernames: [String!]! + + """Operation to perform. Defaults to REPLACE.""" + operationMode: MutationOperationMode = REPLACE + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetAssignees""" +type IssueSetAssigneesPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetConfidential""" +input IssueSetConfidentialInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Whether or not to set the issue as a confidential.""" + confidential: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetConfidential""" +type IssueSetConfidentialPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetDueDate""" +input IssueSetDueDateInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Desired due date for the issue. Due date is removed if null.""" + dueDate: Time + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetDueDate""" +type IssueSetDueDatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetEpic""" +input IssueSetEpicInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """ + Global ID of the epic to be assigned to the issue, epic will be removed if absent or set to null + """ + epicId: EpicID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetEpic""" +type IssueSetEpicPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetIteration""" +input IssueSetIterationInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """ + Iteration to assign to the issue. + + """ + iterationId: IterationID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetIteration""" +type IssueSetIterationPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetLocked""" +input IssueSetLockedInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Whether or not to lock discussion on the issue.""" + locked: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetLocked""" +type IssueSetLockedPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetSeverity""" +input IssueSetSeverityInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Set the incident severity level.""" + severity: IssuableSeverity! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetSeverity""" +type IssueSetSeverityPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetSubscription""" +input IssueSetSubscriptionInput { + """Desired state of the subscription.""" + subscribedState: Boolean! + + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetSubscription""" +type IssueSetSubscriptionPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of IssueSetWeight""" +input IssueSetWeightInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """The desired weight for the issue. If set to null, weight is removed.""" + weight: Int + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IssueSetWeight""" +type IssueSetWeightPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Values for sorting issues""" +enum IssueSort { + """Updated at descending order.""" + updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.") + + """Updated at ascending order.""" + updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.") + + """Created at descending order.""" + created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.") + + """Created at ascending order.""" + created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.") + + """Updated at descending order.""" + UPDATED_DESC + + """Updated at ascending order.""" + UPDATED_ASC + + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC + + """Priority by ascending order.""" + PRIORITY_ASC + + """Priority by descending order.""" + PRIORITY_DESC + + """Label priority by ascending order.""" + LABEL_PRIORITY_ASC + + """Label priority by descending order.""" + LABEL_PRIORITY_DESC + + """Milestone due date by ascending order.""" + MILESTONE_DUE_ASC + + """Milestone due date by descending order.""" + MILESTONE_DUE_DESC + + """Due date by ascending order.""" + DUE_DATE_ASC + + """Due date by descending order.""" + DUE_DATE_DESC + + """Relative position by ascending order.""" + RELATIVE_POSITION_ASC + + """Severity from less critical to more critical.""" + SEVERITY_ASC + + """Severity from more critical to less critical.""" + SEVERITY_DESC + + """Title by ascending order.""" + TITLE_ASC + + """Title by descending order.""" + TITLE_DESC + + """Number of upvotes (awarded "thumbs up" emoji) by ascending order.""" + POPULARITY_ASC + + """Number of upvotes (awarded "thumbs up" emoji) by descending order.""" + POPULARITY_DESC + + """Weight by ascending order.""" + WEIGHT_ASC + + """Weight by descending order.""" + WEIGHT_DESC + + """Published issues shown last.""" + PUBLISHED_ASC + + """Published issues shown first.""" + PUBLISHED_DESC + + """Issues with earliest SLA due time shown first.""" + SLA_DUE_AT_ASC + + """Issues with latest SLA due time shown first.""" + SLA_DUE_AT_DESC + + """Blocking issues count by ascending order.""" + BLOCKING_ISSUES_ASC + + """Blocking issues count by descending order.""" + BLOCKING_ISSUES_DESC +} + +"""State of a GitLab issue""" +enum IssueState { + """In open state.""" + opened + + """In closed state.""" + closed + + """Discussion has been locked.""" + locked + + """All available.""" + all +} + +"""Values for issue state events""" +enum IssueStateEvent { + """Reopens the issue.""" + REOPEN + + """Closes the issue.""" + CLOSE +} + +"""Represents total number of issues for the represented statuses""" +type IssueStatusCountsType { + """Number of issues with status ALL for the project""" + all: Int + + """Number of issues with status CLOSED for the project""" + closed: Int + + """Number of issues with status OPENED for the project""" + opened: Int +} + +"""Issue type""" +enum IssueType { + """Issue issue type""" + ISSUE + + """Incident issue type""" + INCIDENT + + """Test Case issue type""" + TEST_CASE + + """Requirement issue type""" + REQUIREMENT +} + +"""Represents an iteration object""" +type Iteration implements TimeboxReportInterface { + """Timestamp of iteration creation.""" + createdAt: Time! + + """Description of the iteration.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Timestamp of the iteration due date.""" + dueDate: Time + + """ID of the iteration.""" + id: ID! + + """Internal ID of the iteration.""" + iid: ID! + + """Cadence of the iteration.""" + iterationCadence: IterationCadence! + + """Historically accurate report about the timebox.""" + report: TimeboxReport + + """ + Web path of the iteration, scoped to the query parent. Only valid for Project parents. Returns null in other contexts. + """ + scopedPath: String + + """ + Web URL of the iteration, scoped to the query parent. Only valid for Project parents. Returns null in other contexts. + """ + scopedUrl: String + + """Timestamp of the iteration start date.""" + startDate: Time + + """State of the iteration.""" + state: IterationState! + + """Title of the iteration.""" + title: String! + + """Timestamp of last iteration update.""" + updatedAt: Time! + + """Web path of the iteration.""" + webPath: String! + + """Web URL of the iteration.""" + webUrl: String! +} + +"""Represents an iteration cadence""" +type IterationCadence { + """Whether the iteration cadence is active.""" + active: Boolean + + """ + Whether the iteration cadence should automatically generate future iterations. + """ + automatic: Boolean + + """ + Description of the iteration cadence. Maximum length is 5000 characters. + """ + description: String + + """Duration in weeks of the iterations within this cadence.""" + durationInWeeks: Int + + """Global ID of the iteration cadence.""" + id: IterationsCadenceID! + + """ + Future iterations to be created when iteration cadence is set to automatic. + """ + iterationsInAdvance: Int + + """ + Whether the iteration cadence should roll over issues to the next iteration or not. + """ + rollOver: Boolean! + + """Timestamp of the iteration cadence start date.""" + startDate: Time + + """Title of the iteration cadence.""" + title: String! +} + +"""The connection type for IterationCadence.""" +type IterationCadenceConnection { + """A list of edges.""" + edges: [IterationCadenceEdge] + + """A list of nodes.""" + nodes: [IterationCadence] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of IterationCadenceCreate""" +input IterationCadenceCreateInput { + """Group where the iteration cadence is created.""" + groupPath: ID! + + """Title of the iteration cadence.""" + title: String + + """Duration in weeks of the iterations within this cadence.""" + durationInWeeks: Int + + """ + Future iterations to be created when iteration cadence is set to automatic. + """ + iterationsInAdvance: Int + + """Timestamp of the iteration cadence start date.""" + startDate: Time + + """ + Whether the iteration cadence should automatically generate future iterations. + """ + automatic: Boolean! + + """Whether the iteration cadence is active.""" + active: Boolean! + + """ + Whether the iteration cadence should roll over issues to the next iteration or not. + """ + rollOver: Boolean + + """ + Description of the iteration cadence. Maximum length is 5000 characters. + """ + description: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IterationCadenceCreate""" +type IterationCadenceCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Created iteration cadence.""" + iterationCadence: IterationCadence +} + +"""Autogenerated input type of IterationCadenceDestroy""" +input IterationCadenceDestroyInput { + """Global ID of the iteration cadence.""" + id: IterationsCadenceID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IterationCadenceDestroy""" +type IterationCadenceDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Group the iteration cadence belongs to.""" + group: Group! +} + +"""An edge in a connection.""" +type IterationCadenceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: IterationCadence +} + +"""Autogenerated input type of IterationCadenceUpdate""" +input IterationCadenceUpdateInput { + """Global ID of the iteration cadence.""" + id: IterationsCadenceID! + + """Title of the iteration cadence.""" + title: String + + """Duration in weeks of the iterations within this cadence.""" + durationInWeeks: Int + + """ + Future iterations to be created when iteration cadence is set to automatic. + """ + iterationsInAdvance: Int + + """Timestamp of the iteration cadence start date.""" + startDate: Time + + """ + Whether the iteration cadence should automatically generate future iterations. + """ + automatic: Boolean + + """Whether the iteration cadence is active.""" + active: Boolean + + """ + Whether the iteration cadence should roll over issues to the next iteration or not. + """ + rollOver: Boolean + + """ + Description of the iteration cadence. Maximum length is 5000 characters. + """ + description: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IterationCadenceUpdate""" +type IterationCadenceUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Updated iteration cadence.""" + iterationCadence: IterationCadence +} + +"""The connection type for Iteration.""" +type IterationConnection { + """A list of edges.""" + edges: [IterationEdge] + + """A list of nodes.""" + nodes: [Iteration] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of iterationCreate""" +input iterationCreateInput { + """Full path of the project with which the resource is associated.""" + projectPath: ID + + """Full path of the group with which the resource is associated.""" + groupPath: ID + + """ + Global ID of the iterations cadence to be assigned to newly created iteration. + """ + iterationsCadenceId: IterationsCadenceID + + """Title of the iteration.""" + title: String + + """Description of the iteration.""" + description: String + + """Start date of the iteration.""" + startDate: String + + """End date of the iteration.""" + dueDate: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of iterationCreate""" +type iterationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Created iteration.""" + iteration: Iteration +} + +"""Autogenerated input type of IterationDelete""" +input IterationDeleteInput { + """ID of the iteration.""" + id: IterationID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of IterationDelete""" +type IterationDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Group the iteration belongs to.""" + group: Group! +} + +"""An edge in a connection.""" +type IterationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Iteration +} + +""" +A `IterationID` is a global ID. It is encoded as a string. + +An example `IterationID` is: `"gid://gitlab/Iteration/1"`. +The older format `"gid://gitlab/EEIteration/1"` was deprecated in 13.3. +""" +scalar IterationID + +""" +A `IterationsCadenceID` is a global ID. It is encoded as a string. + +An example `IterationsCadenceID` is: `"gid://gitlab/Iterations::Cadence/1"`. +""" +scalar IterationsCadenceID + +"""State of a GitLab iteration""" +enum IterationState { + """Upcoming iteration.""" + upcoming + + """Started iteration. Deprecated in 14.1: Use current instead.""" + started @deprecated(reason: "Use current instead. Deprecated in 14.1.") + + """Current iteration.""" + current + + """Open iteration.""" + opened + + """Closed iteration.""" + closed + + """Any iteration.""" + all +} + +"""Iteration ID wildcard values""" +enum IterationWildcardId { + """No iteration is assigned.""" + NONE + + """An iteration is assigned.""" + ANY + + """Current iteration.""" + CURRENT +} + +type JiraImport { + """Timestamp of when the Jira import was created.""" + createdAt: Time + + """Count of issues that failed to import.""" + failedToImportCount: Int! + + """Count of issues that were successfully imported.""" + importedIssuesCount: Int! + + """Project key for the imported Jira project.""" + jiraProjectKey: String! + + """Timestamp of when the Jira import was scheduled.""" + scheduledAt: Time + + """User that started the Jira import.""" + scheduledBy: UserCore + + """Total count of issues that were attempted to import.""" + totalIssueCount: Int! +} + +"""The connection type for JiraImport.""" +type JiraImportConnection { + """A list of edges.""" + edges: [JiraImportEdge] + + """A list of nodes.""" + nodes: [JiraImport] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type JiraImportEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: JiraImport +} + +"""Autogenerated input type of JiraImportStart""" +input JiraImportStartInput { + """Project to import the Jira project into.""" + projectPath: ID! + + """Project key of the importer Jira project.""" + jiraProjectKey: String! + + """Project name of the importer Jira project.""" + jiraProjectName: String + + """Mapping of Jira to GitLab users.""" + usersMapping: [JiraUsersMappingInputType!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of JiraImportStart""" +type JiraImportStartPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Jira import data after mutation.""" + jiraImport: JiraImport +} + +"""Autogenerated input type of JiraImportUsers""" +input JiraImportUsersInput { + """Project to import the Jira users into.""" + projectPath: ID! + + """ + Index of the record the import should started at, default 0 (50 records returned). + """ + startAt: Int + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of JiraImportUsers""" +type JiraImportUsersPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Users returned from Jira, matched by email and name if possible.""" + jiraUsers: [JiraUser!] +} + +type JiraProject { + """Key of the Jira project.""" + key: String! + + """Name of the Jira project.""" + name: String + + """ID of the Jira project.""" + projectId: Int! +} + +"""The connection type for JiraProject.""" +type JiraProjectConnection { + """A list of edges.""" + edges: [JiraProjectEdge] + + """A list of nodes.""" + nodes: [JiraProject] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type JiraProjectEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: JiraProject +} + +type JiraService implements Service { + """Indicates if the service is active.""" + active: Boolean + + """List of all Jira projects fetched through Jira REST API.""" + projects( + """Project name or key.""" + name: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): JiraProjectConnection + + """Class name of the service.""" + type: String +} + +type JiraUser { + """ID of the matched GitLab user.""" + gitlabId: Int + + """Name of the matched GitLab user.""" + gitlabName: String + + """Username of the matched GitLab user.""" + gitlabUsername: String + + """Account ID of the Jira user.""" + jiraAccountId: String! + + """Display name of the Jira user.""" + jiraDisplayName: String! + + """Email of the Jira user, returned only for users with public emails.""" + jiraEmail: String +} + +input JiraUsersMappingInputType { + """Jira account ID of the user.""" + jiraAccountId: String! + + """ID of the GitLab user.""" + gitlabId: Int +} + +enum JobArtifactFileType { + """ARCHIVE job artifact file type.""" + ARCHIVE + + """METADATA job artifact file type.""" + METADATA + + """TRACE job artifact file type.""" + TRACE + + """JUNIT job artifact file type.""" + JUNIT + + """METRICS job artifact file type.""" + METRICS + + """METRICS REFEREE job artifact file type.""" + METRICS_REFEREE + + """NETWORK REFEREE job artifact file type.""" + NETWORK_REFEREE + + """DOTENV job artifact file type.""" + DOTENV + + """COBERTURA job artifact file type.""" + COBERTURA + + """CLUSTER APPLICATIONS job artifact file type.""" + CLUSTER_APPLICATIONS + + """LSIF job artifact file type.""" + LSIF + + """SAST job artifact file type.""" + SAST + + """SECRET DETECTION job artifact file type.""" + SECRET_DETECTION + + """DEPENDENCY SCANNING job artifact file type.""" + DEPENDENCY_SCANNING + + """CONTAINER SCANNING job artifact file type.""" + CONTAINER_SCANNING + + """CLUSTER IMAGE SCANNING job artifact file type.""" + CLUSTER_IMAGE_SCANNING + + """DAST job artifact file type.""" + DAST + + """LICENSE SCANNING job artifact file type.""" + LICENSE_SCANNING + + """ACCESSIBILITY job artifact file type.""" + ACCESSIBILITY + + """CODE QUALITY job artifact file type.""" + CODEQUALITY + + """PERFORMANCE job artifact file type.""" + PERFORMANCE + + """BROWSER PERFORMANCE job artifact file type.""" + BROWSER_PERFORMANCE + + """LOAD PERFORMANCE job artifact file type.""" + LOAD_PERFORMANCE + + """TERRAFORM job artifact file type.""" + TERRAFORM + + """REQUIREMENTS job artifact file type.""" + REQUIREMENTS + + """COVERAGE FUZZING job artifact file type.""" + COVERAGE_FUZZING + + """API FUZZING job artifact file type.""" + API_FUZZING +} + +"""Autogenerated input type of JobCancel""" +input JobCancelInput { + """ID of the job to mutate.""" + id: CiBuildID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of JobCancel""" +type JobCancelPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Job after the mutation.""" + job: CiJob +} + +""" +A `CommitStatusID` is a global ID. It is encoded as a string. + +An example `CommitStatusID` is: `"gid://gitlab/CommitStatus/1"`. +""" +scalar JobID + +type JobPermissions { + """Indicates the user can perform `read_build` on this resource""" + readBuild: Boolean! + + """Indicates the user can perform `read_job_artifacts` on this resource""" + readJobArtifacts: Boolean! + + """Indicates the user can perform `update_build` on this resource""" + updateBuild: Boolean! +} + +"""Autogenerated input type of JobPlay""" +input JobPlayInput { + """ID of the job to mutate.""" + id: CiBuildID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of JobPlay""" +type JobPlayPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Job after the mutation.""" + job: CiJob +} + +"""Autogenerated input type of JobRetry""" +input JobRetryInput { + """ID of the job to mutate.""" + id: CiBuildID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of JobRetry""" +type JobRetryPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Job after the mutation.""" + job: CiJob +} + +"""Autogenerated input type of JobUnschedule""" +input JobUnscheduleInput { + """ID of the job to mutate.""" + id: CiBuildID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of JobUnschedule""" +type JobUnschedulePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Job after the mutation.""" + job: CiJob +} + +"""Represents untyped JSON""" +scalar JSON + +"""JSON object as raw string""" +scalar JsonString + +type Kas { + """Indicates whether the Kubernetes Agent Server is enabled.""" + enabled: Boolean! + + """URL used by the Agents to communicate with KAS.""" + externalUrl: String + + """KAS version.""" + version: String +} + +type Label { + """Background color of the label.""" + color: String! + + """When this label was created.""" + createdAt: Time! + + """Description of the label (Markdown rendered as HTML for caching).""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Label ID.""" + id: ID! + + """Text color of the label.""" + textColor: String! + + """Content of the label.""" + title: String! + + """When this label was last updated.""" + updatedAt: Time! +} + +"""The connection type for Label.""" +type LabelConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [LabelEdge] + + """A list of nodes.""" + nodes: [Label] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of LabelCreate""" +input LabelCreateInput { + """Full path of the project with which the resource is associated.""" + projectPath: ID + + """Full path of the group with which the resource is associated.""" + groupPath: ID + + """Title of the label.""" + title: String! + + """Description of the label.""" + description: String + + """ + The color of the label given in 6-digit hex notation with leading '#' sign + (for example, `#FFAABB`) or one of the CSS color names. + + """ + color: String = "#6699cc" + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of LabelCreate""" +type LabelCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Label after mutation.""" + label: Label +} + +"""An edge in a connection.""" +type LabelEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Label +} + +""" +A `LabelID` is a global ID. It is encoded as a string. + +An example `LabelID` is: `"gid://gitlab/Label/1"`. +""" +scalar LabelID + +"""Represents the Geo sync and verification state of an LFS object""" +type LfsObjectRegistry { + """Timestamp when the LfsObjectRegistry was created""" + createdAt: Time + + """ID of the LfsObjectRegistry""" + id: ID! + + """Error message during sync of the LfsObjectRegistry""" + lastSyncFailure: String + + """Timestamp of the most recent successful sync of the LfsObjectRegistry""" + lastSyncedAt: Time + + """ID of the LFS object.""" + lfsObjectId: ID! + + """Timestamp after which the LfsObjectRegistry should be resynced""" + retryAt: Time + + """Number of consecutive failed sync attempts of the LfsObjectRegistry""" + retryCount: Int + + """Sync state of the LfsObjectRegistry""" + state: RegistryState +} + +"""The connection type for LfsObjectRegistry.""" +type LfsObjectRegistryConnection { + """A list of edges.""" + edges: [LfsObjectRegistryEdge] + + """A list of nodes.""" + nodes: [LfsObjectRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type LfsObjectRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: LfsObjectRegistry +} + +"""Represents an entry from the Cloud License history""" +type LicenseHistoryEntry { + """Date when the license was activated.""" + activatedAt: Date + + """Date, including grace period, when licensed features will be blocked.""" + blockChangesAt: Date + + """Company of the licensee.""" + company: String + + """Email of the licensee.""" + email: String + + """Date when the license expires.""" + expiresAt: Date + + """ID of the license.""" + id: ID! + + """Name of the licensee.""" + name: String + + """Name of the subscription plan.""" + plan: String! + + """Date when the license started.""" + startsAt: Date + + """Type of the license.""" + type: String! + + """Number of paid users in the license.""" + usersInLicenseCount: Int +} + +"""The connection type for LicenseHistoryEntry.""" +type LicenseHistoryEntryConnection { + """A list of edges.""" + edges: [LicenseHistoryEntryEdge] + + """A list of nodes.""" + nodes: [LicenseHistoryEntry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type LicenseHistoryEntryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: LicenseHistoryEntry +} + +""" +A `ListID` is a global ID. It is encoded as a string. + +An example `ListID` is: `"gid://gitlab/List/1"`. +""" +scalar ListID + +"""List limit metric setting""" +enum ListLimitMetric { + """Limit list by number and total weight of issues.""" + all_metrics + + """Limit list by number of issues.""" + issue_count + + """Limit list by total weight of issues.""" + issue_weights +} + +"""Autogenerated input type of MarkAsSpamSnippet""" +input MarkAsSpamSnippetInput { + """Global ID of the snippet to update.""" + id: SnippetID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MarkAsSpamSnippet""" +type MarkAsSpamSnippetPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Snippet after mutation.""" + snippet: Snippet +} + +"""Maven metadata""" +type MavenMetadata { + """App group of the Maven package.""" + appGroup: String! + + """App name of the Maven package.""" + appName: String! + + """App version of the Maven package.""" + appVersion: String + + """Date of creation.""" + createdAt: Time! + + """ID of the metadatum.""" + id: PackagesMavenMetadatumID! + + """Path of the Maven package.""" + path: String! + + """Date of most recent update.""" + updatedAt: Time! +} + +"""Possible identifier types for a measurement""" +enum MeasurementIdentifier { + """Project count.""" + PROJECTS + + """User count.""" + USERS + + """Issue count.""" + ISSUES + + """Merge request count.""" + MERGE_REQUESTS + + """Group count.""" + GROUPS + + """Pipeline count.""" + PIPELINES + + """Pipeline count with success status.""" + PIPELINES_SUCCEEDED + + """Pipeline count with failed status.""" + PIPELINES_FAILED + + """Pipeline count with canceled status.""" + PIPELINES_CANCELED + + """Pipeline count with skipped status.""" + PIPELINES_SKIPPED +} + +interface MemberInterface { + """GitLab::Access level.""" + accessLevel: AccessLevel + + """Date and time the membership was created.""" + createdAt: Time + + """User that authorized membership.""" + createdBy: UserCore + + """Date and time the membership expires.""" + expiresAt: Time + + """ID of the member.""" + id: ID! + + """Date and time the membership was last updated.""" + updatedAt: Time + + """User that is associated with the member object.""" + user: UserCore +} + +"""The connection type for MemberInterface.""" +type MemberInterfaceConnection { + """A list of edges.""" + edges: [MemberInterfaceEdge] + + """A list of nodes.""" + nodes: [MemberInterface] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type MemberInterfaceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: MemberInterface +} + +type MergeRequest implements NoteableInterface & CurrentUserTodos { + """Indicates if members of the target project can push to the fork.""" + allowCollaboration: Boolean + + """ + Information relating to rules that must be satisfied to merge this merge request. + """ + approvalState: MergeRequestApprovalState! + + """Number of approvals left.""" + approvalsLeft: Int + + """Number of approvals required.""" + approvalsRequired: Int + + """ + Indicates if the merge request has all the required approvals. Returns true if no required approvals are configured. + """ + approved: Boolean! + + """Users who approved the merge request.""" + approvedBy( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """Assignees of the merge request.""" + assignees( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestAssigneeConnection + + """User who created this merge request.""" + author: UserCore + + """Indicates if auto merge is enabled for the merge request.""" + autoMergeEnabled: Boolean! + + """Selected auto merge strategy.""" + autoMergeStrategy: String + + """Array of available auto merge strategies.""" + availableAutoMergeStrategies: [String!] + + """Number of commits in the merge request.""" + commitCount: Int + + """Merge request commits excluding merge commits.""" + commitsWithoutMergeCommits( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CommitConnection + + """Indicates if the merge request has conflicts.""" + conflicts: Boolean! + + """Timestamp of when the merge request was created.""" + createdAt: Time! + + """To-do items for the current user.""" + currentUserTodos( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """State of the to-do items.""" + state: TodoStateEnum + ): TodoConnection! + + """Default merge commit message of the merge request.""" + defaultMergeCommitMessage: String + + """Default merge commit message of the merge request with description.""" + defaultMergeCommitMessageWithDescription: String + + """Default squash commit message of the merge request.""" + defaultSquashCommitMessage: String + + """ + Description of the merge request (Markdown rendered as HTML for caching). + """ + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Diff head SHA of the merge request.""" + diffHeadSha: String + + """ + References of the base SHA, the head SHA, and the start SHA for this merge request. + """ + diffRefs: DiffRefs + + """Details about which files were changed in this merge request.""" + diffStats( + """Specific file path.""" + path: String + ): [DiffStats!] + + """Summary of which files were changed in this merge request.""" + diffStatsSummary: DiffStatsSummary + + """Indicates if comments on the merge request are locked to members only.""" + discussionLocked: Boolean! + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Indicates if the source branch is behind the target branch.""" + divergedFromTargetBranch: Boolean! + + """Number of downvotes for the merge request.""" + downvotes: Int! + + """Indicates if the merge request is a draft.""" + draft: Boolean! + + """ + Indicates if the project settings will lead to source branch deletion after merge. + """ + forceRemoveSourceBranch: Boolean + + """Indicates if the merge request has CI.""" + hasCi: Boolean! + + """Indicates if the source branch has any security reports.""" + hasSecurityReports: Boolean! + + """Pipeline running on the branch HEAD of the merge request.""" + headPipeline: Pipeline + + """Human-readable time estimate of the merge request.""" + humanTimeEstimate: String + + """Human-readable total time reported as spent on the merge request.""" + humanTotalTimeSpent: String + + """ID of the merge request.""" + id: ID! + + """Internal ID of the merge request.""" + iid: String! + + """Commit SHA of the merge request if merge is in progress.""" + inProgressMergeCommitSha: String + + """Labels of the merge request.""" + labels( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """SHA of the merge request commit (set once merged).""" + mergeCommitSha: String + + """Error message due to a merge error.""" + mergeError: String + + """Indicates if a merge is currently occurring.""" + mergeOngoing: Boolean! + + """Status of the merge request. Deprecated in 14.0: This was renamed.""" + mergeStatus: String @deprecated(reason: "This was renamed. Please use `MergeRequest.mergeStatusEnum`. Deprecated in 14.0.") + + """Merge status of the merge request.""" + mergeStatusEnum: MergeStatus + + """Number of merge requests in the merge train.""" + mergeTrainsCount: Int + + """User who merged this merge request.""" + mergeUser: UserCore + + """ + Indicates if the merge has been set to be merged when its pipeline succeeds (MWPS). + """ + mergeWhenPipelineSucceeds: Boolean + + """Indicates if the merge request is mergeable.""" + mergeable: Boolean! + + """ + Indicates if all discussions in the merge request have been resolved, allowing the merge request to be merged. + """ + mergeableDiscussionsState: Boolean + + """Timestamp of when the merge request was merged, null if not merged.""" + mergedAt: Time + + """Milestone of the merge request.""" + milestone: Milestone + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """ + Participants in the merge request. This includes the author, assignees, reviewers, and users mentioned in notes. + """ + participants( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """ + Pipelines for the merge request. Note: for performance reasons, no more than + the most recent 500 pipelines will be returned. + """ + pipelines( + """Filter pipelines by their status.""" + status: PipelineStatusEnum + + """Filter pipelines by the ref they are run for.""" + ref: String + + """Filter pipelines by the sha of the commit they are run for.""" + sha: String + + """ + Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled. + """ + source: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineConnection + + """Alias for target_project.""" + project: Project! + + """ID of the merge request project.""" + projectId: Int! + + """Rebase commit SHA of the merge request.""" + rebaseCommitSha: String + + """ + Indicates if there is a rebase currently in progress for the merge request. + """ + rebaseInProgress: Boolean! + + """ + Internal reference of the merge request. Returned in shortened format by default. + """ + reference( + """ + Boolean option specifying whether the reference should be returned in full. + """ + full: Boolean = false + ): String! + + """Users from whom a review has been requested.""" + reviewers( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestReviewerConnection + + """Indicates if the merge request is created by @GitLab-Security-Bot.""" + securityAutoFix: Boolean + + """Indicates if the target branch security reports are out of date.""" + securityReportsUpToDateOnTargetBranch: Boolean! + + """Indicates if the merge request will be rebased.""" + shouldBeRebased: Boolean! + + """ + Indicates if the source branch of the merge request will be deleted after merge. + """ + shouldRemoveSourceBranch: Boolean + + """Source branch of the merge request.""" + sourceBranch: String! + + """Indicates if the source branch of the merge request exists.""" + sourceBranchExists: Boolean! + + """Indicates if the source branch is protected.""" + sourceBranchProtected: Boolean! + + """Source project of the merge request.""" + sourceProject: Project + + """ID of the merge request source project.""" + sourceProjectId: Int + + """Indicates if squash on merge is enabled.""" + squash: Boolean! + + """Indicates if squash on merge is enabled.""" + squashOnMerge: Boolean! + + """State of the merge request.""" + state: MergeRequestState! + + """ + Indicates if the currently logged in user is subscribed to this merge request. + """ + subscribed: Boolean! + + """Target branch of the merge request.""" + targetBranch: String! + + """Indicates if the target branch of the merge request exists.""" + targetBranchExists: Boolean! + + """Target project of the merge request.""" + targetProject: Project! + + """ID of the merge request target project.""" + targetProjectId: Int! + + """Completion status of tasks""" + taskCompletionStatus: TaskCompletionStatus! + + """Time estimate of the merge request.""" + timeEstimate: Int! + + """Timelogs on the merge request.""" + timelogs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection! + + """Title of the merge request.""" + title: String! + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Total time reported as spent on the merge request.""" + totalTimeSpent: Int! + + """Timestamp of when the merge request was last updated.""" + updatedAt: Time! + + """Number of upvotes for the merge request.""" + upvotes: Int! + + """Number of user discussions in the merge request.""" + userDiscussionsCount: Int + + """User notes count of the merge request.""" + userNotesCount: Int + + """Permissions for the current user on the resource""" + userPermissions: MergeRequestPermissions! + + """Web URL of the merge request.""" + webUrl: String + + """ + Indicates if the merge request is a draft. Deprecated in 13.12: Use `draft`. + """ + workInProgress: Boolean! @deprecated(reason: "Use `draft`. Deprecated in 13.12.") +} + +"""Autogenerated input type of MergeRequestAccept""" +input MergeRequestAcceptInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """How to merge this merge request.""" + strategy: MergeStrategyEnum + + """Custom merge commit message.""" + commitMessage: String + + """Custom squash commit message (if squash is true).""" + squashCommitMessage: String + + """HEAD SHA at the time when this merge was requested.""" + sha: String! + + """Should the source branch be removed.""" + shouldRemoveSourceBranch: Boolean + + """Squash commits on the source branch before merge.""" + squash: Boolean = false + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestAccept""" +type MergeRequestAcceptPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +""" +Information relating to rules that must be satisfied to merge this merge request. +""" +type MergeRequestApprovalState { + """ + Indicates if the merge request approval rules are overwritten for the merge request. + """ + approvalRulesOverwritten: Boolean + + """List of approval rules associated with the merge request.""" + rules: [ApprovalRule!] +} + +"""A user assigned to a merge request.""" +type MergeRequestAssignee implements User { + """Merge requests assigned to the user.""" + assignedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Merge requests authored by the user.""" + authoredMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the assignee.""" + assigneeUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """URL of the user's avatar.""" + avatarUrl: String + + """Indicates if the user is a bot.""" + bot: Boolean! + + """User callouts that belong to the user.""" + callouts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCalloutConnection + + """User email. Deprecated in 13.7: This was renamed.""" + email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.") + + """Group count for the user.""" + groupCount: Int + + """Group memberships of the user.""" + groupMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupMemberConnection + + """ + Groups where the user has access. Will always return `null` if + `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + """ + groups( + """Search by group name or path.""" + search: String + + """Filter by permissions the user has on groups.""" + permissionScope: GroupPermission + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupConnection + + """ID of the user.""" + id: ID! + + """Location of the user.""" + location: String + + """Details of this user's interactions with the merge request.""" + mergeRequestInteraction: UserMergeRequestInteraction + + """Human-readable name of the user.""" + name: String! + + """Personal namespace of the user.""" + namespace: Namespace + + """Project memberships of the user.""" + projectMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectMemberConnection + + """User's public email.""" + publicEmail: String + + """Merge requests assigned to the user for review.""" + reviewRequestedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the assignee.""" + assigneeUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Snippets authored by the user.""" + snippets( + """ + Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + """ + ids: [SnippetID!] + + """Visibility of the snippet.""" + visibility: VisibilityScopesEnum + + """Type of snippet.""" + type: TypeEnum + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetConnection + + """Projects starred by the user.""" + starredProjects( + """Search query.""" + search: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection + + """State of the user.""" + state: UserState! + + """User status.""" + status: UserStatus + + """Time logged by the user.""" + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection + + """To-do items of the user.""" + todos( + """Action to be filtered.""" + action: [TodoActionEnum!] + + """ID of an author.""" + authorId: [ID!] + + """ID of a project.""" + projectId: [ID!] + + """ID of a group.""" + groupId: [ID!] + + """State of the todo.""" + state: [TodoStateEnum!] + + """Type of the todo.""" + type: [TodoTargetEnum!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TodoConnection + + """Permissions for the current user on the resource.""" + userPermissions: UserPermissions! + + """Username of the user. Unique within this instance of GitLab.""" + username: String! + + """Web path of the user.""" + webPath: String! + + """Web URL of the user.""" + webUrl: String! +} + +"""The connection type for MergeRequestAssignee.""" +type MergeRequestAssigneeConnection { + """A list of edges.""" + edges: [MergeRequestAssigneeEdge] + + """A list of nodes.""" + nodes: [MergeRequestAssignee] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type MergeRequestAssigneeEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: MergeRequestAssignee +} + +"""The connection type for MergeRequest.""" +type MergeRequestConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [MergeRequestEdge] + + """A list of nodes.""" + nodes: [MergeRequest] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """ + Total sum of time to merge, in seconds, for the collection of merge requests. + """ + totalTimeToMerge: Float +} + +"""Autogenerated input type of MergeRequestCreate""" +input MergeRequestCreateInput { + """Project full path the merge request is associated with.""" + projectPath: ID! + + """Title of the merge request.""" + title: String! + + """Source branch of the merge request.""" + sourceBranch: String! + + """Target branch of the merge request.""" + targetBranch: String! + + """ + Description of the merge request (Markdown rendered as HTML for caching). + """ + description: String + + """Labels of the merge request.""" + labels: [String!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestCreate""" +type MergeRequestCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Represents the Geo sync and verification state of a Merge Request diff""" +type MergeRequestDiffRegistry { + """Timestamp when the MergeRequestDiffRegistry was created""" + createdAt: Time + + """ID of the MergeRequestDiffRegistry""" + id: ID! + + """Error message during sync of the MergeRequestDiffRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the MergeRequestDiffRegistry + """ + lastSyncedAt: Time + + """ID of the Merge Request diff.""" + mergeRequestDiffId: ID! + + """Timestamp after which the MergeRequestDiffRegistry should be resynced""" + retryAt: Time + + """ + Number of consecutive failed sync attempts of the MergeRequestDiffRegistry + """ + retryCount: Int + + """Sync state of the MergeRequestDiffRegistry""" + state: RegistryState +} + +"""The connection type for MergeRequestDiffRegistry.""" +type MergeRequestDiffRegistryConnection { + """A list of edges.""" + edges: [MergeRequestDiffRegistryEdge] + + """A list of nodes.""" + nodes: [MergeRequestDiffRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type MergeRequestDiffRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: MergeRequestDiffRegistry +} + +"""An edge in a connection.""" +type MergeRequestEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: MergeRequest +} + +""" +A `MergeRequestID` is a global ID. It is encoded as a string. + +An example `MergeRequestID` is: `"gid://gitlab/MergeRequest/1"`. +""" +scalar MergeRequestID + +"""New state to apply to a merge request.""" +enum MergeRequestNewState { + """Open the merge request if it is closed.""" + OPEN + + """Close the merge request if it is open.""" + CLOSED +} + +"""Check permissions for the current user on a merge request""" +type MergeRequestPermissions { + """Indicates the user can perform `admin_merge_request` on this resource""" + adminMergeRequest: Boolean! + + """Indicates the user can perform `can_merge` on this resource""" + canMerge: Boolean! + + """ + Indicates the user can perform `cherry_pick_on_current_merge_request` on this resource + """ + cherryPickOnCurrentMergeRequest: Boolean! + + """Indicates the user can perform `create_note` on this resource""" + createNote: Boolean! + + """ + Indicates the user can perform `push_to_source_branch` on this resource + """ + pushToSourceBranch: Boolean! + + """Indicates the user can perform `read_merge_request` on this resource""" + readMergeRequest: Boolean! + + """Indicates the user can perform `remove_source_branch` on this resource""" + removeSourceBranch: Boolean! + + """ + Indicates the user can perform `revert_on_current_merge_request` on this resource + """ + revertOnCurrentMergeRequest: Boolean! + + """Indicates the user can perform `update_merge_request` on this resource""" + updateMergeRequest: Boolean! +} + +"""A user assigned to a merge request as a reviewer.""" +type MergeRequestReviewer implements User { + """Merge requests assigned to the user.""" + assignedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Merge requests authored by the user.""" + authoredMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the assignee.""" + assigneeUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """URL of the user's avatar.""" + avatarUrl: String + + """Indicates if the user is a bot.""" + bot: Boolean! + + """User callouts that belong to the user.""" + callouts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCalloutConnection + + """User email. Deprecated in 13.7: This was renamed.""" + email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.") + + """Group count for the user.""" + groupCount: Int + + """Group memberships of the user.""" + groupMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupMemberConnection + + """ + Groups where the user has access. Will always return `null` if + `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + """ + groups( + """Search by group name or path.""" + search: String + + """Filter by permissions the user has on groups.""" + permissionScope: GroupPermission + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupConnection + + """ID of the user.""" + id: ID! + + """Location of the user.""" + location: String + + """Details of this user's interactions with the merge request.""" + mergeRequestInteraction: UserMergeRequestInteraction + + """Human-readable name of the user.""" + name: String! + + """Personal namespace of the user.""" + namespace: Namespace + + """Project memberships of the user.""" + projectMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectMemberConnection + + """User's public email.""" + publicEmail: String + + """Merge requests assigned to the user for review.""" + reviewRequestedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the assignee.""" + assigneeUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Snippets authored by the user.""" + snippets( + """ + Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + """ + ids: [SnippetID!] + + """Visibility of the snippet.""" + visibility: VisibilityScopesEnum + + """Type of snippet.""" + type: TypeEnum + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetConnection + + """Projects starred by the user.""" + starredProjects( + """Search query.""" + search: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection + + """State of the user.""" + state: UserState! + + """User status.""" + status: UserStatus + + """Time logged by the user.""" + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection + + """To-do items of the user.""" + todos( + """Action to be filtered.""" + action: [TodoActionEnum!] + + """ID of an author.""" + authorId: [ID!] + + """ID of a project.""" + projectId: [ID!] + + """ID of a group.""" + groupId: [ID!] + + """State of the todo.""" + state: [TodoStateEnum!] + + """Type of the todo.""" + type: [TodoTargetEnum!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TodoConnection + + """Permissions for the current user on the resource.""" + userPermissions: UserPermissions! + + """Username of the user. Unique within this instance of GitLab.""" + username: String! + + """Web path of the user.""" + webPath: String! + + """Web URL of the user.""" + webUrl: String! +} + +"""The connection type for MergeRequestReviewer.""" +type MergeRequestReviewerConnection { + """A list of edges.""" + edges: [MergeRequestReviewerEdge] + + """A list of nodes.""" + nodes: [MergeRequestReviewer] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type MergeRequestReviewerEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: MergeRequestReviewer +} + +"""Autogenerated input type of MergeRequestReviewerRereview""" +input MergeRequestReviewerRereviewInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + User ID for the user that has been requested for a new review. + + """ + userId: UserID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestReviewerRereview""" +type MergeRequestReviewerRereviewPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""State of a review of a GitLab merge request.""" +enum MergeRequestReviewState { + """The merge request is unreviewed.""" + UNREVIEWED + + """The merge request is reviewed.""" + REVIEWED + + """The merge request is attention_required.""" + ATTENTION_REQUIRED +} + +"""Autogenerated input type of MergeRequestSetAssignees""" +input MergeRequestSetAssigneesInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + Usernames to assign to the resource. Replaces existing assignees by default. + """ + assigneeUsernames: [String!]! + + """Operation to perform. Defaults to REPLACE.""" + operationMode: MutationOperationMode = REPLACE + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetAssignees""" +type MergeRequestSetAssigneesPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Autogenerated input type of MergeRequestSetDraft""" +input MergeRequestSetDraftInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + Whether or not to set the merge request as a draft. + + """ + draft: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetDraft""" +type MergeRequestSetDraftPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Autogenerated input type of MergeRequestSetLabels""" +input MergeRequestSetLabelsInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + Label IDs to set. Replaces existing labels by default. + + """ + labelIds: [LabelID!]! + + """ + Changes the operation mode. Defaults to REPLACE. + + """ + operationMode: MutationOperationMode + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetLabels""" +type MergeRequestSetLabelsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Autogenerated input type of MergeRequestSetLocked""" +input MergeRequestSetLockedInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + Whether or not to lock the merge request. + + """ + locked: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetLocked""" +type MergeRequestSetLockedPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Autogenerated input type of MergeRequestSetMilestone""" +input MergeRequestSetMilestoneInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + Milestone to assign to the merge request. + + """ + milestoneId: MilestoneID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetMilestone""" +type MergeRequestSetMilestonePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Autogenerated input type of MergeRequestSetSubscription""" +input MergeRequestSetSubscriptionInput { + """Desired state of the subscription.""" + subscribedState: Boolean! + + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetSubscription""" +type MergeRequestSetSubscriptionPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Autogenerated input type of MergeRequestSetWip""" +input MergeRequestSetWipInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """ + Whether or not to set the merge request as a draft. + + """ + wip: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestSetWip""" +type MergeRequestSetWipPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Values for sorting merge requests""" +enum MergeRequestSort { + """Updated at descending order.""" + updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.") + + """Updated at ascending order.""" + updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.") + + """Created at descending order.""" + created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.") + + """Created at ascending order.""" + created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.") + + """Updated at descending order.""" + UPDATED_DESC + + """Updated at ascending order.""" + UPDATED_ASC + + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC + + """Priority by ascending order.""" + PRIORITY_ASC + + """Priority by descending order.""" + PRIORITY_DESC + + """Label priority by ascending order.""" + LABEL_PRIORITY_ASC + + """Label priority by descending order.""" + LABEL_PRIORITY_DESC + + """Milestone due date by ascending order.""" + MILESTONE_DUE_ASC + + """Milestone due date by descending order.""" + MILESTONE_DUE_DESC + + """Merge time by ascending order.""" + MERGED_AT_ASC + + """Merge time by descending order.""" + MERGED_AT_DESC + + """Closed time by ascending order.""" + CLOSED_AT_ASC + + """Closed time by descending order.""" + CLOSED_AT_DESC +} + +input MergeRequestsResolverNegatedParams { + """ + Array of label names. All resolved merge requests will not have these labels. + """ + labels: [String!] + + """Title of the milestone.""" + milestoneTitle: String +} + +"""State of a GitLab merge request""" +enum MergeRequestState { + """In open state.""" + opened + + """In closed state.""" + closed + + """Discussion has been locked.""" + locked + + """All available.""" + all + + """Merge request has been merged.""" + merged +} + +"""Autogenerated input type of MergeRequestUpdate""" +input MergeRequestUpdateInput { + """Project the merge request to mutate is in.""" + projectPath: ID! + + """IID of the merge request to mutate.""" + iid: String! + + """Title of the merge request.""" + title: String + + """Target branch of the merge request.""" + targetBranch: String + + """ + Description of the merge request (Markdown rendered as HTML for caching). + """ + description: String + + """Action to perform to change the state.""" + state: MergeRequestNewState + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MergeRequestUpdate""" +type MergeRequestUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Merge request after mutation.""" + mergeRequest: MergeRequest +} + +"""Representation of whether a GitLab merge request can be merged.""" +enum MergeStatus { + """Merge status has not been checked.""" + UNCHECKED + + """Currently checking for mergeability.""" + CHECKING + + """There are no conflicts between the source and target branches.""" + CAN_BE_MERGED + + """There are conflicts between the source and target branches.""" + CANNOT_BE_MERGED + + """Currently unchecked. The previous state was `CANNOT_BE_MERGED`.""" + CANNOT_BE_MERGED_RECHECK +} + +enum MergeStrategyEnum { + """Use the merge_train merge strategy.""" + MERGE_TRAIN + + """Use the add_to_merge_train_when_pipeline_succeeds merge strategy.""" + ADD_TO_MERGE_TRAIN_WHEN_PIPELINE_SUCCEEDS + + """Use the merge_when_pipeline_succeeds merge strategy.""" + MERGE_WHEN_PIPELINE_SUCCEEDS +} + +type Metadata { + """Metadata about KAS.""" + kas: Kas! + + """Revision.""" + revision: String! + + """Version.""" + version: String! +} + +"""Represents a metric image upload""" +type MetricImage { + """File name of the metric image.""" + fileName: String + + """File path of the metric image.""" + filePath: String + + """ID of the metric upload.""" + id: ID! + + """Internal ID of the metric upload.""" + iid: ID! + + """URL of the metric source.""" + url: String! +} + +type MetricsDashboard { + """Annotations added to the dashboard.""" + annotations( + """ + Timestamp marking date and time from which annotations need to be fetched. + """ + from: Time! + + """ + Timestamp marking date and time to which annotations need to be fetched. + """ + to: Time + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MetricsDashboardAnnotationConnection + + """Path to a file with the dashboard definition.""" + path: String + + """Dashboard schema validation warnings.""" + schemaValidationWarnings: [String!] +} + +type MetricsDashboardAnnotation { + """Description of the annotation.""" + description: String + + """Timestamp marking end of annotated time span.""" + endingAt: Time + + """ID of the annotation.""" + id: ID! + + """ID of a dashboard panel to which the annotation should be scoped.""" + panelId: String + + """Timestamp marking start of annotated time span.""" + startingAt: Time +} + +"""The connection type for MetricsDashboardAnnotation.""" +type MetricsDashboardAnnotationConnection { + """A list of edges.""" + edges: [MetricsDashboardAnnotationEdge] + + """A list of nodes.""" + nodes: [MetricsDashboardAnnotation] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type MetricsDashboardAnnotationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: MetricsDashboardAnnotation +} + +""" +A `MetricsDashboardAnnotationID` is a global ID. It is encoded as a string. + +An example `MetricsDashboardAnnotationID` is: `"gid://gitlab/Metrics::Dashboard::Annotation/1"`. +""" +scalar MetricsDashboardAnnotationID + +"""Represents a milestone""" +type Milestone implements TimeboxReportInterface { + """Timestamp of milestone creation.""" + createdAt: Time! + + """Description of the milestone.""" + description: String + + """Timestamp of the milestone due date.""" + dueDate: Time + + """ + Expired state of the milestone (a milestone is expired when the due date is + past the current date). Defaults to `false` when due date has not been set. + """ + expired: Boolean! + + """Indicates if milestone is at group level.""" + groupMilestone: Boolean! + + """ID of the milestone.""" + id: ID! + + """Internal ID of the milestone.""" + iid: ID! + + """Indicates if milestone is at project level.""" + projectMilestone: Boolean! + + """Historically accurate report about the timebox.""" + report: TimeboxReport + + """Timestamp of the milestone start date.""" + startDate: Time + + """State of the milestone.""" + state: MilestoneStateEnum! + + """Milestone statistics.""" + stats: MilestoneStats + + """Indicates if milestone is at subgroup level.""" + subgroupMilestone: Boolean! + + """Title of the milestone.""" + title: String! + + """Timestamp of last milestone update.""" + updatedAt: Time! + + """Web path of the milestone.""" + webPath: String! +} + +"""The connection type for Milestone.""" +type MilestoneConnection { + """A list of edges.""" + edges: [MilestoneEdge] + + """A list of nodes.""" + nodes: [Milestone] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type MilestoneEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Milestone +} + +""" +A `MilestoneID` is a global ID. It is encoded as a string. + +An example `MilestoneID` is: `"gid://gitlab/Milestone/1"`. +""" +scalar MilestoneID + +"""Values for sorting milestones""" +enum MilestoneSort { + """Updated at descending order.""" + updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.") + + """Updated at ascending order.""" + updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.") + + """Created at descending order.""" + created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.") + + """Created at ascending order.""" + created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.") + + """Updated at descending order.""" + UPDATED_DESC + + """Updated at ascending order.""" + UPDATED_ASC + + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC + + """Milestone due date by ascending order.""" + DUE_DATE_ASC + + """Milestone due date by descending order.""" + DUE_DATE_DESC + + """ + Group milestones in this order: non-expired milestones with due dates, + non-expired milestones without due dates and expired milestones then sort by + due date in ascending order. + """ + EXPIRED_LAST_DUE_DATE_ASC + + """ + Group milestones in this order: non-expired milestones with due dates, + non-expired milestones without due dates and expired milestones then sort by + due date in descending order. + """ + EXPIRED_LAST_DUE_DATE_DESC +} + +"""Current state of milestone""" +enum MilestoneStateEnum { + """Milestone is currently active.""" + active + + """Milestone is closed.""" + closed +} + +"""Contains statistics about a milestone""" +type MilestoneStats { + """Number of closed issues associated with the milestone.""" + closedIssuesCount: Int + + """Total number of issues associated with the milestone.""" + totalIssuesCount: Int +} + +"""Milestone ID wildcard values""" +enum MilestoneWildcardId { + """No milestone is assigned.""" + NONE + + """Milestone is assigned.""" + ANY + + """Milestone assigned is open and started (start date <= today).""" + STARTED + + """Milestone assigned is due in the future (due date > today).""" + UPCOMING +} + +"""The position to which the adjacent object should be moved""" +enum MoveType { + """Adjacent object is moved before the object that is being moved.""" + before + + """Adjacent object is moved after the object that is being moved.""" + after +} + +type Mutation { + addProjectToSecurityDashboard( + """Parameters for AddProjectToSecurityDashboard""" + input: AddProjectToSecurityDashboardInput! + ): AddProjectToSecurityDashboardPayload + adminSidekiqQueuesDeleteJobs( + """Parameters for AdminSidekiqQueuesDeleteJobs""" + input: AdminSidekiqQueuesDeleteJobsInput! + ): AdminSidekiqQueuesDeleteJobsPayload + alertSetAssignees( + """Parameters for AlertSetAssignees""" + input: AlertSetAssigneesInput! + ): AlertSetAssigneesPayload + alertTodoCreate( + """Parameters for AlertTodoCreate""" + input: AlertTodoCreateInput! + ): AlertTodoCreatePayload + apiFuzzingCiConfigurationCreate( + """Parameters for ApiFuzzingCiConfigurationCreate""" + input: ApiFuzzingCiConfigurationCreateInput! + ): ApiFuzzingCiConfigurationCreatePayload + awardEmojiAdd( + """Parameters for AwardEmojiAdd""" + input: AwardEmojiAddInput! + ): AwardEmojiAddPayload + awardEmojiRemove( + """Parameters for AwardEmojiRemove""" + input: AwardEmojiRemoveInput! + ): AwardEmojiRemovePayload + awardEmojiToggle( + """Parameters for AwardEmojiToggle""" + input: AwardEmojiToggleInput! + ): AwardEmojiTogglePayload + boardEpicCreate( + """Parameters for BoardEpicCreate""" + input: BoardEpicCreateInput! + ): BoardEpicCreatePayload + boardListCreate( + """Parameters for BoardListCreate""" + input: BoardListCreateInput! + ): BoardListCreatePayload + boardListUpdateLimitMetrics( + """Parameters for BoardListUpdateLimitMetrics""" + input: BoardListUpdateLimitMetricsInput! + ): BoardListUpdateLimitMetricsPayload + + """**BETA** This endpoint is subject to change without notice.""" + bulkEnableDevopsAdoptionNamespaces( + """Parameters for BulkEnableDevopsAdoptionNamespaces""" + input: BulkEnableDevopsAdoptionNamespacesInput! + ): BulkEnableDevopsAdoptionNamespacesPayload + ciCdSettingsUpdate( + """Parameters for CiCdSettingsUpdate""" + input: CiCdSettingsUpdateInput! + ): CiCdSettingsUpdatePayload + ciJobTokenScopeAddProject( + """Parameters for CiJobTokenScopeAddProject""" + input: CiJobTokenScopeAddProjectInput! + ): CiJobTokenScopeAddProjectPayload + ciJobTokenScopeRemoveProject( + """Parameters for CiJobTokenScopeRemoveProject""" + input: CiJobTokenScopeRemoveProjectInput! + ): CiJobTokenScopeRemoveProjectPayload + clusterAgentDelete( + """Parameters for ClusterAgentDelete""" + input: ClusterAgentDeleteInput! + ): ClusterAgentDeletePayload + clusterAgentTokenCreate( + """Parameters for ClusterAgentTokenCreate""" + input: ClusterAgentTokenCreateInput! + ): ClusterAgentTokenCreatePayload + clusterAgentTokenDelete( + """Parameters for ClusterAgentTokenDelete""" + input: ClusterAgentTokenDeleteInput! + ): ClusterAgentTokenDeletePayload + commitCreate( + """Parameters for CommitCreate""" + input: CommitCreateInput! + ): CommitCreatePayload + + """ + Configure Dependency Scanning for a project by enabling Dependency Scanning in a new or modified + `.gitlab-ci.yml` file in a new branch. The new branch and a URL to + create a Merge Request are a part of the response. + + """ + configureDependencyScanning( + """Parameters for ConfigureDependencyScanning""" + input: ConfigureDependencyScanningInput! + ): ConfigureDependencyScanningPayload + + """ + Configure SAST for a project by enabling SAST in a new or modified + `.gitlab-ci.yml` file in a new branch. The new branch and a URL to + create a Merge Request are a part of the response. + + """ + configureSast( + """Parameters for ConfigureSast""" + input: ConfigureSastInput! + ): ConfigureSastPayload + + """ + Configure Secret Detection for a project by enabling Secret Detection + in a new or modified `.gitlab-ci.yml` file in a new branch. The new + branch and a URL to create a Merge Request are a part of the + response. + + """ + configureSecretDetection( + """Parameters for ConfigureSecretDetection""" + input: ConfigureSecretDetectionInput! + ): ConfigureSecretDetectionPayload + createAlertIssue( + """Parameters for CreateAlertIssue""" + input: CreateAlertIssueInput! + ): CreateAlertIssuePayload + createAnnotation( + """Parameters for CreateAnnotation""" + input: CreateAnnotationInput! + ): CreateAnnotationPayload + createBoard( + """Parameters for CreateBoard""" + input: CreateBoardInput! + ): CreateBoardPayload + createBranch( + """Parameters for CreateBranch""" + input: CreateBranchInput! + ): CreateBranchPayload + createClusterAgent( + """Parameters for CreateClusterAgent""" + input: CreateClusterAgentInput! + ): CreateClusterAgentPayload + createComplianceFramework( + """Parameters for CreateComplianceFramework""" + input: CreateComplianceFrameworkInput! + ): CreateComplianceFrameworkPayload + + """ + Available only when feature flag `custom_emoji` is enabled. This flag is + disabled by default, because the feature is experimental and is subject to + change without notice. + """ + createCustomEmoji( + """Parameters for CreateCustomEmoji""" + input: CreateCustomEmojiInput! + ): CreateCustomEmojiPayload + createDiffNote( + """Parameters for CreateDiffNote""" + input: CreateDiffNoteInput! + ): CreateDiffNotePayload + createEpic( + """Parameters for CreateEpic""" + input: CreateEpicInput! + ): CreateEpicPayload + createImageDiffNote( + """Parameters for CreateImageDiffNote""" + input: CreateImageDiffNoteInput! + ): CreateImageDiffNotePayload + createIssue( + """Parameters for CreateIssue""" + input: CreateIssueInput! + ): CreateIssuePayload + createIteration( + """Parameters for CreateIteration""" + input: CreateIterationInput! + ): CreateIterationPayload @deprecated(reason: "Use iterationCreate. Deprecated in 14.0.") + createNote( + """Parameters for CreateNote""" + input: CreateNoteInput! + ): CreateNotePayload + createRequirement( + """Parameters for CreateRequirement""" + input: CreateRequirementInput! + ): CreateRequirementPayload + createSnippet( + """Parameters for CreateSnippet""" + input: CreateSnippetInput! + ): CreateSnippetPayload + createTestCase( + """Parameters for CreateTestCase""" + input: CreateTestCaseInput! + ): CreateTestCasePayload + customerRelationsContactCreate( + """Parameters for CustomerRelationsContactCreate""" + input: CustomerRelationsContactCreateInput! + ): CustomerRelationsContactCreatePayload + customerRelationsContactUpdate( + """Parameters for CustomerRelationsContactUpdate""" + input: CustomerRelationsContactUpdateInput! + ): CustomerRelationsContactUpdatePayload + customerRelationsOrganizationCreate( + """Parameters for CustomerRelationsOrganizationCreate""" + input: CustomerRelationsOrganizationCreateInput! + ): CustomerRelationsOrganizationCreatePayload + customerRelationsOrganizationUpdate( + """Parameters for CustomerRelationsOrganizationUpdate""" + input: CustomerRelationsOrganizationUpdateInput! + ): CustomerRelationsOrganizationUpdatePayload + dastOnDemandScanCreate( + """Parameters for DastOnDemandScanCreate""" + input: DastOnDemandScanCreateInput! + ): DastOnDemandScanCreatePayload + dastProfileCreate( + """Parameters for DastProfileCreate""" + input: DastProfileCreateInput! + ): DastProfileCreatePayload + dastProfileDelete( + """Parameters for DastProfileDelete""" + input: DastProfileDeleteInput! + ): DastProfileDeletePayload + dastProfileRun( + """Parameters for DastProfileRun""" + input: DastProfileRunInput! + ): DastProfileRunPayload + dastProfileUpdate( + """Parameters for DastProfileUpdate""" + input: DastProfileUpdateInput! + ): DastProfileUpdatePayload + dastScannerProfileCreate( + """Parameters for DastScannerProfileCreate""" + input: DastScannerProfileCreateInput! + ): DastScannerProfileCreatePayload + dastScannerProfileDelete( + """Parameters for DastScannerProfileDelete""" + input: DastScannerProfileDeleteInput! + ): DastScannerProfileDeletePayload + dastScannerProfileUpdate( + """Parameters for DastScannerProfileUpdate""" + input: DastScannerProfileUpdateInput! + ): DastScannerProfileUpdatePayload + dastSiteProfileCreate( + """Parameters for DastSiteProfileCreate""" + input: DastSiteProfileCreateInput! + ): DastSiteProfileCreatePayload + dastSiteProfileDelete( + """Parameters for DastSiteProfileDelete""" + input: DastSiteProfileDeleteInput! + ): DastSiteProfileDeletePayload + dastSiteProfileUpdate( + """Parameters for DastSiteProfileUpdate""" + input: DastSiteProfileUpdateInput! + ): DastSiteProfileUpdatePayload + dastSiteTokenCreate( + """Parameters for DastSiteTokenCreate""" + input: DastSiteTokenCreateInput! + ): DastSiteTokenCreatePayload + dastSiteValidationCreate( + """Parameters for DastSiteValidationCreate""" + input: DastSiteValidationCreateInput! + ): DastSiteValidationCreatePayload + dastSiteValidationRevoke( + """Parameters for DastSiteValidationRevoke""" + input: DastSiteValidationRevokeInput! + ): DastSiteValidationRevokePayload + deleteAnnotation( + """Parameters for DeleteAnnotation""" + input: DeleteAnnotationInput! + ): DeleteAnnotationPayload + designManagementDelete( + """Parameters for DesignManagementDelete""" + input: DesignManagementDeleteInput! + ): DesignManagementDeletePayload + designManagementMove( + """Parameters for DesignManagementMove""" + input: DesignManagementMoveInput! + ): DesignManagementMovePayload + designManagementUpload( + """Parameters for DesignManagementUpload""" + input: DesignManagementUploadInput! + ): DesignManagementUploadPayload + destroyBoard( + """Parameters for DestroyBoard""" + input: DestroyBoardInput! + ): DestroyBoardPayload + destroyBoardList( + """Parameters for DestroyBoardList""" + input: DestroyBoardListInput! + ): DestroyBoardListPayload + destroyComplianceFramework( + """Parameters for DestroyComplianceFramework""" + input: DestroyComplianceFrameworkInput! + ): DestroyComplianceFrameworkPayload + destroyContainerRepository( + """Parameters for DestroyContainerRepository""" + input: DestroyContainerRepositoryInput! + ): DestroyContainerRepositoryPayload + destroyContainerRepositoryTags( + """Parameters for DestroyContainerRepositoryTags""" + input: DestroyContainerRepositoryTagsInput! + ): DestroyContainerRepositoryTagsPayload + + """ + Available only when feature flag `custom_emoji` is enabled. This flag is + disabled by default, because the feature is experimental and is subject to + change without notice. + """ + destroyCustomEmoji( + """Parameters for DestroyCustomEmoji""" + input: DestroyCustomEmojiInput! + ): DestroyCustomEmojiPayload + destroyEpicBoard( + """Parameters for DestroyEpicBoard""" + input: DestroyEpicBoardInput! + ): DestroyEpicBoardPayload + destroyNote( + """Parameters for DestroyNote""" + input: DestroyNoteInput! + ): DestroyNotePayload + destroyPackage( + """Parameters for DestroyPackage""" + input: DestroyPackageInput! + ): DestroyPackagePayload + destroyPackageFile( + """Parameters for DestroyPackageFile""" + input: DestroyPackageFileInput! + ): DestroyPackageFilePayload + destroySnippet( + """Parameters for DestroySnippet""" + input: DestroySnippetInput! + ): DestroySnippetPayload + + """**BETA** This endpoint is subject to change without notice.""" + disableDevopsAdoptionNamespace( + """Parameters for DisableDevopsAdoptionNamespace""" + input: DisableDevopsAdoptionNamespaceInput! + ): DisableDevopsAdoptionNamespacePayload + + """Toggles the resolved state of a discussion""" + discussionToggleResolve( + """Parameters for DiscussionToggleResolve""" + input: DiscussionToggleResolveInput! + ): DiscussionToggleResolvePayload + + """ + A mutation that does not perform any changes. + + This is expected to be used for testing of endpoints, to verify + that a user has mutation access. + + """ + echoCreate( + """Parameters for EchoCreate""" + input: EchoCreateInput! + ): EchoCreatePayload + + """**BETA** This endpoint is subject to change without notice.""" + enableDevopsAdoptionNamespace( + """Parameters for EnableDevopsAdoptionNamespace""" + input: EnableDevopsAdoptionNamespaceInput! + ): EnableDevopsAdoptionNamespacePayload + environmentsCanaryIngressUpdate( + """Parameters for EnvironmentsCanaryIngressUpdate""" + input: EnvironmentsCanaryIngressUpdateInput! + ): EnvironmentsCanaryIngressUpdatePayload + epicAddIssue( + """Parameters for EpicAddIssue""" + input: EpicAddIssueInput! + ): EpicAddIssuePayload + epicBoardCreate( + """Parameters for EpicBoardCreate""" + input: EpicBoardCreateInput! + ): EpicBoardCreatePayload + epicBoardListCreate( + """Parameters for EpicBoardListCreate""" + input: EpicBoardListCreateInput! + ): EpicBoardListCreatePayload + + """Destroys an epic board list.""" + epicBoardListDestroy( + """Parameters for EpicBoardListDestroy""" + input: EpicBoardListDestroyInput! + ): EpicBoardListDestroyPayload + epicBoardUpdate( + """Parameters for EpicBoardUpdate""" + input: EpicBoardUpdateInput! + ): EpicBoardUpdatePayload + epicMoveList( + """Parameters for EpicMoveList""" + input: EpicMoveListInput! + ): EpicMoveListPayload + epicSetSubscription( + """Parameters for EpicSetSubscription""" + input: EpicSetSubscriptionInput! + ): EpicSetSubscriptionPayload + epicTreeReorder( + """Parameters for EpicTreeReorder""" + input: EpicTreeReorderInput! + ): EpicTreeReorderPayload + escalationPolicyCreate( + """Parameters for EscalationPolicyCreate""" + input: EscalationPolicyCreateInput! + ): EscalationPolicyCreatePayload + escalationPolicyDestroy( + """Parameters for EscalationPolicyDestroy""" + input: EscalationPolicyDestroyInput! + ): EscalationPolicyDestroyPayload + escalationPolicyUpdate( + """Parameters for EscalationPolicyUpdate""" + input: EscalationPolicyUpdateInput! + ): EscalationPolicyUpdatePayload + exportRequirements( + """Parameters for ExportRequirements""" + input: ExportRequirementsInput! + ): ExportRequirementsPayload + externalAuditEventDestinationCreate( + """Parameters for ExternalAuditEventDestinationCreate""" + input: ExternalAuditEventDestinationCreateInput! + ): ExternalAuditEventDestinationCreatePayload + externalAuditEventDestinationDestroy( + """Parameters for ExternalAuditEventDestinationDestroy""" + input: ExternalAuditEventDestinationDestroyInput! + ): ExternalAuditEventDestinationDestroyPayload + externalAuditEventDestinationUpdate( + """Parameters for ExternalAuditEventDestinationUpdate""" + input: ExternalAuditEventDestinationUpdateInput! + ): ExternalAuditEventDestinationUpdatePayload + gitlabSubscriptionActivate( + """Parameters for GitlabSubscriptionActivate""" + input: GitlabSubscriptionActivateInput! + ): GitlabSubscriptionActivatePayload + groupUpdate( + """Parameters for GroupUpdate""" + input: GroupUpdateInput! + ): GroupUpdatePayload + httpIntegrationCreate( + """Parameters for HttpIntegrationCreate""" + input: HttpIntegrationCreateInput! + ): HttpIntegrationCreatePayload + httpIntegrationDestroy( + """Parameters for HttpIntegrationDestroy""" + input: HttpIntegrationDestroyInput! + ): HttpIntegrationDestroyPayload + httpIntegrationResetToken( + """Parameters for HttpIntegrationResetToken""" + input: HttpIntegrationResetTokenInput! + ): HttpIntegrationResetTokenPayload + httpIntegrationUpdate( + """Parameters for HttpIntegrationUpdate""" + input: HttpIntegrationUpdateInput! + ): HttpIntegrationUpdatePayload + issueMove( + """Parameters for IssueMove""" + input: IssueMoveInput! + ): IssueMovePayload + issueMoveList( + """Parameters for IssueMoveList""" + input: IssueMoveListInput! + ): IssueMoveListPayload + issueSetAssignees( + """Parameters for IssueSetAssignees""" + input: IssueSetAssigneesInput! + ): IssueSetAssigneesPayload + issueSetConfidential( + """Parameters for IssueSetConfidential""" + input: IssueSetConfidentialInput! + ): IssueSetConfidentialPayload + issueSetDueDate( + """Parameters for IssueSetDueDate""" + input: IssueSetDueDateInput! + ): IssueSetDueDatePayload + issueSetEpic( + """Parameters for IssueSetEpic""" + input: IssueSetEpicInput! + ): IssueSetEpicPayload + issueSetIteration( + """Parameters for IssueSetIteration""" + input: IssueSetIterationInput! + ): IssueSetIterationPayload + issueSetLocked( + """Parameters for IssueSetLocked""" + input: IssueSetLockedInput! + ): IssueSetLockedPayload + issueSetSeverity( + """Parameters for IssueSetSeverity""" + input: IssueSetSeverityInput! + ): IssueSetSeverityPayload + issueSetSubscription( + """Parameters for IssueSetSubscription""" + input: IssueSetSubscriptionInput! + ): IssueSetSubscriptionPayload + issueSetWeight( + """Parameters for IssueSetWeight""" + input: IssueSetWeightInput! + ): IssueSetWeightPayload + iterationCadenceCreate( + """Parameters for IterationCadenceCreate""" + input: IterationCadenceCreateInput! + ): IterationCadenceCreatePayload + iterationCadenceDestroy( + """Parameters for IterationCadenceDestroy""" + input: IterationCadenceDestroyInput! + ): IterationCadenceDestroyPayload + iterationCadenceUpdate( + """Parameters for IterationCadenceUpdate""" + input: IterationCadenceUpdateInput! + ): IterationCadenceUpdatePayload + iterationCreate( + """Parameters for iterationCreate""" + input: iterationCreateInput! + ): iterationCreatePayload + iterationDelete( + """Parameters for IterationDelete""" + input: IterationDeleteInput! + ): IterationDeletePayload + jiraImportStart( + """Parameters for JiraImportStart""" + input: JiraImportStartInput! + ): JiraImportStartPayload + jiraImportUsers( + """Parameters for JiraImportUsers""" + input: JiraImportUsersInput! + ): JiraImportUsersPayload + jobCancel( + """Parameters for JobCancel""" + input: JobCancelInput! + ): JobCancelPayload + jobPlay( + """Parameters for JobPlay""" + input: JobPlayInput! + ): JobPlayPayload + jobRetry( + """Parameters for JobRetry""" + input: JobRetryInput! + ): JobRetryPayload + jobUnschedule( + """Parameters for JobUnschedule""" + input: JobUnscheduleInput! + ): JobUnschedulePayload + labelCreate( + """Parameters for LabelCreate""" + input: LabelCreateInput! + ): LabelCreatePayload + markAsSpamSnippet( + """Parameters for MarkAsSpamSnippet""" + input: MarkAsSpamSnippetInput! + ): MarkAsSpamSnippetPayload + + """ + Accepts a merge request. + When accepted, the source branch will be merged into the target branch, either + immediately if possible, or using one of the automatic merge strategies. + + """ + mergeRequestAccept( + """Parameters for MergeRequestAccept""" + input: MergeRequestAcceptInput! + ): MergeRequestAcceptPayload + mergeRequestCreate( + """Parameters for MergeRequestCreate""" + input: MergeRequestCreateInput! + ): MergeRequestCreatePayload + mergeRequestReviewerRereview( + """Parameters for MergeRequestReviewerRereview""" + input: MergeRequestReviewerRereviewInput! + ): MergeRequestReviewerRereviewPayload + mergeRequestSetAssignees( + """Parameters for MergeRequestSetAssignees""" + input: MergeRequestSetAssigneesInput! + ): MergeRequestSetAssigneesPayload + mergeRequestSetDraft( + """Parameters for MergeRequestSetDraft""" + input: MergeRequestSetDraftInput! + ): MergeRequestSetDraftPayload + mergeRequestSetLabels( + """Parameters for MergeRequestSetLabels""" + input: MergeRequestSetLabelsInput! + ): MergeRequestSetLabelsPayload + mergeRequestSetLocked( + """Parameters for MergeRequestSetLocked""" + input: MergeRequestSetLockedInput! + ): MergeRequestSetLockedPayload + mergeRequestSetMilestone( + """Parameters for MergeRequestSetMilestone""" + input: MergeRequestSetMilestoneInput! + ): MergeRequestSetMilestonePayload + mergeRequestSetSubscription( + """Parameters for MergeRequestSetSubscription""" + input: MergeRequestSetSubscriptionInput! + ): MergeRequestSetSubscriptionPayload + mergeRequestSetWip( + """Parameters for MergeRequestSetWip""" + input: MergeRequestSetWipInput! + ): MergeRequestSetWipPayload @deprecated(reason: "Use mergeRequestSetDraft. Deprecated in 13.12.") + + """Update attributes of a merge request""" + mergeRequestUpdate( + """Parameters for MergeRequestUpdate""" + input: MergeRequestUpdateInput! + ): MergeRequestUpdatePayload + namespaceIncreaseStorageTemporarily( + """Parameters for NamespaceIncreaseStorageTemporarily""" + input: NamespaceIncreaseStorageTemporarilyInput! + ): NamespaceIncreaseStorageTemporarilyPayload + oncallRotationCreate( + """Parameters for OncallRotationCreate""" + input: OncallRotationCreateInput! + ): OncallRotationCreatePayload + oncallRotationDestroy( + """Parameters for OncallRotationDestroy""" + input: OncallRotationDestroyInput! + ): OncallRotationDestroyPayload + oncallRotationUpdate( + """Parameters for OncallRotationUpdate""" + input: OncallRotationUpdateInput! + ): OncallRotationUpdatePayload + oncallScheduleCreate( + """Parameters for OncallScheduleCreate""" + input: OncallScheduleCreateInput! + ): OncallScheduleCreatePayload + oncallScheduleDestroy( + """Parameters for OncallScheduleDestroy""" + input: OncallScheduleDestroyInput! + ): OncallScheduleDestroyPayload + oncallScheduleUpdate( + """Parameters for OncallScheduleUpdate""" + input: OncallScheduleUpdateInput! + ): OncallScheduleUpdatePayload + pipelineCancel( + """Parameters for PipelineCancel""" + input: PipelineCancelInput! + ): PipelineCancelPayload + pipelineDestroy( + """Parameters for PipelineDestroy""" + input: PipelineDestroyInput! + ): PipelineDestroyPayload + pipelineRetry( + """Parameters for PipelineRetry""" + input: PipelineRetryInput! + ): PipelineRetryPayload + + """Assign (or unset) a compliance framework to a project.""" + projectSetComplianceFramework( + """Parameters for ProjectSetComplianceFramework""" + input: ProjectSetComplianceFrameworkInput! + ): ProjectSetComplianceFrameworkPayload + projectSetLocked( + """Parameters for ProjectSetLocked""" + input: ProjectSetLockedInput! + ): ProjectSetLockedPayload + prometheusIntegrationCreate( + """Parameters for PrometheusIntegrationCreate""" + input: PrometheusIntegrationCreateInput! + ): PrometheusIntegrationCreatePayload + prometheusIntegrationResetToken( + """Parameters for PrometheusIntegrationResetToken""" + input: PrometheusIntegrationResetTokenInput! + ): PrometheusIntegrationResetTokenPayload + prometheusIntegrationUpdate( + """Parameters for PrometheusIntegrationUpdate""" + input: PrometheusIntegrationUpdateInput! + ): PrometheusIntegrationUpdatePayload + promoteToEpic( + """Parameters for PromoteToEpic""" + input: PromoteToEpicInput! + ): PromoteToEpicPayload + releaseAssetLinkCreate( + """Parameters for ReleaseAssetLinkCreate""" + input: ReleaseAssetLinkCreateInput! + ): ReleaseAssetLinkCreatePayload + releaseAssetLinkDelete( + """Parameters for ReleaseAssetLinkDelete""" + input: ReleaseAssetLinkDeleteInput! + ): ReleaseAssetLinkDeletePayload + releaseAssetLinkUpdate( + """Parameters for ReleaseAssetLinkUpdate""" + input: ReleaseAssetLinkUpdateInput! + ): ReleaseAssetLinkUpdatePayload + releaseCreate( + """Parameters for ReleaseCreate""" + input: ReleaseCreateInput! + ): ReleaseCreatePayload + releaseDelete( + """Parameters for ReleaseDelete""" + input: ReleaseDeleteInput! + ): ReleaseDeletePayload + releaseUpdate( + """Parameters for ReleaseUpdate""" + input: ReleaseUpdateInput! + ): ReleaseUpdatePayload + removeProjectFromSecurityDashboard( + """Parameters for RemoveProjectFromSecurityDashboard""" + input: RemoveProjectFromSecurityDashboardInput! + ): RemoveProjectFromSecurityDashboardPayload + + """ + Repositions a DiffNote on an image (a `Note` where the `position.positionType` is `"image"`) + """ + repositionImageDiffNote( + """Parameters for RepositionImageDiffNote""" + input: RepositionImageDiffNoteInput! + ): RepositionImageDiffNotePayload + runnerDelete( + """Parameters for RunnerDelete""" + input: RunnerDeleteInput! + ): RunnerDeletePayload + runnerUpdate( + """Parameters for RunnerUpdate""" + input: RunnerUpdateInput! + ): RunnerUpdatePayload + runnersRegistrationTokenReset( + """Parameters for RunnersRegistrationTokenReset""" + input: RunnersRegistrationTokenResetInput! + ): RunnersRegistrationTokenResetPayload + + """ + Commits the `policy_yaml` content to the assigned security policy project for the given project(`project_path`) + """ + scanExecutionPolicyCommit( + """Parameters for ScanExecutionPolicyCommit""" + input: ScanExecutionPolicyCommitInput! + ): ScanExecutionPolicyCommitPayload + + """ + Assigns the specified project(`security_policy_project_id`) as security policy + project for the given project(`project_path`). If the project already has a + security policy project, this reassigns the project's security policy project + with the given `security_policy_project_id` + """ + securityPolicyProjectAssign( + """Parameters for SecurityPolicyProjectAssign""" + input: SecurityPolicyProjectAssignInput! + ): SecurityPolicyProjectAssignPayload + + """ + Creates and assigns a security policy project for the given project(`project_path`) + """ + securityPolicyProjectCreate( + """Parameters for SecurityPolicyProjectCreate""" + input: SecurityPolicyProjectCreateInput! + ): SecurityPolicyProjectCreatePayload + + """ + Unassigns the security policy project for the given project(`project_path`). + """ + securityPolicyProjectUnassign( + """Parameters for SecurityPolicyProjectUnassign""" + input: SecurityPolicyProjectUnassignInput! + ): SecurityPolicyProjectUnassignPayload + terraformStateDelete( + """Parameters for TerraformStateDelete""" + input: TerraformStateDeleteInput! + ): TerraformStateDeletePayload + terraformStateLock( + """Parameters for TerraformStateLock""" + input: TerraformStateLockInput! + ): TerraformStateLockPayload + terraformStateUnlock( + """Parameters for TerraformStateUnlock""" + input: TerraformStateUnlockInput! + ): TerraformStateUnlockPayload + todoCreate( + """Parameters for TodoCreate""" + input: TodoCreateInput! + ): TodoCreatePayload + todoMarkDone( + """Parameters for TodoMarkDone""" + input: TodoMarkDoneInput! + ): TodoMarkDonePayload + todoRestore( + """Parameters for TodoRestore""" + input: TodoRestoreInput! + ): TodoRestorePayload + todoRestoreMany( + """Parameters for TodoRestoreMany""" + input: TodoRestoreManyInput! + ): TodoRestoreManyPayload + todosMarkAllDone( + """Parameters for TodosMarkAllDone""" + input: TodosMarkAllDoneInput! + ): TodosMarkAllDonePayload + updateAlertStatus( + """Parameters for UpdateAlertStatus""" + input: UpdateAlertStatusInput! + ): UpdateAlertStatusPayload + updateBoard( + """Parameters for UpdateBoard""" + input: UpdateBoardInput! + ): UpdateBoardPayload + updateBoardEpicUserPreferences( + """Parameters for UpdateBoardEpicUserPreferences""" + input: UpdateBoardEpicUserPreferencesInput! + ): UpdateBoardEpicUserPreferencesPayload + updateBoardList( + """Parameters for UpdateBoardList""" + input: UpdateBoardListInput! + ): UpdateBoardListPayload + updateComplianceFramework( + """Parameters for UpdateComplianceFramework""" + input: UpdateComplianceFrameworkInput! + ): UpdateComplianceFrameworkPayload + updateContainerExpirationPolicy( + """Parameters for UpdateContainerExpirationPolicy""" + input: UpdateContainerExpirationPolicyInput! + ): UpdateContainerExpirationPolicyPayload + updateDependencyProxyImageTtlGroupPolicy( + """Parameters for UpdateDependencyProxyImageTtlGroupPolicy""" + input: UpdateDependencyProxyImageTtlGroupPolicyInput! + ): UpdateDependencyProxyImageTtlGroupPolicyPayload + updateDependencyProxySettings( + """Parameters for UpdateDependencyProxySettings""" + input: UpdateDependencyProxySettingsInput! + ): UpdateDependencyProxySettingsPayload + updateEpic( + """Parameters for UpdateEpic""" + input: UpdateEpicInput! + ): UpdateEpicPayload + updateEpicBoardList( + """Parameters for UpdateEpicBoardList""" + input: UpdateEpicBoardListInput! + ): UpdateEpicBoardListPayload + + """ + Updates a DiffNote on an image (a `Note` where the `position.positionType` is `"image"`). + If the body of the Note contains only quick actions, + the Note will be destroyed during the update, and no Note will be + returned. + + + """ + updateImageDiffNote( + """Parameters for UpdateImageDiffNote""" + input: UpdateImageDiffNoteInput! + ): UpdateImageDiffNotePayload + updateIssue( + """Parameters for UpdateIssue""" + input: UpdateIssueInput! + ): UpdateIssuePayload + updateIteration( + """Parameters for UpdateIteration""" + input: UpdateIterationInput! + ): UpdateIterationPayload + updateNamespacePackageSettings( + """Parameters for UpdateNamespacePackageSettings""" + input: UpdateNamespacePackageSettingsInput! + ): UpdateNamespacePackageSettingsPayload + + """ + Updates a Note. + If the body of the Note contains only quick actions, + the Note will be destroyed during the update, and no Note will be + returned. + + """ + updateNote( + """Parameters for UpdateNote""" + input: UpdateNoteInput! + ): UpdateNotePayload + updateRequirement( + """Parameters for UpdateRequirement""" + input: UpdateRequirementInput! + ): UpdateRequirementPayload + updateSnippet( + """Parameters for UpdateSnippet""" + input: UpdateSnippetInput! + ): UpdateSnippetPayload + userCalloutCreate( + """Parameters for UserCalloutCreate""" + input: UserCalloutCreateInput! + ): UserCalloutCreatePayload + vulnerabilityConfirm( + """Parameters for VulnerabilityConfirm""" + input: VulnerabilityConfirmInput! + ): VulnerabilityConfirmPayload + vulnerabilityCreate( + """Parameters for VulnerabilityCreate""" + input: VulnerabilityCreateInput! + ): VulnerabilityCreatePayload + vulnerabilityDismiss( + """Parameters for VulnerabilityDismiss""" + input: VulnerabilityDismissInput! + ): VulnerabilityDismissPayload + vulnerabilityExternalIssueLinkCreate( + """Parameters for VulnerabilityExternalIssueLinkCreate""" + input: VulnerabilityExternalIssueLinkCreateInput! + ): VulnerabilityExternalIssueLinkCreatePayload + vulnerabilityExternalIssueLinkDestroy( + """Parameters for VulnerabilityExternalIssueLinkDestroy""" + input: VulnerabilityExternalIssueLinkDestroyInput! + ): VulnerabilityExternalIssueLinkDestroyPayload + vulnerabilityResolve( + """Parameters for VulnerabilityResolve""" + input: VulnerabilityResolveInput! + ): VulnerabilityResolvePayload + vulnerabilityRevertToDetected( + """Parameters for VulnerabilityRevertToDetected""" + input: VulnerabilityRevertToDetectedInput! + ): VulnerabilityRevertToDetectedPayload +} + +"""Different toggles for changing mutator behavior""" +enum MutationOperationMode { + """Performs a replace operation.""" + REPLACE + + """Performs an append operation.""" + APPEND + + """Performs a removal operation.""" + REMOVE +} + +type Namespace { + """Size limit for repositories in the namespace in bytes.""" + actualRepositorySizeLimit: Float + + """Additional storage purchased for the root namespace in bytes.""" + additionalPurchasedStorageSize: Float + + """Compliance frameworks available to projects in this namespace.""" + complianceFrameworks( + """Global ID of a specific compliance framework to return.""" + id: ComplianceManagementFrameworkID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ComplianceFrameworkConnection + + """ + Includes at least one project where the repository size exceeds the limit. + """ + containsLockedProjects: Boolean! + + """Description of the namespace.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Full name of the namespace.""" + fullName: String! + + """Full path of the namespace.""" + fullPath: ID! + + """ID of the namespace.""" + id: ID! + + """Status of the temporary storage increase.""" + isTemporaryStorageIncreaseEnabled: Boolean! + + """Indicates if Large File Storage (LFS) is enabled for namespace.""" + lfsEnabled: Boolean + + """Name of the namespace.""" + name: String! + + """Package settings for the namespace.""" + packageSettings: PackageSettings + + """Path of the namespace.""" + path: String! + + """Projects within this namespace.""" + projects( + """Include also subgroup projects.""" + includeSubgroups: Boolean = false + + """Search project with most similar names or paths.""" + search: String = null + + """Sort projects by this criteria.""" + sort: NamespaceProjectSort = null + + """Filter projects by IDs.""" + ids: [ID!] = null + + """Returns only the projects which have code coverage.""" + hasCodeCoverage: Boolean = false + + """Returns only the projects which have vulnerabilities.""" + hasVulnerabilities: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection! + + """ + Number of projects in the root namespace where the repository size exceeds the limit. + """ + repositorySizeExcessProjectCount: Int! + + """Indicates if users can request access to namespace.""" + requestAccessEnabled: Boolean + + """ + Aggregated storage statistics of the namespace. Only available for root namespaces. + """ + rootStorageStatistics: RootStorageStatistics + + """Shared runners availability for the namespace and its descendants.""" + sharedRunnersSetting: SharedRunnersSetting + + """Total storage limit of the root namespace in bytes.""" + storageSizeLimit: Float + + """Date until the temporary storage increase is active.""" + temporaryStorageIncreaseEndsOn: Time + + """Total repository size of all projects in the root namespace in bytes.""" + totalRepositorySize: Float + + """ + Total excess repository size of all projects in the root namespace in bytes. + """ + totalRepositorySizeExcess: Float + + """Visibility of the namespace.""" + visibility: String +} + +"""The connection type for Namespace.""" +type NamespaceConnection { + """A list of edges.""" + edges: [NamespaceEdge] + + """A list of nodes.""" + nodes: [Namespace] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type NamespaceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Namespace +} + +""" +A `NamespaceID` is a global ID. It is encoded as a string. + +An example `NamespaceID` is: `"gid://gitlab/Namespace/1"`. +""" +scalar NamespaceID + +"""Autogenerated input type of NamespaceIncreaseStorageTemporarily""" +input NamespaceIncreaseStorageTemporarilyInput { + """Global ID of the namespace to mutate.""" + id: NamespaceID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of NamespaceIncreaseStorageTemporarily""" +type NamespaceIncreaseStorageTemporarilyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Namespace after mutation.""" + namespace: Namespace +} + +"""Values for sorting projects""" +enum NamespaceProjectSort { + """Most similar to the search query.""" + SIMILARITY + + """Sort by storage size.""" + STORAGE +} + +input NegatedBoardIssueInput { + """Filter by label name.""" + labelName: [String] + + """Filter by author username.""" + authorUsername: String + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """List of IIDs of issues. For example `["1", "2"]`.""" + iids: [String!] + + """Filter by milestone title.""" + milestoneTitle: String + + """Filter by assignee username.""" + assigneeUsername: [String] + + """Filter by release tag.""" + releaseTag: String + + """Filter by the given issue types.""" + types: [IssueType!] + + """Filter by milestone ID wildcard.""" + milestoneWildcardId: MilestoneWildcardId + + """Filter by epic ID. Incompatible with epicWildcardId.""" + epicId: EpicID + + """Filter by iteration title.""" + iterationTitle: String + + """Filter by weight.""" + weight: String + + """ + Filter by a list of iteration IDs. Incompatible with iterationWildcardId. + """ + iterationId: [IterationID!] + + """Filter by iteration ID wildcard.""" + iterationWildcardId: NegatedIterationWildcardId +} + +input NegatedEpicBoardIssueInput { + """Filter by label name.""" + labelName: [String] + + """Filter by author username.""" + authorUsername: String + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String +} + +input NegatedEpicFilterInput { + """Filter by label name.""" + labelName: [String] + + """Filter by author username.""" + authorUsername: String + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String +} + +input NegatedIssueFilterInput { + """List of IIDs of issues to exclude. For example, `[1, 2]`.""" + iids: [String!] + + """Labels not applied to this issue.""" + labelName: [String!] + + """Milestone not applied to this issue.""" + milestoneTitle: [String!] + + """ + Release tag not associated with the issue's milestone. Ignored when parent is a group. + """ + releaseTag: [String!] + + """Username of a user who didn't author the issue.""" + authorUsername: String + + """Usernames of users not assigned to the issue.""" + assigneeUsernames: [String!] + + """ID of a user not assigned to the issues.""" + assigneeId: String + + """Filter by negated milestone wildcard values.""" + milestoneWildcardId: NegatedMilestoneWildcardId + + """Filter by reaction emoji applied by the current user.""" + myReactionEmoji: String + + """Filters out issues by the given issue types.""" + types: [IssueType!] + + """ID of an epic not associated with the issues.""" + epicId: String + + """Weight not applied to the issue.""" + weight: String + + """List of iteration Global IDs not applied to the issue.""" + iterationId: [ID!] + + """Filter by negated iteration ID wildcard.""" + iterationWildcardId: IterationWildcardId +} + +"""Negated Iteration ID wildcard values""" +enum NegatedIterationWildcardId { + """Current iteration.""" + CURRENT +} + +"""Negated Milestone ID wildcard values""" +enum NegatedMilestoneWildcardId { + """Milestone assigned is open and yet to be started (start date > today).""" + STARTED + + """Milestone assigned is open but due in the past (due date <= today).""" + UPCOMING +} + +"""Represents the network policy""" +type NetworkPolicy { + """Indicates whether this policy is enabled.""" + enabled: Boolean! + + """Environments where this policy is applied.""" + environments( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EnvironmentConnection + + """Indicates whether this policy is created from AutoDevops.""" + fromAutoDevops: Boolean! + + """Kind of the policy.""" + kind: NetworkPolicyKind! + + """Name of the policy.""" + name: String! + + """Namespace of the policy.""" + namespace: String! + + """Timestamp of when the policy YAML was last updated.""" + updatedAt: Time! + + """YAML definition of the policy.""" + yaml: String! +} + +"""The connection type for NetworkPolicy.""" +type NetworkPolicyConnection { + """A list of edges.""" + edges: [NetworkPolicyEdge] + + """A list of nodes.""" + nodes: [NetworkPolicy] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type NetworkPolicyEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: NetworkPolicy +} + +"""Kind of the network policy""" +enum NetworkPolicyKind { + """Policy kind of Cilium Network Policy.""" + CiliumNetworkPolicy + + """Policy kind of Network Policy.""" + NetworkPolicy +} + +type Note implements ResolvableInterface { + """User who wrote this note.""" + author: UserCore! + + """Content of the note.""" + body: String! + + """The GitLab Flavored Markdown rendering of `note`""" + bodyHtml: String + + """Indicates if this note is confidential.""" + confidential: Boolean + + """Timestamp of the note creation.""" + createdAt: Time! + + """Discussion this note is a part of.""" + discussion: Discussion + + """ID of the note.""" + id: NoteID! + + """Position of this note on a diff.""" + position: DiffPosition + + """Project associated with the note.""" + project: Project + + """Indicates if the object can be resolved.""" + resolvable: Boolean! + + """Indicates if the object is resolved.""" + resolved: Boolean! + + """Timestamp of when the object was resolved.""" + resolvedAt: Time + + """User who resolved the object.""" + resolvedBy: UserCore + + """Indicates whether this note was created by the system or by a user.""" + system: Boolean! + + """Name of the icon corresponding to a system note.""" + systemNoteIconName: String + + """Timestamp of the note's last activity.""" + updatedAt: Time! + + """URL to view this Note in the Web UI.""" + url: String + + """Permissions for the current user on the resource""" + userPermissions: NotePermissions! +} + +""" +A `NoteableID` is a global ID. It is encoded as a string. + +An example `NoteableID` is: `"gid://gitlab/Noteable/1"`. +""" +scalar NoteableID + +interface NoteableInterface { + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! +} + +"""Represents an object that supports notes.""" +union NoteableType = Design | Issue | MergeRequest + +"""The connection type for Note.""" +type NoteConnection { + """A list of edges.""" + edges: [NoteEdge] + + """A list of nodes.""" + nodes: [Note] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type NoteEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Note +} + +""" +A `NoteID` is a global ID. It is encoded as a string. + +An example `NoteID` is: `"gid://gitlab/Note/1"`. +""" +scalar NoteID + +type NotePermissions { + """Indicates the user can perform `admin_note` on this resource""" + adminNote: Boolean! + + """Indicates the user can perform `award_emoji` on this resource""" + awardEmoji: Boolean! + + """Indicates the user can perform `create_note` on this resource""" + createNote: Boolean! + + """Indicates the user can perform `read_note` on this resource""" + readNote: Boolean! + + """Indicates the user can perform `reposition_note` on this resource""" + repositionNote: Boolean! + + """Indicates the user can perform `resolve_note` on this resource""" + resolveNote: Boolean! +} + +"""Nuget dependency link metadata""" +type NugetDependencyLinkMetadata { + """ID of the metadatum.""" + id: PackagesNugetDependencyLinkMetadatumID! + + """Target framework of the dependency link package.""" + targetFramework: String! +} + +"""Nuget metadata""" +type NugetMetadata { + """Icon URL of the Nuget package.""" + iconUrl: String + + """ID of the metadatum.""" + id: PackagesNugetMetadatumID! + + """License URL of the Nuget package.""" + licenseUrl: String + + """Project URL of the Nuget package.""" + projectUrl: String +} + +"""The rotation participant and color palette""" +type OncallParticipantType { + """Color palette to assign to the on-call user. For example "blue".""" + colorPalette: String + + """ + Color weight to assign to for the on-call user, for example "500". Max 4 chars. For easy identification of the user. + """ + colorWeight: String + + """ID of the on-call participant.""" + id: IncidentManagementOncallParticipantID! + + """User who is participating.""" + user: UserCore! +} + +"""The connection type for OncallParticipantType.""" +type OncallParticipantTypeConnection { + """A list of edges.""" + edges: [OncallParticipantTypeEdge] + + """A list of nodes.""" + nodes: [OncallParticipantType] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type OncallParticipantTypeEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: OncallParticipantType +} + +"""Active period time range for on-call rotation""" +input OncallRotationActivePeriodInputType { + """ + Start of the rotation active period in 24 hour format. For example, "18:30". + """ + startTime: String! + + """ + End of the rotation active period in 24 hour format. For example, "18:30". + """ + endTime: String! +} + +"""Active period time range for on-call rotation""" +type OncallRotationActivePeriodType { + """End of the rotation active period.""" + endTime: String + + """Start of the rotation active period.""" + startTime: String +} + +"""Autogenerated input type of OncallRotationCreate""" +input OncallRotationCreateInput { + """Project to create the on-call schedule in.""" + projectPath: ID! + + """IID of the on-call schedule to create the on-call rotation in.""" + scheduleIid: String! + + """Name of the on-call rotation.""" + name: String! + + """ + Start date and time of the on-call rotation, in the timezone of the on-call schedule. + """ + startsAt: OncallRotationDateInputType! + + """ + End date and time of the on-call rotation, in the timezone of the on-call schedule. + """ + endsAt: OncallRotationDateInputType + + """Rotation length of the on-call rotation.""" + rotationLength: OncallRotationLengthInputType! + + """Active period of time that the on-call rotation should take place.""" + activePeriod: OncallRotationActivePeriodInputType + + """ + Usernames of users participating in the on-call rotation. A maximum limit of 100 participants applies. + """ + participants: [OncallUserInputType!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of OncallRotationCreate""" +type OncallRotationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """On-call rotation.""" + oncallRotation: IncidentManagementOncallRotation +} + +"""Date input type for on-call rotation""" +input OncallRotationDateInputType { + """Date component of the date in YYYY-MM-DD format.""" + date: String! + + """Time component of the date in 24hr HH:MM format.""" + time: String! +} + +"""Autogenerated input type of OncallRotationDestroy""" +input OncallRotationDestroyInput { + """Project to remove the on-call schedule from.""" + projectPath: ID! + + """IID of the on-call schedule to the on-call rotation belongs to.""" + scheduleIid: String! + + """ID of the on-call rotation to remove.""" + id: IncidentManagementOncallRotationID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of OncallRotationDestroy""" +type OncallRotationDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """On-call rotation.""" + oncallRotation: IncidentManagementOncallRotation +} + +"""The rotation length of the on-call rotation""" +input OncallRotationLengthInputType { + """Rotation length of the on-call rotation.""" + length: Int! + + """Unit of the rotation length of the on-call rotation.""" + unit: OncallRotationUnitEnum! +} + +"""Rotation length unit of an on-call rotation""" +enum OncallRotationUnitEnum { + """Hours""" + HOURS + + """Days""" + DAYS + + """Weeks""" + WEEKS +} + +"""Autogenerated input type of OncallRotationUpdate""" +input OncallRotationUpdateInput { + """ID of the on-call schedule to create the on-call rotation in.""" + id: IncidentManagementOncallRotationID! + + """Name of the on-call rotation.""" + name: String + + """ + Start date and time of the on-call rotation, in the timezone of the on-call schedule. + """ + startsAt: OncallRotationDateInputType + + """ + End date and time of the on-call rotation, in the timezone of the on-call schedule. + """ + endsAt: OncallRotationDateInputType + + """Rotation length of the on-call rotation.""" + rotationLength: OncallRotationLengthInputType + + """Active period of time that the on-call rotation should take place.""" + activePeriod: OncallRotationActivePeriodInputType + + """ + Usernames of users participating in the on-call rotation. A maximum limit of 100 participants applies. + """ + participants: [OncallUserInputType!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of OncallRotationUpdate""" +type OncallRotationUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """On-call rotation.""" + oncallRotation: IncidentManagementOncallRotation +} + +"""Autogenerated input type of OncallScheduleCreate""" +input OncallScheduleCreateInput { + """Project to create the on-call schedule in.""" + projectPath: ID! + + """Name of the on-call schedule.""" + name: String! + + """Description of the on-call schedule.""" + description: String + + """Timezone of the on-call schedule.""" + timezone: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of OncallScheduleCreate""" +type OncallScheduleCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """On-call schedule.""" + oncallSchedule: IncidentManagementOncallSchedule +} + +"""Autogenerated input type of OncallScheduleDestroy""" +input OncallScheduleDestroyInput { + """Project to remove the on-call schedule from.""" + projectPath: ID! + + """On-call schedule internal ID to remove.""" + iid: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of OncallScheduleDestroy""" +type OncallScheduleDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """On-call schedule.""" + oncallSchedule: IncidentManagementOncallSchedule +} + +"""Autogenerated input type of OncallScheduleUpdate""" +input OncallScheduleUpdateInput { + """Project to update the on-call schedule in.""" + projectPath: ID! + + """On-call schedule internal ID to update.""" + iid: String! + + """Name of the on-call schedule.""" + name: String + + """Description of the on-call schedule.""" + description: String + + """Timezone of the on-call schedule.""" + timezone: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of OncallScheduleUpdate""" +type OncallScheduleUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """On-call schedule.""" + oncallSchedule: IncidentManagementOncallSchedule +} + +"""The rotation user and color palette""" +input OncallUserInputType { + """ + Username of the user to participate in the on-call rotation. For example, `"user_one"`. + """ + username: String! + + """ + Value of DataVisualizationColorEnum. The color from the palette to assign to the on-call user. + """ + colorPalette: DataVisualizationColorEnum + + """ + Color weight to assign to for the on-call user. To view on-call schedules in + GitLab, do not provide a value below 500. A value between 500 and 950 ensures + sufficient contrast. + """ + colorWeight: DataVisualizationWeightEnum +} + +""" +Represents a package in the Package Registry. Note that this type is in beta and susceptible to changes +""" +type Package { + """Whether the user can destroy the package.""" + canDestroy: Boolean! + + """Date of creation.""" + createdAt: Time! + + """ID of the package.""" + id: PackagesPackageID! + + """Package metadata.""" + metadata: PackageMetadata + + """Name of the package.""" + name: String! + + """Package type.""" + packageType: PackageTypeEnum! + + """Pipelines that built the package.""" + pipelines( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineConnection + + """Project where the package is stored.""" + project: Project! + + """Package status.""" + status: PackageStatus! + + """Package tags.""" + tags( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageTagConnection + + """Date of most recent update.""" + updatedAt: Time! + + """Version string.""" + version: String + + """ + Other versions of the package. Deprecated in 13.11: This field is now only returned in the PackageDetailsType. + """ + versions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageConnection @deprecated(reason: "This field is now only returned in the PackageDetailsType. Deprecated in 13.11.") +} + +"""Represents a composer JSON file""" +type PackageComposerJsonType { + """License set in the Composer JSON file.""" + license: String + + """Name set in the Composer JSON file.""" + name: String + + """Type set in the Composer JSON file.""" + type: String + + """Version set in the Composer JSON file.""" + version: String +} + +"""The connection type for Package.""" +type PackageConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [PackageEdge] + + """A list of nodes.""" + nodes: [Package] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Represents a package dependency.""" +type PackageDependency { + """ID of the dependency.""" + id: PackagesDependencyID! + + """Name of the dependency.""" + name: String! + + """Version pattern of the dependency.""" + versionPattern: String! +} + +"""Represents a package dependency link""" +type PackageDependencyLink { + """Dependency.""" + dependency: PackageDependency + + """Dependency type.""" + dependencyType: PackageDependencyType! + + """ID of the dependency link.""" + id: PackagesDependencyLinkID! + + """Dependency link metadata.""" + metadata: DependencyLinkMetadata +} + +"""The connection type for PackageDependencyLink.""" +type PackageDependencyLinkConnection { + """A list of edges.""" + edges: [PackageDependencyLinkEdge] + + """A list of nodes.""" + nodes: [PackageDependencyLink] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PackageDependencyLinkEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PackageDependencyLink +} + +enum PackageDependencyType { + """dependencies dependency type""" + DEPENDENCIES + + """devDependencies dependency type""" + DEV_DEPENDENCIES + + """bundleDependencies dependency type""" + BUNDLE_DEPENDENCIES + + """peerDependencies dependency type""" + PEER_DEPENDENCIES +} + +""" +Represents a package details in the Package Registry. Note that this type is in beta and susceptible to changes +""" +type PackageDetailsType { + """Whether the user can destroy the package.""" + canDestroy: Boolean! + + """Date of creation.""" + createdAt: Time! + + """Dependency link.""" + dependencyLinks( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageDependencyLinkConnection + + """ID of the package.""" + id: PackagesPackageID! + + """Package metadata.""" + metadata: PackageMetadata + + """Name of the package.""" + name: String! + + """Package files.""" + packageFiles( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageFileConnection + + """Package type.""" + packageType: PackageTypeEnum! + + """Pipelines that built the package.""" + pipelines( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineConnection + + """Project where the package is stored.""" + project: Project! + + """Package status.""" + status: PackageStatus! + + """Package tags.""" + tags( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageTagConnection + + """Date of most recent update.""" + updatedAt: Time! + + """Version string.""" + version: String + + """Other versions of the package.""" + versions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageConnection +} + +"""An edge in a connection.""" +type PackageEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Package +} + +"""Represents a package file""" +type PackageFile { + """Created date.""" + createdAt: Time! + + """Download path of the package file.""" + downloadPath: String! + + """Md5 of the package file.""" + fileMd5: String + + """File metadata.""" + fileMetadata: PackageFileMetadata + + """Name of the package file.""" + fileName: String! + + """Sha1 of the package file.""" + fileSha1: String + + """Sha256 of the package file.""" + fileSha256: String + + """ID of the file.""" + id: PackagesPackageFileID! + + """Size of the package file.""" + size: String! + + """Updated date.""" + updatedAt: Time! +} + +"""The connection type for PackageFile.""" +type PackageFileConnection { + """A list of edges.""" + edges: [PackageFileEdge] + + """A list of nodes.""" + nodes: [PackageFile] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PackageFileEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PackageFile +} + +"""Represents metadata associated with a Package file""" +interface PackageFileMetadata { + """Date of creation.""" + createdAt: Time! + + """Date of most recent update.""" + updatedAt: Time! +} + +"""Represents the Geo sync and verification state of a package file""" +type PackageFileRegistry { + """Timestamp when the PackageFileRegistry was created""" + createdAt: Time + + """ID of the PackageFileRegistry""" + id: ID! + + """Error message during sync of the PackageFileRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the PackageFileRegistry + """ + lastSyncedAt: Time + + """ID of the PackageFile.""" + packageFileId: ID! + + """Timestamp after which the PackageFileRegistry should be resynced""" + retryAt: Time + + """Number of consecutive failed sync attempts of the PackageFileRegistry""" + retryCount: Int + + """Sync state of the PackageFileRegistry""" + state: RegistryState +} + +"""The connection type for PackageFileRegistry.""" +type PackageFileRegistryConnection { + """A list of edges.""" + edges: [PackageFileRegistryEdge] + + """A list of nodes.""" + nodes: [PackageFileRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PackageFileRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PackageFileRegistry +} + +"""Values for sorting group packages""" +enum PackageGroupSort { + """Ordered by created_at in descending order.""" + CREATED_DESC + + """Ordered by created_at in ascending order.""" + CREATED_ASC + + """Ordered by name in descending order.""" + NAME_DESC + + """Ordered by name in ascending order.""" + NAME_ASC + + """Ordered by version in descending order.""" + VERSION_DESC + + """Ordered by version in ascending order.""" + VERSION_ASC + + """Ordered by type in descending order.""" + TYPE_DESC + + """Ordered by type in ascending order.""" + TYPE_ASC + + """Ordered by project path in descending order.""" + PROJECT_PATH_DESC + + """Ordered by project path in ascending order.""" + PROJECT_PATH_ASC +} + +"""Represents metadata associated with a Package""" +union PackageMetadata = ComposerMetadata | ConanMetadata | MavenMetadata | NugetMetadata | PypiMetadata + +""" +A `PackagesConanFileMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesConanFileMetadatumID` is: `"gid://gitlab/Packages::Conan::FileMetadatum/1"`. +""" +scalar PackagesConanFileMetadatumID + +""" +A `PackagesConanMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesConanMetadatumID` is: `"gid://gitlab/Packages::Conan::Metadatum/1"`. +""" +scalar PackagesConanMetadatumID + +""" +A `PackagesDependencyID` is a global ID. It is encoded as a string. + +An example `PackagesDependencyID` is: `"gid://gitlab/Packages::Dependency/1"`. +""" +scalar PackagesDependencyID + +""" +A `PackagesDependencyLinkID` is a global ID. It is encoded as a string. + +An example `PackagesDependencyLinkID` is: `"gid://gitlab/Packages::DependencyLink/1"`. +""" +scalar PackagesDependencyLinkID + +"""Namespace-level Package Registry settings""" +type PackageSettings { + """ + When generic_duplicates_allowed is false, you can publish duplicate packages + with names that match this regex. Otherwise, this setting has no effect. + """ + genericDuplicateExceptionRegex: UntrustedRegexp + + """ + Indicates whether duplicate generic packages are allowed for this namespace. + """ + genericDuplicatesAllowed: Boolean! + + """ + When maven_duplicates_allowed is false, you can publish duplicate packages + with names that match this regex. Otherwise, this setting has no effect. + """ + mavenDuplicateExceptionRegex: UntrustedRegexp + + """ + Indicates whether duplicate Maven packages are allowed for this namespace. + """ + mavenDuplicatesAllowed: Boolean! +} + +""" +A `PackagesMavenMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesMavenMetadatumID` is: `"gid://gitlab/Packages::Maven::Metadatum/1"`. +""" +scalar PackagesMavenMetadatumID + +""" +A `PackagesNugetDependencyLinkMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesNugetDependencyLinkMetadatumID` is: `"gid://gitlab/Packages::Nuget::DependencyLinkMetadatum/1"`. +""" +scalar PackagesNugetDependencyLinkMetadatumID + +""" +A `PackagesNugetMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesNugetMetadatumID` is: `"gid://gitlab/Packages::Nuget::Metadatum/1"`. +""" +scalar PackagesNugetMetadatumID + +"""Values for sorting package""" +enum PackageSort { + """Ordered by created_at in descending order.""" + CREATED_DESC + + """Ordered by created_at in ascending order.""" + CREATED_ASC + + """Ordered by name in descending order.""" + NAME_DESC + + """Ordered by name in ascending order.""" + NAME_ASC + + """Ordered by version in descending order.""" + VERSION_DESC + + """Ordered by version in ascending order.""" + VERSION_ASC + + """Ordered by type in descending order.""" + TYPE_DESC + + """Ordered by type in ascending order.""" + TYPE_ASC +} + +""" +A `PackagesPackageFileID` is a global ID. It is encoded as a string. + +An example `PackagesPackageFileID` is: `"gid://gitlab/Packages::PackageFile/1"`. +""" +scalar PackagesPackageFileID + +""" +A `PackagesPackageID` is a global ID. It is encoded as a string. + +An example `PackagesPackageID` is: `"gid://gitlab/Packages::Package/1"`. +""" +scalar PackagesPackageID + +""" +A `PackagesPypiMetadatumID` is a global ID. It is encoded as a string. + +An example `PackagesPypiMetadatumID` is: `"gid://gitlab/Packages::Pypi::Metadatum/1"`. +""" +scalar PackagesPypiMetadatumID + +enum PackageStatus { + """Packages with a default status""" + DEFAULT + + """Packages with a hidden status""" + HIDDEN + + """Packages with a processing status""" + PROCESSING + + """Packages with a error status""" + ERROR +} + +"""Represents a package tag""" +type PackageTag { + """Created date.""" + createdAt: Time! + + """ID of the tag.""" + id: ID! + + """Name of the tag.""" + name: String! + + """Updated date.""" + updatedAt: Time! +} + +"""The connection type for PackageTag.""" +type PackageTagConnection { + """A list of edges.""" + edges: [PackageTagEdge] + + """A list of nodes.""" + nodes: [PackageTag] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PackageTagEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PackageTag +} + +enum PackageTypeEnum { + """Packages from the Maven package manager""" + MAVEN + + """Packages from the npm package manager""" + NPM + + """Packages from the Conan package manager""" + CONAN + + """Packages from the Nuget package manager""" + NUGET + + """Packages from the PyPI package manager""" + PYPI + + """Packages from the Composer package manager""" + COMPOSER + + """Packages from the Generic package manager""" + GENERIC + + """Packages from the Golang package manager""" + GOLANG + + """Packages from the Debian package manager""" + DEBIAN + + """Packages from the Rubygems package manager""" + RUBYGEMS + + """Packages from the Helm package manager""" + HELM + + """Packages from the Terraform Module package manager""" + TERRAFORM_MODULE +} + +"""Information about pagination in a connection.""" +type PageInfo { + """When paginating forwards, the cursor to continue.""" + endCursor: String + + """When paginating forwards, are there more items?""" + hasNextPage: Boolean! + + """When paginating backwards, are there more items?""" + hasPreviousPage: Boolean! + + """When paginating backwards, the cursor to continue.""" + startCursor: String +} + +""" +Represents the Geo replication and verification state of a pages_deployment +""" +type PagesDeploymentRegistry { + """Timestamp when the PagesDeploymentRegistry was created""" + createdAt: Time + + """ID of the PagesDeploymentRegistry""" + id: ID! + + """Error message during sync of the PagesDeploymentRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the PagesDeploymentRegistry + """ + lastSyncedAt: Time + + """ID of the Pages Deployment.""" + pagesDeploymentId: ID! + + """Timestamp after which the PagesDeploymentRegistry should be resynced""" + retryAt: Time + + """ + Number of consecutive failed sync attempts of the PagesDeploymentRegistry + """ + retryCount: Int + + """Sync state of the PagesDeploymentRegistry""" + state: RegistryState +} + +"""The connection type for PagesDeploymentRegistry.""" +type PagesDeploymentRegistryConnection { + """A list of edges.""" + edges: [PagesDeploymentRegistryEdge] + + """A list of nodes.""" + nodes: [PagesDeploymentRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PagesDeploymentRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PagesDeploymentRegistry +} + +""" +Represents a file or directory in the project repository that has been locked. +""" +type PathLock { + """ID of the path lock.""" + id: PathLockID! + + """Locked path.""" + path: String + + """User that has locked this path.""" + user: UserCore +} + +"""The connection type for PathLock.""" +type PathLockConnection { + """A list of edges.""" + edges: [PathLockEdge] + + """A list of nodes.""" + nodes: [PathLock] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PathLockEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PathLock +} + +""" +A `PathLockID` is a global ID. It is encoded as a string. + +An example `PathLockID` is: `"gid://gitlab/PathLock/1"`. +""" +scalar PathLockID + +"""String or integer.""" +scalar PayloadAlertFieldPathSegment + +type Pipeline { + """Indicates if the pipeline is active.""" + active: Boolean! + + """Base SHA of the source branch.""" + beforeSha: String + + """Specifies if a pipeline can be canceled.""" + cancelable: Boolean! + + """Code Quality degradations reported on the pipeline.""" + codeQualityReports( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CodeQualityDegradationConnection + + """Path to the commit that triggered the pipeline.""" + commitPath: String + + """Timestamp of the pipeline's commit.""" + committedAt: Time + + """Indicates if a pipeline is complete.""" + complete: Boolean! + + """ + Configuration source of the pipeline (UNKNOWN_SOURCE, REPOSITORY_SOURCE, + AUTO_DEVOPS_SOURCE, WEBIDE_SOURCE, REMOTE_SOURCE, EXTERNAL_PROJECT_SOURCE, + BRIDGE_SOURCE, PARAMETER_SOURCE, COMPLIANCE_SOURCE) + """ + configSource: PipelineConfigSourceEnum + + """Coverage percentage.""" + coverage: Float + + """Timestamp of the pipeline's creation.""" + createdAt: Time! + + """ + DAST profile associated with the pipeline. Returns `null`if `dast_view_scans` feature flag is disabled. + """ + dastProfile: DastProfile + + """Detailed status of the pipeline.""" + detailedStatus: DetailedStatus! + + """Pipelines this pipeline will trigger.""" + downstream( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineConnection + + """Duration of the pipeline in seconds.""" + duration: Int + + """Timestamp of the pipeline's completion.""" + finishedAt: Time + + """ID of the pipeline.""" + id: ID! + + """Internal ID of the pipeline.""" + iid: String! + + """Specific job in this pipeline, either by name or ID.""" + job( + """ID of the job.""" + id: JobID + + """Name of the job.""" + name: String + ): CiJob + + """Jobs belonging to the pipeline.""" + jobs( + """Filter jobs by the type of security report they produce.""" + securityReportTypes: [SecurityReportTypeEnum!] + + """Filter jobs by status.""" + statuses: [CiJobStatus!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiJobConnection + + """Relative path to the pipeline's page.""" + path: String + + """Project the pipeline belongs to.""" + project: Project + + """How long the pipeline was queued before starting.""" + queuedDuration: Duration + + """Reference to the branch from which the pipeline was triggered.""" + ref: String + + """Specifies if a pipeline can be retried.""" + retryable: Boolean! + + """Vulnerability findings reported on the pipeline.""" + securityReportFindings( + """Filter vulnerability findings by report type.""" + reportType: [String!] + + """Filter vulnerability findings by severity.""" + severity: [String!] + + """Filter vulnerability findings by Scanner.externalId.""" + scanner: [String!] + + """Filter vulnerability findings by state.""" + state: [VulnerabilityState!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineSecurityReportFindingConnection + + """ + Vulnerability and scanned resource counts for each security scanner of the pipeline. + """ + securityReportSummary: SecurityReportSummary + + """SHA of the pipeline's commit.""" + sha: String! + + """Job where pipeline was triggered from.""" + sourceJob: CiJob + + """Stages of the pipeline.""" + stages( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiStageConnection + + """Timestamp when the pipeline was started.""" + startedAt: Time + + """ + Status of the pipeline (CREATED, WAITING_FOR_RESOURCE, PREPARING, PENDING, + RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED) + """ + status: PipelineStatusEnum! + + """Summary of the test report generated by the pipeline.""" + testReportSummary: TestReportSummary! + + """A specific test suite in a pipeline test report.""" + testSuite( + """IDs of the builds used to run the test suite.""" + buildIds: [ID!]! + ): TestSuite + + """Timestamp of the pipeline's last activity.""" + updatedAt: Time! + + """Pipeline that triggered the pipeline.""" + upstream: Pipeline + + """Pipeline user.""" + user: UserCore + + """Permissions for the current user on the resource""" + userPermissions: PipelinePermissions! + + """Indicates if the pipeline has jobs with `needs` dependencies.""" + usesNeeds: Boolean + + """Indicates if a pipeline has warnings.""" + warnings: Boolean! +} + +type PipelineAnalytics { + """Labels for the monthly pipeline count.""" + monthPipelinesLabels: [String!] + + """Total monthly successful pipeline count.""" + monthPipelinesSuccessful: [Int!] + + """Total monthly pipeline count.""" + monthPipelinesTotals: [Int!] + + """Pipeline times labels.""" + pipelineTimesLabels: [String!] + + """Pipeline times.""" + pipelineTimesValues: [Int!] + + """Labels for the weekly pipeline count.""" + weekPipelinesLabels: [String!] + + """Total weekly successful pipeline count.""" + weekPipelinesSuccessful: [Int!] + + """Total weekly pipeline count.""" + weekPipelinesTotals: [Int!] + + """Labels for the yearly pipeline count.""" + yearPipelinesLabels: [String!] + + """Total yearly successful pipeline count.""" + yearPipelinesSuccessful: [Int!] + + """Total yearly pipeline count.""" + yearPipelinesTotals: [Int!] +} + +"""Represents the Geo sync and verification state of a pipeline artifact""" +type PipelineArtifactRegistry { + """Timestamp when the PipelineArtifactRegistry was created""" + createdAt: Time + + """ID of the PipelineArtifactRegistry""" + id: ID! + + """Error message during sync of the PipelineArtifactRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the PipelineArtifactRegistry + """ + lastSyncedAt: Time + + """ID of the pipeline artifact.""" + pipelineArtifactId: ID! + + """Timestamp after which the PipelineArtifactRegistry should be resynced""" + retryAt: Time + + """ + Number of consecutive failed sync attempts of the PipelineArtifactRegistry + """ + retryCount: Int + + """Sync state of the PipelineArtifactRegistry""" + state: RegistryState +} + +"""The connection type for PipelineArtifactRegistry.""" +type PipelineArtifactRegistryConnection { + """A list of edges.""" + edges: [PipelineArtifactRegistryEdge] + + """A list of nodes.""" + nodes: [PipelineArtifactRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PipelineArtifactRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PipelineArtifactRegistry +} + +"""Autogenerated input type of PipelineCancel""" +input PipelineCancelInput { + """ID of the pipeline to mutate.""" + id: CiPipelineID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PipelineCancel""" +type PipelineCancelPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +enum PipelineConfigSourceEnum { + """Unknown source.""" + UNKNOWN_SOURCE + + """Repository source.""" + REPOSITORY_SOURCE + + """Auto DevOps source.""" + AUTO_DEVOPS_SOURCE + + """Webide source.""" + WEBIDE_SOURCE + + """Remote source.""" + REMOTE_SOURCE + + """External project source.""" + EXTERNAL_PROJECT_SOURCE + + """Bridge source.""" + BRIDGE_SOURCE + + """Parameter source.""" + PARAMETER_SOURCE + + """Compliance source.""" + COMPLIANCE_SOURCE +} + +"""The connection type for Pipeline.""" +type PipelineConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [PipelineEdge] + + """A list of nodes.""" + nodes: [Pipeline] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of PipelineDestroy""" +input PipelineDestroyInput { + """ID of the pipeline to mutate.""" + id: CiPipelineID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PipelineDestroy""" +type PipelineDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type PipelineEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Pipeline +} + +type PipelinePermissions { + """Indicates the user can perform `admin_pipeline` on this resource""" + adminPipeline: Boolean! + + """Indicates the user can perform `destroy_pipeline` on this resource""" + destroyPipeline: Boolean! + + """Indicates the user can perform `update_pipeline` on this resource""" + updatePipeline: Boolean! +} + +"""Autogenerated input type of PipelineRetry""" +input PipelineRetryInput { + """ID of the pipeline to mutate.""" + id: CiPipelineID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PipelineRetry""" +type PipelineRetryPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Pipeline after mutation.""" + pipeline: Pipeline +} + +"""Represents vulnerability finding of a security report on the pipeline.""" +type PipelineSecurityReportFinding { + """Type of the security report that found the vulnerability.""" + confidence: String + + """Description of the vulnerability finding.""" + description: String + + """Indicates whether the vulnerability is a false positive.""" + falsePositive: Boolean + + """Identifiers of the vulnerabilit finding.""" + identifiers: [VulnerabilityIdentifier!]! + + """ + Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability. + """ + location: VulnerabilityLocation + + """Name of the vulnerability finding.""" + name: String + + """Project on which the vulnerability finding was found.""" + project: Project + + """Name of the vulnerability finding.""" + projectFingerprint: String + + """Type of the security report that found the vulnerability finding.""" + reportType: VulnerabilityReportType + + """Scanner metadata for the vulnerability.""" + scanner: VulnerabilityScanner + + """Severity of the vulnerability finding.""" + severity: VulnerabilitySeverity + + """URL to the vulnerability's details page.""" + solution: String + + """Finding status.""" + state: VulnerabilityState + + """Name of the vulnerability finding.""" + uuid: String +} + +"""The connection type for PipelineSecurityReportFinding.""" +type PipelineSecurityReportFindingConnection { + """A list of edges.""" + edges: [PipelineSecurityReportFindingEdge] + + """A list of nodes.""" + nodes: [PipelineSecurityReportFinding] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type PipelineSecurityReportFindingEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PipelineSecurityReportFinding +} + +enum PipelineStatusEnum { + """Pipeline has been created.""" + CREATED + + """ + A resource (for example, a runner) that the pipeline requires to run is unavailable. + """ + WAITING_FOR_RESOURCE + + """Pipeline is preparing to run.""" + PREPARING + + """Pipeline has not started running yet.""" + PENDING + + """Pipeline is running.""" + RUNNING + + """At least one stage of the pipeline failed.""" + FAILED + + """Pipeline completed successfully.""" + SUCCESS + + """Pipeline was canceled before completion.""" + CANCELED + + """Pipeline was skipped.""" + SKIPPED + + """Pipeline needs to be manually started.""" + MANUAL + + """Pipeline is scheduled to run.""" + SCHEDULED +} + +type Project { + """Size limit for the repository in bytes.""" + actualRepositorySizeLimit: Float + + """Agent configurations defined by the project""" + agentConfigurations( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): AgentConfigurationConnection + + """A single Alert Management alert of the project.""" + alertManagementAlert( + """IID of the alert. For example, "1".""" + iid: String + + """Alerts with the specified statues. For example, `[TRIGGERED]`.""" + statuses: [AlertManagementStatus!] + + """Sort alerts by this criteria.""" + sort: AlertManagementAlertSort + + """Filter query for given domain.""" + domain: AlertManagementDomainFilter! = operations + + """Search query for title, description, service, or monitoring_tool.""" + search: String + + """Username of a user assigned to the issue.""" + assigneeUsername: String + ): AlertManagementAlert + + """Counts of alerts by status for the project.""" + alertManagementAlertStatusCounts( + """Search query for title, description, service, or monitoring_tool.""" + search: String + + """Username of a user assigned to the issue.""" + assigneeUsername: String + ): AlertManagementAlertStatusCountsType + + """Alert Management alerts of the project.""" + alertManagementAlerts( + """IID of the alert. For example, "1".""" + iid: String + + """Alerts with the specified statues. For example, `[TRIGGERED]`.""" + statuses: [AlertManagementStatus!] + + """Sort alerts by this criteria.""" + sort: AlertManagementAlertSort + + """Filter query for given domain.""" + domain: AlertManagementDomainFilter! = operations + + """Search query for title, description, service, or monitoring_tool.""" + search: String + + """Username of a user assigned to the issue.""" + assigneeUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): AlertManagementAlertConnection + + """HTTP Integrations which can receive alerts for the project.""" + alertManagementHttpIntegrations( + """ID of the integration.""" + id: AlertManagementHttpIntegrationID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): AlertManagementHttpIntegrationConnection + + """Integrations which can receive alerts for the project.""" + alertManagementIntegrations( + """ID of the integration.""" + id: GlobalID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): AlertManagementIntegrationConnection + + """Extract alert fields from payload for custom mapping.""" + alertManagementPayloadFields( + """Sample payload for extracting alert fields for custom mappings.""" + payloadExample: String! + ): [AlertManagementPayloadAlertField!] + + """ + If `only_allow_merge_if_pipeline_succeeds` is true, indicates if merge + requests of the project can also be merged with skipped jobs. + """ + allowMergeOnSkippedPipeline: Boolean + + """API fuzzing configuration for the project. """ + apiFuzzingCiConfiguration: ApiFuzzingCiConfiguration + + """Indicates the archived status of the project.""" + archived: Boolean + + """ + Indicates if issues referenced by merge requests and commits within the default branch are closed automatically. + """ + autocloseReferencedIssues: Boolean + + """URL to avatar image file of the project.""" + avatarUrl: String + + """A single board of the project.""" + board( + """ID of the board.""" + id: BoardID! + ): Board + + """Boards of the project.""" + boards( + """Find a board by its ID.""" + id: BoardID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): BoardConnection + + """CI/CD settings for the project.""" + ciCdSettings: ProjectCiCdSetting + + """The CI Job Tokens scope of access.""" + ciJobTokenScope: CiJobTokenScopeType + + """Find a single CI/CD template by name.""" + ciTemplate( + """ + Name of the CI/CD template to search for. Template must be formatted as `Name.gitlab-ci.yml`. + """ + name: String! + ): CiTemplate + + """Find a single cluster agent by name.""" + clusterAgent( + """Name of the cluster agent.""" + name: String! + ): ClusterAgent + + """Cluster agents associated with the project.""" + clusterAgents( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ClusterAgentConnection + + """Code coverage summary associated with the project.""" + codeCoverageSummary: CodeCoverageSummary + + """Compliance frameworks associated with the project.""" + complianceFrameworks( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ComplianceFrameworkConnection + + """Container expiration policy of the project.""" + containerExpirationPolicy: ContainerExpirationPolicy + + """Indicates if Container Registry is enabled for the current user""" + containerRegistryEnabled: Boolean + + """Container repositories of the project.""" + containerRepositories( + """Filter the container repositories by their name.""" + name: String + + """Sort container repositories by this criteria.""" + sort: ContainerRepositorySort = created_desc + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ContainerRepositoryConnection + + """Number of container repositories in the project.""" + containerRepositoriesCount: Int! + + """Timestamp of the project creation.""" + createdAt: Time + + """DAST Profile associated with the project.""" + dastProfile( + """ID of the DAST Profile.""" + id: DastProfileID! + ): DastProfile + + """DAST Profiles associated with the project.""" + dastProfiles( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DastProfileConnection + + """DAST scanner profiles associated with the project.""" + dastScannerProfiles( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DastScannerProfileConnection + + """DAST Site Profile associated with the project.""" + dastSiteProfile( + """ID of the site profile.""" + id: DastSiteProfileID! + ): DastSiteProfile + + """DAST Site Profiles associated with the project.""" + dastSiteProfiles( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DastSiteProfileConnection + + """DAST Site Validations associated with the project.""" + dastSiteValidations( + """Normalized URL of the target to be scanned.""" + normalizedTargetUrls: [String!] + + """Status of the site validation.""" + status: DastSiteValidationStatusEnum + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DastSiteValidationConnection + + """Short description of the project.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Project's DORA metrics.""" + dora: Dora + + """A single environment of the project.""" + environment( + """Name of the environment.""" + name: String + + """Search query for environment name.""" + search: String + + """States of environments that should be included in result.""" + states: [String!] + ): Environment + + """Environments of the project.""" + environments( + """Name of the environment.""" + name: String + + """Search query for environment name.""" + search: String + + """States of environments that should be included in result.""" + states: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EnvironmentConnection + + """Number of times the project has been forked.""" + forksCount: Int! + + """Full path of the project.""" + fullPath: ID! + + """Grafana integration details for the project.""" + grafanaIntegration: GrafanaIntegration + + """Group of the project.""" + group: Group + + """URL to connect to the project via HTTPS.""" + httpUrlToRepo: String + + """ID of the project.""" + id: ID! + + """Status of import background job of the project.""" + importStatus: String + + """Incident Management escalation policies of the project.""" + incidentManagementEscalationPolicies( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): EscalationPolicyTypeConnection + + """Incident Management escalation policy of the project.""" + incidentManagementEscalationPolicy( + """ID of the escalation policy.""" + id: IncidentManagementEscalationPolicyID! + ): EscalationPolicyType + + """Incident Management On-call schedules of the project.""" + incidentManagementOncallSchedules( + """IIDs of on-call schedules.""" + iids: [ID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IncidentManagementOncallScheduleConnection + + """A single issue of the project.""" + issue( + """Search query for title or description.""" + search: String + + """IID of the issue. For example, "1".""" + iid: String + + """List of IIDs of issues. For example, `["1", "2"]`.""" + iids: [String!] + + """Labels applied to this issue.""" + labelName: [String] + + """Milestone applied to this issue.""" + milestoneTitle: [String] + + """Username of the author of the issue.""" + authorUsername: String + + """Usernames of users assigned to the issue.""" + assigneeUsernames: [String!] + + """ + ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + """ + assigneeId: String + + """Issues created before this date.""" + createdBefore: Time + + """Issues created after this date.""" + createdAfter: Time + + """Issues updated before this date.""" + updatedBefore: Time + + """Issues updated after this date.""" + updatedAfter: Time + + """Issues closed before this date.""" + closedBefore: Time + + """Issues closed after this date.""" + closedAfter: Time + + """Filter issues by the given issue types.""" + types: [IssueType!] + + """Filter issues by milestone ID wildcard.""" + milestoneWildcardId: MilestoneWildcardId + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """ + Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + """ + confidential: Boolean + + """Negated arguments.""" + not: NegatedIssueFilterInput + + """Current state of this issue.""" + state: IssuableState + + """Sort issues by this criteria.""" + sort: IssueSort = created_desc + + """List of iteration Global IDs applied to the issue.""" + iterationId: [ID] + + """Filter by iteration ID wildcard.""" + iterationWildcardId: IterationWildcardId + + """ + ID of an epic associated with the issues, "none" and "any" values are supported. + """ + epicId: String + + """Whether to include subepics when filtering issues by epicId.""" + includeSubepics: Boolean + + """Weight applied to the issue, "none" and "any" values are supported.""" + weight: String + + """Release tag associated with the issue's milestone.""" + releaseTag: [String!] + + """Filter issues by release tag ID wildcard.""" + releaseTagWildcardId: ReleaseTagWildcardId + ): Issue + + """Counts of issues by status for the project.""" + issueStatusCounts( + """Search query for title or description.""" + search: String + + """IID of the issue. For example, "1".""" + iid: String + + """List of IIDs of issues. For example, `["1", "2"]`.""" + iids: [String!] + + """Labels applied to this issue.""" + labelName: [String] + + """Milestone applied to this issue.""" + milestoneTitle: [String] + + """Username of the author of the issue.""" + authorUsername: String + + """Usernames of users assigned to the issue.""" + assigneeUsernames: [String!] + + """ + ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + """ + assigneeId: String + + """Issues created before this date.""" + createdBefore: Time + + """Issues created after this date.""" + createdAfter: Time + + """Issues updated before this date.""" + updatedBefore: Time + + """Issues updated after this date.""" + updatedAfter: Time + + """Issues closed before this date.""" + closedBefore: Time + + """Issues closed after this date.""" + closedAfter: Time + + """Filter issues by the given issue types.""" + types: [IssueType!] + + """Filter issues by milestone ID wildcard.""" + milestoneWildcardId: MilestoneWildcardId + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """ + Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + """ + confidential: Boolean + + """Negated arguments.""" + not: NegatedIssueFilterInput + + """Release tag associated with the issue's milestone.""" + releaseTag: [String!] + + """Filter issues by release tag ID wildcard.""" + releaseTagWildcardId: ReleaseTagWildcardId + ): IssueStatusCountsType + + """Issues of the project.""" + issues( + """Search query for title or description.""" + search: String + + """IID of the issue. For example, "1".""" + iid: String + + """List of IIDs of issues. For example, `["1", "2"]`.""" + iids: [String!] + + """Labels applied to this issue.""" + labelName: [String] + + """Milestone applied to this issue.""" + milestoneTitle: [String] + + """Username of the author of the issue.""" + authorUsername: String + + """Usernames of users assigned to the issue.""" + assigneeUsernames: [String!] + + """ + ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported. + """ + assigneeId: String + + """Issues created before this date.""" + createdBefore: Time + + """Issues created after this date.""" + createdAfter: Time + + """Issues updated before this date.""" + updatedBefore: Time + + """Issues updated after this date.""" + updatedAfter: Time + + """Issues closed before this date.""" + closedBefore: Time + + """Issues closed after this date.""" + closedAfter: Time + + """Filter issues by the given issue types.""" + types: [IssueType!] + + """Filter issues by milestone ID wildcard.""" + milestoneWildcardId: MilestoneWildcardId + + """ + Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported. + """ + myReactionEmoji: String + + """ + Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues. + """ + confidential: Boolean + + """Negated arguments.""" + not: NegatedIssueFilterInput + + """Current state of this issue.""" + state: IssuableState + + """Sort issues by this criteria.""" + sort: IssueSort = created_desc + + """List of iteration Global IDs applied to the issue.""" + iterationId: [ID] + + """Filter by iteration ID wildcard.""" + iterationWildcardId: IterationWildcardId + + """ + ID of an epic associated with the issues, "none" and "any" values are supported. + """ + epicId: String + + """Whether to include subepics when filtering issues by epicId.""" + includeSubepics: Boolean + + """Weight applied to the issue, "none" and "any" values are supported.""" + weight: String + + """Release tag associated with the issue's milestone.""" + releaseTag: [String!] + + """Filter issues by release tag ID wildcard.""" + releaseTagWildcardId: ReleaseTagWildcardId + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IssueConnection + + """Indicates if Issues are enabled for the current user""" + issuesEnabled: Boolean + + """Find iteration cadences.""" + iterationCadences( + """Global ID of the iteration cadence to look up.""" + id: IterationsCadenceID + + """Fuzzy search by title.""" + title: String + + """Duration in weeks of the iterations within this cadence.""" + durationInWeeks: Int + + """ + Whether the iteration cadence should automatically generate future iterations. + """ + automatic: Boolean + + """Whether the iteration cadence is active.""" + active: Boolean + + """Whether to include ancestor groups to search iterations cadences in.""" + includeAncestorGroups: Boolean + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IterationCadenceConnection + + """Find iterations.""" + iterations( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Filter iterations by state.""" + state: IterationState + + """Fuzzy search by title.""" + title: String + + """Global ID of the Iteration to look up.""" + id: ID + + """Internal ID of the Iteration to look up.""" + iid: ID + + """Whether to include ancestor iterations. Defaults to true.""" + includeAncestors: Boolean + + """Global iteration cadence IDs by which to look up the iterations.""" + iterationCadenceIds: [IterationsCadenceID!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): IterationConnection + + """Status of Jira import background job of the project.""" + jiraImportStatus: String + + """Jira imports into the project.""" + jiraImports( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): JiraImportConnection + + """ + Jobs of a project. This field can only be resolved for one project in any single request. + """ + jobs( + """Filter jobs by status.""" + statuses: [CiJobStatus!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiJobConnection + + """Indicates if CI/CD pipeline jobs are enabled for the current user.""" + jobsEnabled: Boolean + + """Label available on this project.""" + label( + """Title of the label.""" + title: String! + ): Label + + """Labels available on this project.""" + labels( + """Search term to find labels with.""" + searchTerm: String + + """Include labels from ancestor groups.""" + includeAncestorGroups: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """Timestamp of the project last activity.""" + lastActivityAt: Time + + """Indicates if the project has Large File Storage (LFS) enabled.""" + lfsEnabled: Boolean + + """A single merge request of the project.""" + mergeRequest( + """IID of the merge request, for example `1`.""" + iid: String! + ): MergeRequest + + """Merge requests of the project.""" + mergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """Username of the assignee.""" + assigneeUsername: String + + """Username of the author.""" + authorUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Indicates if Merge Requests are enabled for the current user""" + mergeRequestsEnabled: Boolean + + """ + Indicates if no merge commits should be created and all merges should instead + be fast-forwarded, which means that merging is only allowed if the branch + could be fast-forwarded. + """ + mergeRequestsFfOnlyEnabled: Boolean + + """Milestones of the project.""" + milestones( + """List items overlapping the given timeframe.""" + timeframe: Timeframe + + """Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`.""" + ids: [ID!] + + """Filter milestones by state.""" + state: MilestoneStateEnum + + """Title of the milestone.""" + title: String + + """Search string for the title.""" + searchTitle: String + + """Date the milestone contains.""" + containingDate: Time + + """Sort milestones by this criteria.""" + sort: MilestoneSort = DUE_DATE_ASC + + """ + Also return milestones in the project's parent group and its ancestors. + """ + includeAncestors: Boolean + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MilestoneConnection + + """Name of the project (without namespace).""" + name: String! + + """Full name of the project with its namespace.""" + nameWithNamespace: String! + + """Namespace of the project.""" + namespace: Namespace + + """Network Policies of the project""" + networkPolicies( + """Global ID of the environment to filter policies.""" + environmentId: EnvironmentID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NetworkPolicyConnection + + """ + Indicates if merge requests of the project can only be merged when all the discussions are resolved. + """ + onlyAllowMergeIfAllDiscussionsAreResolved: Boolean + + """ + Indicates if merge requests of the project can only be merged with successful jobs. + """ + onlyAllowMergeIfPipelineSucceeds: Boolean + + """Number of open issues for the project.""" + openIssuesCount: Int + + """Packages of the project.""" + packages( + """Sort packages by this criteria.""" + sort: PackageSort = CREATED_DESC + + """Search a package by name.""" + packageName: String = null + + """Filter a package by type.""" + packageType: PackageTypeEnum = null + + """Filter a package by status.""" + status: PackageStatus = null + + """Include versionless packages.""" + includeVersionless: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageConnection + + """Path of the project.""" + path: String! + + """The project's path locks.""" + pathLocks( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PathLockConnection + + """Build pipeline of the project.""" + pipeline( + """IID of the Pipeline. For example, "1".""" + iid: ID + + """ + SHA of the Pipeline. For example, "dyd0f15ay83993f5ab66k927w28673882x99100b". + """ + sha: String + ): Pipeline + + """Pipeline analytics.""" + pipelineAnalytics: PipelineAnalytics + + """Build pipelines of the project.""" + pipelines( + """Filter pipelines by their status.""" + status: PipelineStatusEnum + + """Filter pipelines by the ref they are run for.""" + ref: String + + """Filter pipelines by the sha of the commit they are run for.""" + sha: String + + """ + Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled. + """ + source: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PipelineConnection + + """ + Indicates if a link to create or view a merge request should display after a + push to Git repositories of the project from the command line. + """ + printingMergeRequestLinkEnabled: Boolean + + """Members of the project.""" + projectMembers( + """Search query.""" + search: String + + """Filter members by the given member relations.""" + relations: [ProjectMemberRelation!] = [DIRECT, INHERITED] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MemberInterfaceConnection + + """ + Indicates if there is public access to pipelines and job details of the project, including output logs and artifacts. + """ + publicJobs: Boolean + + """Project's push rules settings.""" + pushRules: PushRules + + """A single release of the project.""" + release( + """Name of the tag associated to the release.""" + tagName: String! + ): Release + + """Releases of the project.""" + releases( + """Sort releases by this criteria.""" + sort: ReleaseSort = RELEASED_AT_DESC + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ReleaseConnection + + """ + Indicates if `Delete source branch` option should be enabled by default for all new merge requests of the project. + """ + removeSourceBranchAfterMerge: Boolean + + """Git repository of the project.""" + repository: Repository + + """Size of repository that exceeds the limit in bytes.""" + repositorySizeExcess: Float + + """Indicates if users can request member access to the project.""" + requestAccessEnabled: Boolean + + """Find a single requirement.""" + requirement( + """List requirements by sort order.""" + sort: Sort + + """Filter requirements by state.""" + state: RequirementState + + """Search query for requirement title.""" + search: String + + """Filter requirements by author username.""" + authorUsername: [String!] + + """IID of the requirement, e.g., "1".""" + iid: ID + + """List of IIDs of requirements, e.g., `[1, 2]`.""" + iids: [ID!] + + """State of latest requirement test report.""" + lastTestReportState: RequirementStatusFilter + ): Requirement + + """Number of requirements for the project by their state.""" + requirementStatesCount: RequirementStatesCount + + """Find requirements.""" + requirements( + """List requirements by sort order.""" + sort: Sort + + """Filter requirements by state.""" + state: RequirementState + + """Search query for requirement title.""" + search: String + + """Filter requirements by author username.""" + authorUsername: [String!] + + """IID of the requirement, e.g., "1".""" + iid: ID + + """List of IIDs of requirements, e.g., `[1, 2]`.""" + iids: [ID!] + + """State of latest requirement test report.""" + lastTestReportState: RequirementStatusFilter + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): RequirementConnection + + """SAST CI configuration for the project.""" + sastCiConfiguration: SastCiConfiguration + + """Scan Execution Policies of the project""" + scanExecutionPolicies( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ScanExecutionPolicyConnection + + """Path to project's security dashboard.""" + securityDashboardPath: String + + """Information about security analyzers used in the project.""" + securityScanners: SecurityScanners + + """Detailed version of a Sentry error on the project.""" + sentryDetailedError( + """ID of the Sentry issue.""" + id: GitlabErrorTrackingDetailedErrorID! + ): SentryDetailedError + + """Paginated collection of Sentry errors on the project.""" + sentryErrors: SentryErrorCollection + + """E-mail address of the service desk.""" + serviceDeskAddress: String + + """Indicates if the project has service desk enabled.""" + serviceDeskEnabled: Boolean + + """Project services.""" + services( + """Indicates if the integration is active.""" + active: Boolean + + """Type of integration.""" + type: ServiceType + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ServiceConnection + + """Indicates if shared runners are enabled for the project.""" + sharedRunnersEnabled: Boolean + + """Snippets of the project.""" + snippets( + """ + Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + """ + ids: [SnippetID!] + + """Visibility of the snippet.""" + visibility: VisibilityScopesEnum + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetConnection + + """Indicates if Snippets are enabled for the current user""" + snippetsEnabled: Boolean + + """Indicates if `squashReadOnly` is enabled.""" + squashReadOnly: Boolean! + + """URL to connect to the project via SSH.""" + sshUrlToRepo: String + + """Number of times the project has been starred.""" + starCount: Int! + + """Statistics of the project.""" + statistics: ProjectStatistics + + """Commit message used to apply merge request suggestions.""" + suggestionCommitMessage: String + + """ + List of project topics (not Git tags). Deprecated in 13.12: Use `topics`. + """ + tagList: String @deprecated(reason: "Use `topics`. Deprecated in 13.12.") + + """Find a single Terraform state by name.""" + terraformState( + """Name of the Terraform state.""" + name: String! + ): TerraformState + + """Terraform states associated with the project.""" + terraformStates( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TerraformStateConnection + + """Time logged on issues and merge requests in the project.""" + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection + + """List of project topics.""" + topics: [String!] + + """Permissions for the current user on the resource""" + userPermissions: ProjectPermissions! + + """Visibility of the project.""" + visibility: String + + """Vulnerabilities reported on the project.""" + vulnerabilities( + """Filter vulnerabilities by project.""" + projectId: [ID!] + + """Filter vulnerabilities by report type.""" + reportType: [VulnerabilityReportType!] + + """Filter vulnerabilities by severity.""" + severity: [VulnerabilitySeverity!] + + """Filter vulnerabilities by state.""" + state: [VulnerabilityState!] + + """Filter vulnerabilities by VulnerabilityScanner.externalId.""" + scanner: [String!] + + """Filter vulnerabilities by scanner ID.""" + scannerId: [VulnerabilitiesScannerID!] + + """List vulnerabilities by sort order.""" + sort: VulnerabilitySort = severity_desc + + """ + Returns only the vulnerabilities which have been resolved on default branch. + """ + hasResolution: Boolean + + """Returns only the vulnerabilities which have linked issues.""" + hasIssues: Boolean + + """ + Filter vulnerabilities by location image. When this filter is present, the + response only matches entries for a `reportType` that includes + `container_scanning`, `cluster_image_scanning`. + """ + image: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityConnection + + """The historical number of vulnerabilities per day for the project.""" + vulnerabilitiesCountByDay( + """First day for which to fetch vulnerability history.""" + startDate: ISO8601Date! + + """Last day for which to fetch vulnerability history.""" + endDate: ISO8601Date! + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilitiesCountByDayConnection + + """Vulnerability scanners reported on the project vulnerabilities.""" + vulnerabilityScanners( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityScannerConnection + + """Counts for each vulnerability severity in the project.""" + vulnerabilitySeveritiesCount( + """Filter vulnerabilities by project.""" + projectId: [ID!] + + """Filter vulnerabilities by report type.""" + reportType: [VulnerabilityReportType!] + + """Filter vulnerabilities by severity.""" + severity: [VulnerabilitySeverity!] + + """Filter vulnerabilities by state.""" + state: [VulnerabilityState!] + + """Filter vulnerabilities by scanner.""" + scanner: [String!] + + """Filter vulnerabilities by scanner ID.""" + scannerId: [VulnerabilitiesScannerID!] + + """Filter vulnerabilities that do or do not have issues.""" + hasIssues: Boolean + + """Filter vulnerabilities that do or do not have a resolution.""" + hasResolution: Boolean + ): VulnerabilitySeveritiesCount + + """Web URL of the project.""" + webUrl: String + + """Indicates if Wikis are enabled for the current user""" + wikiEnabled: Boolean +} + +type ProjectCiCdSetting { + """ + Indicates CI job tokens generated in this project have restricted access to resources. + """ + jobTokenScopeEnabled: Boolean + + """Whether to keep the latest builds artifacts.""" + keepLatestArtifact: Boolean + + """Whether merge pipelines are enabled.""" + mergePipelinesEnabled: Boolean + + """Whether merge trains are enabled.""" + mergeTrainsEnabled: Boolean + + """Project the CI/CD settings belong to.""" + project: Project +} + +"""The connection type for Project.""" +type ProjectConnection { + """A list of edges.""" + edges: [ProjectEdge] + + """A list of nodes.""" + nodes: [Project] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ProjectEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Project +} + +""" +A `ProjectID` is a global ID. It is encoded as a string. + +An example `ProjectID` is: `"gid://gitlab/Project/1"`. +""" +scalar ProjectID + +"""Represents a Project Membership""" +type ProjectMember implements MemberInterface { + """GitLab::Access level.""" + accessLevel: AccessLevel + + """Date and time the membership was created.""" + createdAt: Time + + """User that authorized membership.""" + createdBy: UserCore + + """Date and time the membership expires.""" + expiresAt: Time + + """ID of the member.""" + id: ID! + + """Project that User is a member of.""" + project: Project + + """Date and time the membership was last updated.""" + updatedAt: Time + + """User that is associated with the member object.""" + user: UserCore + + """Permissions for the current user on the resource""" + userPermissions: ProjectPermissions! +} + +"""The connection type for ProjectMember.""" +type ProjectMemberConnection { + """A list of edges.""" + edges: [ProjectMemberEdge] + + """A list of nodes.""" + nodes: [ProjectMember] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ProjectMemberEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ProjectMember +} + +"""Project member relation""" +enum ProjectMemberRelation { + """Direct members""" + DIRECT + + """Inherited members""" + INHERITED + + """Descendants members""" + DESCENDANTS + + """Invited Groups members""" + INVITED_GROUPS +} + +type ProjectPermissions { + """Indicates the user can perform `admin_operations` on this resource""" + adminOperations: Boolean! + + """Indicates the user can perform `admin_path_locks` on this resource""" + adminPathLocks: Boolean! + + """Indicates the user can perform `admin_project` on this resource""" + adminProject: Boolean! + + """Indicates the user can perform `admin_remote_mirror` on this resource""" + adminRemoteMirror: Boolean! + + """Indicates the user can perform `admin_wiki` on this resource""" + adminWiki: Boolean! + + """Indicates the user can perform `archive_project` on this resource""" + archiveProject: Boolean! + + """Indicates the user can perform `change_namespace` on this resource""" + changeNamespace: Boolean! + + """ + Indicates the user can perform `change_visibility_level` on this resource + """ + changeVisibilityLevel: Boolean! + + """Indicates the user can perform `create_deployment` on this resource""" + createDeployment: Boolean! + + """Indicates the user can perform `create_design` on this resource""" + createDesign: Boolean! + + """Indicates the user can perform `create_issue` on this resource""" + createIssue: Boolean! + + """Indicates the user can perform `create_label` on this resource""" + createLabel: Boolean! + + """ + Indicates the user can perform `create_merge_request_from` on this resource + """ + createMergeRequestFrom: Boolean! + + """ + Indicates the user can perform `create_merge_request_in` on this resource + """ + createMergeRequestIn: Boolean! + + """Indicates the user can perform `create_pages` on this resource""" + createPages: Boolean! + + """Indicates the user can perform `create_pipeline` on this resource""" + createPipeline: Boolean! + + """ + Indicates the user can perform `create_pipeline_schedule` on this resource + """ + createPipelineSchedule: Boolean! + + """Indicates the user can perform `create_snippet` on this resource""" + createSnippet: Boolean! + + """Indicates the user can perform `create_wiki` on this resource""" + createWiki: Boolean! + + """Indicates the user can perform `destroy_design` on this resource""" + destroyDesign: Boolean! + + """Indicates the user can perform `destroy_pages` on this resource""" + destroyPages: Boolean! + + """Indicates the user can perform `destroy_wiki` on this resource""" + destroyWiki: Boolean! + + """Indicates the user can perform `download_code` on this resource""" + downloadCode: Boolean! + + """Indicates the user can perform `download_wiki_code` on this resource""" + downloadWikiCode: Boolean! + + """Indicates the user can perform `fork_project` on this resource""" + forkProject: Boolean! + + """Indicates the user can perform `push_code` on this resource""" + pushCode: Boolean! + + """ + Indicates the user can perform `push_to_delete_protected_branch` on this resource + """ + pushToDeleteProtectedBranch: Boolean! + + """Indicates the user can perform `read_commit_status` on this resource""" + readCommitStatus: Boolean! + + """Indicates the user can perform `read_cycle_analytics` on this resource""" + readCycleAnalytics: Boolean! + + """Indicates the user can perform `read_design` on this resource""" + readDesign: Boolean! + + """Indicates the user can perform `read_merge_request` on this resource""" + readMergeRequest: Boolean! + + """Indicates the user can perform `read_pages_content` on this resource""" + readPagesContent: Boolean! + + """Indicates the user can perform `read_project` on this resource""" + readProject: Boolean! + + """Indicates the user can perform `read_project_member` on this resource""" + readProjectMember: Boolean! + + """Indicates the user can perform `read_wiki` on this resource""" + readWiki: Boolean! + + """Indicates the user can perform `remove_fork_project` on this resource""" + removeForkProject: Boolean! + + """Indicates the user can perform `remove_pages` on this resource""" + removePages: Boolean! + + """Indicates the user can perform `remove_project` on this resource""" + removeProject: Boolean! + + """Indicates the user can perform `rename_project` on this resource""" + renameProject: Boolean! + + """Indicates the user can perform `request_access` on this resource""" + requestAccess: Boolean! + + """Indicates the user can perform `update_pages` on this resource""" + updatePages: Boolean! + + """Indicates the user can perform `update_wiki` on this resource""" + updateWiki: Boolean! + + """Indicates the user can perform `upload_file` on this resource""" + uploadFile: Boolean! +} + +"""Autogenerated input type of ProjectSetComplianceFramework""" +input ProjectSetComplianceFrameworkInput { + """ID of the project to change the compliance framework of.""" + projectId: ProjectID! + + """ID of the compliance framework to assign to the project.""" + complianceFrameworkId: ComplianceManagementFrameworkID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ProjectSetComplianceFramework""" +type ProjectSetComplianceFrameworkPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Project after mutation.""" + project: Project +} + +"""Autogenerated input type of ProjectSetLocked""" +input ProjectSetLockedInput { + """Full path of the project to mutate.""" + projectPath: ID! + + """Full path to the file.""" + filePath: String! + + """Whether or not to lock the file path.""" + lock: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ProjectSetLocked""" +type ProjectSetLockedPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Project after mutation.""" + project: Project +} + +type ProjectStatistics { + """Build artifacts size of the project in bytes.""" + buildArtifactsSize: Float! + + """Commit count of the project.""" + commitCount: Float! + + """Large File Storage (LFS) object size of the project in bytes.""" + lfsObjectsSize: Float! + + """Packages size of the project in bytes.""" + packagesSize: Float! + + """CI Pipeline artifacts size in bytes.""" + pipelineArtifactsSize: Float + + """Repository size of the project in bytes.""" + repositorySize: Float! + + """Snippets size of the project in bytes.""" + snippetsSize: Float + + """Storage size of the project in bytes.""" + storageSize: Float! + + """Uploads size of the project in bytes.""" + uploadsSize: Float + + """Wiki size of the project in bytes.""" + wikiSize: Float +} + +"""The alert condition for Prometheus""" +type PrometheusAlert { + """Human-readable text of the alert condition.""" + humanizedText: String! + + """ID of the alert condition.""" + id: ID! +} + +"""Autogenerated input type of PrometheusIntegrationCreate""" +input PrometheusIntegrationCreateInput { + """Project to create the integration in.""" + projectPath: ID! + + """Whether the integration is receiving alerts.""" + active: Boolean! + + """Endpoint at which Prometheus can be queried.""" + apiUrl: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PrometheusIntegrationCreate""" +type PrometheusIntegrationCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Newly created integration.""" + integration: AlertManagementPrometheusIntegration +} + +"""Autogenerated input type of PrometheusIntegrationResetToken""" +input PrometheusIntegrationResetTokenInput { + """ID of the integration to mutate.""" + id: IntegrationsPrometheusID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PrometheusIntegrationResetToken""" +type PrometheusIntegrationResetTokenPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Newly created integration.""" + integration: AlertManagementPrometheusIntegration +} + +"""Autogenerated input type of PrometheusIntegrationUpdate""" +input PrometheusIntegrationUpdateInput { + """ID of the integration to mutate.""" + id: IntegrationsPrometheusID! + + """Whether the integration is receiving alerts.""" + active: Boolean + + """Endpoint at which Prometheus can be queried.""" + apiUrl: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PrometheusIntegrationUpdate""" +type PrometheusIntegrationUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Newly created integration.""" + integration: AlertManagementPrometheusIntegration +} + +"""Autogenerated input type of PromoteToEpic""" +input PromoteToEpicInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Group the promoted epic will belong to.""" + groupPath: ID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of PromoteToEpic""" +type PromoteToEpicPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic after issue promotion.""" + epic: Epic + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Represents rules that commit pushes must follow.""" +type PushRules { + """Indicates whether commits not signed through GPG will be rejected.""" + rejectUnsignedCommits: Boolean! +} + +"""Pypi metadata""" +type PypiMetadata { + """ID of the metadatum.""" + id: PackagesPypiMetadatumID! + + """Required Python version of the Pypi package.""" + requiredPython: String +} + +type Query { + """Find an issue board list.""" + boardList( + """Global ID of the list.""" + id: ListID! + + """Filters applied when getting issue metadata in the board list.""" + issueFilters: BoardIssueInput + ): BoardList + + """CI related settings that apply to the entire instance.""" + ciApplicationSettings: CiApplicationSettings + + """ + Linted and processed contents of a CI config. + Should not be requested more than once per request. + + """ + ciConfig( + """Project of the CI config.""" + projectPath: ID! + + """Sha for the pipeline.""" + sha: String + + """Contents of `.gitlab-ci.yml`.""" + content: String! + + """Run pipeline creation simulation, or only do static check.""" + dryRun: Boolean + ): CiConfig + + """Monthly CI minutes usage data for the current user.""" + ciMinutesUsage( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiMinutesNamespaceMonthlyUsageConnection + + """Find a container repository.""" + containerRepository( + """Global ID of the container repository.""" + id: ContainerRepositoryID! + ): ContainerRepositoryDetails + + """Fields related to the current license.""" + currentLicense: CurrentLicense + + """Get information about current user.""" + currentUser: UserCore + + """Fields related to design management.""" + designManagement: DesignManagement! + + """ + Get configured DevOps adoption namespaces. **BETA** This endpoint is subject to change without notice. + """ + devopsAdoptionEnabledNamespaces( + """Filter by display namespace.""" + displayNamespaceId: NamespaceID + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DevopsAdoptionEnabledNamespaceConnection + + """Testing endpoint to validate the API with""" + echo( + """Text to echo back.""" + text: String! + ): String! + + """Find a Geo node.""" + geoNode( + """Name of the Geo node. Defaults to the current Geo node name.""" + name: String + ): GeoNode + + """Find a group.""" + group( + """ + Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. + """ + fullPath: ID! + ): Group + + """Fields related to Instance Security Dashboard.""" + instanceSecurityDashboard: InstanceSecurityDashboard + + """Get statistics on the instance. Deprecated in 13.10: This was renamed.""" + instanceStatisticsMeasurements( + """Type of measurement or statistics to retrieve.""" + identifier: MeasurementIdentifier! + + """Measurement recorded after this date.""" + recordedAfter: Time + + """Measurement recorded before this date.""" + recordedBefore: Time + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UsageTrendsMeasurementConnection @deprecated(reason: "This was renamed. Please use `Query.usageTrendsMeasurements`. Deprecated in 13.10.") + + """Find an issue.""" + issue( + """Global ID of the issue.""" + id: IssueID! + ): Issue + + """Find an iteration.""" + iteration( + """Find an iteration by its ID.""" + id: IterationID! + ): Iteration + + """Fields related to entries in the license history.""" + licenseHistoryEntries( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LicenseHistoryEntryConnection + + """Find a merge request.""" + mergeRequest( + """Global ID of the merge request.""" + id: MergeRequestID! + ): MergeRequest + + """Metadata about GitLab.""" + metadata: Metadata + + """Find a milestone.""" + milestone( + """Find a milestone by its ID.""" + id: MilestoneID! + ): Milestone + + """Find a namespace.""" + namespace( + """ + Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. + """ + fullPath: ID! + ): Namespace + + """Find a package.""" + package( + """Global ID of the package.""" + id: PackagesPackageID! + ): PackageDetailsType + + """Find a project.""" + project( + """ + Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. + """ + fullPath: ID! + ): Project + + """Find projects visible to the current user.""" + projects( + """Limit projects that the current user is a member of.""" + membership: Boolean + + """Search query for project name, path, or description.""" + search: String + + """Filter projects by IDs.""" + ids: [ID!] + + """Include namespace in project search.""" + searchNamespaces: Boolean + + """Sort order of results.""" + sort: String + + """Filters projects by topics.""" + topics: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection + + """Information about the complexity of the GraphQL query.""" + queryComplexity: QueryComplexity + + """Find a runner.""" + runner( + """Runner ID.""" + id: CiRunnerID! + ): CiRunner + + """Supported runner platforms.""" + runnerPlatforms( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): RunnerPlatformConnection + + """Runner setup instructions.""" + runnerSetup( + """Platform to generate the instructions for.""" + platform: String! + + """Architecture to generate the instructions for.""" + architecture: String! + ): RunnerSetup + + """Find runners visible to the current user.""" + runners( + """Filter runners by status.""" + status: CiRunnerStatus + + """Filter runners by type.""" + type: CiRunnerType + + """Filter by tags associated with the runner (comma-separated or array).""" + tagList: [String!] + + """Filter by full token or partial text in description field.""" + search: String + + """Sort order of results.""" + sort: CiRunnerSort + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): CiRunnerConnection + + """Find Snippets visible to the current user.""" + snippets( + """ + Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + """ + ids: [SnippetID!] + + """Visibility of the snippet.""" + visibility: VisibilityScopesEnum + + """ID of an author.""" + authorId: UserID + + """ID of a project.""" + projectId: ProjectID + + """Type of snippet.""" + type: TypeEnum + + """Explore personal snippets.""" + explore: Boolean + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetConnection + + """Find timelogs visible to the current user.""" + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection + + """Get statistics on the instance.""" + usageTrendsMeasurements( + """Type of measurement or statistics to retrieve.""" + identifier: MeasurementIdentifier! + + """Measurement recorded after this date.""" + recordedAfter: Time + + """Measurement recorded before this date.""" + recordedBefore: Time + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UsageTrendsMeasurementConnection + + """Find a user.""" + user( + """ID of the User.""" + id: UserID + + """Username of the User.""" + username: String + ): UserCore + + """Find users.""" + users( + """List of user Global IDs.""" + ids: [ID!] + + """List of usernames.""" + usernames: [String!] + + """Sort users by this criteria.""" + sort: Sort = created_desc + + """Query to search users by name, username, or primary email.""" + search: String + + """Return only admin users.""" + admins: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCoreConnection + + """ + Vulnerabilities reported on projects on the current user's instance security dashboard. + """ + vulnerabilities( + """Filter vulnerabilities by project.""" + projectId: [ID!] + + """Filter vulnerabilities by report type.""" + reportType: [VulnerabilityReportType!] + + """Filter vulnerabilities by severity.""" + severity: [VulnerabilitySeverity!] + + """Filter vulnerabilities by state.""" + state: [VulnerabilityState!] + + """Filter vulnerabilities by VulnerabilityScanner.externalId.""" + scanner: [String!] + + """Filter vulnerabilities by scanner ID.""" + scannerId: [VulnerabilitiesScannerID!] + + """List vulnerabilities by sort order.""" + sort: VulnerabilitySort = severity_desc + + """ + Returns only the vulnerabilities which have been resolved on default branch. + """ + hasResolution: Boolean + + """Returns only the vulnerabilities which have linked issues.""" + hasIssues: Boolean + + """ + Filter vulnerabilities by location image. When this filter is present, the + response only matches entries for a `reportType` that includes + `container_scanning`, `cluster_image_scanning`. + """ + image: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityConnection + + """ + The historical number of vulnerabilities per day for the projects on the current user's instance security dashboard. + + """ + vulnerabilitiesCountByDay( + """First day for which to fetch vulnerability history.""" + startDate: ISO8601Date! + + """Last day for which to fetch vulnerability history.""" + endDate: ISO8601Date! + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilitiesCountByDayConnection + + """Find a vulnerability.""" + vulnerability( + """Global ID of the Vulnerability.""" + id: VulnerabilityID! + ): Vulnerability +} + +type QueryComplexity { + """GraphQL query complexity limit.""" + limit: Int + + """GraphQL query complexity score.""" + score: Int +} + +"""Recent failure history of a test case.""" +type RecentFailures { + """Name of the base branch of the project.""" + baseBranch: String + + """Number of times the test case has failed in the past 14 days.""" + count: Int +} + +"""State of a Geo registry""" +enum RegistryState { + """Registry waiting to be synced.""" + PENDING + + """Registry currently syncing.""" + STARTED + + """Registry that is synced.""" + SYNCED + + """Registry that failed to sync.""" + FAILED +} + +"""Represents a release""" +type Release { + """Assets of the release.""" + assets: ReleaseAssets + + """User that created the release.""" + author: UserCore + + """Commit associated with the release.""" + commit: Commit + + """Timestamp of when the release was created.""" + createdAt: Time + + """Description (also known as "release notes") of the release.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """Evidence for the release.""" + evidences( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ReleaseEvidenceConnection + + """Links of the release.""" + links: ReleaseLinks + + """Milestones associated to the release.""" + milestones( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MilestoneConnection + + """Name of the release.""" + name: String + + """Timestamp of when the release was released.""" + releasedAt: Time + + """Name of the tag associated with the release.""" + tagName: String + + """Relative web path to the tag associated with the release.""" + tagPath: String + + """Indicates the release is an upcoming release.""" + upcomingRelease: Boolean +} + +"""Represents an asset link associated with a release""" +type ReleaseAssetLink { + """Relative path for the direct asset link.""" + directAssetPath: String + + """Direct asset URL of the link.""" + directAssetUrl: String + + """Indicates the link points to an external resource.""" + external: Boolean + + """ID of the link.""" + id: ID! + + """ + Type of the link: `other`, `runbook`, `image`, `package`; defaults to `other`. + """ + linkType: ReleaseAssetLinkType + + """Name of the link.""" + name: String + + """URL of the link.""" + url: String +} + +"""The connection type for ReleaseAssetLink.""" +type ReleaseAssetLinkConnection { + """A list of edges.""" + edges: [ReleaseAssetLinkEdge] + + """A list of nodes.""" + nodes: [ReleaseAssetLink] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of ReleaseAssetLinkCreate""" +input ReleaseAssetLinkCreateInput { + """Name of the asset link.""" + name: String! + + """URL of the asset link.""" + url: String! + + """Relative path for a direct asset link.""" + directAssetPath: String + + """Type of the asset link.""" + linkType: ReleaseAssetLinkType = OTHER + + """Full path of the project the asset link is associated with.""" + projectPath: ID! + + """Name of the associated release's tag.""" + tagName: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ReleaseAssetLinkCreate""" +type ReleaseAssetLinkCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Asset link after mutation.""" + link: ReleaseAssetLink +} + +"""Autogenerated input type of ReleaseAssetLinkDelete""" +input ReleaseAssetLinkDeleteInput { + """ID of the release asset link to delete.""" + id: ReleasesLinkID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ReleaseAssetLinkDelete""" +type ReleaseAssetLinkDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Deleted release asset link.""" + link: ReleaseAssetLink +} + +"""An edge in a connection.""" +type ReleaseAssetLinkEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ReleaseAssetLink +} + +"""Fields that are available when modifying a release asset link""" +input ReleaseAssetLinkInput { + """Name of the asset link.""" + name: String! + + """URL of the asset link.""" + url: String! + + """Relative path for a direct asset link.""" + directAssetPath: String + + """Type of the asset link.""" + linkType: ReleaseAssetLinkType = OTHER +} + +"""Type of the link: `other`, `runbook`, `image`, `package`""" +enum ReleaseAssetLinkType { + """Other link type""" + OTHER + + """Runbook link type""" + RUNBOOK + + """Package link type""" + PACKAGE + + """Image link type""" + IMAGE +} + +"""Autogenerated input type of ReleaseAssetLinkUpdate""" +input ReleaseAssetLinkUpdateInput { + """ID of the release asset link to update.""" + id: ReleasesLinkID! + + """Name of the asset link.""" + name: String + + """URL of the asset link.""" + url: String + + """Relative path for a direct asset link.""" + directAssetPath: String + + """Type of the asset link.""" + linkType: ReleaseAssetLinkType + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ReleaseAssetLinkUpdate""" +type ReleaseAssetLinkUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Asset link after mutation.""" + link: ReleaseAssetLink +} + +"""A container for all assets associated with a release""" +type ReleaseAssets { + """Number of assets of the release.""" + count: Int + + """Asset links of the release.""" + links( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ReleaseAssetLinkConnection + + """Sources of the release.""" + sources( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ReleaseSourceConnection +} + +"""Fields that are available when modifying release assets""" +input ReleaseAssetsInput { + """List of asset links to associate to the release.""" + links: [ReleaseAssetLinkInput!] +} + +"""The connection type for Release.""" +type ReleaseConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [ReleaseEdge] + + """A list of nodes.""" + nodes: [Release] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of ReleaseCreate""" +input ReleaseCreateInput { + """Full path of the project the release is associated with.""" + projectPath: ID! + + """Name of the tag to associate with the release.""" + tagName: String! + + """Commit SHA or branch name to use if creating a new tag.""" + ref: String + + """Name of the release.""" + name: String + + """Description (also known as "release notes") of the release.""" + description: String + + """Date and time for the release. Defaults to the current date and time.""" + releasedAt: Time + + """ + Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. + """ + milestones: [String!] + + """Assets associated to the release.""" + assets: ReleaseAssetsInput + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ReleaseCreate""" +type ReleaseCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Release after mutation.""" + release: Release +} + +"""Autogenerated input type of ReleaseDelete""" +input ReleaseDeleteInput { + """Full path of the project the release is associated with.""" + projectPath: ID! + + """Name of the tag associated with the release to delete.""" + tagName: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ReleaseDelete""" +type ReleaseDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Deleted release.""" + release: Release +} + +"""An edge in a connection.""" +type ReleaseEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Release +} + +"""Evidence for a release""" +type ReleaseEvidence { + """Timestamp when the evidence was collected.""" + collectedAt: Time + + """URL from where the evidence can be downloaded.""" + filepath: String + + """ID of the evidence.""" + id: ID! + + """SHA1 ID of the evidence hash.""" + sha: String +} + +"""The connection type for ReleaseEvidence.""" +type ReleaseEvidenceConnection { + """A list of edges.""" + edges: [ReleaseEvidenceEdge] + + """A list of nodes.""" + nodes: [ReleaseEvidence] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ReleaseEvidenceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ReleaseEvidence +} + +type ReleaseLinks { + """ + HTTP URL of the issues page, filtered by this release and `state=closed`. + """ + closedIssuesUrl: String + + """ + HTTP URL of the merge request page , filtered by this release and `state=closed`. + """ + closedMergeRequestsUrl: String + + """HTTP URL of the release's edit page.""" + editUrl: String + + """ + HTTP URL of the merge request page , filtered by this release and `state=merged`. + """ + mergedMergeRequestsUrl: String + + """ + HTTP URL of the issues page, filtered by this release and `state=open`. + """ + openedIssuesUrl: String + + """ + HTTP URL of the merge request page, filtered by this release and `state=open`. + """ + openedMergeRequestsUrl: String + + """HTTP URL of the release.""" + selfUrl: String +} + +""" +A `ReleasesLinkID` is a global ID. It is encoded as a string. + +An example `ReleasesLinkID` is: `"gid://gitlab/Releases::Link/1"`. +""" +scalar ReleasesLinkID + +"""Values for sorting releases""" +enum ReleaseSort { + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC + + """Released at by descending order.""" + RELEASED_AT_DESC + + """Released at by ascending order.""" + RELEASED_AT_ASC +} + +""" +Represents the source code attached to a release in a particular format +""" +type ReleaseSource { + """Format of the source.""" + format: String + + """Download URL of the source.""" + url: String +} + +"""The connection type for ReleaseSource.""" +type ReleaseSourceConnection { + """A list of edges.""" + edges: [ReleaseSourceEdge] + + """A list of nodes.""" + nodes: [ReleaseSource] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ReleaseSourceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ReleaseSource +} + +"""Release tag ID wildcard values""" +enum ReleaseTagWildcardId { + """No release tag is assigned.""" + NONE + + """Release tag is assigned.""" + ANY +} + +"""Autogenerated input type of ReleaseUpdate""" +input ReleaseUpdateInput { + """Full path of the project the release is associated with.""" + projectPath: ID! + + """Name of the tag associated with the release.""" + tagName: String! + + """Name of the release.""" + name: String + + """Description (release notes) of the release.""" + description: String + + """Release date.""" + releasedAt: Time + + """ + Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. + """ + milestones: [String!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ReleaseUpdate""" +type ReleaseUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Release after mutation.""" + release: Release +} + +"""Autogenerated input type of RemoveProjectFromSecurityDashboard""" +input RemoveProjectFromSecurityDashboardInput { + """ID of the project to remove from the Instance Security Dashboard.""" + id: ProjectID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of RemoveProjectFromSecurityDashboard""" +type RemoveProjectFromSecurityDashboardPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of RepositionImageDiffNote""" +input RepositionImageDiffNoteInput { + """Global ID of the DiffNote to update.""" + id: DiffNoteID! + + """Position of this note on a diff.""" + position: UpdateDiffImagePositionInput! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of RepositionImageDiffNote""" +type RepositionImageDiffNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +type Repository { + """Blobs contained within the repository""" + blobs( + """Array of desired blob paths.""" + paths: [String!]! + + """Commit ref to get the blobs from. Default value is HEAD.""" + ref: String = null + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): RepositoryBlobConnection + + """ + Names of branches available in this repository that match the search pattern. + """ + branchNames( + """Pattern to search for branch names by.""" + searchPattern: String! + + """Number of branch names to skip.""" + offset: Int! + + """Number of branch names to return.""" + limit: Int! + ): [String!] + + """Shows a disk path of the repository.""" + diskPath: String + + """Indicates repository has no visible content.""" + empty: Boolean! + + """Indicates a corresponding Git repository exists on disk.""" + exists: Boolean! + + """ + Paginated tree of the repository. Available only when feature flag + `paginated_tree_graphql_query` is enabled. This flag is enabled by default. + """ + paginatedTree( + """Path to get the tree for. Default value is the root of the repository.""" + path: String = "" + + """Commit ref to get the tree for. Default value is HEAD.""" + ref: String = "head" + + """Used to get a recursive tree. Default is false.""" + recursive: Boolean = false + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TreeConnection + + """Default branch of the repository.""" + rootRef: String + + """Tree of the repository.""" + tree( + """Path to get the tree for. Default value is the root of the repository.""" + path: String = "" + + """Commit ref to get the tree for. Default value is HEAD.""" + ref: String = "head" + + """Used to get a recursive tree. Default is false.""" + recursive: Boolean = false + ): Tree +} + +type RepositoryBlob { + """Whether the current user can modify the blob.""" + canModifyBlob: Boolean + + """Web path to edit the blob in the old-style editor.""" + editBlobPath: String + + """Web path to download the raw blob via external storage, if enabled.""" + externalStorageUrl: String + + """Expected format of the blob based on the extension.""" + fileType: String + + """Web path to edit this blob using a forked project.""" + forkAndEditPath: String + + """ID of the blob.""" + id: ID! + + """Web path to edit this blob in the Web IDE.""" + ideEditPath: String + + """Web path to edit this blob in the Web IDE using a forked project.""" + ideForkAndEditPath: String + + """LFS OID of the blob.""" + lfsOid: String + + """Blob mode.""" + mode: String + + """Blob name.""" + name: String + + """OID of the blob.""" + oid: String! + + """Path of the blob.""" + path: String! + + """Blob plain highlighted data.""" + plainData: String + + """Raw content of the blob.""" + rawBlob: String + + """Web path to download the raw blob.""" + rawPath: String + + """Size (in bytes) of the blob, or the blob target if stored externally.""" + rawSize: Int + + """Raw content of the blob, if the blob is text data.""" + rawTextBlob: String + + """Web path to replace the blob content.""" + replacePath: String + + """Blob content rich viewer.""" + richViewer: BlobViewer + + """Blob content simple viewer.""" + simpleViewer: BlobViewer! + + """Size (in bytes) of the blob.""" + size: Int + + """ + Whether the blob's content is stored externally (for instance, in LFS). + """ + storedExternally: Boolean + + """Web path of the blob.""" + webPath: String +} + +"""The connection type for RepositoryBlob.""" +type RepositoryBlobConnection { + """A list of edges.""" + edges: [RepositoryBlobEdge] + + """A list of nodes.""" + nodes: [RepositoryBlob] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type RepositoryBlobEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: RepositoryBlob +} + +"""Represents a requirement""" +type Requirement { + """Author of the requirement.""" + author: UserCore! + + """Timestamp of when the requirement was created.""" + createdAt: Time! + + """Description of the requirement.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """ID of the requirement.""" + id: ID! + + """Internal ID of the requirement.""" + iid: ID! + + """Indicates if latest test report was created by user.""" + lastTestReportManuallyCreated: Boolean + + """Latest requirement test report state.""" + lastTestReportState: TestReportState + + """Project to which the requirement belongs.""" + project: Project! + + """State of the requirement.""" + state: RequirementState! + + """Test reports of the requirement.""" + testReports( + """List test reports by sort order.""" + sort: Sort + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TestReportConnection + + """Title of the requirement.""" + title: String + + """The GitLab Flavored Markdown rendering of `title`""" + titleHtml: String + + """Timestamp of when the requirement was last updated.""" + updatedAt: Time! + + """Permissions for the current user on the resource""" + userPermissions: RequirementPermissions! +} + +"""The connection type for Requirement.""" +type RequirementConnection { + """A list of edges.""" + edges: [RequirementEdge] + + """A list of nodes.""" + nodes: [Requirement] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type RequirementEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Requirement +} + +"""Check permissions for the current user on a requirement""" +type RequirementPermissions { + """Indicates the user can perform `admin_requirement` on this resource""" + adminRequirement: Boolean! + + """Indicates the user can perform `create_requirement` on this resource""" + createRequirement: Boolean! + + """Indicates the user can perform `destroy_requirement` on this resource""" + destroyRequirement: Boolean! + + """Indicates the user can perform `read_requirement` on this resource""" + readRequirement: Boolean! + + """Indicates the user can perform `update_requirement` on this resource""" + updateRequirement: Boolean! +} + +"""State of a requirement""" +enum RequirementState { + """Open requirement.""" + OPENED + + """Archived requirement.""" + ARCHIVED +} + +"""Counts of requirements by their state""" +type RequirementStatesCount { + """Number of archived requirements.""" + archived: Int + + """Number of opened requirements.""" + opened: Int +} + +"""Status of a requirement based on last test report""" +enum RequirementStatusFilter { + """Passed test report.""" + PASSED + + """Failed test report.""" + FAILED + + """Requirements without any test report.""" + MISSING +} + +interface ResolvableInterface { + """Indicates if the object can be resolved.""" + resolvable: Boolean! + + """Indicates if the object is resolved.""" + resolved: Boolean! + + """Timestamp of when the object was resolved.""" + resolvedAt: Time + + """User who resolved the object.""" + resolvedBy: UserCore +} + +type RootStorageStatistics { + """CI artifacts size in bytes.""" + buildArtifactsSize: Float! + + """LFS objects size in bytes.""" + lfsObjectsSize: Float! + + """Packages size in bytes.""" + packagesSize: Float! + + """CI pipeline artifacts size in bytes.""" + pipelineArtifactsSize: Float! + + """Git repository size in bytes.""" + repositorySize: Float! + + """Snippets size in bytes.""" + snippetsSize: Float! + + """Total storage in bytes.""" + storageSize: Float! + + """Uploads size in bytes.""" + uploadsSize: Float! + + """Wiki size in bytes.""" + wikiSize: Float! +} + +type RunnerArchitecture { + """Download location for the runner for the platform architecture.""" + downloadLocation: String! + + """Name of the runner platform architecture.""" + name: String! +} + +"""The connection type for RunnerArchitecture.""" +type RunnerArchitectureConnection { + """A list of edges.""" + edges: [RunnerArchitectureEdge] + + """A list of nodes.""" + nodes: [RunnerArchitecture] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type RunnerArchitectureEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: RunnerArchitecture +} + +"""Autogenerated input type of RunnerDelete""" +input RunnerDeleteInput { + """ID of the runner to delete.""" + id: CiRunnerID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of RunnerDelete""" +type RunnerDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Values for filtering runners in namespaces.""" +enum RunnerMembershipFilter { + """Include runners that have a direct relationship.""" + DIRECT + + """ + Include runners that have either a direct relationship or a relationship with + descendants. These can be project runners or group runners (in the case where + group is queried). + """ + DESCENDANTS +} + +type RunnerPermissions { + """Indicates the user can perform `delete_runner` on this resource""" + deleteRunner: Boolean! + + """Indicates the user can perform `read_runner` on this resource""" + readRunner: Boolean! + + """Indicates the user can perform `update_runner` on this resource""" + updateRunner: Boolean! +} + +type RunnerPlatform { + """Runner architectures supported for the platform.""" + architectures( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): RunnerArchitectureConnection + + """Human readable name of the runner platform.""" + humanReadableName: String! + + """Name slug of the runner platform.""" + name: String! +} + +"""The connection type for RunnerPlatform.""" +type RunnerPlatformConnection { + """A list of edges.""" + edges: [RunnerPlatformEdge] + + """A list of nodes.""" + nodes: [RunnerPlatform] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type RunnerPlatformEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: RunnerPlatform +} + +type RunnerSetup { + """Instructions for installing the runner on the specified architecture.""" + installInstructions: String! + + """ + Instructions for registering the runner. The actual registration tokens are + not included in the commands. Instead, a placeholder `$REGISTRATION_TOKEN` is shown. + """ + registerInstructions: String +} + +"""Autogenerated input type of RunnersRegistrationTokenReset""" +input RunnersRegistrationTokenResetInput { + """Scope of the object to reset the token for.""" + type: CiRunnerType! + + """ + ID of the project or group to reset the token for. Omit if resetting instance runner token. + """ + id: ID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of RunnersRegistrationTokenReset""" +type RunnersRegistrationTokenResetPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Runner token after mutation.""" + token: String +} + +"""Autogenerated input type of RunnerUpdate""" +input RunnerUpdateInput { + """ID of the runner to update.""" + id: CiRunnerID! + + """Description of the runner.""" + description: String + + """Maximum timeout (in seconds) for jobs processed by the runner.""" + maximumTimeout: Int + + """Access level of the runner.""" + accessLevel: CiRunnerAccessLevel + + """Indicates the runner is allowed to receive jobs.""" + active: Boolean + + """Indicates the runner is locked.""" + locked: Boolean + + """Indicates the runner is able to run untagged jobs.""" + runUntagged: Boolean + + """Tags associated with the runner.""" + tagList: [String!] + + """ + Public projects' "minutes cost factor" associated with the runner (GitLab.com only). + """ + publicProjectsMinutesCostFactor: Float + + """ + Private projects' "minutes cost factor" associated with the runner (GitLab.com only). + """ + privateProjectsMinutesCostFactor: Float + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of RunnerUpdate""" +type RunnerUpdatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Runner after mutation.""" + runner: CiRunner +} + +"""Represents a CI configuration of SAST""" +type SastCiConfiguration { + """List of analyzers entities attached to SAST configuration.""" + analyzers( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SastCiConfigurationAnalyzersEntityConnection + + """List of global entities related to SAST configuration.""" + global( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SastCiConfigurationEntityConnection + + """List of pipeline entities related to SAST configuration.""" + pipeline( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SastCiConfigurationEntityConnection +} + +"""Represents an analyzer entity in SAST CI configuration""" +type SastCiConfigurationAnalyzersEntity { + """Analyzer description that is displayed on the form.""" + description: String + + """Indicates whether an analyzer is enabled.""" + enabled: Boolean + + """Analyzer label used in the config UI.""" + label: String + + """Name of the analyzer.""" + name: String + + """List of supported variables.""" + variables( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SastCiConfigurationEntityConnection +} + +"""The connection type for SastCiConfigurationAnalyzersEntity.""" +type SastCiConfigurationAnalyzersEntityConnection { + """A list of edges.""" + edges: [SastCiConfigurationAnalyzersEntityEdge] + + """A list of nodes.""" + nodes: [SastCiConfigurationAnalyzersEntity] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SastCiConfigurationAnalyzersEntityEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: SastCiConfigurationAnalyzersEntity +} + +"""Represents the analyzers entity in SAST CI configuration""" +input SastCiConfigurationAnalyzersEntityInput { + """Name of analyzer.""" + name: String! + + """State of the analyzer.""" + enabled: Boolean! + + """List of variables for the analyzer.""" + variables: [SastCiConfigurationEntityInput!] +} + +"""Represents an entity in SAST CI configuration""" +type SastCiConfigurationEntity { + """Default value that is used if value is empty.""" + defaultValue: String + + """Entity description that is displayed on the form.""" + description: String + + """CI keyword of entity.""" + field: String + + """Label for entity used in the form.""" + label: String + + """Different possible values of the field.""" + options( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SastCiConfigurationOptionsEntityConnection + + """Size of the UI component.""" + size: SastUiComponentSize + + """Type of the field value.""" + type: String + + """Current value of the entity.""" + value: String +} + +"""The connection type for SastCiConfigurationEntity.""" +type SastCiConfigurationEntityConnection { + """A list of edges.""" + edges: [SastCiConfigurationEntityEdge] + + """A list of nodes.""" + nodes: [SastCiConfigurationEntity] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SastCiConfigurationEntityEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: SastCiConfigurationEntity +} + +"""Represents an entity in SAST CI configuration""" +input SastCiConfigurationEntityInput { + """CI keyword of entity.""" + field: String! + + """Default value that is used if value is empty.""" + defaultValue: String! + + """Current value of the entity.""" + value: String! +} + +"""Represents a CI configuration of SAST""" +input SastCiConfigurationInput { + """List of global entities related to SAST configuration.""" + global: [SastCiConfigurationEntityInput!] + + """List of pipeline entities related to SAST configuration.""" + pipeline: [SastCiConfigurationEntityInput!] + + """List of analyzers and related variables for the SAST configuration.""" + analyzers: [SastCiConfigurationAnalyzersEntityInput!] +} + +"""Represents an entity for options in SAST CI configuration""" +type SastCiConfigurationOptionsEntity { + """Label of option entity.""" + label: String + + """Value of option entity.""" + value: String +} + +"""The connection type for SastCiConfigurationOptionsEntity.""" +type SastCiConfigurationOptionsEntityConnection { + """A list of edges.""" + edges: [SastCiConfigurationOptionsEntityEdge] + + """A list of nodes.""" + nodes: [SastCiConfigurationOptionsEntity] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SastCiConfigurationOptionsEntityEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: SastCiConfigurationOptionsEntity +} + +"""Size of UI component in SAST configuration page""" +enum SastUiComponentSize { + """Size of UI component in SAST configuration page is small.""" + SMALL + + """Size of UI component in SAST configuration page is medium.""" + MEDIUM + + """Size of UI component in SAST configuration page is large.""" + LARGE +} + +"""Represents the security scan information""" +type Scan { + """List of errors.""" + errors: [String!]! + + """Name of the scan.""" + name: String! +} + +"""The connection type for Scan.""" +type ScanConnection { + """A list of edges.""" + edges: [ScanEdge] + + """A list of nodes.""" + nodes: [Scan] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ScanEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Scan +} + +"""Represents the scan execution policy""" +type ScanExecutionPolicy { + """Description of the policy.""" + description: String! + + """Indicates whether this policy is enabled.""" + enabled: Boolean! + + """Name of the policy.""" + name: String! + + """Timestamp of when the policy YAML was last updated.""" + updatedAt: Time! + + """YAML definition of the policy.""" + yaml: String! +} + +"""Autogenerated input type of ScanExecutionPolicyCommit""" +input ScanExecutionPolicyCommitInput { + """Full path of the project.""" + projectPath: ID! + + """YAML snippet of the policy.""" + policyYaml: String! + + """Changes the operation mode.""" + operationMode: MutationOperationMode! + + """ + Name of the policy. If the name is null, the `name` field from `policy_yaml` is used. + """ + name: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of ScanExecutionPolicyCommit""" +type ScanExecutionPolicyCommitPayload { + """Name of the branch to which the policy changes are committed.""" + branch: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""The connection type for ScanExecutionPolicy.""" +type ScanExecutionPolicyConnection { + """A list of edges.""" + edges: [ScanExecutionPolicyEdge] + + """A list of nodes.""" + nodes: [ScanExecutionPolicy] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ScanExecutionPolicyEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ScanExecutionPolicy +} + +"""Represents a resource scanned by a security scan""" +type ScannedResource { + """HTTP request method used to access the URL.""" + requestMethod: String + + """URL scanned by the scanner.""" + url: String +} + +"""The connection type for ScannedResource.""" +type ScannedResourceConnection { + """A list of edges.""" + edges: [ScannedResourceEdge] + + """A list of nodes.""" + nodes: [ScannedResource] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ScannedResourceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: ScannedResource +} + +"""Autogenerated input type of SecurityPolicyProjectAssign""" +input SecurityPolicyProjectAssignInput { + """Full path of the project.""" + projectPath: ID! + + """ID of the security policy project.""" + securityPolicyProjectId: ProjectID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of SecurityPolicyProjectAssign""" +type SecurityPolicyProjectAssignPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of SecurityPolicyProjectCreate""" +input SecurityPolicyProjectCreateInput { + """Full path of the project.""" + projectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of SecurityPolicyProjectCreate""" +type SecurityPolicyProjectCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Security Policy Project that was created.""" + project: Project +} + +"""Autogenerated input type of SecurityPolicyProjectUnassign""" +input SecurityPolicyProjectUnassignInput { + """Full path of the project.""" + projectPath: ID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of SecurityPolicyProjectUnassign""" +type SecurityPolicyProjectUnassignPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Represents summary of a security report""" +type SecurityReportSummary { + """Aggregated counts for the `api_fuzzing` scan""" + apiFuzzing: SecurityReportSummarySection + + """Aggregated counts for the `cluster_image_scanning` scan""" + clusterImageScanning: SecurityReportSummarySection + + """Aggregated counts for the `container_scanning` scan""" + containerScanning: SecurityReportSummarySection + + """Aggregated counts for the `coverage_fuzzing` scan""" + coverageFuzzing: SecurityReportSummarySection + + """Aggregated counts for the `dast` scan""" + dast: SecurityReportSummarySection + + """Aggregated counts for the `dependency_scanning` scan""" + dependencyScanning: SecurityReportSummarySection + + """Aggregated counts for the `generic` scan""" + generic: SecurityReportSummarySection + + """Aggregated counts for the `sast` scan""" + sast: SecurityReportSummarySection + + """Aggregated counts for the `secret_detection` scan""" + secretDetection: SecurityReportSummarySection +} + +"""Represents a section of a summary of a security report""" +type SecurityReportSummarySection { + """List of the first 20 scanned resources.""" + scannedResources( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ScannedResourceConnection + + """Total number of scanned resources.""" + scannedResourcesCount: Int + + """Path to download all the scanned resources in CSV format.""" + scannedResourcesCsvPath: String + + """List of security scans ran for the type.""" + scans( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ScanConnection! + + """Total number of vulnerabilities.""" + vulnerabilitiesCount: Int +} + +enum SecurityReportTypeEnum { + """SAST scan report""" + SAST + + """DAST scan report""" + DAST + + """DEPENDENCY SCANNING scan report""" + DEPENDENCY_SCANNING + + """CONTAINER SCANNING scan report""" + CONTAINER_SCANNING + + """SECRET DETECTION scan report""" + SECRET_DETECTION + + """COVERAGE FUZZING scan report""" + COVERAGE_FUZZING + + """API FUZZING scan report""" + API_FUZZING + + """CLUSTER IMAGE SCANNING scan report""" + CLUSTER_IMAGE_SCANNING +} + +"""Represents a list of security scanners""" +type SecurityScanners { + """List of analyzers which are available for the project.""" + available: [SecurityScannerType!] + + """List of analyzers which are enabled for the project.""" + enabled: [SecurityScannerType!] + + """List of analyzers which ran successfully in the latest pipeline.""" + pipelineRun: [SecurityScannerType!] +} + +"""The type of the security scanner""" +enum SecurityScannerType { + """SAST scanner""" + SAST + + """DAST scanner""" + DAST + + """Dependency Scanning scanner""" + DEPENDENCY_SCANNING + + """Container Scanning scanner""" + CONTAINER_SCANNING + + """Secret Detection scanner""" + SECRET_DETECTION + + """Coverage Fuzzing scanner""" + COVERAGE_FUZZING + + """API Fuzzing scanner""" + API_FUZZING + + """Cluster Image Scanning scanner""" + CLUSTER_IMAGE_SCANNING +} + +"""A Sentry error""" +type SentryDetailedError { + """Count of occurrences.""" + count: Int! + + """Culprit of the error.""" + culprit: String! + + """External Base URL of the Sentry Instance.""" + externalBaseUrl: String! + + """External URL of the error.""" + externalUrl: String! + + """Commit the error was first seen.""" + firstReleaseLastCommit: String + + """Release short version the error was first seen.""" + firstReleaseShortVersion: String + + """Release version the error was first seen.""" + firstReleaseVersion: String + + """Timestamp when the error was first seen.""" + firstSeen: Time! + + """Last 24hr stats of the error.""" + frequency: [SentryErrorFrequency!]! + + """ + GitLab commit SHA attributed to the Error based on the release version. + """ + gitlabCommit: String + + """Path to the GitLab page for the GitLab commit attributed to the error.""" + gitlabCommitPath: String + + """URL of GitLab Issue.""" + gitlabIssuePath: String + + """ID (global ID) of the error.""" + id: ID! + + """Error tracking backend.""" + integrated: Boolean + + """Commit the error was last seen.""" + lastReleaseLastCommit: String + + """Release short version the error was last seen.""" + lastReleaseShortVersion: String + + """Release version the error was last seen.""" + lastReleaseVersion: String + + """Timestamp when the error was last seen.""" + lastSeen: Time! + + """Sentry metadata message of the error.""" + message: String + + """ID (Sentry ID) of the error.""" + sentryId: String! + + """ID of the project (Sentry project).""" + sentryProjectId: ID! + + """Name of the project affected by the error.""" + sentryProjectName: String! + + """Slug of the project affected by the error.""" + sentryProjectSlug: String! + + """Short ID (Sentry ID) of the error.""" + shortId: String! + + """Status of the error.""" + status: SentryErrorStatus! + + """Tags associated with the Sentry Error.""" + tags: SentryErrorTags! + + """Title of the error.""" + title: String! + + """Type of the error.""" + type: String! + + """Count of users affected by the error.""" + userCount: Int! +} + +"""A Sentry error. A simplified version of SentryDetailedError""" +type SentryError { + """Count of occurrences.""" + count: Int! + + """Culprit of the error.""" + culprit: String! + + """External URL of the error.""" + externalUrl: String! + + """Timestamp when the error was first seen.""" + firstSeen: Time! + + """Last 24hr stats of the error.""" + frequency: [SentryErrorFrequency!]! + + """ID (global ID) of the error.""" + id: ID! + + """Timestamp when the error was last seen.""" + lastSeen: Time! + + """Sentry metadata message of the error.""" + message: String + + """ID (Sentry ID) of the error.""" + sentryId: String! + + """ID of the project (Sentry project).""" + sentryProjectId: ID! + + """Name of the project affected by the error.""" + sentryProjectName: String! + + """Slug of the project affected by the error.""" + sentryProjectSlug: String! + + """Short ID (Sentry ID) of the error.""" + shortId: String! + + """Status of the error.""" + status: SentryErrorStatus! + + """Title of the error.""" + title: String! + + """Type of the error.""" + type: String! + + """Count of users affected by the error.""" + userCount: Int! +} + +""" +An object containing a collection of Sentry errors, and a detailed error +""" +type SentryErrorCollection { + """Detailed version of a Sentry error on the project.""" + detailedError( + """ID of the Sentry issue.""" + id: GitlabErrorTrackingDetailedErrorID! + ): SentryDetailedError + + """Stack Trace of Sentry Error.""" + errorStackTrace( + """ID of the Sentry issue.""" + id: GitlabErrorTrackingDetailedErrorID! + ): SentryErrorStackTrace + + """Collection of Sentry Errors.""" + errors( + """Search query for the Sentry error details.""" + searchTerm: String + + """ + Attribute to sort on. Options are frequency, first_seen, last_seen. last_seen is default. + """ + sort: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SentryErrorConnection + + """External URL for Sentry.""" + externalUrl: String +} + +"""The connection type for SentryError.""" +type SentryErrorConnection { + """A list of edges.""" + edges: [SentryErrorEdge] + + """A list of nodes.""" + nodes: [SentryError] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SentryErrorEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: SentryError +} + +type SentryErrorFrequency { + """Count of errors received since the previously recorded time.""" + count: Int! + + """Time the error frequency stats were recorded.""" + time: Time! +} + +"""An object containing a stack trace entry for a Sentry error""" +type SentryErrorStackTrace { + """Time the stack trace was received by Sentry.""" + dateReceived: String! + + """ID of the Sentry error.""" + issueId: String! + + """Stack trace entries for the Sentry error.""" + stackTraceEntries: [SentryErrorStackTraceEntry!]! +} + +"""An object context for a Sentry error stack trace""" +type SentryErrorStackTraceContext { + """Code number of the context.""" + code: String! + + """Line number of the context.""" + line: Int! +} + +"""An object containing a stack trace entry for a Sentry error""" +type SentryErrorStackTraceEntry { + """Function in which the Sentry error occurred.""" + col: String + + """File in which the Sentry error occurred.""" + fileName: String + + """Function in which the Sentry error occurred.""" + function: String + + """Function in which the Sentry error occurred.""" + line: String + + """Context of the Sentry error.""" + traceContext: [SentryErrorStackTraceContext!] +} + +"""State of a Sentry error""" +enum SentryErrorStatus { + """Error has been resolved.""" + RESOLVED + + """Error has been ignored until next release.""" + RESOLVED_IN_NEXT_RELEASE + + """Error is unresolved.""" + UNRESOLVED + + """Error has been ignored.""" + IGNORED +} + +"""State of a Sentry error""" +type SentryErrorTags { + """Severity level of the Sentry Error.""" + level: String + + """Logger of the Sentry Error.""" + logger: String +} + +interface Service { + """Indicates if the service is active.""" + active: Boolean + + """Class name of the service.""" + type: String +} + +"""The connection type for Service.""" +type ServiceConnection { + """A list of edges.""" + edges: [ServiceEdge] + + """A list of nodes.""" + nodes: [Service] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type ServiceEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Service +} + +enum ServiceType { + """AsanaService type""" + ASANA_SERVICE + + """AssemblaService type""" + ASSEMBLA_SERVICE + + """BambooService type""" + BAMBOO_SERVICE + + """BugzillaService type""" + BUGZILLA_SERVICE + + """BuildkiteService type""" + BUILDKITE_SERVICE + + """CampfireService type""" + CAMPFIRE_SERVICE + + """ConfluenceService type""" + CONFLUENCE_SERVICE + + """CustomIssueTrackerService type""" + CUSTOM_ISSUE_TRACKER_SERVICE + + """DatadogService type""" + DATADOG_SERVICE + + """DiscordService type""" + DISCORD_SERVICE + + """DroneCiService type""" + DRONE_CI_SERVICE + + """EmailsOnPushService type""" + EMAILS_ON_PUSH_SERVICE + + """EwmService type""" + EWM_SERVICE + + """ExternalWikiService type""" + EXTERNAL_WIKI_SERVICE + + """FlowdockService type""" + FLOWDOCK_SERVICE + + """GithubService type""" + GITHUB_SERVICE + + """GitlabSlackApplicationService type""" + GITLAB_SLACK_APPLICATION_SERVICE + + """HangoutsChatService type""" + HANGOUTS_CHAT_SERVICE + + """IrkerService type""" + IRKER_SERVICE + + """JenkinsService type""" + JENKINS_SERVICE + + """JiraService type""" + JIRA_SERVICE + + """MattermostService type""" + MATTERMOST_SERVICE + + """MattermostSlashCommandsService type""" + MATTERMOST_SLASH_COMMANDS_SERVICE + + """MicrosoftTeamsService type""" + MICROSOFT_TEAMS_SERVICE + + """PackagistService type""" + PACKAGIST_SERVICE + + """PipelinesEmailService type""" + PIPELINES_EMAIL_SERVICE + + """PivotaltrackerService type""" + PIVOTALTRACKER_SERVICE + + """PrometheusService type""" + PROMETHEUS_SERVICE + + """PushoverService type""" + PUSHOVER_SERVICE + + """RedmineService type""" + REDMINE_SERVICE + + """SlackService type""" + SLACK_SERVICE + + """SlackSlashCommandsService type""" + SLACK_SLASH_COMMANDS_SERVICE + + """TeamcityService type""" + TEAMCITY_SERVICE + + """UnifyCircuitService type""" + UNIFY_CIRCUIT_SERVICE + + """WebexTeamsService type""" + WEBEX_TEAMS_SERVICE + + """YoutrackService type""" + YOUTRACK_SERVICE + + """ZentaoService type""" + ZENTAO_SERVICE +} + +enum SharedRunnersSetting { + """Sharing of runners is disabled and unoverridable.""" + DISABLED_AND_UNOVERRIDABLE + + """Sharing of runners is disabled with override.""" + DISABLED_WITH_OVERRIDE + + """Sharing of runners is enabled.""" + ENABLED +} + +"""Represents a snippet entry""" +type Snippet implements NoteableInterface { + """Owner of the snippet.""" + author: UserCore + + """Snippet blobs.""" + blobs( + """Paths of the blobs.""" + paths: [String!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetBlobConnection + + """Timestamp this snippet was created.""" + createdAt: Time! + + """Description of the snippet.""" + description: String + + """The GitLab Flavored Markdown rendering of `description`""" + descriptionHtml: String + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """File Name of the snippet.""" + fileName: String + + """HTTP URL to the snippet repository.""" + httpUrlToRepo: String + + """ID of the snippet.""" + id: SnippetID! + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """Project the snippet is associated with.""" + project: Project + + """Raw URL of the snippet.""" + rawUrl: String! + + """SSH URL to the snippet repository.""" + sshUrlToRepo: String + + """Title of the snippet.""" + title: String! + + """Timestamp this snippet was updated.""" + updatedAt: Time! + + """Permissions for the current user on the resource""" + userPermissions: SnippetPermissions! + + """Visibility Level of the snippet.""" + visibilityLevel: VisibilityLevelsEnum! + + """Web URL of the snippet.""" + webUrl: String! +} + +"""Represents the snippet blob""" +type SnippetBlob { + """Shows whether the blob is binary.""" + binary: Boolean! + + """Blob external storage.""" + externalStorage: String + + """Blob mode.""" + mode: String + + """Blob name.""" + name: String + + """Blob path.""" + path: String + + """Blob plain highlighted data.""" + plainData: String + + """Blob raw content endpoint path.""" + rawPath: String! + + """Raw content of the blob, if the blob is text data.""" + rawPlainData: String + + """Shows whether the blob is rendered as text.""" + renderedAsText: Boolean! + + """Blob highlighted data.""" + richData: String + + """Blob content rich viewer.""" + richViewer: SnippetBlobViewer + + """Blob content simple viewer.""" + simpleViewer: SnippetBlobViewer! + + """Blob size.""" + size: Int! +} + +"""Type of a snippet blob input action""" +enum SnippetBlobActionEnum { + """Create a snippet blob.""" + create + + """Update a snippet blob.""" + update + + """Delete a snippet blob.""" + delete + + """Move a snippet blob.""" + move +} + +"""Represents an action to perform over a snippet file""" +input SnippetBlobActionInputType { + """Type of input action.""" + action: SnippetBlobActionEnum! + + """Previous path of the snippet file.""" + previousPath: String + + """Path of the snippet file.""" + filePath: String! + + """Snippet file content.""" + content: String +} + +"""The connection type for SnippetBlob.""" +type SnippetBlobConnection { + """A list of edges.""" + edges: [SnippetBlobEdge] + + """A list of nodes.""" + nodes: [SnippetBlob] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SnippetBlobEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: SnippetBlob +} + +"""Represents how the blob content should be displayed""" +type SnippetBlobViewer { + """Shows whether the blob should be displayed collapsed.""" + collapsed: Boolean! + + """Content file type.""" + fileType: String! + + """Shows whether the blob content is loaded asynchronously.""" + loadAsync: Boolean! + + """Loading partial name.""" + loadingPartialName: String! + + """Error rendering the blob content.""" + renderError: String + + """Shows whether the blob is too large to be displayed.""" + tooLarge: Boolean! + + """Type of blob viewer.""" + type: BlobViewersType! +} + +"""The connection type for Snippet.""" +type SnippetConnection { + """A list of edges.""" + edges: [SnippetEdge] + + """A list of nodes.""" + nodes: [Snippet] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SnippetEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Snippet +} + +""" +A `SnippetID` is a global ID. It is encoded as a string. + +An example `SnippetID` is: `"gid://gitlab/Snippet/1"`. +""" +scalar SnippetID + +type SnippetPermissions { + """Indicates the user can perform `admin_snippet` on this resource""" + adminSnippet: Boolean! + + """Indicates the user can perform `award_emoji` on this resource""" + awardEmoji: Boolean! + + """Indicates the user can perform `create_note` on this resource""" + createNote: Boolean! + + """Indicates the user can perform `read_snippet` on this resource""" + readSnippet: Boolean! + + """Indicates the user can perform `report_snippet` on this resource""" + reportSnippet: Boolean! + + """Indicates the user can perform `update_snippet` on this resource""" + updateSnippet: Boolean! +} + +"""Represents the Geo sync and verification state of a snippet repository""" +type SnippetRepositoryRegistry { + """Timestamp when the SnippetRepositoryRegistry was created""" + createdAt: Time + + """ID of the SnippetRepositoryRegistry""" + id: ID! + + """Error message during sync of the SnippetRepositoryRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the SnippetRepositoryRegistry + """ + lastSyncedAt: Time + + """Timestamp after which the SnippetRepositoryRegistry should be resynced""" + retryAt: Time + + """ + Number of consecutive failed sync attempts of the SnippetRepositoryRegistry + """ + retryCount: Int + + """ID of the Snippet Repository.""" + snippetRepositoryId: ID! + + """Sync state of the SnippetRepositoryRegistry""" + state: RegistryState +} + +"""The connection type for SnippetRepositoryRegistry.""" +type SnippetRepositoryRegistryConnection { + """A list of edges.""" + edges: [SnippetRepositoryRegistryEdge] + + """A list of nodes.""" + nodes: [SnippetRepositoryRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SnippetRepositoryRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: SnippetRepositoryRegistry +} + +"""Common sort values""" +enum Sort { + """Updated at descending order.""" + updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.") + + """Updated at ascending order.""" + updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.") + + """Created at descending order.""" + created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.") + + """Created at ascending order.""" + created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.") + + """Updated at descending order.""" + UPDATED_DESC + + """Updated at ascending order.""" + UPDATED_ASC + + """Created at descending order.""" + CREATED_DESC + + """Created at ascending order.""" + CREATED_ASC +} + +type StatusAction { + """Title for the button, for example: Retry this job.""" + buttonTitle: String + + """Icon used in the action button.""" + icon: String + + """ID for a status action.""" + id: String! + + """Method for the action, for example: :post.""" + method: String + + """Path for the action.""" + path: String + + """Title for the action, for example: Retry.""" + title: String +} + +type Submodule implements Entry { + """Flat path of the entry.""" + flatPath: String! + + """ID of the entry.""" + id: ID! + + """Name of the entry.""" + name: String! + + """Path of the entry.""" + path: String! + + """Last commit SHA for the entry.""" + sha: String! + + """Tree URL for the sub-module.""" + treeUrl: String + + """Type of tree entry.""" + type: EntryType! + + """Web URL for the sub-module.""" + webUrl: String +} + +"""The connection type for Submodule.""" +type SubmoduleConnection { + """A list of edges.""" + edges: [SubmoduleEdge] + + """A list of nodes.""" + nodes: [Submodule] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type SubmoduleEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Submodule +} + +type Subscription { + """Triggered when the assignees of an issuable are updated.""" + issuableAssigneesUpdated( + """ID of the issuable.""" + issuableId: IssuableID! + ): Issuable +} + +"""Completion status of tasks""" +type TaskCompletionStatus { + """Number of completed tasks.""" + completedCount: Int! + + """Number of total tasks.""" + count: Int! +} + +type TerraformState { + """Timestamp the Terraform state was created.""" + createdAt: Time! + + """ID of the Terraform state.""" + id: ID! + + """Latest version of the Terraform state.""" + latestVersion: TerraformStateVersion + + """Timestamp the Terraform state was locked.""" + lockedAt: Time + + """User currently holding a lock on the Terraform state.""" + lockedByUser: UserCore + + """Name of the Terraform state.""" + name: String! + + """Timestamp the Terraform state was updated.""" + updatedAt: Time! +} + +"""The connection type for TerraformState.""" +type TerraformStateConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [TerraformStateEdge] + + """A list of nodes.""" + nodes: [TerraformState] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of TerraformStateDelete""" +input TerraformStateDeleteInput { + """Global ID of the Terraform state.""" + id: TerraformStateID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TerraformStateDelete""" +type TerraformStateDeletePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type TerraformStateEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: TerraformState +} + +""" +A `TerraformStateID` is a global ID. It is encoded as a string. + +An example `TerraformStateID` is: `"gid://gitlab/Terraform::State/1"`. +""" +scalar TerraformStateID + +"""Autogenerated input type of TerraformStateLock""" +input TerraformStateLockInput { + """Global ID of the Terraform state.""" + id: TerraformStateID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TerraformStateLock""" +type TerraformStateLockPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of TerraformStateUnlock""" +input TerraformStateUnlockInput { + """Global ID of the Terraform state.""" + id: TerraformStateID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TerraformStateUnlock""" +type TerraformStateUnlockPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +type TerraformStateVersion { + """Timestamp the version was created.""" + createdAt: Time! + + """User that created this version.""" + createdByUser: UserCore + + """URL for downloading the version's JSON file.""" + downloadPath: String + + """ID of the Terraform state version.""" + id: ID! + + """Job that created this version.""" + job: CiJob + + """Serial number of the version.""" + serial: Int + + """Timestamp the version was updated.""" + updatedAt: Time! +} + +""" +Represents the Geo sync and verification state of a terraform state version +""" +type TerraformStateVersionRegistry { + """Timestamp when the TerraformStateVersionRegistry was created""" + createdAt: Time + + """ID of the TerraformStateVersionRegistry""" + id: ID! + + """Error message during sync of the TerraformStateVersionRegistry""" + lastSyncFailure: String + + """ + Timestamp of the most recent successful sync of the TerraformStateVersionRegistry + """ + lastSyncedAt: Time + + """ + Timestamp after which the TerraformStateVersionRegistry should be resynced + """ + retryAt: Time + + """ + Number of consecutive failed sync attempts of the TerraformStateVersionRegistry + """ + retryCount: Int + + """Sync state of the TerraformStateVersionRegistry""" + state: RegistryState + + """ID of the terraform state version.""" + terraformStateVersionId: ID! +} + +"""The connection type for TerraformStateVersionRegistry.""" +type TerraformStateVersionRegistryConnection { + """A list of edges.""" + edges: [TerraformStateVersionRegistryEdge] + + """A list of nodes.""" + nodes: [TerraformStateVersionRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TerraformStateVersionRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: TerraformStateVersionRegistry +} + +"""Test case in pipeline test report.""" +type TestCase { + """URL of the test case attachment file.""" + attachmentUrl: String + + """Classname of the test case.""" + classname: String + + """Test case execution time in seconds.""" + executionTime: Float + + """Path to the file of the test case.""" + file: String + + """Name of the test case.""" + name: String + + """Recent failure history of the test case on the base branch.""" + recentFailures: RecentFailures + + """Stack trace of the test case.""" + stackTrace: String + + """Status of the test case (error, failed, success, skipped).""" + status: TestCaseStatus + + """System output of the test case.""" + systemOutput: String +} + +"""The connection type for TestCase.""" +type TestCaseConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [TestCaseEdge] + + """A list of nodes.""" + nodes: [TestCase] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TestCaseEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: TestCase +} + +enum TestCaseStatus { + """Test case that has a status of error.""" + error + + """Test case that has a status of failed.""" + failed + + """Test case that has a status of success.""" + success + + """Test case that has a status of skipped.""" + skipped +} + +"""Represents a requirement test report""" +type TestReport { + """Author of the test report.""" + author: UserCore + + """Timestamp of when the test report was created.""" + createdAt: Time! + + """ID of the test report.""" + id: ID! + + """State of the test report.""" + state: TestReportState! +} + +"""The connection type for TestReport.""" +type TestReportConnection { + """A list of edges.""" + edges: [TestReportEdge] + + """A list of nodes.""" + nodes: [TestReport] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TestReportEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: TestReport +} + +"""State of a test report""" +enum TestReportState { + """Passed test report.""" + PASSED + + """Failed test report.""" + FAILED +} + +"""Test report for a pipeline""" +type TestReportSummary { + """Test suites belonging to a pipeline test report.""" + testSuites( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TestSuiteSummaryConnection! + + """Total report statistics for a pipeline test report.""" + total: TestReportTotal! +} + +"""Total test report statistics.""" +type TestReportTotal { + """Total number of the test cases.""" + count: Int + + """Total number of test cases that had an error.""" + error: Int + + """Total number of test cases that failed.""" + failed: Int + + """Total number of test cases that were skipped.""" + skipped: Int + + """Total number of test cases that succeeded.""" + success: Int + + """Test suite error message.""" + suiteError: String + + """Total duration of the tests.""" + time: Float +} + +"""Test suite in a pipeline test report.""" +type TestSuite { + """Total number of test cases that had an error.""" + errorCount: Int + + """Total number of test cases that failed in the test suite.""" + failedCount: Int + + """Name of the test suite.""" + name: String + + """Total number of test cases that were skipped in the test suite.""" + skippedCount: Int + + """Total number of test cases that succeeded in the test suite.""" + successCount: Int + + """Test suite error message.""" + suiteError: String + + """Test cases in the test suite.""" + testCases( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TestCaseConnection + + """Total number of the test cases in the test suite.""" + totalCount: Int + + """Total duration of the tests in the test suite.""" + totalTime: Float +} + +"""Test suite summary in a pipeline test report.""" +type TestSuiteSummary { + """IDs of the builds used to run the test suite.""" + buildIds: [ID!] + + """Total number of test cases that had an error.""" + errorCount: Int + + """Total number of test cases that failed in the test suite.""" + failedCount: Int + + """Name of the test suite.""" + name: String + + """Total number of test cases that were skipped in the test suite.""" + skippedCount: Int + + """Total number of test cases that succeeded in the test suite.""" + successCount: Int + + """Test suite error message.""" + suiteError: String + + """Total number of the test cases in the test suite.""" + totalCount: Int + + """Total duration of the tests in the test suite.""" + totalTime: Float +} + +"""The connection type for TestSuiteSummary.""" +type TestSuiteSummaryConnection { + """Total count of collection.""" + count: Int! + + """A list of edges.""" + edges: [TestSuiteSummaryEdge] + + """A list of nodes.""" + nodes: [TestSuiteSummary] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TestSuiteSummaryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: TestSuiteSummary +} + +""" +Time represented in ISO 8601. + +For example: "2021-03-09T14:58:50+00:00". + +See `https://www.iso.org/iso-8601-date-and-time-format.html`. + +""" +scalar Time + +"""Represents measured stats metrics for timeboxes""" +type TimeboxMetrics { + """Count metric.""" + count: Int! + + """Weight metric.""" + weight: Int! +} + +"""Represents a historically accurate report about the timebox""" +type TimeboxReport { + """Daily scope and completed totals for burnup charts.""" + burnupTimeSeries: [BurnupChartDailyTotals!] + + """Represents the time report stats for the timebox.""" + stats: TimeReportStats +} + +interface TimeboxReportInterface { + """Historically accurate report about the timebox.""" + report: TimeboxReport +} + +"""A time-frame defined as a closed inclusive range of two dates""" +input Timeframe { + """Start of the range.""" + start: Date! + + """End of the range.""" + end: Date! +} + +type Timelog { + """Issue that logged time was added to.""" + issue: Issue + + """Merge request that logged time was added to.""" + mergeRequest: MergeRequest + + """Note where the quick action was executed to add the logged time.""" + note: Note + + """Timestamp of when the time tracked was spent at.""" + spentAt: Time + + """Summary of how the time was spent.""" + summary: String + + """Time spent displayed in seconds.""" + timeSpent: Int! + + """User that logged the time.""" + user: UserCore! +} + +"""The connection type for Timelog.""" +type TimelogConnection { + """A list of edges.""" + edges: [TimelogEdge] + + """A list of nodes.""" + nodes: [Timelog] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TimelogEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Timelog +} + +"""Represents the time report stats for timeboxes""" +type TimeReportStats { + """Completed issues metrics.""" + complete: TimeboxMetrics + + """Incomplete issues metrics.""" + incomplete: TimeboxMetrics + + """Total issues metrics.""" + total: TimeboxMetrics +} + +"""Representing a to-do entry""" +type Todo { + """Action of the to-do item.""" + action: TodoActionEnum! + + """Author of this to-do item.""" + author: UserCore! + + """Body of the to-do item.""" + body: String! + + """Timestamp this to-do item was created.""" + createdAt: Time! + + """Group this to-do item is associated with.""" + group: Group + + """ID of the to-do item.""" + id: ID! + + """Project this to-do item is associated with.""" + project: Project + + """State of the to-do item.""" + state: TodoStateEnum! + + """Target type of the to-do item.""" + targetType: TodoTargetEnum! +} + +""" +A `TodoableID` is a global ID. It is encoded as a string. + +An example `TodoableID` is: `"gid://gitlab/Todoable/1"`. +""" +scalar TodoableID + +enum TodoActionEnum { + """User was assigned.""" + assigned + + """User was mentioned.""" + mentioned + + """Build triggered by the user failed.""" + build_failed + + """User added a TODO.""" + marked + + """User was set as an approver.""" + approval_required + + """Merge request authored by the user could not be merged.""" + unmergeable + + """User was directly addressed.""" + directly_addressed + + """Merge request authored by the user was removed from the merge train.""" + merge_train_removed + + """Review was requested from the user.""" + review_requested +} + +"""The connection type for Todo.""" +type TodoConnection { + """A list of edges.""" + edges: [TodoEdge] + + """A list of nodes.""" + nodes: [Todo] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of TodoCreate""" +input TodoCreateInput { + """ + Global ID of the to-do item's parent. Issues, merge requests, designs, and epics are supported. + """ + targetId: TodoableID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TodoCreate""" +type TodoCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """To-do item created.""" + todo: Todo +} + +"""An edge in a connection.""" +type TodoEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Todo +} + +""" +A `TodoID` is a global ID. It is encoded as a string. + +An example `TodoID` is: `"gid://gitlab/Todo/1"`. +""" +scalar TodoID + +"""Autogenerated input type of TodoMarkDone""" +input TodoMarkDoneInput { + """Global ID of the to-do item to mark as done.""" + id: TodoID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TodoMarkDone""" +type TodoMarkDonePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Requested to-do item.""" + todo: Todo! +} + +"""Autogenerated input type of TodoRestore""" +input TodoRestoreInput { + """Global ID of the to-do item to restore.""" + id: TodoID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated input type of TodoRestoreMany""" +input TodoRestoreManyInput { + """ + Global IDs of the to-do items to restore (a maximum of 50 is supported at once). + """ + ids: [TodoID!]! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TodoRestoreMany""" +type TodoRestoreManyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Updated to-do items.""" + todos: [Todo!]! +} + +"""Autogenerated return type of TodoRestore""" +type TodoRestorePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Requested to-do item.""" + todo: Todo! +} + +"""Autogenerated input type of TodosMarkAllDone""" +input TodosMarkAllDoneInput { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of TodosMarkAllDone""" +type TodosMarkAllDonePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Updated to-do items.""" + todos: [Todo!]! +} + +enum TodoStateEnum { + """State of the todo is pending.""" + pending + + """State of the todo is done.""" + done +} + +enum TodoTargetEnum { + """Commit.""" + COMMIT + + """Issue.""" + ISSUE + + """Merge request.""" + MERGEREQUEST + + """Design.""" + DESIGN + + """Alert.""" + ALERT + + """An Epic.""" + EPIC +} + +type Tree { + """Blobs of the tree.""" + blobs( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): BlobConnection! + + """Last commit for the tree.""" + lastCommit: Commit + + """Sub-modules of the tree.""" + submodules( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SubmoduleConnection! + + """Trees of the tree.""" + trees( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TreeEntryConnection! +} + +"""The connection type for Tree.""" +type TreeConnection { + """A list of edges.""" + edges: [TreeEdge] + + """A list of nodes.""" + nodes: [Tree] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TreeEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Tree +} + +"""Represents a directory""" +type TreeEntry implements Entry { + """Flat path of the entry.""" + flatPath: String! + + """ID of the entry.""" + id: ID! + + """Name of the entry.""" + name: String! + + """Path of the entry.""" + path: String! + + """Last commit SHA for the entry.""" + sha: String! + + """Type of tree entry.""" + type: EntryType! + + """Web path for the tree entry (directory).""" + webPath: String + + """Web URL for the tree entry (directory).""" + webUrl: String +} + +"""The connection type for TreeEntry.""" +type TreeEntryConnection { + """A list of edges.""" + edges: [TreeEntryEdge] + + """A list of nodes.""" + nodes: [TreeEntry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type TreeEntryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: TreeEntry +} + +enum TypeEnum { + """Snippet created independent of any project.""" + personal + + """Snippet related to a specific project.""" + project +} + +"""A regexp containing patterns sourced from user input""" +scalar UntrustedRegexp + +"""Autogenerated input type of UpdateAlertStatus""" +input UpdateAlertStatusInput { + """Project the alert to mutate is in.""" + projectPath: ID! + + """IID of the alert to mutate.""" + iid: String! + + """Status to set the alert.""" + status: AlertManagementStatus! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateAlertStatus""" +type UpdateAlertStatusPayload { + """Alert after mutation.""" + alert: AlertManagementAlert + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue created after mutation.""" + issue: Issue + + """To-do item after mutation.""" + todo: Todo +} + +"""Autogenerated input type of UpdateBoardEpicUserPreferences""" +input UpdateBoardEpicUserPreferencesInput { + """Board global ID.""" + boardId: BoardID! + + """ID of an epic to set preferences for.""" + epicId: EpicID! + + """Whether the epic should be collapsed in the board.""" + collapsed: Boolean! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateBoardEpicUserPreferences""" +type UpdateBoardEpicUserPreferencesPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """User preferences for the epic in the board after mutation.""" + epicUserPreferences: BoardEpicUserPreferences + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of UpdateBoard""" +input UpdateBoardInput { + """Board name.""" + name: String + + """Whether or not backlog list is hidden.""" + hideBacklogList: Boolean + + """Whether or not closed list is hidden.""" + hideClosedList: Boolean + + """Board global ID.""" + id: BoardID! + + """ID of user to be assigned to the board.""" + assigneeId: UserID + + """ID of milestone to be assigned to the board.""" + milestoneId: MilestoneID + + """ID of iteration to be assigned to the board.""" + iterationId: IterationID + + """ID of iteration cadence to be assigned to the board.""" + iterationCadenceId: IterationsCadenceID + + """Weight value to be assigned to the board.""" + weight: Int + + """Labels of the issue.""" + labels: [String!] + + """IDs of labels to be added to the board.""" + labelIds: [LabelID!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated input type of UpdateBoardList""" +input UpdateBoardListInput { + """Position of list within the board.""" + position: Int + + """Indicates if the list is collapsed for this user.""" + collapsed: Boolean + + """Global ID of the list.""" + listId: ListID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateBoardList""" +type UpdateBoardListPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Mutated list.""" + list: BoardList +} + +"""Autogenerated return type of UpdateBoard""" +type UpdateBoardPayload { + """Board after mutation.""" + board: Board + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of UpdateComplianceFramework""" +input UpdateComplianceFrameworkInput { + """Global ID of the compliance framework to update.""" + id: ComplianceManagementFrameworkID! + + """Parameters to update the compliance framework with.""" + params: ComplianceFrameworkInput! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateComplianceFramework""" +type UpdateComplianceFrameworkPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Compliance framework after mutation.""" + complianceFramework: ComplianceFramework + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of UpdateContainerExpirationPolicy""" +input UpdateContainerExpirationPolicyInput { + """Project path where the container expiration policy is located.""" + projectPath: ID! + + """Indicates whether this container expiration policy is enabled.""" + enabled: Boolean + + """This container expiration policy schedule.""" + cadence: ContainerExpirationPolicyCadenceEnum + + """Tags older that this will expire.""" + olderThan: ContainerExpirationPolicyOlderThanEnum + + """Number of tags to retain.""" + keepN: ContainerExpirationPolicyKeepEnum + + """Tags with names matching this regex pattern will expire.""" + nameRegex: UntrustedRegexp + + """Tags with names matching this regex pattern will be preserved.""" + nameRegexKeep: UntrustedRegexp + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateContainerExpirationPolicy""" +type UpdateContainerExpirationPolicyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Container expiration policy after mutation.""" + containerExpirationPolicy: ContainerExpirationPolicy + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of UpdateDependencyProxyImageTtlGroupPolicy""" +input UpdateDependencyProxyImageTtlGroupPolicyInput { + """Group path for the group dependency proxy image TTL policy.""" + groupPath: ID! + + """Indicates whether the policy is enabled or disabled.""" + enabled: Boolean + + """Number of days to retain a cached image file.""" + ttl: Int + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateDependencyProxyImageTtlGroupPolicy""" +type UpdateDependencyProxyImageTtlGroupPolicyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Group image TTL policy after mutation.""" + dependencyProxyImageTtlPolicy: DependencyProxyImageTtlGroupPolicy + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of UpdateDependencyProxySettings""" +input UpdateDependencyProxySettingsInput { + """Group path for the group dependency proxy.""" + groupPath: ID! + + """Indicates whether the policy is enabled or disabled.""" + enabled: Boolean + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateDependencyProxySettings""" +type UpdateDependencyProxySettingsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Group dependency proxy settings after mutation.""" + dependencyProxySetting: DependencyProxySetting + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +input UpdateDiffImagePositionInput { + """X position of the note.""" + x: Int + + """Y position of the note.""" + y: Int + + """Total width of the image.""" + width: Int + + """Total height of the image.""" + height: Int +} + +"""Autogenerated input type of UpdateEpicBoardList""" +input UpdateEpicBoardListInput { + """Position of list within the board.""" + position: Int + + """Indicates if the list is collapsed for this user.""" + collapsed: Boolean + + """Global ID of the epic list.""" + listId: BoardsEpicListID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateEpicBoardList""" +type UpdateEpicBoardListPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Mutated epic list.""" + list: EpicList +} + +"""Autogenerated input type of UpdateEpic""" +input UpdateEpicInput { + """IID of the epic to mutate.""" + iid: ID! + + """Group the epic to mutate is in.""" + groupPath: ID! + + """Title of the epic.""" + title: String + + """Description of the epic.""" + description: String + + """Indicates if the epic is confidential.""" + confidential: Boolean + + """Start date of the epic.""" + startDateFixed: String + + """End date of the epic.""" + dueDateFixed: String + + """ + Indicates start date should be sourced from start_date_fixed field not the issue milestones. + """ + startDateIsFixed: Boolean + + """ + Indicates end date should be sourced from due_date_fixed field not the issue milestones. + """ + dueDateIsFixed: Boolean + + """IDs of labels to be added to the epic.""" + addLabelIds: [ID!] + + """IDs of labels to be removed from the epic.""" + removeLabelIds: [ID!] + + """State event for the epic.""" + stateEvent: EpicStateEvent + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateEpic""" +type UpdateEpicPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Epic after mutation.""" + epic: Epic + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""Autogenerated input type of UpdateImageDiffNote""" +input UpdateImageDiffNoteInput { + """Global ID of the note to update.""" + id: NoteID! + + """Content of the note.""" + body: String + + """Position of this note on a diff.""" + position: UpdateDiffImagePositionInput + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateImageDiffNote""" +type UpdateImageDiffNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +"""Autogenerated input type of UpdateIssue""" +input UpdateIssueInput { + """Project the issue to mutate is in.""" + projectPath: ID! + + """IID of the issue to mutate.""" + iid: String! + + """Description of the issue.""" + description: String + + """Due date of the issue.""" + dueDate: ISO8601Date + + """Indicates the issue is confidential.""" + confidential: Boolean + + """Indicates discussion is locked on the issue.""" + locked: Boolean + + """Type of the issue.""" + type: IssueType + + """Title of the issue.""" + title: String + + """ + ID of the milestone to assign to the issue. On update milestone will be removed if set to null. + """ + milestoneId: ID + + """IDs of labels to be added to the issue.""" + addLabelIds: [ID!] + + """IDs of labels to be removed from the issue.""" + removeLabelIds: [ID!] + + """IDs of labels to be set. Replaces existing issue labels.""" + labelIds: [ID!] + + """Close or reopen an issue.""" + stateEvent: IssueStateEvent + + """Desired health status.""" + healthStatus: HealthStatus + + """Weight of the issue.""" + weight: Int + + """ID of the parent epic. NULL when removing the association.""" + epicId: EpicID + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateIssue""" +type UpdateIssuePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Issue after mutation.""" + issue: Issue +} + +"""Autogenerated input type of UpdateIteration""" +input UpdateIterationInput { + """Group of the iteration.""" + groupPath: ID! + + """Global ID of the iteration.""" + id: ID! + + """Title of the iteration.""" + title: String + + """Description of the iteration.""" + description: String + + """Start date of the iteration.""" + startDate: String + + """End date of the iteration.""" + dueDate: String + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateIteration""" +type UpdateIterationPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Updated iteration.""" + iteration: Iteration +} + +"""Autogenerated input type of UpdateNamespacePackageSettings""" +input UpdateNamespacePackageSettingsInput { + """Namespace path where the namespace package setting is located.""" + namespacePath: ID! + + """ + Indicates whether duplicate Maven packages are allowed for this namespace. + """ + mavenDuplicatesAllowed: Boolean + + """ + When maven_duplicates_allowed is false, you can publish duplicate packages + with names that match this regex. Otherwise, this setting has no effect. + """ + mavenDuplicateExceptionRegex: UntrustedRegexp + + """ + Indicates whether duplicate generic packages are allowed for this namespace. + """ + genericDuplicatesAllowed: Boolean + + """ + When generic_duplicates_allowed is false, you can publish duplicate packages + with names that match this regex. Otherwise, this setting has no effect. + """ + genericDuplicateExceptionRegex: UntrustedRegexp + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateNamespacePackageSettings""" +type UpdateNamespacePackageSettingsPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Namespace package setting after mutation.""" + packageSettings: PackageSettings +} + +"""Autogenerated input type of UpdateNote""" +input UpdateNoteInput { + """Global ID of the note to update.""" + id: NoteID! + + """Content of the note.""" + body: String + + """Confidentiality flag of a note. Default is false.""" + confidential: Boolean + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateNote""" +type UpdateNotePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Note after mutation.""" + note: Note +} + +"""Autogenerated input type of UpdateRequirement""" +input UpdateRequirementInput { + """Title of the requirement.""" + title: String + + """Description of the requirement.""" + description: String + + """Full project path the requirement is associated with.""" + projectPath: ID! + + """State of the requirement.""" + state: RequirementState + + """IID of the requirement to update.""" + iid: String! + + """Creates a test report for the requirement with the given state.""" + lastTestReportState: TestReportState + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateRequirement""" +type UpdateRequirementPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Requirement after mutation.""" + requirement: Requirement +} + +"""Autogenerated input type of UpdateSnippet""" +input UpdateSnippetInput { + """Global ID of the snippet to update.""" + id: SnippetID! + + """Title of the snippet.""" + title: String + + """Description of the snippet.""" + description: String + + """Visibility level of the snippet.""" + visibilityLevel: VisibilityLevelsEnum + + """Actions to perform over the snippet repository and blobs.""" + blobActions: [SnippetBlobActionInputType!] + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UpdateSnippet""" +type UpdateSnippetPayload { + """ + CAPTCHA site key which must be used to render a challenge for the user to + solve to obtain a valid captchaResponse value. Included only when an operation + was not completed because "NeedsCaptchaResponse" is true. Deprecated in 13.11: + Use spam protection with HTTP headers instead. + """ + captchaSiteKey: String @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """ + Indicates whether the operation was detected as possible spam and not + completed. If CAPTCHA is enabled, the request must be resubmitted with a valid + CAPTCHA response and spam_log_id included for the operation to be completed. + Included only when an operation was not completed because + "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam protection with + HTTP headers instead. + """ + needsCaptchaResponse: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") + + """Snippet after mutation.""" + snippet: Snippet + + """ + Indicates whether the operation was detected as definite spam. There is no + option to resubmit the request with a CAPTCHA response. Deprecated in 13.11: + Use spam protection with HTTP headers instead. + """ + spam: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") + + """ + Spam log ID which must be passed along with a valid CAPTCHA response for an + operation to be completed. Included only when an operation was not completed + because "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam + protection with HTTP headers instead. + """ + spamLogId: Int @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.") +} + +scalar Upload + +"""Represents the Geo replication and verification state of an upload.""" +type UploadRegistry { + """Timestamp when the UploadRegistry was created""" + createdAt: Time + + """ID of the Upload.""" + fileId: ID! + + """ID of the UploadRegistry""" + id: ID! + + """Error message during sync of the UploadRegistry""" + lastSyncFailure: String + + """Timestamp of the most recent successful sync of the UploadRegistry""" + lastSyncedAt: Time + + """Timestamp after which the UploadRegistry should be resynced""" + retryAt: Time + + """Number of consecutive failed sync attempts of the UploadRegistry""" + retryCount: Int + + """Sync state of the UploadRegistry""" + state: RegistryState +} + +"""The connection type for UploadRegistry.""" +type UploadRegistryConnection { + """A list of edges.""" + edges: [UploadRegistryEdge] + + """A list of nodes.""" + nodes: [UploadRegistry] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type UploadRegistryEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: UploadRegistry +} + +"""Represents a recorded measurement (object count) for the Admins""" +type UsageTrendsMeasurement { + """Object count.""" + count: Int! + + """Type of objects being measured.""" + identifier: MeasurementIdentifier! + + """Time the measurement was recorded.""" + recordedAt: Time +} + +"""The connection type for UsageTrendsMeasurement.""" +type UsageTrendsMeasurementConnection { + """A list of edges.""" + edges: [UsageTrendsMeasurementEdge] + + """A list of nodes.""" + nodes: [UsageTrendsMeasurement] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type UsageTrendsMeasurementEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: UsageTrendsMeasurement +} + +"""Representation of a GitLab user.""" +interface User { + """Merge requests assigned to the user.""" + assignedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Merge requests authored by the user.""" + authoredMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the assignee.""" + assigneeUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """URL of the user's avatar.""" + avatarUrl: String + + """Indicates if the user is a bot.""" + bot: Boolean! + + """User callouts that belong to the user.""" + callouts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCalloutConnection + + """User email. Deprecated in 13.7: This was renamed.""" + email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.") + + """Group count for the user.""" + groupCount: Int + + """Group memberships of the user.""" + groupMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupMemberConnection + + """ + Groups where the user has access. Will always return `null` if + `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + """ + groups( + """Search by group name or path.""" + search: String + + """Filter by permissions the user has on groups.""" + permissionScope: GroupPermission + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupConnection + + """ID of the user.""" + id: ID! + + """Location of the user.""" + location: String + + """Human-readable name of the user.""" + name: String! + + """Personal namespace of the user.""" + namespace: Namespace + + """Project memberships of the user.""" + projectMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectMemberConnection + + """User's public email.""" + publicEmail: String + + """Merge requests assigned to the user for review.""" + reviewRequestedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the assignee.""" + assigneeUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Snippets authored by the user.""" + snippets( + """ + Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + """ + ids: [SnippetID!] + + """Visibility of the snippet.""" + visibility: VisibilityScopesEnum + + """Type of snippet.""" + type: TypeEnum + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetConnection + + """Projects starred by the user.""" + starredProjects( + """Search query.""" + search: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection + + """State of the user.""" + state: UserState! + + """User status.""" + status: UserStatus + + """Time logged by the user.""" + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection + + """To-do items of the user.""" + todos( + """Action to be filtered.""" + action: [TodoActionEnum!] + + """ID of an author.""" + authorId: [ID!] + + """ID of a project.""" + projectId: [ID!] + + """ID of a group.""" + groupId: [ID!] + + """State of the todo.""" + state: [TodoStateEnum!] + + """Type of the todo.""" + type: [TodoTargetEnum!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TodoConnection + + """Permissions for the current user on the resource.""" + userPermissions: UserPermissions! + + """Username of the user. Unique within this instance of GitLab.""" + username: String! + + """Web path of the user.""" + webPath: String! + + """Web URL of the user.""" + webUrl: String! +} + +type UserCallout { + """Date when the callout was dismissed.""" + dismissedAt: Time + + """Name of the feature that the callout is for.""" + featureName: UserCalloutFeatureNameEnum +} + +"""The connection type for UserCallout.""" +type UserCalloutConnection { + """A list of edges.""" + edges: [UserCalloutEdge] + + """A list of nodes.""" + nodes: [UserCallout] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of UserCalloutCreate""" +input UserCalloutCreateInput { + """Feature name you want to dismiss the callout for.""" + featureName: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UserCalloutCreate""" +type UserCalloutCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """User callout dismissed.""" + userCallout: UserCallout! +} + +"""An edge in a connection.""" +type UserCalloutEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: UserCallout +} + +"""Name of the feature that the callout is for.""" +enum UserCalloutFeatureNameEnum { + """Callout feature name for gke_cluster_integration.""" + GKE_CLUSTER_INTEGRATION + + """Callout feature name for gcp_signup_offer.""" + GCP_SIGNUP_OFFER + + """Callout feature name for cluster_security_warning.""" + CLUSTER_SECURITY_WARNING + + """Callout feature name for ultimate_trial.""" + ULTIMATE_TRIAL + + """Callout feature name for geo_enable_hashed_storage.""" + GEO_ENABLE_HASHED_STORAGE + + """Callout feature name for geo_migrate_hashed_storage.""" + GEO_MIGRATE_HASHED_STORAGE + + """Callout feature name for canary_deployment.""" + CANARY_DEPLOYMENT + + """Callout feature name for gold_trial_billings.""" + GOLD_TRIAL_BILLINGS + + """Callout feature name for suggest_popover_dismissed.""" + SUGGEST_POPOVER_DISMISSED + + """Callout feature name for tabs_position_highlight.""" + TABS_POSITION_HIGHLIGHT + + """Callout feature name for threat_monitoring_info.""" + THREAT_MONITORING_INFO + + """Callout feature name for two_factor_auth_recovery_settings_check.""" + TWO_FACTOR_AUTH_RECOVERY_SETTINGS_CHECK + + """Callout feature name for web_ide_alert_dismissed.""" + WEB_IDE_ALERT_DISMISSED + + """Callout feature name for active_user_count_threshold.""" + ACTIVE_USER_COUNT_THRESHOLD + + """Callout feature name for buy_pipeline_minutes_notification_dot.""" + BUY_PIPELINE_MINUTES_NOTIFICATION_DOT + + """Callout feature name for personal_access_token_expiry.""" + PERSONAL_ACCESS_TOKEN_EXPIRY + + """Callout feature name for suggest_pipeline.""" + SUGGEST_PIPELINE + + """Callout feature name for customize_homepage.""" + CUSTOMIZE_HOMEPAGE + + """Callout feature name for feature_flags_new_version.""" + FEATURE_FLAGS_NEW_VERSION + + """Callout feature name for registration_enabled_callout.""" + REGISTRATION_ENABLED_CALLOUT + + """Callout feature name for new_user_signups_cap_reached.""" + NEW_USER_SIGNUPS_CAP_REACHED + + """Callout feature name for unfinished_tag_cleanup_callout.""" + UNFINISHED_TAG_CLEANUP_CALLOUT + + """Callout feature name for eoa_bronze_plan_banner.""" + EOA_BRONZE_PLAN_BANNER + + """Callout feature name for pipeline_needs_banner.""" + PIPELINE_NEEDS_BANNER + + """Callout feature name for pipeline_needs_hover_tip.""" + PIPELINE_NEEDS_HOVER_TIP + + """Callout feature name for web_ide_ci_environments_guidance.""" + WEB_IDE_CI_ENVIRONMENTS_GUIDANCE + + """Callout feature name for security_configuration_upgrade_banner.""" + SECURITY_CONFIGURATION_UPGRADE_BANNER + + """ + Callout feature name for cloud_licensing_subscription_activation_banner. + """ + CLOUD_LICENSING_SUBSCRIPTION_ACTIVATION_BANNER + + """Callout feature name for trial_status_reminder_d14.""" + TRIAL_STATUS_REMINDER_D14 + + """Callout feature name for trial_status_reminder_d3.""" + TRIAL_STATUS_REMINDER_D3 + + """Callout feature name for security_configuration_devops_alert.""" + SECURITY_CONFIGURATION_DEVOPS_ALERT + + """Callout feature name for profile_personal_access_token_expiry.""" + PROFILE_PERSONAL_ACCESS_TOKEN_EXPIRY + + """Callout feature name for terraform_notification_dismissed.""" + TERRAFORM_NOTIFICATION_DISMISSED + + """Callout feature name for security_newsletter_callout.""" + SECURITY_NEWSLETTER_CALLOUT +} + +"""Core represention of a GitLab user.""" +type UserCore implements User { + """Merge requests assigned to the user.""" + assignedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Merge requests authored by the user.""" + authoredMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the assignee.""" + assigneeUsername: String + + """Username of the reviewer.""" + reviewerUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """URL of the user's avatar.""" + avatarUrl: String + + """Indicates if the user is a bot.""" + bot: Boolean! + + """User callouts that belong to the user.""" + callouts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): UserCalloutConnection + + """User email. Deprecated in 13.7: This was renamed.""" + email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.") + + """Group count for the user.""" + groupCount: Int + + """Group memberships of the user.""" + groupMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupMemberConnection + + """ + Groups where the user has access. Will always return `null` if + `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled. + """ + groups( + """Search by group name or path.""" + search: String + + """Filter by permissions the user has on groups.""" + permissionScope: GroupPermission + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GroupConnection + + """ID of the user.""" + id: ID! + + """Location of the user.""" + location: String + + """Human-readable name of the user.""" + name: String! + + """Personal namespace of the user.""" + namespace: Namespace + + """Project memberships of the user.""" + projectMemberships( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectMemberConnection + + """User's public email.""" + publicEmail: String + + """Merge requests assigned to the user for review.""" + reviewRequestedMergeRequests( + """Array of IIDs of merge requests, for example `[1, 2]`.""" + iids: [String!] + + """ + Array of source branch names. + All resolved merge requests will have one of these branches as their source. + + """ + sourceBranches: [String!] + + """ + Array of target branch names. + All resolved merge requests will have one of these branches as their target. + + """ + targetBranches: [String!] + + """ + Merge request state. If provided, all resolved merge requests will have this state. + """ + state: MergeRequestState + + """ + Array of label names. All resolved merge requests will have all of these labels. + """ + labels: [String!] + + """Merge requests merged after this date.""" + mergedAfter: Time + + """Merge requests merged before this date.""" + mergedBefore: Time + + """Title of the milestone.""" + milestoneTitle: String + + """Sort merge requests by this criteria.""" + sort: MergeRequestSort = created_desc + + """Merge requests created after this timestamp.""" + createdAfter: Time + + """Merge requests created before this timestamp.""" + createdBefore: Time + + """ + List of negated arguments. + Warning: this argument is experimental and a subject to change in future. + + """ + not: MergeRequestsResolverNegatedParams + + """ + The full-path of the project the authored merge requests should be in. + Incompatible with projectId. + + """ + projectPath: String + + """ + The global ID of the project the authored merge requests should be in. + Incompatible with projectPath. + + """ + projectId: ProjectID + + """Username of the author.""" + authorUsername: String + + """Username of the assignee.""" + assigneeUsername: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): MergeRequestConnection + + """Snippets authored by the user.""" + snippets( + """ + Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. + """ + ids: [SnippetID!] + + """Visibility of the snippet.""" + visibility: VisibilityScopesEnum + + """Type of snippet.""" + type: TypeEnum + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): SnippetConnection + + """Projects starred by the user.""" + starredProjects( + """Search query.""" + search: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection + + """State of the user.""" + state: UserState! + + """User status.""" + status: UserStatus + + """Time logged by the user.""" + timelogs( + """ + List timelogs within a date range where the logged date is equal to or after startDate. + """ + startDate: Time + + """ + List timelogs within a date range where the logged date is equal to or before endDate. + """ + endDate: Time + + """ + List timelogs within a time range where the logged time is equal to or after startTime. + """ + startTime: Time + + """ + List timelogs within a time range where the logged time is equal to or before endTime. + """ + endTime: Time + + """List timelogs for a project.""" + projectId: ProjectID + + """List timelogs for a group.""" + groupId: GroupID + + """List timelogs for a user.""" + username: String + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TimelogConnection + + """To-do items of the user.""" + todos( + """Action to be filtered.""" + action: [TodoActionEnum!] + + """ID of an author.""" + authorId: [ID!] + + """ID of a project.""" + projectId: [ID!] + + """ID of a group.""" + groupId: [ID!] + + """State of the todo.""" + state: [TodoStateEnum!] + + """Type of the todo.""" + type: [TodoTargetEnum!] + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): TodoConnection + + """Permissions for the current user on the resource.""" + userPermissions: UserPermissions! + + """Username of the user. Unique within this instance of GitLab.""" + username: String! + + """Web path of the user.""" + webPath: String! + + """Web URL of the user.""" + webUrl: String! +} + +"""The connection type for UserCore.""" +type UserCoreConnection { + """A list of edges.""" + edges: [UserCoreEdge] + + """A list of nodes.""" + nodes: [UserCore] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type UserCoreEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: UserCore +} + +""" +A `UserID` is a global ID. It is encoded as a string. + +An example `UserID` is: `"gid://gitlab/User/1"`. +""" +scalar UserID + +""" +Information about a merge request given a specific user. + +This object has two parts to its state: a `User` and a `MergeRequest`. All +fields relate to interactions between the two entities. + +""" +type UserMergeRequestInteraction { + """Approval rules that apply to this user for this merge request.""" + applicableApprovalRules: [ApprovalRule!] + + """Whether this user has approved this merge request.""" + approved: Boolean! + + """Whether this user can merge this merge request.""" + canMerge: Boolean! + + """Whether this user can update this merge request.""" + canUpdate: Boolean! + + """State of the review by this user.""" + reviewState: MergeRequestReviewState + + """Whether this user has provided a review for this merge request.""" + reviewed: Boolean! +} + +type UserPermissions { + """Indicates the user can perform `create_snippet` on this resource""" + createSnippet: Boolean! +} + +"""Possible states of a user""" +enum UserState { + """User is active and is able to use the system.""" + active + + """User has been blocked and is prevented from using the system.""" + blocked + + """User is no longer active and is unable to use the system.""" + deactivated +} + +type UserStatus { + """User availability status.""" + availability: AvailabilityEnum! + + """String representation of emoji.""" + emoji: String + + """User status message.""" + message: String + + """HTML of the user status message""" + messageHtml: String +} + +enum VisibilityLevelsEnum { + """Private visibility level.""" + private + + """Internal visibility level.""" + internal + + """Public visibility level.""" + public +} + +enum VisibilityScopesEnum { + """Snippet is visible only to the snippet creator.""" + private + + """Snippet is visible for any logged in user except external users.""" + internal + + """Snippet can be accessed without any authentication.""" + public +} + +""" +Represents the count of vulnerabilities by severity on a particular day. This data is retained for 365 days +""" +type VulnerabilitiesCountByDay { + """ + Total number of vulnerabilities on a particular day with critical severity + """ + critical: Int! + + """Date for the count.""" + date: ISO8601Date! + + """Total number of vulnerabilities on a particular day with high severity""" + high: Int! + + """Total number of vulnerabilities on a particular day with info severity""" + info: Int! + + """Total number of vulnerabilities on a particular day with low severity""" + low: Int! + + """ + Total number of vulnerabilities on a particular day with medium severity + """ + medium: Int! + + """Total number of vulnerabilities on a particular day.""" + total: Int! + + """ + Total number of vulnerabilities on a particular day with unknown severity + """ + unknown: Int! +} + +"""The connection type for VulnerabilitiesCountByDay.""" +type VulnerabilitiesCountByDayConnection { + """A list of edges.""" + edges: [VulnerabilitiesCountByDayEdge] + + """A list of nodes.""" + nodes: [VulnerabilitiesCountByDay] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type VulnerabilitiesCountByDayEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: VulnerabilitiesCountByDay +} + +""" +A `VulnerabilitiesExternalIssueLinkID` is a global ID. It is encoded as a string. + +An example `VulnerabilitiesExternalIssueLinkID` is: `"gid://gitlab/Vulnerabilities::ExternalIssueLink/1"`. +""" +scalar VulnerabilitiesExternalIssueLinkID + +""" +A `VulnerabilitiesScannerID` is a global ID. It is encoded as a string. + +An example `VulnerabilitiesScannerID` is: `"gid://gitlab/Vulnerabilities::Scanner/1"`. +""" +scalar VulnerabilitiesScannerID + +"""Represents a vulnerability""" +type Vulnerability implements NoteableInterface { + """Timestamp of when the vulnerability state was changed to confirmed.""" + confirmedAt: Time + + """User that confirmed the vulnerability.""" + confirmedBy: UserCore + + """Description of the vulnerability.""" + description: String + + """Details of the vulnerability.""" + details: [VulnerabilityDetail!]! + + """Timestamp of when the vulnerability was first detected.""" + detectedAt: Time! + + """All discussions on this noteable.""" + discussions( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): DiscussionConnection! + + """Timestamp of when the vulnerability state was changed to dismissed.""" + dismissedAt: Time + + """User that dismissed the vulnerability.""" + dismissedBy: UserCore + + """List of external issue links related to the vulnerability.""" + externalIssueLinks( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityExternalIssueLinkConnection! + + """Indicates whether the vulnerability is a false positive.""" + falsePositive: Boolean + + """ + Indicates whether there is a solution available for this vulnerability. + """ + hasSolutions: Boolean + + """GraphQL ID of the vulnerability.""" + id: ID! + + """Identifiers of the vulnerability.""" + identifiers: [VulnerabilityIdentifier!]! + + """List of issue links related to the vulnerability.""" + issueLinks( + """Filter issue links by link type.""" + linkType: VulnerabilityIssueLinkType + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): VulnerabilityIssueLinkConnection! + + """List of links associated with the vulnerability.""" + links: [VulnerabilityLink!]! + + """ + Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability. + """ + location: VulnerabilityLocation + + """Merge request that fixes the vulnerability.""" + mergeRequest: MergeRequest + + """ + Short text description of the vulnerability. This may include the finding's specific information. + """ + message: String + + """All notes on this noteable.""" + notes( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): NoteConnection! + + """Primary identifier of the vulnerability.""" + primaryIdentifier: VulnerabilityIdentifier + + """Project on which the vulnerability was found.""" + project: Project + + """ + Type of the security report that found the vulnerability (SAST, + DEPENDENCY_SCANNING, CONTAINER_SCANNING, DAST, SECRET_DETECTION, + COVERAGE_FUZZING, API_FUZZING, CLUSTER_IMAGE_SCANNING, GENERIC). `Scan Type` in the UI. + """ + reportType: VulnerabilityReportType + + """Timestamp of when the vulnerability state was changed to resolved.""" + resolvedAt: Time + + """User that resolved the vulnerability.""" + resolvedBy: UserCore + + """ + Indicates whether the vulnerability is fixed on the default branch or not. + """ + resolvedOnDefaultBranch: Boolean! + + """Scanner metadata for the vulnerability.""" + scanner: VulnerabilityScanner + + """ + Severity of the vulnerability (INFO, UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL) + """ + severity: VulnerabilitySeverity + + """State of the vulnerability (DETECTED, CONFIRMED, RESOLVED, DISMISSED)""" + state: VulnerabilityState + + """Title of the vulnerability.""" + title: String + + """Number of user notes attached to the vulnerability.""" + userNotesCount: Int! + + """Permissions for the current user on the resource""" + userPermissions: VulnerabilityPermissions! + + """URL to the vulnerability's details page.""" + vulnerabilityPath: String +} + +"""Confidence that a given vulnerability is present in the codebase.""" +enum VulnerabilityConfidence { + """Ignore confidence""" + IGNORE + + """Unknown confidence""" + UNKNOWN + + """Experimental confidence""" + EXPERIMENTAL + + """Low confidence""" + LOW + + """Medium confidence""" + MEDIUM + + """High confidence""" + HIGH + + """Confirmed confidence""" + CONFIRMED +} + +"""Autogenerated input type of VulnerabilityConfirm""" +input VulnerabilityConfirmInput { + """ID of the vulnerability to be confirmed.""" + id: VulnerabilityID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityConfirm""" +type VulnerabilityConfirmPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Vulnerability after state change.""" + vulnerability: Vulnerability +} + +"""The connection type for Vulnerability.""" +type VulnerabilityConnection { + """A list of edges.""" + edges: [VulnerabilityEdge] + + """A list of nodes.""" + nodes: [Vulnerability] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of VulnerabilityCreate""" +input VulnerabilityCreateInput { + """ID of the project to attach the vulnerability to.""" + project: ProjectID! + + """Name of the vulnerability.""" + name: String! + + """Long text section that describes the vulnerability in more detail.""" + description: String! + + """Information about the scanner used to discover the vulnerability.""" + scanner: VulnerabilityScannerInput! + + """Array of CVE or CWE identifiers for the vulnerability.""" + identifiers: [VulnerabilityIdentifierInput!]! + + """State of the vulnerability (defaults to `detected`).""" + state: VulnerabilityState = DETECTED + + """Severity of the vulnerability (defaults to `unknown`).""" + severity: VulnerabilitySeverity = UNKNOWN + + """Confidence of the vulnerability (defaults to `unknown`).""" + confidence: VulnerabilityConfidence = UNKNOWN + + """Instructions for how to fix the vulnerability.""" + solution: String + + """ + Short text section that describes the vulnerability. This may include the finding's specific information. + """ + message: String + + """ + Timestamp of when the vulnerability was first detected (defaults to creation time). + """ + detectedAt: Time + + """ + Timestamp of when the vulnerability state changed to confirmed (defaults to creation time if status is `confirmed`). + """ + confirmedAt: Time + + """ + Timestamp of when the vulnerability state changed to resolved (defaults to creation time if status is `resolved`). + """ + resolvedAt: Time + + """ + Timestamp of when the vulnerability state changed to dismissed (defaults to creation time if status is `dismissed`). + """ + dismissedAt: Time + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityCreate""" +type VulnerabilityCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Vulnerability created.""" + vulnerability: Vulnerability +} + +""" +Represents a vulnerability detail field. The fields with data will depend on the vulnerability detail type +""" +union VulnerabilityDetail = VulnerabilityDetailBase | VulnerabilityDetailBoolean | VulnerabilityDetailCode | VulnerabilityDetailCommit | VulnerabilityDetailDiff | VulnerabilityDetailFileLocation | VulnerabilityDetailInt | VulnerabilityDetailList | VulnerabilityDetailMarkdown | VulnerabilityDetailModuleLocation | VulnerabilityDetailTable | VulnerabilityDetailText | VulnerabilityDetailUrl + +"""Represents the vulnerability details base""" +type VulnerabilityDetailBase { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String +} + +"""Represents the vulnerability details boolean value""" +type VulnerabilityDetailBoolean { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String + + """Value of the field.""" + value: Boolean! +} + +"""Represents the vulnerability details code field""" +type VulnerabilityDetailCode { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Language of the code.""" + lang: String + + """Name of the field.""" + name: String + + """Source code.""" + value: String! +} + +"""Represents the vulnerability details commit field""" +type VulnerabilityDetailCommit { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String + + """Commit SHA value.""" + value: String! +} + +"""Represents the vulnerability details diff field""" +type VulnerabilityDetailDiff { + """Value of the field after the change.""" + after: String! + + """Value of the field before the change.""" + before: String! + + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String +} + +""" +Represents the vulnerability details location within a file in the project +""" +type VulnerabilityDetailFileLocation { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """File name.""" + fileName: String! + + """End line number of the file location.""" + lineEnd: Int! + + """Start line number of the file location.""" + lineStart: Int! + + """Name of the field.""" + name: String +} + +"""Represents the vulnerability details integer value""" +type VulnerabilityDetailInt { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String + + """Value of the field.""" + value: Int! +} + +"""Represents the vulnerability details list value""" +type VulnerabilityDetailList { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """List of details.""" + items: [VulnerabilityDetail!]! + + """Name of the field.""" + name: String +} + +"""Represents the vulnerability details Markdown field""" +type VulnerabilityDetailMarkdown { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String + + """Value of the Markdown field.""" + value: String! +} + +""" +Represents the vulnerability details location within a file in the project +""" +type VulnerabilityDetailModuleLocation { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Module name.""" + moduleName: String! + + """Name of the field.""" + name: String + + """Offset of the module location.""" + offset: Int! +} + +"""Represents the vulnerability details table value""" +type VulnerabilityDetailTable { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Table headers.""" + headers: [VulnerabilityDetail!]! + + """Name of the field.""" + name: String + + """Table rows.""" + rows: [VulnerabilityDetail!]! +} + +"""Represents the vulnerability details text field""" +type VulnerabilityDetailText { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Name of the field.""" + name: String + + """Value of the text field.""" + value: String! +} + +"""Represents the vulnerability details URL field""" +type VulnerabilityDetailUrl { + """Description of the field.""" + description: String + + """Name of the field.""" + fieldName: String + + """Href of the URL.""" + href: String! + + """Name of the field.""" + name: String + + """Text of the URL.""" + text: String +} + +"""The dismissal reason of the Vulnerability""" +enum VulnerabilityDismissalReason { + """ + The vulnerability is known, and has not been remediated or mitigated, but is considered to be an acceptable business risk. + """ + ACCEPTABLE_RISK + + """ + An error in reporting in which a test result incorrectly indicates the + presence of a vulnerability in a system when the vulnerability is not present. + """ + FALSE_POSITIVE + + """ + A management, operational, or technical control (that is, safeguard or + countermeasure) employed by an organization that provides equivalent or + comparable protection for an information system. + """ + MITIGATING_CONTROL + + """ + The finding is not a vulnerability because it is part of a test or is test data. + """ + USED_IN_TESTS + + """ + The vulnerability is known, and has not been remediated or mitigated, but is + considered to be in a part of the application that will not be updated. + """ + NOT_APPLICABLE +} + +"""Autogenerated input type of VulnerabilityDismiss""" +input VulnerabilityDismissInput { + """ID of the vulnerability to be dismissed.""" + id: VulnerabilityID! + + """Comment why vulnerability should be dismissed.""" + comment: String + + """Reason why vulnerability should be dismissed.""" + dismissalReason: VulnerabilityDismissalReason + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityDismiss""" +type VulnerabilityDismissPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Vulnerability after dismissal.""" + vulnerability: Vulnerability +} + +"""An edge in a connection.""" +type VulnerabilityEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Vulnerability +} + +"""Represents an external issue link of a vulnerability""" +type VulnerabilityExternalIssueLink { + """The external issue attached to the issue link.""" + externalIssue: ExternalIssue + + """GraphQL ID of the external issue link.""" + id: VulnerabilitiesExternalIssueLinkID! + + """Type of the external issue link.""" + linkType: VulnerabilityExternalIssueLinkType! +} + +"""The connection type for VulnerabilityExternalIssueLink.""" +type VulnerabilityExternalIssueLinkConnection { + """A list of edges.""" + edges: [VulnerabilityExternalIssueLinkEdge] + + """A list of nodes.""" + nodes: [VulnerabilityExternalIssueLink] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""Autogenerated input type of VulnerabilityExternalIssueLinkCreate""" +input VulnerabilityExternalIssueLinkCreateInput { + """ID of the vulnerability.""" + id: VulnerabilityID! + + """Type of the external issue link.""" + linkType: VulnerabilityExternalIssueLinkType! + + """External tracker type of the external issue link.""" + externalTracker: VulnerabilityExternalIssueLinkExternalTracker! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityExternalIssueLinkCreate""" +type VulnerabilityExternalIssueLinkCreatePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Created external issue link.""" + externalIssueLink: VulnerabilityExternalIssueLink +} + +"""Autogenerated input type of VulnerabilityExternalIssueLinkDestroy""" +input VulnerabilityExternalIssueLinkDestroyInput { + """Global ID of the vulnerability external issue link.""" + id: VulnerabilitiesExternalIssueLinkID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityExternalIssueLinkDestroy""" +type VulnerabilityExternalIssueLinkDestroyPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! +} + +"""An edge in a connection.""" +type VulnerabilityExternalIssueLinkEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: VulnerabilityExternalIssueLink +} + +""" +The external tracker of the external issue link related to a vulnerability +""" +enum VulnerabilityExternalIssueLinkExternalTracker { + """Jira external tracker""" + JIRA +} + +"""The type of the external issue link related to a vulnerability""" +enum VulnerabilityExternalIssueLinkType { + """Created link type""" + CREATED +} + +"""The grade of the vulnerable project""" +enum VulnerabilityGrade { + """A grade""" + A + + """B grade""" + B + + """C grade""" + C + + """D grade""" + D + + """F grade""" + F +} + +""" +A `VulnerabilityID` is a global ID. It is encoded as a string. + +An example `VulnerabilityID` is: `"gid://gitlab/Vulnerability/1"`. +""" +scalar VulnerabilityID + +"""Represents a vulnerability identifier""" +type VulnerabilityIdentifier { + """External ID of the vulnerability identifier.""" + externalId: String + + """External type of the vulnerability identifier.""" + externalType: String + + """Name of the vulnerability identifier.""" + name: String + + """URL of the vulnerability identifier.""" + url: String +} + +input VulnerabilityIdentifierInput { + """Name of the vulnerability identifier.""" + name: String! + + """URL of the vulnerability identifier.""" + url: String! + + """External type of the vulnerability identifier.""" + externalType: String + + """External ID of the vulnerability identifier.""" + externalId: String +} + +"""Represents an issue link of a vulnerability""" +type VulnerabilityIssueLink { + """GraphQL ID of the vulnerability.""" + id: ID! + + """Issue attached to issue link.""" + issue: Issue! + + """Type of the issue link.""" + linkType: VulnerabilityIssueLinkType! +} + +"""The connection type for VulnerabilityIssueLink.""" +type VulnerabilityIssueLinkConnection { + """A list of edges.""" + edges: [VulnerabilityIssueLinkEdge] + + """A list of nodes.""" + nodes: [VulnerabilityIssueLink] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type VulnerabilityIssueLinkEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: VulnerabilityIssueLink +} + +"""The type of the issue link related to a vulnerability""" +enum VulnerabilityIssueLinkType { + """Has a related issue""" + RELATED + + """Issue is created for the vulnerability""" + CREATED +} + +"""Represents a link related to a vulnerability""" +type VulnerabilityLink { + """Name of the link.""" + name: String + + """URL of the link.""" + url: String! +} + +""" +Represents a vulnerability location. The fields with data will depend on the vulnerability report type +""" +union VulnerabilityLocation = VulnerabilityLocationContainerScanning | VulnerabilityLocationCoverageFuzzing | VulnerabilityLocationDast | VulnerabilityLocationDependencyScanning | VulnerabilityLocationGeneric | VulnerabilityLocationSast | VulnerabilityLocationSecretDetection + +""" +Represents the location of a vulnerability found by a container security scan +""" +type VulnerabilityLocationContainerScanning { + """Dependency containing the vulnerability.""" + dependency: VulnerableDependency + + """Name of the vulnerable container image.""" + image: String + + """Operating system that runs on the vulnerable container image.""" + operatingSystem: String +} + +""" +Represents the location of a vulnerability found by a Coverage Fuzzing scan +""" +type VulnerabilityLocationCoverageFuzzing { + """Blob path to the vulnerable file.""" + blobPath: String + + """Number of the last relevant line in the vulnerable file.""" + endLine: String + + """Path to the vulnerable file.""" + file: String + + """Number of the first relevant line in the vulnerable file.""" + startLine: String + + """Class containing the vulnerability.""" + vulnerableClass: String + + """Method containing the vulnerability.""" + vulnerableMethod: String +} + +"""Represents the location of a vulnerability found by a DAST scan""" +type VulnerabilityLocationDast { + """Domain name of the vulnerable request.""" + hostname: String + + """Query parameter for the URL on which the vulnerability occurred.""" + param: String + + """URL path and query string of the vulnerable request.""" + path: String + + """HTTP method of the vulnerable request.""" + requestMethod: String +} + +""" +Represents the location of a vulnerability found by a dependency security scan +""" +type VulnerabilityLocationDependencyScanning { + """Blob path to the vulnerable file.""" + blobPath: String + + """Dependency containing the vulnerability.""" + dependency: VulnerableDependency + + """Path to the vulnerable file.""" + file: String +} + +"""Represents the location of a vulnerability found by a generic scanner.""" +type VulnerabilityLocationGeneric { + """Free-form description of where the vulnerability is located.""" + description: String +} + +"""Represents the location of a vulnerability found by a SAST scan""" +type VulnerabilityLocationSast { + """Blob path to the vulnerable file.""" + blobPath: String + + """Number of the last relevant line in the vulnerable file.""" + endLine: String + + """Path to the vulnerable file.""" + file: String + + """Number of the first relevant line in the vulnerable file.""" + startLine: String + + """Class containing the vulnerability.""" + vulnerableClass: String + + """Method containing the vulnerability.""" + vulnerableMethod: String +} + +""" +Represents the location of a vulnerability found by a secret detection scan +""" +type VulnerabilityLocationSecretDetection { + """Blob path to the vulnerable file.""" + blobPath: String + + """Number of the last relevant line in the vulnerable file.""" + endLine: String + + """Path to the vulnerable file.""" + file: String + + """Number of the first relevant line in the vulnerable file.""" + startLine: String + + """Class containing the vulnerability.""" + vulnerableClass: String + + """Method containing the vulnerability.""" + vulnerableMethod: String +} + +"""Check permissions for the current user on a vulnerability""" +type VulnerabilityPermissions { + """Indicates the user can perform `admin_vulnerability` on this resource""" + adminVulnerability: Boolean! + + """ + Indicates the user can perform `admin_vulnerability_external_issue_link` on this resource + """ + adminVulnerabilityExternalIssueLink: Boolean! + + """ + Indicates the user can perform `admin_vulnerability_issue_link` on this resource + """ + adminVulnerabilityIssueLink: Boolean! + + """Indicates the user can perform `create_vulnerability` on this resource""" + createVulnerability: Boolean! + + """ + Indicates the user can perform `create_vulnerability_export` on this resource + """ + createVulnerabilityExport: Boolean! + + """ + Indicates the user can perform `create_vulnerability_feedback` on this resource + """ + createVulnerabilityFeedback: Boolean! + + """ + Indicates the user can perform `destroy_vulnerability_feedback` on this resource + """ + destroyVulnerabilityFeedback: Boolean! + + """ + Indicates the user can perform `read_vulnerability_feedback` on this resource + """ + readVulnerabilityFeedback: Boolean! + + """ + Indicates the user can perform `update_vulnerability_feedback` on this resource + """ + updateVulnerabilityFeedback: Boolean! +} + +"""The type of the security scan that found the vulnerability""" +enum VulnerabilityReportType { + """SAST report""" + SAST + + """Dependency Scanning report""" + DEPENDENCY_SCANNING + + """Container Scanning report""" + CONTAINER_SCANNING + + """DAST report""" + DAST + + """Secret Detection report""" + SECRET_DETECTION + + """Coverage Fuzzing report""" + COVERAGE_FUZZING + + """API Fuzzing report""" + API_FUZZING + + """Cluster Image Scanning report""" + CLUSTER_IMAGE_SCANNING + + """Generic report""" + GENERIC +} + +"""Autogenerated input type of VulnerabilityResolve""" +input VulnerabilityResolveInput { + """ID of the vulnerability to be resolved.""" + id: VulnerabilityID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityResolve""" +type VulnerabilityResolvePayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Vulnerability after state change.""" + vulnerability: Vulnerability +} + +"""Autogenerated input type of VulnerabilityRevertToDetected""" +input VulnerabilityRevertToDetectedInput { + """ID of the vulnerability to be reverted.""" + id: VulnerabilityID! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of VulnerabilityRevertToDetected""" +type VulnerabilityRevertToDetectedPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """Errors encountered during execution of the mutation.""" + errors: [String!]! + + """Vulnerability after revert.""" + vulnerability: Vulnerability +} + +"""Represents a vulnerability scanner""" +type VulnerabilityScanner { + """External ID of the vulnerability scanner.""" + externalId: String + + """ID of the scanner.""" + id: ID + + """Name of the vulnerability scanner.""" + name: String + + """Type of the vulnerability report.""" + reportType: VulnerabilityReportType + + """Vendor of the vulnerability scanner.""" + vendor: String +} + +"""The connection type for VulnerabilityScanner.""" +type VulnerabilityScannerConnection { + """A list of edges.""" + edges: [VulnerabilityScannerEdge] + + """A list of nodes.""" + nodes: [VulnerabilityScanner] + + """Information to aid in pagination.""" + pageInfo: PageInfo! +} + +"""An edge in a connection.""" +type VulnerabilityScannerEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: VulnerabilityScanner +} + +input VulnerabilityScannerInput { + """Unique ID that identifies the scanner.""" + id: String! + + """ + Human readable value that identifies the analyzer, not required to be unique. + """ + name: String! + + """Link to more information about the analyzer.""" + url: String! + + """Information about vendor/maintainer of the scanner.""" + vendor: VulnerabilityScannerVendorInput + + """Version of the scanner.""" + version: String! +} + +input VulnerabilityScannerVendorInput { + """Name of the vendor/maintainer.""" + name: String! +} + +"""Represents vulnerability counts by severity""" +type VulnerabilitySeveritiesCount { + """Number of vulnerabilities of CRITICAL severity of the project""" + critical: Int + + """Number of vulnerabilities of HIGH severity of the project""" + high: Int + + """Number of vulnerabilities of INFO severity of the project""" + info: Int + + """Number of vulnerabilities of LOW severity of the project""" + low: Int + + """Number of vulnerabilities of MEDIUM severity of the project""" + medium: Int + + """Number of vulnerabilities of UNKNOWN severity of the project""" + unknown: Int +} + +"""The severity of the vulnerability""" +enum VulnerabilitySeverity { + """Info severity""" + INFO + + """Unknown severity""" + UNKNOWN + + """Low severity""" + LOW + + """Medium severity""" + MEDIUM + + """High severity""" + HIGH + + """Critical severity""" + CRITICAL +} + +"""Vulnerability sort values""" +enum VulnerabilitySort { + """Severity in descending order.""" + severity_desc + + """Severity in ascending order.""" + severity_asc + + """Title in descending order.""" + title_desc @deprecated(reason: "Deprecated due to performance issues. Deprecated in 14.2.") + + """Title in ascending order.""" + title_asc @deprecated(reason: "Deprecated due to performance issues. Deprecated in 14.2.") + + """Detection timestamp in descending order.""" + detected_desc + + """Detection timestamp in ascending order.""" + detected_asc + + """Report Type in descending order.""" + report_type_desc + + """Report Type in ascending order.""" + report_type_asc + + """State in descending order.""" + state_desc + + """State in ascending order.""" + state_asc +} + +"""The state of the vulnerability""" +enum VulnerabilityState { + """Detected vulnerability""" + DETECTED + + """Confirmed vulnerability""" + CONFIRMED + + """Resolved vulnerability""" + RESOLVED + + """Dismissed vulnerability""" + DISMISSED +} + +""" +Represents a vulnerable dependency. Used in vulnerability location data +""" +type VulnerableDependency { + """Package associated with the vulnerable dependency.""" + package: VulnerablePackage + + """Version of the vulnerable dependency.""" + version: String +} + +"""Represents a vulnerable package. Used in vulnerability dependency data""" +type VulnerablePackage { + """Name of the vulnerable package.""" + name: String +} + +"""Represents vulnerability letter grades with associated projects""" +type VulnerableProjectsByGrade { + """Number of projects within this grade.""" + count: Int! + + """Grade based on the highest severity vulnerability present.""" + grade: VulnerabilityGrade! + + """Projects within this grade.""" + projects( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): ProjectConnection! +} + +"""Weight ID wildcard values""" +enum WeightWildcardId { + """No weight is assigned.""" + NONE + + """Weight is assigned.""" + ANY +} + diff --git a/packages/server/graphql/nestedSchema/GitLab/queries/getProfile.graphql b/packages/server/graphql/nestedSchema/GitLab/queries/getProfile.graphql new file mode 100644 index 00000000000..e973d2f8234 --- /dev/null +++ b/packages/server/graphql/nestedSchema/GitLab/queries/getProfile.graphql @@ -0,0 +1,6 @@ +query getProfile { + currentUser { + avatarUrl + name + } +} diff --git a/packages/server/graphql/nestedSchema/nestGitLabEndpoint.ts b/packages/server/graphql/nestedSchema/nestGitLabEndpoint.ts new file mode 100644 index 00000000000..8eeaaf57240 --- /dev/null +++ b/packages/server/graphql/nestedSchema/nestGitLabEndpoint.ts @@ -0,0 +1,130 @@ +import {schema} from '@octokit/graphql-schema' +import {GraphQLObjectType, GraphQLResolveInfo, OperationDefinitionNode, parse, print} from 'graphql' +import fetch from 'node-fetch' +import nestGraphQLEndpoint from 'nest-graphql-endpoint/lib/nestGraphQLEndpoint' +import { + EndpointExecutionResult, + Executor, + NestedSource, + NestGraphQLEndpointParams +} from 'nest-graphql-endpoint/lib/types' + +const defaultExecutor: Executor<{ + accessToken: string + baseUri?: string + headers?: Record +}> = async (document, variables, endpointTimeout, context) => { + const controller = new AbortController() + const {signal} = controller + const {accessToken, baseUri, headers} = context + const timeout = setTimeout(() => { + controller.abort() + }, endpointTimeout) + try { + const result = await fetch(`${baseUri}/api/graphql`, { + signal: signal as any, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${accessToken}`, + Accept: 'application/json', + ...headers + }, + body: JSON.stringify({ + query: print(document), + variables + }) + }) + clearTimeout(timeout) + const resJSON = (await result.json()) as EndpointExecutionResult | {message?: string} + if ('data' in resJSON || 'errors' in resJSON) return resJSON + const message = String(resJSON.message) || JSON.stringify(resJSON) + return { + errors: [ + { + type: 'GitLab Gateway Error', + message + } + ], + data: null + } + } catch (e) { + clearTimeout(timeout) + return { + errors: [ + { + type: 'GitLab is down', + message: String((e as any).message) + } + ], + data: null + } + } +} + +type NestParams = NestGraphQLEndpointParams<{ + accessToken: string + baseUri: string + headers?: Record +}> +type RequiredParams = Pick< + NestParams, + 'parentSchema' | 'parentType' | 'fieldName' | 'resolveEndpointContext' +> + +type OptionalParams = Omit, keyof RequiredParams> +type NestGitLabParams = RequiredParams & OptionalParams + +interface Input { + query: string + endpointContext: Record + info: GraphQLResolveInfo + // only necessary if the query needs them + variables?: TVars + //to reuse a dataloader, pass in your execution context object + batchRef?: Record +} +const nestGitLabEndpoint = (params: NestGitLabParams) => { + const {parentSchema, parentType, fieldName, resolveEndpointContext} = params + const executor = params.executor || defaultExecutor + const prefix = params.prefix || '_extGitLab' + const batchKey = params.batchKey || 'accessToken' + const endpointTimeout = params.endpointTimeout || 8000 + const schemaIDL = params.schemaIDL || schema.idl + const gitlabRequest = async (input: Input) => { + const {query, endpointContext, variables, batchRef, info} = input + const {schema} = info + const gitlabApi = schema.getType(`${prefix}Api`) as GraphQLObjectType + const fields = gitlabApi.getFields() + const wrapperAST = parse(query) + const {definitions} = wrapperAST + const [firstDefinition] = definitions + const {operation} = firstDefinition as OperationDefinitionNode + const resolve = fields[operation].resolve! + const source = { + context: endpointContext, + wrapper: wrapperAST, + wrapperVars: variables + } as NestedSource + const context = batchRef ?? {} + const data = (await resolve(source, {}, context, info)) as TData + const {errors} = source + return {data, errors} + } + + const nestedSchema = nestGraphQLEndpoint({ + parentSchema, + parentType, + fieldName, + resolveEndpointContext, + executor, + prefix, + batchKey, + endpointTimeout, + schemaIDL + }) + + return {schema: nestedSchema, gitlabRequest} +} + +export default nestGitLabEndpoint diff --git a/packages/server/graphql/rootMutation.ts b/packages/server/graphql/rootMutation.ts index c310e110ffb..3afd6be1d57 100644 --- a/packages/server/graphql/rootMutation.ts +++ b/packages/server/graphql/rootMutation.ts @@ -6,7 +6,6 @@ import addAtlassianAuth from './mutations/addAtlassianAuth' import addComment from './mutations/addComment' import addFeatureFlag from './mutations/addFeatureFlag' import addGitHubAuth from './mutations/addGitHubAuth' -import addMattermostAuth from './mutations/addMattermostAuth' import addMissingJiraField from './mutations/addMissingJiraField' import addOrg from './mutations/addOrg' import addPokerTemplate from './mutations/addPokerTemplate' @@ -83,7 +82,6 @@ import removePokerTemplateScaleValue from './mutations/removePokerTemplateScaleV import removeReflection from './mutations/removeReflection' import removeReflectTemplate from './mutations/removeReflectTemplate' import removeReflectTemplatePrompt from './mutations/removeReflectTemplatePrompt' -import removeMattermostAuth from './mutations/removeMattermostAuth' import removeSlackAuth from './mutations/removeSlackAuth' import removeTeamMember from './mutations/removeTeamMember' import renameMeeting from './mutations/renameMeeting' @@ -110,7 +108,6 @@ import startCheckIn from './mutations/startCheckIn' import startDraggingReflection from './mutations/startDraggingReflection' import startRetrospective from './mutations/startRetrospective' import startSprintPoker from './mutations/startSprintPoker' -import toggleTeamDrawer from './mutations/toggleTeamDrawer' import updateAgendaItem from './mutations/updateAgendaItem' import updateCommentContent from './mutations/updateCommentContent' import updateCreditCard from './mutations/updateCreditCard' @@ -135,6 +132,12 @@ import uploadOrgImage from './mutations/uploadOrgImage' import uploadUserImage from './mutations/uploadUserImage' import verifyEmail from './mutations/verifyEmail' import voteForPokerStory from './mutations/voteForPokerStory' +import toggleTeamDrawer from './mutations/toggleTeamDrawer' +import addIntegrationToken from './mutations/addIntegrationToken' +import addIntegrationProvider from './mutations/addIntegrationProvider' +import updateIntegrationProvider from './mutations/updateIntegrationProvider' +import removeIntegrationProvider from './mutations/removeIntegrationProvider' +import removeIntegrationToken from './mutations/removeIntegrationToken' import voteForReflectionGroup from './mutations/voteForReflectionGroup' interface Context extends InternalContext, GQLContext {} @@ -147,7 +150,6 @@ export default new GraphQLObjectType({ addAgendaItem, addAtlassianAuth, addComment, - addMattermostAuth, addPokerTemplate, addPokerTemplateDimension, addPokerTemplateScale, @@ -223,7 +225,6 @@ export default new GraphQLObjectType({ renamePokerTemplateScale, removePokerTemplateScale, removePokerTemplateScaleValue, - removeMattermostAuth, removeReflection, removeSlackAuth, removeTeamMember, @@ -278,6 +279,11 @@ export default new GraphQLObjectType({ setTaskEstimate, toggleTeamDrawer, updateGitHubDimensionField, - createPoll + createPoll, + addIntegrationToken, + addIntegrationProvider, + updateIntegrationProvider, + removeIntegrationProvider, + removeIntegrationToken } as any) }) diff --git a/packages/server/graphql/rootSchema.ts b/packages/server/graphql/rootSchema.ts index 4c7444e4c8d..46756d9283c 100644 --- a/packages/server/graphql/rootSchema.ts +++ b/packages/server/graphql/rootSchema.ts @@ -2,6 +2,8 @@ import {mergeSchemas} from '@graphql-tools/merge' import {GraphQLSchema} from 'graphql' import nestGitHubEndpoint from 'nest-graphql-endpoint/lib/nestGitHubEndpoint' import githubSchema from '../utils/githubSchema.graphql' +import nestGitLabEndpoint from './nestedSchema/nestGitLabEndpoint' +import gitlabSchema from './nestedSchema/GitLab/gitlabSchema.graphql' import mutation from './rootMutation' import query from './rootQuery' import subscription from './rootSubscription' @@ -26,8 +28,24 @@ const {schema: withGitHubSchema, githubRequest} = nestGitHubEndpoint({ schemaIDL: githubSchema }) -const withLinkedGitHubSchema = mergeSchemas({ - schemas: [withGitHubSchema], +const {schema: withGitLabSchema, gitlabRequest} = nestGitLabEndpoint({ + parentSchema: parabolSchema, + parentType: 'GitLabIntegration', + fieldName: 'api', + resolveEndpointContext: ({accessToken, activeProvider}) => { + const context = { + accessToken, + baseUri: activeProvider.serverBaseUri, + headers: {Accept: 'application/json'} + } + return context + }, + prefix: '_xGitLab', + schemaIDL: gitlabSchema +}) + +const withNestedSchema = mergeSchemas({ + schemas: [withGitHubSchema, withGitLabSchema], typeDefs: ` type _xGitHubIssue implements TaskIntegration ` @@ -35,8 +53,15 @@ const withLinkedGitHubSchema = mergeSchemas({ export {githubRequest} export type GitHubRequest = typeof githubRequest -;(withLinkedGitHubSchema as any).githubRequest = githubRequest +;(withNestedSchema as any).githubRequest = githubRequest + +export {gitlabRequest} +export type GitLabRequest = typeof gitlabRequest +;(withNestedSchema as any).gitlabRequest = gitlabRequest + export type RootSchema = GraphQLSchema & { githubRequest: GitHubRequest + gitlabRequest: GitLabRequest } -export default withLinkedGitHubSchema + +export default withNestedSchema diff --git a/packages/server/graphql/types/AddIntegrationProviderInput.ts b/packages/server/graphql/types/AddIntegrationProviderInput.ts new file mode 100644 index 00000000000..600e32d8924 --- /dev/null +++ b/packages/server/graphql/types/AddIntegrationProviderInput.ts @@ -0,0 +1,91 @@ +import { + GraphQLID, + GraphQLList, + GraphQLNonNull, + GraphQLInputObjectType, + GraphQLString +} from 'graphql' +import GraphQLURLType from './GraphQLURLType' +import { + IntegrationProviderScopesEnum, + IntegrationProvidersEnum, + IntegrationProviderTypesEnum +} from './IntegrationProvider' + +export const WebhookProviderMetadataInput = new GraphQLInputObjectType({ + name: 'WebhookProviderMetadataInput', + description: 'Webhook provider metadata', + fields: () => ({ + webhookUrl: { + type: new GraphQLNonNull(GraphQLURLType), + description: 'Webhook URL to be used by the provider' + } + }) +}) + +export const OAuth2ProviderMetadataInput = new GraphQLInputObjectType({ + name: 'OAuth2ProviderMetadataInput', + description: 'OAuth2 provider metadata', + fields: () => ({ + scopes: { + type: new GraphQLList(new GraphQLNonNull(GraphQLString)), + description: 'A list of scope strings that should be requested from the provider' + }, + serverBaseUrl: { + type: new GraphQLNonNull(GraphQLURLType), + description: 'The base URL used to access the provider' + }, + clientId: { + type: new GraphQLNonNull(GraphQLString), + description: 'The client id to give to the provider' + }, + clientSecret: { + type: new GraphQLNonNull(GraphQLString), + description: 'The client id to give to the provider' + } + }) +}) + +const AddIntegrationProviderInput = new GraphQLInputObjectType({ + name: 'AddIntegrationProviderInput', + description: 'An Integration Provider configuration', + fields: () => ({ + orgId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The org that the access token is attached to' + }, + teamId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The team that the token is linked to' + }, + provider: { + type: IntegrationProvidersEnum, + description: 'The service this provider is associated with' + }, + type: { + type: IntegrationProviderTypesEnum, + description: 'The kind of token used by this provider' + }, + scope: { + type: IntegrationProviderScopesEnum, + description: + 'The scope this provider configuration was created at (globally, org-wide, or by the team)' + }, + name: { + type: new GraphQLNonNull(GraphQLString), + description: 'The name of the provider, suitable for display on a user interface' + }, + webhookProviderMetadataInput: { + type: WebhookProviderMetadataInput, + description: + 'Webhook provider metadata, has to be non-null if token type is webhook, refactor once we get https://github.com/graphql/graphql-spec/pull/825' + }, + oAuth2ProviderMetadataInput: { + type: OAuth2ProviderMetadataInput, + description: + 'OAuth2 provider metadata, has to be non-null if token type is OAuth2, refactor once we get https://github.com/graphql/graphql-spec/pull/825' + } + }) +}) + +export default AddIntegrationProviderInput diff --git a/packages/server/graphql/types/AddIntegrationProviderPayload.ts b/packages/server/graphql/types/AddIntegrationProviderPayload.ts new file mode 100644 index 00000000000..d77ea77de50 --- /dev/null +++ b/packages/server/graphql/types/AddIntegrationProviderPayload.ts @@ -0,0 +1,34 @@ +import {GraphQLNonNull, GraphQLObjectType} from 'graphql' +import {GQLContext} from '../graphql' +import makeMutationPayload from './makeMutationPayload' +import TeamMember from './TeamMember' +import User from './User' +import toTeamMemberId from '../../../client/utils/relay/toTeamMemberId' + +export const AddIntegrationProviderSuccess = new GraphQLObjectType({ + name: 'AddIntegrationProviderSuccess', + fields: () => ({ + teamMember: { + type: new GraphQLNonNull(TeamMember), + description: 'The team member with the updated Integration Provider', + resolve: ({teamId, userId}, _args, {dataLoader}) => { + const teamMemberId = toTeamMemberId(teamId, userId) + return dataLoader.get('teamMembers').load(teamMemberId) + } + }, + user: { + type: new GraphQLNonNull(User), + description: 'The user who updated Integration Provider object', + resolve: async ({userId}, _args, {dataLoader}) => { + return dataLoader.get('users').load(userId) + } + } + }) +}) + +const AddIntegrationProviderPayload = makeMutationPayload( + 'AddIntegrationProviderPayload', + AddIntegrationProviderSuccess +) + +export default AddIntegrationProviderPayload diff --git a/packages/server/graphql/types/AddIntegrationTokenInput.ts b/packages/server/graphql/types/AddIntegrationTokenInput.ts new file mode 100644 index 00000000000..2e8f4cf7575 --- /dev/null +++ b/packages/server/graphql/types/AddIntegrationTokenInput.ts @@ -0,0 +1,62 @@ +import {GraphQLID, GraphQLNonNull, GraphQLInputObjectType} from 'graphql' +import GraphQLURLType from './GraphQLURLType' + +export type IntegrationTokenInputT = { + providerId: string + oauthCodeOrPat?: string + teamId: string + redirectUri?: string +} + +export type IntegrationProviderTokenInputT = Partial< + Omit +> + +const descriptions = { + oauthCodeOrPat: 'The OAuth2 code to resolve to an access token, or the personal access token', + teamId: 'The ID of the Parabol team to associate the token with', + redirectUri: 'The redirect uri used to resolve to an OAuth2 access token' +} + +// TODO: use union type instead + +const IntegrationTokenInput = new GraphQLInputObjectType({ + name: 'IntegrationTokenInput', + description: 'An Integration Provider configuration', + fields: () => ({ + providerId: { + type: new GraphQLNonNull(GraphQLID), + description: + 'The Integration Provider id to associate with the token, leave null if calling AddIntegrationProvider' + }, + oauthCodeOrPat: { + type: GraphQLID, + description: descriptions.oauthCodeOrPat + }, + teamId: { + type: new GraphQLNonNull(GraphQLID), + description: descriptions.teamId + }, + redirectUri: { + type: GraphQLURLType, + description: descriptions.redirectUri + } + }) +}) + +export const IntegrationProviderTokenInput = new GraphQLInputObjectType({ + name: 'IntegrationTokenInput', + description: 'An Integration Provider configuration', + fields: () => ({ + oauthCodeOrPat: { + type: GraphQLID, + description: descriptions.oauthCodeOrPat + }, + redirectUri: { + type: GraphQLURLType, + description: descriptions.redirectUri + } + }) +}) + +export default IntegrationTokenInput diff --git a/packages/server/graphql/types/AddIntegrationTokenPayload.ts b/packages/server/graphql/types/AddIntegrationTokenPayload.ts new file mode 100644 index 00000000000..16c5e5f9b18 --- /dev/null +++ b/packages/server/graphql/types/AddIntegrationTokenPayload.ts @@ -0,0 +1,34 @@ +import {GraphQLObjectType} from 'graphql' +import {GQLContext} from '../graphql' +import makeMutationPayload from './makeMutationPayload' +import TeamMember from './TeamMember' +import User from './User' +import toTeamMemberId from '../../../client/utils/relay/toTeamMemberId' + +export const AddIntegrationTokenSuccess = new GraphQLObjectType({ + name: 'AddIntegrationTokenSuccess', + fields: () => ({ + teamMember: { + type: TeamMember, + description: 'The team member with the updated auth', + resolve: ({teamId, userId}, _args, {dataLoader}) => { + const teamMemberId = toTeamMemberId(teamId, userId) + return dataLoader.get('teamMembers').load(teamMemberId) + } + }, + user: { + type: User, + description: 'The user who updated IntegrationToken object', + resolve: async ({userId}, _args, {dataLoader}) => { + return dataLoader.get('users').load(userId) + } + } + }) +}) + +const AddIntegrationTokenPayload = makeMutationPayload( + 'AddIntegrationTokenPayload', + AddIntegrationTokenSuccess +) + +export default AddIntegrationTokenPayload diff --git a/packages/server/graphql/types/AddMattermostAuthPayload.ts b/packages/server/graphql/types/AddMattermostAuthPayload.ts deleted file mode 100644 index 4854444176e..00000000000 --- a/packages/server/graphql/types/AddMattermostAuthPayload.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {GraphQLNonNull, GraphQLObjectType} from 'graphql' -import MattermostIntegration from './MattermostIntegration' -import makeMutationPayload from './makeMutationPayload' -import User from './User' -import {GQLContext} from '../graphql' - -export const AddMattermostAuthSuccess = new GraphQLObjectType({ - name: 'AddMattermostAuthSuccess', - fields: () => ({ - mattermostIntegration: { - type: new GraphQLNonNull(MattermostIntegration), - description: 'The newly created mattermost integration object', - resolve: async ({userId, teamId}, _args, {dataLoader}: GQLContext) => { - return dataLoader.get('mattermostAuthByUserIdTeamId').load({userId, teamId}) - } - }, - user: { - type: new GraphQLNonNull(User), - description: 'The user who updated mattermost integration object', - resolve: async ({userId}, _args, {dataLoader}) => { - return dataLoader.get('users').load(userId) - } - } - }) -}) - -const AddMattermostAuthPayload = makeMutationPayload( - 'AddMattermostAuthPayload', - AddMattermostAuthSuccess -) - -export default AddMattermostAuthPayload diff --git a/packages/server/graphql/types/GitLabIntegration.ts b/packages/server/graphql/types/GitLabIntegration.ts new file mode 100644 index 00000000000..e08d118a4b9 --- /dev/null +++ b/packages/server/graphql/types/GitLabIntegration.ts @@ -0,0 +1,92 @@ +import { + GraphQLBoolean, + GraphQLID, + GraphQLList, + GraphQLNonNull, + GraphQLObjectType, + GraphQLString +} from 'graphql' +import GitLabIntegrationId from 'parabol-client/shared/gqlIds/GitLabIntegrationId' +import {getUserId} from '../../utils/authorization' +import {GQLContext} from '../graphql' +import GraphQLISO8601Type from './GraphQLISO8601Type' +import IntegrationProvider from './IntegrationProvider' + +const OAuth2TokenMetadata = new GraphQLObjectType({ + name: 'OAuth2TokenMetadata', + description: 'OAuth2 token metadata for an Integration Provider', + fields: () => ({ + accessToken: { + type: GraphQLString, + description: 'The access token' + }, + refreshToken: { + type: GraphQLString, + description: 'The refresh token' + }, + scopes: { + type: new GraphQLNonNull(new GraphQLList(GraphQLString)), + description: 'The scopes this token is valid for' + } + }) +}) + +const GitLabIntegration = new GraphQLObjectType({ + name: 'GitLabIntegration', + description: 'Gitlab integration data for a given user', + fields: () => ({ + id: { + type: new GraphQLNonNull(GraphQLID), + description: 'composite key', + resolve: ({teamId, userId}) => GitLabIntegrationId.join(teamId, userId) + }, + updatedAt: { + type: new GraphQLNonNull(GraphQLISO8601Type), + description: 'The timestamp the token was updated at' + }, + createdAt: { + type: new GraphQLNonNull(GraphQLISO8601Type), + description: 'The timestamp the provider was created' + }, + teamId: { + type: new GraphQLNonNull(GraphQLID), + description: '*The team that the token is linked to' + }, + userId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The user that the access token is attached to' + }, + isActive: { + description: 'true if an access token exists, else false', + type: new GraphQLNonNull(GraphQLBoolean), + resolve: ({tokenMetadata}) => !!tokenMetadata?.accessToken + }, + tokenMetadata: { + type: OAuth2TokenMetadata, + description: 'The active Integration Provider details to be used with token', + resolve: ({userId, tokenMetadata}, _args: unknown, {authToken}) => { + const viewerId = getUserId(authToken) + return viewerId === userId ? tokenMetadata : null + } + }, + activeProvider: { + description: 'The active Integration Provider details to be used with token', + type: IntegrationProvider + }, + availableProviders: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(IntegrationProvider))), + description: 'A list of available Integration Providers', + resolve: async ({teamId}, _args: unknown, {dataLoader}) => { + const orgId = (await dataLoader.get('teams').load(teamId)).orgId + const providers = await dataLoader.get('integrationProvidersByType').load({ + provider: 'gitlab', + teamId, + orgId + }) + return providers + } + } + }) +}) + +export default GitLabIntegration diff --git a/packages/server/graphql/types/IntegrationProvider.ts b/packages/server/graphql/types/IntegrationProvider.ts new file mode 100644 index 00000000000..face219ac32 --- /dev/null +++ b/packages/server/graphql/types/IntegrationProvider.ts @@ -0,0 +1,151 @@ +import { + GraphQLBoolean, + GraphQLEnumType, + GraphQLID, + GraphQLList, + GraphQLNonNull, + GraphQLObjectType, + GraphQLString, + GraphQLUnionType +} from 'graphql' +import GraphQLURLType from './GraphQLURLType' +import {GQLContext} from '../graphql' +import GraphQLISO8601Type from './GraphQLISO8601Type' +import IntegrationProviderId from 'parabol-client/shared/gqlIds/IntegrationProviderId' +import { + IntegrationProvidersEnum as DBIntegrationProvidersEnum, + IntegrationProviderScopesEnum as DBIntegrationProviderScopesEnum, + IntegrationProviderTypesEnum as DBIntegrationProviderTypesEnum, + isOAuth2ProviderMetadata, + isWebHookProviderMetadata +} from '../../postgres/types/IntegrationProvider' + +export const IntegrationProvidersEnum = new GraphQLEnumType({ + name: 'IntegrationProvidersEnum', + description: 'The type of Integration Provider service', + values: { + gitlab: {}, + mattermost: {} + } as {[P in DBIntegrationProvidersEnum]: any} +}) + +export const IntegrationProviderTypesEnum = new GraphQLEnumType({ + name: 'IntegrationProviderTypesEnum', + description: 'The kind of token provided by the service', + values: { + oauth2: {}, + pat: {}, + webhook: {} + } as {[P in DBIntegrationProviderTypesEnum]: any} +}) + +export const IntegrationProviderScopesEnum = new GraphQLEnumType({ + name: 'IntegrationProviderScopesEnum', + description: 'The scope this provider was created on (globally, org-wide, or on the team)', + values: { + global: {}, + org: {}, + team: {} + } as {[P in DBIntegrationProviderScopesEnum]: any} +}) + +const OAuth2ProviderMetadata = new GraphQLObjectType({ + name: 'OAuth2ProviderMetadata', + description: 'OAuth2 metadata for an Integration Provider, excluding the client secret', + fields: () => ({ + serverBaseUrl: { + type: new GraphQLNonNull(GraphQLURLType), + description: 'The base URL of the OAuth2 server' + }, + clientId: { + type: new GraphQLNonNull(GraphQLString), + description: 'The OAuth2 client id' + }, + scopes: { + type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(GraphQLString))), + description: 'The OAuth2 scopes' + } + }) +}) + +const WebHookProviderMetadata = new GraphQLObjectType({ + name: 'WebHookProviderMetadata', + description: 'WebHook metadata for an Integration Provider', + fields: () => ({ + webhookUrl: { + type: new GraphQLNonNull(GraphQLURLType), + description: 'The webhook URL' + } + }) +}) + +const ProviderMetadata = new GraphQLUnionType({ + name: 'ProviderMetadata', + types: [OAuth2ProviderMetadata, WebHookProviderMetadata], + resolveType(value) { + if (isOAuth2ProviderMetadata(value)) { + return OAuth2ProviderMetadata + } + if (isWebHookProviderMetadata(value)) { + return WebHookProviderMetadata + } + + return null + } +}) + +const IntegrationProvider = new GraphQLObjectType({ + name: 'IntegrationProvider', + description: 'An authentication provider configuration', + fields: () => ({ + id: { + type: new GraphQLNonNull(GraphQLID), + description: "The provider's unique identifier", + resolve: ({id}) => IntegrationProviderId.join(id) + }, + orgId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The org that the access token is attached to' + }, + teamId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The team that the token is linked to' + }, + createdAt: { + type: new GraphQLNonNull(GraphQLISO8601Type), + description: 'The timestamp the provider was created' + }, + updatedAt: { + type: new GraphQLNonNull(GraphQLISO8601Type), + description: 'The timestamp the token was updated at' + }, + provider: { + description: 'The service this provider is associated with', + type: new GraphQLNonNull(IntegrationProvidersEnum) + }, + type: { + description: 'The kind of token used by this provider', + type: new GraphQLNonNull(IntegrationProviderTypesEnum) + }, + scope: { + description: + 'The scope this provider configuration was created at (globally, org-wide, or by the team)', + type: new GraphQLNonNull(IntegrationProviderScopesEnum) + }, + isActive: { + type: new GraphQLNonNull(GraphQLBoolean), + description: 'true if the provider configuration should be used' + }, + name: { + type: new GraphQLNonNull(GraphQLString), + description: 'The name of the provider, suitable for display on a user interface' + }, + providerMetadata: { + type: new GraphQLNonNull(ProviderMetadata), + description: + 'The metadata associated with the provider, depending on the provider token type (OAuth2 or WebHook), different metadata will be provided' + } + }) +}) + +export default IntegrationProvider diff --git a/packages/server/graphql/types/MattermostIntegration.ts b/packages/server/graphql/types/MattermostIntegration.ts index c6e0ca95bff..54580f5a68c 100644 --- a/packages/server/graphql/types/MattermostIntegration.ts +++ b/packages/server/graphql/types/MattermostIntegration.ts @@ -1,7 +1,7 @@ import {GraphQLBoolean, GraphQLID, GraphQLNonNull, GraphQLObjectType} from 'graphql' import GraphQLISO8601Type from './GraphQLISO8601Type' import {GQLContext} from '../graphql' -import GraphQLURLType from './GraphQLURLType' +import IntegrationProvider from './IntegrationProvider' const MattermostIntegration = new GraphQLObjectType({ name: 'MattermostIntegration', @@ -9,11 +9,12 @@ const MattermostIntegration = new GraphQLObjectType({ fields: () => ({ isActive: { description: 'true if the auth is updated & ready to use for all features, else false', - type: new GraphQLNonNull(GraphQLBoolean) + type: new GraphQLNonNull(GraphQLBoolean), + resolve: ({activeProvider}) => !!activeProvider }, - webhookUrl: { - type: new GraphQLNonNull(GraphQLURLType), - description: 'the Mattermost server to integrate against' + activeProvider: { + description: 'The active Integration Provider details to be used to access Mattermost', + type: IntegrationProvider }, teamId: { type: new GraphQLNonNull(GraphQLID), diff --git a/packages/server/graphql/types/RemoveIntegrationProviderPayload.ts b/packages/server/graphql/types/RemoveIntegrationProviderPayload.ts new file mode 100644 index 00000000000..91974096c3c --- /dev/null +++ b/packages/server/graphql/types/RemoveIntegrationProviderPayload.ts @@ -0,0 +1,34 @@ +import {GraphQLNonNull, GraphQLObjectType} from 'graphql' +import {GQLContext} from '../graphql' +import makeMutationPayload from './makeMutationPayload' +import TeamMember from './TeamMember' +import User from './User' +import toTeamMemberId from '../../../client/utils/relay/toTeamMemberId' + +export const RemoveIntegrationProviderSuccess = new GraphQLObjectType({ + name: 'RemoveIntegrationProviderSuccess', + fields: () => ({ + teamMember: { + type: new GraphQLNonNull(TeamMember), + description: 'The team member with the updated auth', + resolve: ({teamId, userId}, _args, {dataLoader}) => { + const teamMemberId = toTeamMemberId(teamId, userId) + return dataLoader.get('teamMembers').load(teamMemberId) + } + }, + user: { + type: new GraphQLNonNull(User), + description: 'The user who updated IntegrationToken object', + resolve: async ({userId}, _args, {dataLoader}) => { + return dataLoader.get('users').load(userId) + } + } + }) +}) + +const RemoveIntegrationProviderPayload = makeMutationPayload( + 'RemoveIntegrationProviderPayload', + RemoveIntegrationProviderSuccess +) + +export default RemoveIntegrationProviderPayload diff --git a/packages/server/graphql/types/RemoveIntegrationTokenPayload.ts b/packages/server/graphql/types/RemoveIntegrationTokenPayload.ts new file mode 100644 index 00000000000..1711cbb052d --- /dev/null +++ b/packages/server/graphql/types/RemoveIntegrationTokenPayload.ts @@ -0,0 +1,34 @@ +import {GraphQLNonNull, GraphQLObjectType} from 'graphql' +import {GQLContext} from '../graphql' +import makeMutationPayload from './makeMutationPayload' +import TeamMember from './TeamMember' +import User from './User' +import toTeamMemberId from '../../../client/utils/relay/toTeamMemberId' + +export const RemoveIntegrationTokenSuccess = new GraphQLObjectType({ + name: 'RemoveIntegrationTokenSuccess', + fields: () => ({ + teamMember: { + type: new GraphQLNonNull(TeamMember), + description: 'The team member with the updated auth', + resolve: ({teamId, userId}, _args, {dataLoader}) => { + const teamMemberId = toTeamMemberId(teamId, userId) + return dataLoader.get('teamMembers').load(teamMemberId) + } + }, + user: { + type: new GraphQLNonNull(User), + description: 'The user who updated IntegrationToken object', + resolve: async ({userId}, _args, {dataLoader}) => { + return dataLoader.get('users').load(userId) + } + } + }) +}) + +const RemoveIntegrationTokenPayload = makeMutationPayload( + 'RemoveIntegrationTokenPayload', + RemoveIntegrationTokenSuccess +) + +export default RemoveIntegrationTokenPayload diff --git a/packages/server/graphql/types/TeamMemberIntegrations.ts b/packages/server/graphql/types/TeamMemberIntegrations.ts index bcc6a02ee25..f245c7114d7 100644 --- a/packages/server/graphql/types/TeamMemberIntegrations.ts +++ b/packages/server/graphql/types/TeamMemberIntegrations.ts @@ -4,6 +4,7 @@ import {isTeamMember} from '../../utils/authorization' import {GQLContext} from '../graphql' import AtlassianIntegration from './AtlassianIntegration' import GitHubIntegration from './GitHubIntegration' +import GitLabIntegration from './GitLabIntegration' import MattermostIntegration from './MattermostIntegration' import SlackIntegration from './SlackIntegration' @@ -32,12 +33,35 @@ const TeamMemberIntegrations = new GraphQLObjectType({ return dataLoader.get('githubAuth').load({teamId, userId}) } }, + gitlab: { + type: GitLabIntegration, + description: 'All things associated with a GitLab integration for a team member', + resolve: async ({teamId, userId}, _args: unknown, {authToken, dataLoader}) => { + if (!isTeamMember(authToken, teamId)) return null + const integrationToken = await dataLoader + .get('integrationTokenWithProvider') + .load({provider: 'gitlab', teamId, userId}) + if (!integrationToken) return {teamId} + // resolving activeProvider to include in source for GitLab api stitch + const integrationProvider = await dataLoader + .get('integrationProviders') + .load(integrationToken.providerId) + return {...integrationToken, activeProvider: integrationProvider} + } + }, mattermost: { type: MattermostIntegration, description: 'All things associated with a Mattermost integration for a team member', resolve: async ({teamId, userId}, _args: unknown, {authToken, dataLoader}) => { if (!isTeamMember(authToken, teamId)) return null - return dataLoader.get('mattermostAuthByUserIdTeamId').load({userId, teamId}) + const integrationToken = await dataLoader + .get('integrationTokenWithProvider') + .load({provider: 'mattermost', teamId, userId}) + if (!integrationToken) return {teamId} + const integrationProvider = await dataLoader + .get('integrationProviders') + .load(integrationToken.providerId) + return {...integrationToken, activeProvider: integrationProvider} } }, slack: { diff --git a/packages/server/graphql/types/TeamSubscriptionPayload.ts b/packages/server/graphql/types/TeamSubscriptionPayload.ts index b316ad218f6..48aede009ba 100644 --- a/packages/server/graphql/types/TeamSubscriptionPayload.ts +++ b/packages/server/graphql/types/TeamSubscriptionPayload.ts @@ -3,7 +3,7 @@ import AcceptTeamInvitationPayload from './AcceptTeamInvitationPayload' import AddAgendaItemPayload from './AddAgendaItemPayload' import AddAtlassianAuthPayload from './AddAtlassianAuthPayload' import AddGitHubAuthPayload from './AddGitHubAuthPayload' -import {AddMattermostAuthSuccess} from './AddMattermostAuthPayload' +import {AddIntegrationProviderSuccess} from './AddIntegrationProviderPayload' import AddPokerTemplateDimensionPayload from './AddPokerTemplateDimensionPayload' import AddPokerTemplatePayload from './AddPokerTemplatePayload' import AddPokerTemplateScalePayload from './AddPokerTemplateScalePayload' @@ -39,7 +39,6 @@ import RemovePokerTemplateScalePayload from './RemovePokerTemplateScalePayload' import RemovePokerTemplateScaleValuePayload from './RemovePokerTemplateScaleValuePayload' import RemoveReflectTemplatePayload from './RemoveReflectTemplatePayload' import RemoveReflectTemplatePromptPayload from './RemoveReflectTemplatePromptPayload' -import {RemoveMattermostAuthSuccess} from './RemoveMattermostAuthPayload' import RemoveSlackAuthPayload from './RemoveSlackAuthPayload' import RemoveTeamMemberPayload from './RemoveTeamMemberPayload' import {RenameMeetingSuccess} from './RenameMeetingPayload' @@ -72,7 +71,7 @@ const types = [ AddAgendaItemPayload, AddAtlassianAuthPayload, AddGitHubAuthPayload, - AddMattermostAuthSuccess, + AddIntegrationProviderSuccess, AddSlackAuthPayload, AddTeamPayload, ArchiveTeamPayload, @@ -111,7 +110,6 @@ const types = [ ReflectTemplatePromptUpdateGroupColorPayload, RemoveAtlassianAuthPayload, RemoveGitHubAuthPayload, - RemoveMattermostAuthSuccess, RemoveSlackAuthPayload, RemoveReflectTemplatePayload, RemovePokerTemplatePayload, diff --git a/packages/server/graphql/types/UpdateIntegrationProviderInput.ts b/packages/server/graphql/types/UpdateIntegrationProviderInput.ts new file mode 100644 index 00000000000..5babb3a5bac --- /dev/null +++ b/packages/server/graphql/types/UpdateIntegrationProviderInput.ts @@ -0,0 +1,59 @@ +import {GraphQLID, GraphQLNonNull, GraphQLInputObjectType, GraphQLString} from 'graphql' +import { + OAuth2ProviderMetadataInput, + WebhookProviderMetadataInput +} from './AddIntegrationProviderInput' +import { + IntegrationProviderScopesEnum, + IntegrationProvidersEnum, + IntegrationProviderTypesEnum +} from './IntegrationProvider' + +const UpdateIntegrationProviderInput = new GraphQLInputObjectType({ + name: 'UpdateIntegrationProviderInput', + description: 'An Integration Provider configuration', + fields: () => ({ + id: { + type: new GraphQLNonNull(GraphQLID), + description: 'The the id of the Integration Provider to update' + }, + provider: { + type: IntegrationProvidersEnum, + description: 'The service this provider is associated with' + }, + type: { + type: IntegrationProviderTypesEnum, + description: 'The kind of token used by this provider' + }, + + scope: { + type: IntegrationProviderScopesEnum, + description: + 'The scope this provider configuration was created at (globally, org-wide, or by the team)' + }, + name: { + type: new GraphQLNonNull(GraphQLString), + description: 'The name of the provider, suitable for display on a user interface' + }, + orgId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The org that the access token is attached to' + }, + teamId: { + type: new GraphQLNonNull(GraphQLID), + description: 'The team that the token is linked to' + }, + webhookProviderMetadataInput: { + type: WebhookProviderMetadataInput, + description: + 'Webhook provider metadata, has to be non-null if token type is webhook, refactor once we get https://github.com/graphql/graphql-spec/pull/825' + }, + oAuth2ProviderMetadataInput: { + type: OAuth2ProviderMetadataInput, + description: + 'OAuth2 provider metadata, has to be non-null if token type is OAuth2, refactor once we get https://github.com/graphql/graphql-spec/pull/825' + } + }) +}) + +export default UpdateIntegrationProviderInput diff --git a/packages/server/graphql/types/UpdateIntegrationProviderPayload.ts b/packages/server/graphql/types/UpdateIntegrationProviderPayload.ts new file mode 100644 index 00000000000..de61a123de6 --- /dev/null +++ b/packages/server/graphql/types/UpdateIntegrationProviderPayload.ts @@ -0,0 +1,34 @@ +import {GraphQLNonNull, GraphQLObjectType} from 'graphql' +import {GQLContext} from '../graphql' +import makeMutationPayload from './makeMutationPayload' +import TeamMember from './TeamMember' +import User from './User' +import toTeamMemberId from '../../../client/utils/relay/toTeamMemberId' + +export const UpdateIntegrationProviderSuccess = new GraphQLObjectType({ + name: 'UpdateIntegrationProviderSuccess', + fields: () => ({ + teamMember: { + type: new GraphQLNonNull(TeamMember), + description: 'The team member with the updated auth', + resolve: ({teamId, userId}, _args, {dataLoader}) => { + const teamMemberId = toTeamMemberId(teamId, userId) + return dataLoader.get('teamMembers').load(teamMemberId) + } + }, + user: { + type: new GraphQLNonNull(User), + description: 'The user who updated IntegrationToken object', + resolve: async ({userId}, _args, {dataLoader}) => { + return dataLoader.get('users').load(userId) + } + } + }) +}) + +const UpdateIntegrationProviderPayload = makeMutationPayload( + 'UpdateIntegrationProviderPayload', + UpdateIntegrationProviderSuccess +) + +export default UpdateIntegrationProviderPayload diff --git a/packages/server/graphql/types/UserFeatureFlags.ts b/packages/server/graphql/types/UserFeatureFlags.ts index e8bb007b231..ebb7f1a68c7 100644 --- a/packages/server/graphql/types/UserFeatureFlags.ts +++ b/packages/server/graphql/types/UserFeatureFlags.ts @@ -14,6 +14,11 @@ const UserFeatureFlags = new GraphQLObjectType({ type: new GraphQLNonNull(GraphQLBoolean), description: 'true if standups is allowed', resolve: ({standups}) => !!standups + }, + gitlab: { + type: new GraphQLNonNull(GraphQLBoolean), + description: 'true if gitlab is allowed', + resolve: ({gitlab}) => !!gitlab } }) }) diff --git a/packages/server/graphql/types/UserFlagEnum.ts b/packages/server/graphql/types/UserFlagEnum.ts index 808cd47ddad..71f2930c39c 100644 --- a/packages/server/graphql/types/UserFlagEnum.ts +++ b/packages/server/graphql/types/UserFlagEnum.ts @@ -1,13 +1,14 @@ import {GraphQLEnumType} from 'graphql' -export type UserFeatureFlagEnum = 'spotlight' | 'standups' +export type UserFeatureFlagEnum = 'spotlight' | 'standups' | 'gitlab' const UserFlagEnum = new GraphQLEnumType({ name: 'UserFlagEnum', description: 'A flag to give an individual user super powers', values: { spotlight: {}, - standups: {} + standups: {}, + gitlab: {} } }) diff --git a/packages/server/integrations/IntegrationAuthorizationManager.ts b/packages/server/integrations/IntegrationAuthorizationManager.ts new file mode 100644 index 00000000000..7e351e7f52d --- /dev/null +++ b/packages/server/integrations/IntegrationAuthorizationManager.ts @@ -0,0 +1,47 @@ +import {OAuth2IntegrationTokenMetadata} from '../postgres/types/IntegrationToken' +import {IntegrationProvider, IntegrationProvidersEnum} from '../postgres/types/IntegrationProvider' +import {GitLabAuthorizationManager} from './gitlab/GitLabAuthorizationManager' + +export interface OAuth2AuthorizationParams { + grant_type: 'authorization_code' + code: string + redirect_uri: string +} + +export interface OAuth2RefreshAuthorizationParams { + grant_type: 'refresh_token' + refresh_token: string +} + +export interface OAuth2IntegrationAuthorizationManager { + provider: IntegrationProvider + authorize(code: string, redirectUri: string): Promise + refresh(refreshToken: string): Promise +} + +export const isOAuth2AuthorizationManager = ( + authorizationManager: IntegrationAuthorizationManager +): authorizationManager is OAuth2IntegrationAuthorizationManager => + authorizationManager.provider.type === 'oauth2' + +export type IntegrationAuthorizationManager = OAuth2IntegrationAuthorizationManager + +/** + * Represents all the integration providers that require authorization. + */ +type AuthRequiredIntegrationProviderTypes = Exclude +export const allAuthRequiredIntegrationProviderTypes: IntegrationProvidersEnum[] = ['gitlab'] + +const authorizationManagerLookup: { + [K in AuthRequiredIntegrationProviderTypes]: new ( + ...args: any[] + ) => IntegrationAuthorizationManager +} = { + gitlab: GitLabAuthorizationManager +} + +export const createAuthorizationManager = async ( + integrationProvider: IntegrationProvider +) => { + return new authorizationManagerLookup[integrationProvider.provider](integrationProvider) as T +} diff --git a/packages/server/integrations/IntegrationServerManager.ts b/packages/server/integrations/IntegrationServerManager.ts new file mode 100644 index 00000000000..4ac6f33d47c --- /dev/null +++ b/packages/server/integrations/IntegrationServerManager.ts @@ -0,0 +1,59 @@ +import {GraphQLResolveInfo} from 'graphql' +import {IntegrationProvider, IntegrationProvidersEnum} from '../postgres/types/IntegrationProvider' +import GitLabServerManager from './gitlab/GitLabServerManager' +import MattermostServerManager from '../utils/MattermostServerManager' + +//TODO: Fix any after aligning mattermost the the proper interface +const integrationProviderClassMap: { + [K in IntegrationProvidersEnum]: new (...args: any[]) => IntegrationServerManager | any +} = { + gitlab: GitLabServerManager, + mattermost: MattermostServerManager +} + +export const createIntegrationServerManager = async ( + integrationProvider: IntegrationProvider, + accessToken: string +) => { + return new integrationProviderClassMap[integrationProvider.provider]( + integrationProvider, + accessToken + ) as T +} + +export interface WebHookIntegrationServerManager { + provider: IntegrationProvider +} + +export const isWebHookIntegrationServerManager = ( + integrationServerManager: IntegrationServerManager +): integrationServerManager is WebHookIntegrationServerManager => + integrationServerManager.provider.type === 'webhook' + +export interface OAuth2IntegrationServerManager { + provider: IntegrationProvider + accessToken: string + + /** + * Generic method to test if token is valid + * @param info GraphQL resolver info + * @param context GraphQL resolver context + * @returns promise of boolean result and Error, if error occured + */ + isTokenValid( + info: GraphQLResolveInfo, + context: Record + ): Promise<[boolean, Error | null]> +} + +export const isOAuth2IntegrationServerManager = ( + integrationServerManager: IntegrationServerManager +): integrationServerManager is OAuth2IntegrationServerManager => + integrationServerManager.provider.type === 'oauth2' + +/** + * Union type reperesenting all integration server managers + */ +export type IntegrationServerManager = + | WebHookIntegrationServerManager + | OAuth2IntegrationServerManager diff --git a/packages/server/integrations/gitlab/GitLabAuthorizationManager.ts b/packages/server/integrations/gitlab/GitLabAuthorizationManager.ts new file mode 100644 index 00000000000..959a67dd2de --- /dev/null +++ b/packages/server/integrations/gitlab/GitLabAuthorizationManager.ts @@ -0,0 +1,51 @@ +import { + OAuth2IntegrationAuthorizationManager, + OAuth2AuthorizationParams, + OAuth2RefreshAuthorizationParams +} from '../IntegrationAuthorizationManager' +import { + IntegrationProvider, + isOAuth2ProviderMetadata +} from '../../postgres/types/IntegrationProvider' +import {authorizeOAuth2} from '../helpers/authorizeOAuth2' + +export class GitLabAuthorizationManager implements OAuth2IntegrationAuthorizationManager { + provider: IntegrationProvider + + constructor(provider: IntegrationProvider) { + this.provider = provider + } + + async authorize(code: string, redirectUri: string) { + return this.fetchToken({ + grant_type: 'authorization_code', + code, + redirect_uri: redirectUri + }) + } + + async refresh(refreshToken: string) { + return this.fetchToken({ + grant_type: 'refresh_token', + refresh_token: refreshToken + }) + } + + private async fetchToken( + partialAuthParams: OAuth2AuthorizationParams | OAuth2RefreshAuthorizationParams + ) { + const {providerMetadata} = this.provider + if (!isOAuth2ProviderMetadata(providerMetadata)) { + throw Error('Cannot authorize GitLab with non OAuth2 metadata!') + } + const {clientId, clientSecret, serverBaseUrl} = providerMetadata + const authUrl = `${serverBaseUrl}/oauth/token` + const queryParams = { + client_id: clientId, + client_secret: clientSecret, + ...partialAuthParams + } + + return authorizeOAuth2({authUrl, queryParams}) + } +} diff --git a/packages/server/integrations/gitlab/GitLabServerManager.ts b/packages/server/integrations/gitlab/GitLabServerManager.ts new file mode 100644 index 00000000000..23f55bde782 --- /dev/null +++ b/packages/server/integrations/gitlab/GitLabServerManager.ts @@ -0,0 +1,61 @@ +import {GraphQLResolveInfo} from 'graphql' +import {OAuth2IntegrationServerManager} from '../IntegrationServerManager' +import { + IntegrationProvider, + isOAuth2ProviderMetadata +} from '../../postgres/types/IntegrationProvider' +import {GetProfileQuery} from '../../types/gitlabTypes' +import {GitLabRequest} from '../../graphql/rootSchema' +import getProfile from '../../graphql/nestedSchema/GitLab/queries/getProfile.graphql' + +class GitLabServerManager implements OAuth2IntegrationServerManager { + readonly provider: IntegrationProvider + readonly accessToken: string + readonly serverBaseUrl: string + + constructor(provider: IntegrationProvider, accessToken: string) { + const {providerMetadata} = provider + if (!isOAuth2ProviderMetadata(providerMetadata)) { + throw Error('Cannot instantiate GitLab with non OAuth2 metadata!') + } + + this.provider = provider + this.accessToken = accessToken + this.serverBaseUrl = providerMetadata.serverBaseUrl + } + + getGitLabRequest(info: GraphQLResolveInfo, batchRef: Record) { + const {schema} = info + const composedRequest = (schema as any).gitlabRequest as GitLabRequest + return async (query: string, variables: TVars) => { + const result = await composedRequest({ + query, + variables, + info, + endpointContext: { + accessToken: this.accessToken, + baseUri: this.serverBaseUrl + }, + batchRef + }) + const {data, errors} = result + const error = errors ? new Error(errors[0].message) : null + return [data, error] as [TData, typeof error] + } + } + + async isTokenValid( + info: GraphQLResolveInfo, + context: Record + ): Promise<[boolean, Error | null]> { + if (!this.accessToken) return [false, new Error('GitLabServerManager has no access token')] + + const gitLabRequest = this.getGitLabRequest(info, context) + const [, error] = await gitLabRequest(getProfile, {}) + if (error) return [false, error] + + return [true, null] + } +} + +export default GitLabServerManager diff --git a/packages/server/integrations/helpers/authorizeOAuth2.ts b/packages/server/integrations/helpers/authorizeOAuth2.ts new file mode 100644 index 00000000000..7dd21ca9d14 --- /dev/null +++ b/packages/server/integrations/helpers/authorizeOAuth2.ts @@ -0,0 +1,45 @@ +import {stringify} from 'querystring' +import fetch from 'node-fetch' + +import {OAuth2IntegrationTokenMetadata} from '../../postgres/types/IntegrationToken' +import {OAuth2Error, OAuth2Success} from '../../types/custom' + +type OAuth2Response = OAuth2Success | OAuth2Error + +type AuthorizeOAuth2Params = { + authUrl: string + queryParams?: Record + body?: Record + additonalHeaders?: Record +} + +export const authorizeOAuth2 = async ({ + authUrl, + queryParams, + body, + additonalHeaders +}: AuthorizeOAuth2Params): Promise => { + const headers = { + Accept: 'application/json', + 'Content-Type': 'application/json', + ...additonalHeaders + } + + let uri = `${authUrl}` + if (queryParams) { + uri = uri.concat(`?${stringify(queryParams)}`) + } + const oauth2Response = await fetch(uri, { + method: 'POST', + headers, + body: JSON.stringify(body) + }) + const tokenJson = (await oauth2Response.json()) as Required + if ('error' in tokenJson) return new Error(tokenJson.error) + const {access_token: accessToken, refresh_token: oauthRefreshToken, scope} = tokenJson + return { + accessToken, + refreshToken: oauthRefreshToken, + scopes: scope.split(',') + } +} diff --git a/packages/server/postgres/migrations/1635354572171_addIntegrationProviderAndToken.ts b/packages/server/postgres/migrations/1635354572171_addIntegrationProviderAndToken.ts new file mode 100644 index 00000000000..6cfc8cc857a --- /dev/null +++ b/packages/server/postgres/migrations/1635354572171_addIntegrationProviderAndToken.ts @@ -0,0 +1,91 @@ +import {Client} from 'pg' +import getPgConfig from '../getPgConfig' + +export async function up() { + const client = new Client(getPgConfig()) + await client.connect() + await client.query(` + DO $$ + BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'IntegrationProvidersEnum') THEN + CREATE TYPE "IntegrationProvidersEnum" AS ENUM ( + 'gitlab', + 'mattermost' + ); + END IF; + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'IntegrationProviderTypesEnum') THEN + CREATE TYPE "IntegrationProviderTypesEnum" AS ENUM ( + 'pat', + 'oauth2', + 'webhook' + ); + END IF; + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'IntegrationProviderScopesEnum') THEN + CREATE TYPE "IntegrationProviderScopesEnum" AS ENUM ( + 'global', + 'org', + 'team' + ); + END IF; + CREATE TABLE IF NOT EXISTS "IntegrationProvider" ( + "id" INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + "createdAt" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + "provider" "IntegrationProvidersEnum" NOT NULL, + "type" "IntegrationProviderTypesEnum" NOT NULL, + "scope" "IntegrationProviderScopesEnum" NOT NULL, + "scopeGlobal" BOOLEAN GENERATED ALWAYS AS ( + CASE + WHEN "scope" = 'global' THEN TRUE + ELSE NULL + END + ) STORED, + "orgId" VARCHAR(100), + "teamId" VARCHAR(100), + "isActive" BOOLEAN DEFAULT TRUE NOT NULL, + "name" VARCHAR(250) NOT NULL, + "providerMetadata" JSONB NOT NULL DEFAULT '{}', + UNIQUE("scopeGlobal", "provider"), + CONSTRAINT global_provider_must_be_oauth2 CHECK ( + "scopeGlobal" IS NULL OR ("scopeGlobal" = TRUE AND "type" = 'oauth2') + ) + ); + CREATE INDEX IF NOT EXISTS "idx_IntegrationProvider_providerAndScope" + ON "IntegrationProvider"("provider", "scope"); + CREATE INDEX IF NOT EXISTS "idx_IntegrationProvider_orgId" ON "IntegrationProvider"("orgId"); + CREATE INDEX IF NOT EXISTS "idx_IntegrationProvider_teamId" ON "IntegrationProvider"("teamId"); + CREATE TABLE IF NOT EXISTS "IntegrationToken" ( + "createdAt" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + "teamId" VARCHAR(100) NOT NULL, + "userId" VARCHAR(100) NOT NULL, + "providerId" INT NOT NULL, + "isActive" BOOLEAN DEFAULT TRUE NOT NULL, + "tokenMetadata" JSONB NOT NULL DEFAULT '{}', + PRIMARY KEY ("providerId", "userId", "teamId"), + CONSTRAINT "fk_userId" + FOREIGN KEY("userId") + REFERENCES "User"("id"), + CONSTRAINT "fk_integrationProvider" + FOREIGN KEY("providerId") + REFERENCES "IntegrationProvider"("id") + ); + CREATE INDEX IF NOT EXISTS "idx_IntegrationTokens_teamId" ON "IntegrationToken"("teamId"); + CREATE INDEX IF NOT EXISTS "idx_IntegrationTokens_providerId" ON "IntegrationToken"("providerId"); + END $$; + `) + await client.end() +} + +export async function down() { + const client = new Client(getPgConfig()) + await client.connect() + await client.query(` + DROP TABLE "IntegrationToken"; + DROP TABLE "IntegrationProvider"; + DROP TYPE "IntegrationProviderScopesEnum"; + DROP TYPE "IntegrationProviderTypesEnum"; + DROP TYPE "IntegrationProvidersEnum"; + `) + await client.end() +} diff --git a/packages/server/postgres/migrations/1636229261909_mattermostToIntegrationsTables.ts b/packages/server/postgres/migrations/1636229261909_mattermostToIntegrationsTables.ts new file mode 100644 index 00000000000..c3e6171e371 --- /dev/null +++ b/packages/server/postgres/migrations/1636229261909_mattermostToIntegrationsTables.ts @@ -0,0 +1,153 @@ +import {Client} from 'pg' +import getPgConfig from '../getPgConfig' +import {r} from 'rethinkdb-ts' +import insertIntegrationProviderWithToken from '../queries/insertIntegrationProviderWithToken' +import {nestIntegrationProviderOnIntegrationToken} from '../types/IntegrationTokenWithProvider' + +interface MattermostAuth { + createdAt: Date + updatedAt: Date + isActive: true + webhookUrl: string + userId: string + teamId: string +} + +const connectRethinkDB = async () => { + const {hostname: host, port, pathname} = new URL(process.env.RETHINKDB_URL) + await r.connectPool({ + host, + port: parseInt(port, 10), + db: pathname.split('/')[1] + }) +} + +export async function up() { + await connectRethinkDB() + const client = new Client(getPgConfig()) + await client.connect() + + const mattermostAuths: MattermostAuth[] = ( + await client.query(`SELECT * FROM "MattermostAuth" WHERE "isActive" = TRUE;`) + ).rows + + const teamOrgIdRows = await r + .table('Team') + .getAll(r.args(mattermostAuths.map(({teamId}) => teamId)), {index: 'id'}) + .pluck('id', 'orgId') + .merge((row) => ({teamId: row('id')})) + .without('id') + .run() + + const orgIdsByTeamId = teamOrgIdRows.reduce((acc, {teamId, orgId}) => { + acc[teamId] = orgId + return acc + }, {} as {[teamId: string]: string}) + + const mattermostAuthsToInsert = mattermostAuths.map((mattermostAuth) => { + return insertIntegrationProviderWithToken({ + provider: { + type: 'mattermost', + tokenType: 'webhook', + scope: 'team', + name: 'mattermost', + providerMetadata: { + webhookUrl: mattermostAuth.webhookUrl + }, + orgId: orgIdsByTeamId[mattermostAuth.teamId], + teamId: mattermostAuth.teamId + }, + userId: mattermostAuth.userId, + tokenMetadata: {} + }) + }) + await Promise.all(mattermostAuthsToInsert) + await client.query(`DROP TABLE "MattermostAuth";`) + + await client.end() + await r.getPoolMaster().drain() +} + +export async function down() { + await connectRethinkDB() + const client = new Client(getPgConfig()) + await client.connect() + + const mattermostTokensWithProvider = ( + await client.query(` + SELECT + "IntegrationToken".*, + "IntegrationProvider"."id" AS "IntegrationProvider_id", + "IntegrationProvider"."type" AS "IntegrationProvider_type", + "IntegrationProvider"."scope" AS "IntegrationProvider_scope", + "IntegrationProvider"."orgId" AS "IntegrationProvider_orgId", + "IntegrationProvider"."teamId" AS "IntegrationProvider_teamId", + "IntegrationProvider"."isActive" AS "IntegrationProvider_isActive", + "IntegrationProvider"."name" AS "IntegrationProvider_name", + "IntegrationProvider"."serverBaseUri" AS "IntegrationProvider_serverBaseUri", + "IntegrationProvider"."oauthScopes" AS "IntegrationProvider_oauthScopes", + "IntegrationProvider"."oauthClientId" AS "IntegrationProvider_oauthClientId", + "IntegrationProvider"."createdAt" AS "IntegrationProvider_createdAt", + "IntegrationProvider"."updatedAt" AS "IntegrationProvider_updatedAt" + FROM "IntegrationToken" + JOIN "IntegrationProvider" + ON ("IntegrationToken"."providerId" = "IntegrationProvider"."id") + WHERE ( + "IntegrationProvider"."type" = 'mattermost' + AND "IntegrationToken"."isActive" = TRUE + AND "IntegrationProvider"."isActive" = TRUE + ); + `) + ).rows.map((row) => nestIntegrationProviderOnIntegrationToken(row)) + + await client.query(` + CREATE TABLE IF NOT EXISTS "MattermostAuth" ( + "createdAt" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + "isActive" BOOLEAN DEFAULT TRUE NOT NULL, + "webhookUrl" VARCHAR(2083) NOT NULL, + "userId" VARCHAR(100) NOT NULL, + "teamId" VARCHAR(100) NOT NULL, + PRIMARY KEY ("userId", "teamId") + ); + CREATE INDEX IF NOT EXISTS "idx_MattermostAuth_teamId" ON "MattermostAuth"("teamId"); + `) + + if (mattermostTokensWithProvider.length > 0) { + const mattermostAuthsToInsert = mattermostTokensWithProvider.map( + (mattermostTokenWithProvider) => + client.query( + ` + INSERT INTO "MattermostAuth" ("createdAt", "updatedAt", "isActive", "webhookUrl", "userId", "teamId") + VALUES ($1, $2, $3, $4, $5, $6) + `, + [ + mattermostTokenWithProvider.createdAt, + mattermostTokenWithProvider.updatedAt, + mattermostTokenWithProvider.isActive, + (mattermostTokenWithProvider.provider.providerMetadata as any).webhookUrl, + mattermostTokenWithProvider.userId, + mattermostTokenWithProvider.teamId + ] + ) + ) + await Promise.all(mattermostAuthsToInsert) + const tokenDeletionQueries = mattermostTokensWithProvider.map((row) => + client.query( + ` + DELETE FROM "IntegrationToken" WHERE "providerId" = $1 AND "userId" = $2 AND "teamId" = $3; + `, + [row.providerId, row.userId, row.teamId] + ) + ) + await Promise.all(tokenDeletionQueries) + await client.query( + ` + DELETE FROM "IntegrationProvider" WHERE "id" = ANY($1::int[]); + `, + [mattermostTokensWithProvider.map((row) => row.provider.id)] + ) + } + await client.end() + await r.getPoolMaster().drain() +} diff --git a/packages/server/postgres/queries/generated/getIntegrationProvidersByIdsQuery.ts b/packages/server/postgres/queries/generated/getIntegrationProvidersByIdsQuery.ts new file mode 100644 index 00000000000..5d0dd0acebc --- /dev/null +++ b/packages/server/postgres/queries/generated/getIntegrationProvidersByIdsQuery.ts @@ -0,0 +1,54 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/getIntegrationProvidersByIdsQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProviderScopesEnum = 'global' | 'org' | 'team'; + +export type IntegrationProviderTypesEnum = 'oauth2' | 'pat' | 'webhook'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'GetIntegrationProvidersByIdsQuery' parameters type */ +export interface IGetIntegrationProvidersByIdsQueryParams { + ids: readonly (number | null | void)[]; +} + +/** 'GetIntegrationProvidersByIdsQuery' return type */ +export interface IGetIntegrationProvidersByIdsQueryResult { + id: number; + createdAt: Date; + updatedAt: Date; + provider: IntegrationProvidersEnum; + type: IntegrationProviderTypesEnum; + scope: IntegrationProviderScopesEnum; + scopeGlobal: boolean | null; + orgId: string | null; + teamId: string | null; + isActive: boolean; + name: string; + providerMetadata: Json; +} + +/** 'GetIntegrationProvidersByIdsQuery' query type */ +export interface IGetIntegrationProvidersByIdsQueryQuery { + params: IGetIntegrationProvidersByIdsQueryParams; + result: IGetIntegrationProvidersByIdsQueryResult; +} + +const getIntegrationProvidersByIdsQueryIR: any = {"name":"getIntegrationProvidersByIdsQuery","params":[{"name":"ids","codeRefs":{"defined":{"a":52,"b":54,"line":3,"col":8},"used":[{"a":124,"b":126,"line":10,"col":9}]},"transform":{"type":"array_spread"}}],"usedParamSet":{"ids":true},"statement":{"body":"SELECT\n *\nFROM\n \"IntegrationProvider\"\nWHERE\n id in :ids","loc":{"a":69,"b":126,"line":5,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * SELECT + * * + * FROM + * "IntegrationProvider" + * WHERE + * id in :ids + * ``` + */ +export const getIntegrationProvidersByIdsQuery = new PreparedQuery(getIntegrationProvidersByIdsQueryIR); + + diff --git a/packages/server/postgres/queries/generated/getIntegrationProvidersQuery.ts b/packages/server/postgres/queries/generated/getIntegrationProvidersQuery.ts new file mode 100644 index 00000000000..86f00f44926 --- /dev/null +++ b/packages/server/postgres/queries/generated/getIntegrationProvidersQuery.ts @@ -0,0 +1,68 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/getIntegrationProvidersQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProviderScopesEnum = 'global' | 'org' | 'team'; + +export type IntegrationProviderTypesEnum = 'oauth2' | 'pat' | 'webhook'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'GetIntegrationProvidersQuery' parameters type */ +export interface IGetIntegrationProvidersQueryParams { + provider: IntegrationProvidersEnum | null | void; + orgId: string | null | void; + teamId: string | null | void; +} + +/** 'GetIntegrationProvidersQuery' return type */ +export interface IGetIntegrationProvidersQueryResult { + id: number; + createdAt: Date; + updatedAt: Date; + provider: IntegrationProvidersEnum; + type: IntegrationProviderTypesEnum; + scope: IntegrationProviderScopesEnum; + scopeGlobal: boolean | null; + orgId: string | null; + teamId: string | null; + isActive: boolean; + name: string; + providerMetadata: Json; +} + +/** 'GetIntegrationProvidersQuery' query type */ +export interface IGetIntegrationProvidersQueryQuery { + params: IGetIntegrationProvidersQueryParams; + result: IGetIntegrationProvidersQueryResult; +} + +const getIntegrationProvidersQueryIR: any = {"name":"getIntegrationProvidersQuery","params":[{"name":"provider","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":105,"b":112,"line":9,"col":16}]}},{"name":"orgId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":221,"b":225,"line":15,"col":21}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":287,"b":292,"line":19,"col":22}]}}],"usedParamSet":{"provider":true,"orgId":true,"teamId":true},"statement":{"body":"SELECT\n *\nFROM\n \"IntegrationProvider\"\nWHERE\n \"provider\" = :provider\n AND \"isActive\" = TRUE\n AND (\n \"scope\" = 'global'\n OR (\n \"scope\" = 'org'\n AND \"orgId\" = :orgId\n )\n OR (\n \"scope\" = 'team'\n AND \"teamId\" = :teamId\n )\n )","loc":{"a":43,"b":302,"line":4,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * SELECT + * * + * FROM + * "IntegrationProvider" + * WHERE + * "provider" = :provider + * AND "isActive" = TRUE + * AND ( + * "scope" = 'global' + * OR ( + * "scope" = 'org' + * AND "orgId" = :orgId + * ) + * OR ( + * "scope" = 'team' + * AND "teamId" = :teamId + * ) + * ) + * ``` + */ +export const getIntegrationProvidersQuery = new PreparedQuery(getIntegrationProvidersQueryIR); + + diff --git a/packages/server/postgres/queries/generated/getIntegrationTokensWithProviderQuery.ts b/packages/server/postgres/queries/generated/getIntegrationTokensWithProviderQuery.ts new file mode 100644 index 00000000000..c48a72a6b7e --- /dev/null +++ b/packages/server/postgres/queries/generated/getIntegrationTokensWithProviderQuery.ts @@ -0,0 +1,89 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/getIntegrationTokensWithProviderQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProviderScopesEnum = 'global' | 'org' | 'team'; + +export type IntegrationProviderTypesEnum = 'oauth2' | 'pat' | 'webhook'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'GetIntegrationTokensWithProviderQuery' parameters type */ +export interface IGetIntegrationTokensWithProviderQueryParams { + teamId: string | null | void; + byUserId: boolean | null | void; + userId: string | null | void; + provider: IntegrationProvidersEnum | null | void; +} + +/** 'GetIntegrationTokensWithProviderQuery' return type */ +export interface IGetIntegrationTokensWithProviderQueryResult { + createdAt: Date; + updatedAt: Date; + teamId: string; + userId: string; + providerId: number; + isActive: boolean; + tokenMetadata: Json; + IntegrationProvider_id: number; + IntegrationProvider_provider: IntegrationProvidersEnum; + IntegrationProvider_type: IntegrationProviderTypesEnum; + IntegrationProvider_scope: IntegrationProviderScopesEnum; + IntegrationProvider_orgId: string | null; + IntegrationProvider_teamId: string | null; + IntegrationProvider_isActive: boolean; + IntegrationProvider_name: string; + IntegrationProvider_providerMetadata: Json; + IntegrationProvider_createdAt: Date; + IntegrationProvider_updatedAt: Date; +} + +/** 'GetIntegrationTokensWithProviderQuery' query type */ +export interface IGetIntegrationTokensWithProviderQueryQuery { + params: IGetIntegrationTokensWithProviderQueryParams; + result: IGetIntegrationTokensWithProviderQueryResult; +} + +const getIntegrationTokensWithProviderQueryIR: any = {"name":"getIntegrationTokensWithProviderQuery","params":[{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":1002,"b":1007,"line":24,"col":35}]}},{"name":"byUserId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":1034,"b":1041,"line":26,"col":15},{"a":1070,"b":1077,"line":28,"col":16}]}},{"name":"userId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":1122,"b":1127,"line":29,"col":43}]}},{"name":"provider","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":1187,"b":1194,"line":32,"col":44}]}}],"usedParamSet":{"teamId":true,"byUserId":true,"userId":true,"provider":true},"statement":{"body":"SELECT\n \"IntegrationToken\".*,\n \"IntegrationProvider\".\"id\" AS \"IntegrationProvider_id\",\n \"IntegrationProvider\".\"provider\" AS \"IntegrationProvider_provider\",\n \"IntegrationProvider\".\"type\" AS \"IntegrationProvider_type\",\n \"IntegrationProvider\".\"scope\" AS \"IntegrationProvider_scope\",\n \"IntegrationProvider\".\"orgId\" AS \"IntegrationProvider_orgId\",\n \"IntegrationProvider\".\"teamId\" AS \"IntegrationProvider_teamId\",\n \"IntegrationProvider\".\"isActive\" AS \"IntegrationProvider_isActive\",\n \"IntegrationProvider\".\"name\" AS \"IntegrationProvider_name\",\n \"IntegrationProvider\".\"providerMetadata\" AS \"IntegrationProvider_providerMetadata\",\n \"IntegrationProvider\".\"createdAt\" AS \"IntegrationProvider_createdAt\",\n \"IntegrationProvider\".\"updatedAt\" AS \"IntegrationProvider_updatedAt\"\nFROM\n \"IntegrationToken\"\n JOIN \"IntegrationProvider\" ON (\n \"IntegrationToken\".\"providerId\" = \"IntegrationProvider\".\"id\"\n )\nWHERE\n (\n \"IntegrationToken\".\"teamId\" = :teamId\n AND (\n FALSE = :byUserId\n OR (\n TRUE = :byUserId\n AND \"IntegrationToken\".\"userId\" = :userId\n )\n )\n AND \"IntegrationProvider\".\"provider\" = :provider\n AND \"IntegrationToken\".\"isActive\" = TRUE\n AND \"IntegrationProvider\".\"isActive\" = TRUE\n )","loc":{"a":52,"b":1291,"line":4,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * SELECT + * "IntegrationToken".*, + * "IntegrationProvider"."id" AS "IntegrationProvider_id", + * "IntegrationProvider"."provider" AS "IntegrationProvider_provider", + * "IntegrationProvider"."type" AS "IntegrationProvider_type", + * "IntegrationProvider"."scope" AS "IntegrationProvider_scope", + * "IntegrationProvider"."orgId" AS "IntegrationProvider_orgId", + * "IntegrationProvider"."teamId" AS "IntegrationProvider_teamId", + * "IntegrationProvider"."isActive" AS "IntegrationProvider_isActive", + * "IntegrationProvider"."name" AS "IntegrationProvider_name", + * "IntegrationProvider"."providerMetadata" AS "IntegrationProvider_providerMetadata", + * "IntegrationProvider"."createdAt" AS "IntegrationProvider_createdAt", + * "IntegrationProvider"."updatedAt" AS "IntegrationProvider_updatedAt" + * FROM + * "IntegrationToken" + * JOIN "IntegrationProvider" ON ( + * "IntegrationToken"."providerId" = "IntegrationProvider"."id" + * ) + * WHERE + * ( + * "IntegrationToken"."teamId" = :teamId + * AND ( + * FALSE = :byUserId + * OR ( + * TRUE = :byUserId + * AND "IntegrationToken"."userId" = :userId + * ) + * ) + * AND "IntegrationProvider"."provider" = :provider + * AND "IntegrationToken"."isActive" = TRUE + * AND "IntegrationProvider"."isActive" = TRUE + * ) + * ``` + */ +export const getIntegrationTokensWithProviderQuery = new PreparedQuery(getIntegrationTokensWithProviderQueryIR); + + diff --git a/packages/server/postgres/queries/generated/getMattermostAuthByTeamIdQuery.ts b/packages/server/postgres/queries/generated/getMattermostAuthByTeamIdQuery.ts deleted file mode 100644 index ba7e4e716a5..00000000000 --- a/packages/server/postgres/queries/generated/getMattermostAuthByTeamIdQuery.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** Types generated for queries found in "packages/server/postgres/queries/src/getMattermostAuthByTeamIdQuery.sql" */ -import { PreparedQuery } from '@pgtyped/query'; - -/** 'GetMattermostAuthByTeamIdQuery' parameters type */ -export interface IGetMattermostAuthByTeamIdQueryParams { - teamId: string | null | void; -} - -/** 'GetMattermostAuthByTeamIdQuery' return type */ -export interface IGetMattermostAuthByTeamIdQueryResult { - createdAt: Date; - updatedAt: Date; - isActive: boolean; - webhookUrl: string; - userId: string; - teamId: string; -} - -/** 'GetMattermostAuthByTeamIdQuery' query type */ -export interface IGetMattermostAuthByTeamIdQueryQuery { - params: IGetMattermostAuthByTeamIdQueryParams; - result: IGetMattermostAuthByTeamIdQueryResult; -} - -const getMattermostAuthByTeamIdQueryIR: any = {"name":"getMattermostAuthByTeamIdQuery","params":[{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":94,"b":99,"line":5,"col":18}]}}],"usedParamSet":{"teamId":true},"statement":{"body":"SELECT * from \"MattermostAuth\"\nWHERE \"teamId\" = :teamId AND \"isActive\" = TRUE","loc":{"a":45,"b":121,"line":4,"col":0}}}; - -/** - * Query generated from SQL: - * ``` - * SELECT * from "MattermostAuth" - * WHERE "teamId" = :teamId AND "isActive" = TRUE - * ``` - */ -export const getMattermostAuthByTeamIdQuery = new PreparedQuery(getMattermostAuthByTeamIdQueryIR); - - diff --git a/packages/server/postgres/queries/generated/getMattermostAuthByUserIdTeamIdQuery.ts b/packages/server/postgres/queries/generated/getMattermostAuthByUserIdTeamIdQuery.ts deleted file mode 100644 index 4b9b4e71da3..00000000000 --- a/packages/server/postgres/queries/generated/getMattermostAuthByUserIdTeamIdQuery.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** Types generated for queries found in "packages/server/postgres/queries/src/getMattermostAuthByUserIdTeamIdQuery.sql" */ -import { PreparedQuery } from '@pgtyped/query'; - -/** 'GetMattermostAuthByUserIdTeamIdQuery' parameters type */ -export interface IGetMattermostAuthByUserIdTeamIdQueryParams { - userId: string | null | void; - teamId: string | null | void; -} - -/** 'GetMattermostAuthByUserIdTeamIdQuery' return type */ -export interface IGetMattermostAuthByUserIdTeamIdQueryResult { - createdAt: Date; - updatedAt: Date; - isActive: boolean; - webhookUrl: string; - userId: string; - teamId: string; -} - -/** 'GetMattermostAuthByUserIdTeamIdQuery' query type */ -export interface IGetMattermostAuthByUserIdTeamIdQueryQuery { - params: IGetMattermostAuthByUserIdTeamIdQueryParams; - result: IGetMattermostAuthByUserIdTeamIdQueryResult; -} - -const getMattermostAuthByUserIdTeamIdQueryIR: any = {"name":"getMattermostAuthByUserIdTeamIdQuery","params":[{"name":"userId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":100,"b":105,"line":5,"col":18}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":123,"b":128,"line":5,"col":41}]}}],"usedParamSet":{"userId":true,"teamId":true},"statement":{"body":"SELECT * from \"MattermostAuth\"\nWHERE \"userId\" = :userId AND \"teamId\" = :teamId AND \"isActive\" = TRUE","loc":{"a":51,"b":150,"line":4,"col":0}}}; - -/** - * Query generated from SQL: - * ``` - * SELECT * from "MattermostAuth" - * WHERE "userId" = :userId AND "teamId" = :teamId AND "isActive" = TRUE - * ``` - */ -export const getMattermostAuthByUserIdTeamIdQuery = new PreparedQuery(getMattermostAuthByUserIdTeamIdQueryIR); - - diff --git a/packages/server/postgres/queries/generated/getMattermostBestAuthByUserIdTeamIdQuery.ts b/packages/server/postgres/queries/generated/getMattermostBestAuthByUserIdTeamIdQuery.ts deleted file mode 100644 index 8f791e20a03..00000000000 --- a/packages/server/postgres/queries/generated/getMattermostBestAuthByUserIdTeamIdQuery.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** Types generated for queries found in "packages/server/postgres/queries/src/getMattermostBestAuthByUserIdTeamIdQuery.sql" */ -import { PreparedQuery } from '@pgtyped/query'; - -/** 'GetMattermostBestAuthByUserIdTeamIdQuery' parameters type */ -export interface IGetMattermostBestAuthByUserIdTeamIdQueryParams { - userId: string | null | void; - teamId: string | null | void; -} - -/** 'GetMattermostBestAuthByUserIdTeamIdQuery' return type */ -export interface IGetMattermostBestAuthByUserIdTeamIdQueryResult { - userEquality: number | null; - createdAt: Date; - updatedAt: Date; - isActive: boolean; - webhookUrl: string; - userId: string; - teamId: string; -} - -/** 'GetMattermostBestAuthByUserIdTeamIdQuery' query type */ -export interface IGetMattermostBestAuthByUserIdTeamIdQueryQuery { - params: IGetMattermostBestAuthByUserIdTeamIdQueryParams; - result: IGetMattermostBestAuthByUserIdTeamIdQueryResult; -} - -const getMattermostBestAuthByUserIdTeamIdQueryIR: any = {"name":"getMattermostBestAuthByUserIdTeamIdQuery","params":[{"name":"userId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":75,"b":80,"line":4,"col":20}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":155,"b":160,"line":6,"col":20}]}}],"usedParamSet":{"userId":true,"teamId":true},"statement":{"body":"SELECT (\"userId\" = :userId)::int AS \"userEquality\", * \n FROM \"MattermostAuth\"\n WHERE \"teamId\" = :teamId AND \"isActive\" = TRUE\n ORDER BY \"userEquality\" DESC, \"updatedAt\" DESC\n LIMIT 1","loc":{"a":55,"b":241,"line":4,"col":0}}}; - -/** - * Query generated from SQL: - * ``` - * SELECT ("userId" = :userId)::int AS "userEquality", * - * FROM "MattermostAuth" - * WHERE "teamId" = :teamId AND "isActive" = TRUE - * ORDER BY "userEquality" DESC, "updatedAt" DESC - * LIMIT 1 - * ``` - */ -export const getMattermostBestAuthByUserIdTeamIdQuery = new PreparedQuery(getMattermostBestAuthByUserIdTeamIdQueryIR); - - diff --git a/packages/server/postgres/queries/generated/insertIntegrationProviderQuery.ts b/packages/server/postgres/queries/generated/insertIntegrationProviderQuery.ts new file mode 100644 index 00000000000..20a870b7b28 --- /dev/null +++ b/packages/server/postgres/queries/generated/insertIntegrationProviderQuery.ts @@ -0,0 +1,61 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/insertIntegrationProviderQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProviderScopesEnum = 'global' | 'org' | 'team'; + +export type IntegrationProviderTypesEnum = 'oauth2' | 'pat' | 'webhook'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'InsertIntegrationProviderQuery' parameters type */ +export interface IInsertIntegrationProviderQueryParams { + provider: IntegrationProvidersEnum | null | void; + type: IntegrationProviderTypesEnum | null | void; + scope: IntegrationProviderScopesEnum | null | void; + name: string | null | void; + providerMetadata: Json | null | void; + orgId: string | null | void; + teamId: string | null | void; +} + +/** 'InsertIntegrationProviderQuery' return type */ +export type IInsertIntegrationProviderQueryResult = void; + +/** 'InsertIntegrationProviderQuery' query type */ +export interface IInsertIntegrationProviderQueryQuery { + params: IInsertIntegrationProviderQueryParams; + result: IInsertIntegrationProviderQueryResult; +} + +const insertIntegrationProviderQueryIR: any = {"name":"insertIntegrationProviderQuery","params":[{"name":"provider","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":206,"b":213,"line":16,"col":5}]}},{"name":"type","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":221,"b":224,"line":17,"col":5}]}},{"name":"scope","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":232,"b":236,"line":18,"col":5}]}},{"name":"name","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":244,"b":247,"line":19,"col":5}]}},{"name":"providerMetadata","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":255,"b":270,"line":20,"col":5}]}},{"name":"orgId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":278,"b":282,"line":21,"col":5}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":290,"b":295,"line":22,"col":5}]}}],"usedParamSet":{"provider":true,"type":true,"scope":true,"name":true,"providerMetadata":true,"orgId":true,"teamId":true},"statement":{"body":"INSERT INTO\n \"IntegrationProvider\" (\n \"provider\",\n \"type\",\n \"scope\",\n \"name\",\n \"providerMetadata\",\n \"orgId\",\n \"teamId\"\n )\nVALUES\n (\n :provider,\n :type,\n :scope,\n :name,\n :providerMetadata,\n :orgId,\n :teamId\n )","loc":{"a":45,"b":299,"line":4,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * INSERT INTO + * "IntegrationProvider" ( + * "provider", + * "type", + * "scope", + * "name", + * "providerMetadata", + * "orgId", + * "teamId" + * ) + * VALUES + * ( + * :provider, + * :type, + * :scope, + * :name, + * :providerMetadata, + * :orgId, + * :teamId + * ) + * ``` + */ +export const insertIntegrationProviderQuery = new PreparedQuery(insertIntegrationProviderQueryIR); + + diff --git a/packages/server/postgres/queries/generated/insertIntegrationProviderWithTokenQuery.ts b/packages/server/postgres/queries/generated/insertIntegrationProviderWithTokenQuery.ts new file mode 100644 index 00000000000..fdd2aac9c18 --- /dev/null +++ b/packages/server/postgres/queries/generated/insertIntegrationProviderWithTokenQuery.ts @@ -0,0 +1,103 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/insertIntegrationProviderWithTokenQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProviderScopesEnum = 'global' | 'org' | 'team'; + +export type IntegrationProviderTypesEnum = 'oauth2' | 'pat' | 'webhook'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'InsertIntegrationProviderWithTokenQuery' parameters type */ +export interface IInsertIntegrationProviderWithTokenQueryParams { + provider: { + provider: IntegrationProvidersEnum | null | void, + type: IntegrationProviderTypesEnum | null | void, + scope: IntegrationProviderScopesEnum | null | void, + name: string | null | void, + providerMetadata: Json | null | void, + orgId: string | null | void, + teamId: string | null | void + }; + userId: string | null | void; + tokenMetadata: Json | null | void; +} + +/** 'InsertIntegrationProviderWithTokenQuery' return type */ +export interface IInsertIntegrationProviderWithTokenQueryResult { + id: number; +} + +/** 'InsertIntegrationProviderWithTokenQuery' query type */ +export interface IInsertIntegrationProviderWithTokenQueryQuery { + params: IInsertIntegrationProviderWithTokenQueryParams; + result: IInsertIntegrationProviderWithTokenQueryResult; +} + +const insertIntegrationProviderWithTokenQueryIR: any = {"name":"insertIntegrationProviderWithTokenQuery","params":[{"name":"provider","codeRefs":{"defined":{"a":58,"b":65,"line":3,"col":8},"used":[{"a":338,"b":345,"line":17,"col":5}]},"transform":{"type":"pick_tuple","keys":["provider","type","scope","name","providerMetadata","orgId","teamId"]}},{"name":"userId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":612,"b":617,"line":38,"col":9}]}},{"name":"tokenMetadata","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":723,"b":735,"line":45,"col":9}]}}],"usedParamSet":{"provider":true,"userId":true,"tokenMetadata":true},"statement":{"body":"WITH providerRow AS (\n INSERT INTO\n \"IntegrationProvider\" (\n \"provider\",\n \"type\",\n \"scope\",\n \"name\",\n \"providerMetadata\",\n \"orgId\",\n \"teamId\"\n )\n VALUES\n :provider RETURNING *\n)\nINSERT INTO\n \"IntegrationToken\" (\n \"teamId\",\n \"userId\",\n \"providerId\",\n \"tokenMetadata\"\n )\nSELECT\n *\nFROM\n (\n VALUES\n (\n (\n SELECT\n \"teamId\"\n FROM\n providerRow\n ),\n :userId,\n (\n SELECT\n \"id\"\n FROM\n providerRow\n ),\n :tokenMetadata :: jsonb\n )\n ) AS \"integrationToken\" ON CONFLICT (\"providerId\", \"userId\", \"teamId\") DO\nUPDATE\nSET\n (\n \"tokenMetadata\",\n \"providerId\",\n \"isActive\",\n \"updatedAt\"\n ) = (\n EXCLUDED.\"tokenMetadata\",\n EXCLUDED.\"providerId\",\n TRUE,\n CURRENT_TIMESTAMP\n ) RETURNING \"providerId\" AS \"id\"","loc":{"a":137,"b":1046,"line":5,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * WITH providerRow AS ( + * INSERT INTO + * "IntegrationProvider" ( + * "provider", + * "type", + * "scope", + * "name", + * "providerMetadata", + * "orgId", + * "teamId" + * ) + * VALUES + * :provider RETURNING * + * ) + * INSERT INTO + * "IntegrationToken" ( + * "teamId", + * "userId", + * "providerId", + * "tokenMetadata" + * ) + * SELECT + * * + * FROM + * ( + * VALUES + * ( + * ( + * SELECT + * "teamId" + * FROM + * providerRow + * ), + * :userId, + * ( + * SELECT + * "id" + * FROM + * providerRow + * ), + * :tokenMetadata :: jsonb + * ) + * ) AS "integrationToken" ON CONFLICT ("providerId", "userId", "teamId") DO + * UPDATE + * SET + * ( + * "tokenMetadata", + * "providerId", + * "isActive", + * "updatedAt" + * ) = ( + * EXCLUDED."tokenMetadata", + * EXCLUDED."providerId", + * TRUE, + * CURRENT_TIMESTAMP + * ) RETURNING "providerId" AS "id" + * ``` + */ +export const insertIntegrationProviderWithTokenQuery = new PreparedQuery(insertIntegrationProviderWithTokenQueryIR); + + diff --git a/packages/server/postgres/queries/generated/removeIntegrationProviderQuery.ts b/packages/server/postgres/queries/generated/removeIntegrationProviderQuery.ts new file mode 100644 index 00000000000..04450e49014 --- /dev/null +++ b/packages/server/postgres/queries/generated/removeIntegrationProviderQuery.ts @@ -0,0 +1,35 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/removeIntegrationProviderQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +/** 'RemoveIntegrationProviderQuery' parameters type */ +export interface IRemoveIntegrationProviderQueryParams { + id: number | null | void; +} + +/** 'RemoveIntegrationProviderQuery' return type */ +export type IRemoveIntegrationProviderQueryResult = void; + +/** 'RemoveIntegrationProviderQuery' query type */ +export interface IRemoveIntegrationProviderQueryQuery { + params: IRemoveIntegrationProviderQueryParams; + result: IRemoveIntegrationProviderQueryResult; +} + +const removeIntegrationProviderQueryIR: any = {"name":"removeIntegrationProviderQuery","params":[{"name":"id","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":179,"b":180,"line":7,"col":24},{"a":305,"b":306,"line":11,"col":14}]}}],"usedParamSet":{"id":true},"statement":{"body":"WITH removedTokens AS (\n UPDATE \"IntegrationToken\"\n SET \"isActive\" = FALSE, \"updatedAt\" = CURRENT_TIMESTAMP\n WHERE \"providerId\" = :id AND \"isActive\" = TRUE\n)\nUPDATE \"IntegrationProvider\"\nSET \"isActive\" = FALSE, \"updatedAt\" = CURRENT_TIMESTAMP\nWHERE \"id\" = :id AND \"isActive\" = TRUE","loc":{"a":45,"b":328,"line":4,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * WITH removedTokens AS ( + * UPDATE "IntegrationToken" + * SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP + * WHERE "providerId" = :id AND "isActive" = TRUE + * ) + * UPDATE "IntegrationProvider" + * SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP + * WHERE "id" = :id AND "isActive" = TRUE + * ``` + */ +export const removeIntegrationProviderQuery = new PreparedQuery(removeIntegrationProviderQueryIR); + + diff --git a/packages/server/postgres/queries/generated/removeIntegrationTokenQuery.ts b/packages/server/postgres/queries/generated/removeIntegrationTokenQuery.ts new file mode 100644 index 00000000000..bf4db50dcd8 --- /dev/null +++ b/packages/server/postgres/queries/generated/removeIntegrationTokenQuery.ts @@ -0,0 +1,35 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/removeIntegrationTokenQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +/** 'RemoveIntegrationTokenQuery' parameters type */ +export interface IRemoveIntegrationTokenQueryParams { + providerId: number | null | void; + teamId: string | null | void; + userId: string | null | void; +} + +/** 'RemoveIntegrationTokenQuery' return type */ +export type IRemoveIntegrationTokenQueryResult = void; + +/** 'RemoveIntegrationTokenQuery' query type */ +export interface IRemoveIntegrationTokenQueryQuery { + params: IRemoveIntegrationTokenQueryParams; + result: IRemoveIntegrationTokenQueryResult; +} + +const removeIntegrationTokenQueryIR: any = {"name":"removeIntegrationTokenQuery","params":[{"name":"providerId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":146,"b":155,"line":6,"col":22}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":175,"b":180,"line":7,"col":18}]}},{"name":"userId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":200,"b":205,"line":8,"col":18}]}}],"usedParamSet":{"providerId":true,"teamId":true,"userId":true},"statement":{"body":"UPDATE \"IntegrationToken\"\nSET \"isActive\" = FALSE, \"updatedAt\" = CURRENT_TIMESTAMP\nWHERE \"providerId\" = :providerId\n AND \"teamId\" = :teamId\n AND \"userId\" = :userId\n AND \"isActive\" = TRUE","loc":{"a":42,"b":229,"line":4,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * UPDATE "IntegrationToken" + * SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP + * WHERE "providerId" = :providerId + * AND "teamId" = :teamId + * AND "userId" = :userId + * AND "isActive" = TRUE + * ``` + */ +export const removeIntegrationTokenQuery = new PreparedQuery(removeIntegrationTokenQueryIR); + + diff --git a/packages/server/postgres/queries/generated/removeMattermostAuthQuery.ts b/packages/server/postgres/queries/generated/removeMattermostAuthQuery.ts index 3887e41180b..2659fd29b08 100644 --- a/packages/server/postgres/queries/generated/removeMattermostAuthQuery.ts +++ b/packages/server/postgres/queries/generated/removeMattermostAuthQuery.ts @@ -1,20 +1,11 @@ /** Types generated for queries found in "packages/server/postgres/queries/src/removeMattermostAuthQuery.sql" */ import { PreparedQuery } from '@pgtyped/query'; -/** 'RemoveMattermostAuthQuery' parameters type */ -export interface IRemoveMattermostAuthQueryParams { - userId: string | null | void; - teamId: string | null | void; -} +/** Query 'RemoveMattermostAuthQuery' is invalid, so its result is assigned type 'never' */ +export type IRemoveMattermostAuthQueryResult = never; -/** 'RemoveMattermostAuthQuery' return type */ -export type IRemoveMattermostAuthQueryResult = void; - -/** 'RemoveMattermostAuthQuery' query type */ -export interface IRemoveMattermostAuthQueryQuery { - params: IRemoveMattermostAuthQueryParams; - result: IRemoveMattermostAuthQueryResult; -} +/** Query 'RemoveMattermostAuthQuery' is invalid, so its parameters are assigned type 'never' */ +export type IRemoveMattermostAuthQueryParams = never; const removeMattermostAuthQueryIR: any = {"name":"removeMattermostAuthQuery","params":[{"name":"userId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":138,"b":143,"line":6,"col":18}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":161,"b":166,"line":6,"col":41}]}}],"usedParamSet":{"userId":true,"teamId":true},"statement":{"body":"UPDATE \"MattermostAuth\"\nSET \"isActive\" = FALSE, \"updatedAt\" = CURRENT_TIMESTAMP\nWHERE \"userId\" = :userId AND \"teamId\" = :teamId AND \"isActive\" = TRUE","loc":{"a":40,"b":188,"line":4,"col":0}}}; diff --git a/packages/server/postgres/queries/generated/updateIntegrationProviderQuery.ts b/packages/server/postgres/queries/generated/updateIntegrationProviderQuery.ts new file mode 100644 index 00000000000..75ac31bbc27 --- /dev/null +++ b/packages/server/postgres/queries/generated/updateIntegrationProviderQuery.ts @@ -0,0 +1,54 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/updateIntegrationProviderQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProviderScopesEnum = 'global' | 'org' | 'team'; + +export type IntegrationProviderTypesEnum = 'oauth2' | 'pat' | 'webhook'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'UpdateIntegrationProviderQuery' parameters type */ +export interface IUpdateIntegrationProviderQueryParams { + ids: readonly (number | null | void)[]; + provider: IntegrationProvidersEnum | null | void; + type: IntegrationProviderTypesEnum | null | void; + scope: IntegrationProviderScopesEnum | null | void; + name: string | null | void; + providerMetadata: Json | null | void; + orgId: string | null | void; + teamId: string | null | void; +} + +/** 'UpdateIntegrationProviderQuery' return type */ +export type IUpdateIntegrationProviderQueryResult = void; + +/** 'UpdateIntegrationProviderQuery' query type */ +export interface IUpdateIntegrationProviderQueryQuery { + params: IUpdateIntegrationProviderQueryParams; + result: IUpdateIntegrationProviderQueryResult; +} + +const updateIntegrationProviderQueryIR: any = {"name":"updateIntegrationProviderQuery","params":[{"name":"ids","codeRefs":{"defined":{"a":49,"b":51,"line":3,"col":8},"used":[{"a":427,"b":429,"line":16,"col":9}]},"transform":{"type":"array_spread"}},{"name":"provider","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":126,"b":133,"line":8,"col":25}]}},{"name":"type","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":170,"b":173,"line":9,"col":21}]}},{"name":"scope","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":207,"b":211,"line":10,"col":22}]}},{"name":"name","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":245,"b":248,"line":11,"col":21}]}},{"name":"providerMetadata","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":293,"b":308,"line":12,"col":33}]}},{"name":"orgId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":354,"b":358,"line":13,"col":22}]}},{"name":"teamId","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":394,"b":399,"line":14,"col":23}]}}],"usedParamSet":{"provider":true,"type":true,"scope":true,"name":true,"providerMetadata":true,"orgId":true,"teamId":true,"ids":true},"statement":{"body":"UPDATE\n \"IntegrationProvider\"\nSET\n \"provider\" = COALESCE(:provider, \"provider\"),\n \"type\" = COALESCE(:type, \"type\"),\n \"scope\" = COALESCE(:scope, \"scope\"),\n \"name\" = COALESCE(:name, \"name\"),\n \"providerMetadata\" = COALESCE(:providerMetadata, \"providerMetadata\"),\n \"orgId\" = COALESCE(:orgId, \"orgId\"),\n \"teamId\" = COALESCE(:teamId, \"teamId\")\nWHERE\n id IN :ids","loc":{"a":66,"b":429,"line":5,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * UPDATE + * "IntegrationProvider" + * SET + * "provider" = COALESCE(:provider, "provider"), + * "type" = COALESCE(:type, "type"), + * "scope" = COALESCE(:scope, "scope"), + * "name" = COALESCE(:name, "name"), + * "providerMetadata" = COALESCE(:providerMetadata, "providerMetadata"), + * "orgId" = COALESCE(:orgId, "orgId"), + * "teamId" = COALESCE(:teamId, "teamId") + * WHERE + * id IN :ids + * ``` + */ +export const updateIntegrationProviderQuery = new PreparedQuery(updateIntegrationProviderQueryIR); + + diff --git a/packages/server/postgres/queries/generated/upsertGlobalIntegrationProviderQuery.ts b/packages/server/postgres/queries/generated/upsertGlobalIntegrationProviderQuery.ts new file mode 100644 index 00000000000..9a5d635e8b3 --- /dev/null +++ b/packages/server/postgres/queries/generated/upsertGlobalIntegrationProviderQuery.ts @@ -0,0 +1,70 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/upsertGlobalIntegrationProviderQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type IntegrationProvidersEnum = 'gitlab' | 'mattermost'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'UpsertGlobalIntegrationProviderQuery' parameters type */ +export interface IUpsertGlobalIntegrationProviderQueryParams { + provider: IntegrationProvidersEnum | null | void; + name: string | null | void; + providerMetadata: Json | null | void; +} + +/** 'UpsertGlobalIntegrationProviderQuery' return type */ +export type IUpsertGlobalIntegrationProviderQueryResult = void; + +/** 'UpsertGlobalIntegrationProviderQuery' query type */ +export interface IUpsertGlobalIntegrationProviderQueryQuery { + params: IUpsertGlobalIntegrationProviderQueryParams; + result: IUpsertGlobalIntegrationProviderQueryResult; +} + +const upsertGlobalIntegrationProviderQueryIR: any = {"name":"upsertGlobalIntegrationProviderQuery","params":[{"name":"provider","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":184,"b":191,"line":15,"col":3}]}},{"name":"name","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":298,"b":301,"line":19,"col":3}]}},{"name":"providerMetadata","transform":{"type":"scalar"},"codeRefs":{"used":[{"a":307,"b":322,"line":20,"col":3}]}}],"usedParamSet":{"provider":true,"name":true,"providerMetadata":true},"statement":{"body":"INSERT INTO\n\t\"IntegrationProvider\" (\n\t\t\"provider\",\n\t\t\"type\",\n\t\t\"scope\",\n\t\t\"isActive\",\n\t\t\"name\",\n\t\t\"providerMetadata\"\n\t)\nVALUES\n\t(\n\t\t:provider,\n\t\t'oauth2' :: \"IntegrationProviderTypesEnum\",\n\t\t'global' :: \"IntegrationProviderScopesEnum\",\n\t\tTRUE,\n\t\t:name,\n\t\t:providerMetadata\n\t) ON CONFLICT (\"scopeGlobal\", \"provider\") DO\nUPDATE\nSET\n\t(\n\t\t\"provider\",\n\t\t\"type\",\n\t\t\"scope\",\n\t\t\"isActive\",\n\t\t\"name\",\n\t\t\"providerMetadata\",\n\t\t\"updatedAt\"\n\t) = (\n\t\tEXCLUDED.\"provider\",\n\t\t'oauth2' :: \"IntegrationProviderTypesEnum\",\n\t\t'global' :: \"IntegrationProviderScopesEnum\",\n\t\tTRUE,\n\t\tEXCLUDED.\"name\",\n\t\tEXCLUDED.\"providerMetadata\",\n\t\tCURRENT_TIMESTAMP\n\t)","loc":{"a":51,"b":681,"line":4,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * INSERT INTO + * "IntegrationProvider" ( + * "provider", + * "type", + * "scope", + * "isActive", + * "name", + * "providerMetadata" + * ) + * VALUES + * ( + * :provider, + * 'oauth2' :: "IntegrationProviderTypesEnum", + * 'global' :: "IntegrationProviderScopesEnum", + * TRUE, + * :name, + * :providerMetadata + * ) ON CONFLICT ("scopeGlobal", "provider") DO + * UPDATE + * SET + * ( + * "provider", + * "type", + * "scope", + * "isActive", + * "name", + * "providerMetadata", + * "updatedAt" + * ) = ( + * EXCLUDED."provider", + * 'oauth2' :: "IntegrationProviderTypesEnum", + * 'global' :: "IntegrationProviderScopesEnum", + * TRUE, + * EXCLUDED."name", + * EXCLUDED."providerMetadata", + * CURRENT_TIMESTAMP + * ) + * ``` + */ +export const upsertGlobalIntegrationProviderQuery = new PreparedQuery(upsertGlobalIntegrationProviderQueryIR); + + diff --git a/packages/server/postgres/queries/generated/upsertIntegrationTokenQuery.ts b/packages/server/postgres/queries/generated/upsertIntegrationTokenQuery.ts new file mode 100644 index 00000000000..55d097a96d0 --- /dev/null +++ b/packages/server/postgres/queries/generated/upsertIntegrationTokenQuery.ts @@ -0,0 +1,64 @@ +/** Types generated for queries found in "packages/server/postgres/queries/src/upsertIntegrationTokenQuery.sql" */ +import { PreparedQuery } from '@pgtyped/query'; + +export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; + +/** 'UpsertIntegrationTokenQuery' parameters type */ +export interface IUpsertIntegrationTokenQueryParams { + auth: { + tokenMetadata: Json | null | void, + providerId: number | null | void, + teamId: string | null | void, + userId: string | null | void + }; +} + +/** 'UpsertIntegrationTokenQuery' return type */ +export interface IUpsertIntegrationTokenQueryResult { + createdAt: Date; + updatedAt: Date; + teamId: string; + userId: string; + providerId: number; + isActive: boolean; + tokenMetadata: Json; +} + +/** 'UpsertIntegrationTokenQuery' query type */ +export interface IUpsertIntegrationTokenQueryQuery { + params: IUpsertIntegrationTokenQueryParams; + result: IUpsertIntegrationTokenQueryResult; +} + +const upsertIntegrationTokenQueryIR: any = {"name":"upsertIntegrationTokenQuery","params":[{"name":"auth","codeRefs":{"defined":{"a":46,"b":49,"line":3,"col":8},"used":[{"a":217,"b":220,"line":13,"col":3}]},"transform":{"type":"pick_tuple","keys":["tokenMetadata","providerId","teamId","userId"]}}],"usedParamSet":{"auth":true},"statement":{"body":"INSERT INTO\n \"IntegrationToken\" (\n \"tokenMetadata\",\n \"providerId\",\n \"teamId\",\n \"userId\"\n )\nVALUES\n :auth ON CONFLICT (\"providerId\", \"userId\", \"teamId\") DO\nUPDATE\nSET\n (\n \"tokenMetadata\",\n \"providerId\",\n \"isActive\",\n \"updatedAt\"\n ) = (\n EXCLUDED.\"tokenMetadata\",\n EXCLUDED.\"providerId\",\n TRUE,\n CURRENT_TIMESTAMP\n ) RETURNING *","loc":{"a":102,"b":469,"line":5,"col":0}}}; + +/** + * Query generated from SQL: + * ``` + * INSERT INTO + * "IntegrationToken" ( + * "tokenMetadata", + * "providerId", + * "teamId", + * "userId" + * ) + * VALUES + * :auth ON CONFLICT ("providerId", "userId", "teamId") DO + * UPDATE + * SET + * ( + * "tokenMetadata", + * "providerId", + * "isActive", + * "updatedAt" + * ) = ( + * EXCLUDED."tokenMetadata", + * EXCLUDED."providerId", + * TRUE, + * CURRENT_TIMESTAMP + * ) RETURNING * + * ``` + */ +export const upsertIntegrationTokenQuery = new PreparedQuery(upsertIntegrationTokenQueryIR); + + diff --git a/packages/server/postgres/queries/generated/upsertMattermostAuthQuery.ts b/packages/server/postgres/queries/generated/upsertMattermostAuthQuery.ts deleted file mode 100644 index 3ec47ccd622..00000000000 --- a/packages/server/postgres/queries/generated/upsertMattermostAuthQuery.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** Types generated for queries found in "packages/server/postgres/queries/src/upsertMattermostAuthQuery.sql" */ -import { PreparedQuery } from '@pgtyped/query'; - -/** 'UpsertMattermostAuthQuery' parameters type */ -export interface IUpsertMattermostAuthQueryParams { - auth: { - webhookUrl: string | null | void, - userId: string | null | void, - teamId: string | null | void - }; -} - -/** 'UpsertMattermostAuthQuery' return type */ -export type IUpsertMattermostAuthQueryResult = void; - -/** 'UpsertMattermostAuthQuery' query type */ -export interface IUpsertMattermostAuthQueryQuery { - params: IUpsertMattermostAuthQueryParams; - result: IUpsertMattermostAuthQueryResult; -} - -const upsertMattermostAuthQueryIR: any = {"name":"upsertMattermostAuthQuery","params":[{"name":"auth","codeRefs":{"defined":{"a":44,"b":47,"line":3,"col":8},"used":[{"a":173,"b":176,"line":10,"col":8}]},"transform":{"type":"pick_tuple","keys":["webhookUrl","userId","teamId"]}}],"usedParamSet":{"auth":true},"statement":{"body":"INSERT INTO \"MattermostAuth\" (\n \"webhookUrl\",\n \"userId\",\n \"teamId\"\n )\nVALUES :auth ON CONFLICT (\"userId\", \"teamId\") DO\nUPDATE\nSET (\n \"isActive\",\n \"updatedAt\",\n \"webhookUrl\",\n \"teamId\",\n \"userId\"\n ) = (\n TRUE,\n CURRENT_TIMESTAMP,\n EXCLUDED.\"webhookUrl\",\n EXCLUDED.\"teamId\",\n EXCLUDED.\"userId\"\n )","loc":{"a":85,"b":420,"line":5,"col":0}}}; - -/** - * Query generated from SQL: - * ``` - * INSERT INTO "MattermostAuth" ( - * "webhookUrl", - * "userId", - * "teamId" - * ) - * VALUES :auth ON CONFLICT ("userId", "teamId") DO - * UPDATE - * SET ( - * "isActive", - * "updatedAt", - * "webhookUrl", - * "teamId", - * "userId" - * ) = ( - * TRUE, - * CURRENT_TIMESTAMP, - * EXCLUDED."webhookUrl", - * EXCLUDED."teamId", - * EXCLUDED."userId" - * ) - * ``` - */ -export const upsertMattermostAuthQuery = new PreparedQuery(upsertMattermostAuthQueryIR); - - diff --git a/packages/server/postgres/queries/getIntegrationProviders.ts b/packages/server/postgres/queries/getIntegrationProviders.ts new file mode 100644 index 00000000000..8b257756d5b --- /dev/null +++ b/packages/server/postgres/queries/getIntegrationProviders.ts @@ -0,0 +1,19 @@ +import {MaybeReadonly} from '../../../client/types/generics' +import getPg from '../getPg' +import {getIntegrationProvidersQuery} from './generated/getIntegrationProvidersQuery' +import {IntegrationProvider, mapToIntegrationProviderMetadata} from '../types/IntegrationProvider' +import {IntegrationProvidersEnum} from './generated/getIntegrationProvidersByIdsQuery' + +const getIntegrationProviders = async ( + provider: MaybeReadonly, + teamId: MaybeReadonly, + orgId: MaybeReadonly +): Promise => { + const providers = await getIntegrationProvidersQuery.run({provider, teamId, orgId}, getPg()) + return providers.map((provider) => ({ + ...provider, + providerMetadata: mapToIntegrationProviderMetadata(provider.type, provider.providerMetadata) + })) +} + +export default getIntegrationProviders diff --git a/packages/server/postgres/queries/getIntegrationProvidersByIds.ts b/packages/server/postgres/queries/getIntegrationProvidersByIds.ts new file mode 100644 index 00000000000..997b7888ee5 --- /dev/null +++ b/packages/server/postgres/queries/getIntegrationProvidersByIds.ts @@ -0,0 +1,15 @@ +import {getIntegrationProvidersByIdsQuery} from './generated/getIntegrationProvidersByIdsQuery' +import getPg from '../getPg' +import {IntegrationProvider, mapToIntegrationProviderMetadata} from '../types/IntegrationProvider' + +const getIntegrationProvidersByIds = async ( + ids: readonly number[] +): Promise => { + const providers = await getIntegrationProvidersByIdsQuery.run({ids}, getPg()) + return providers.map((provider) => ({ + ...provider, + providerMetadata: mapToIntegrationProviderMetadata(provider.type, provider.providerMetadata) + })) +} + +export default getIntegrationProvidersByIds diff --git a/packages/server/postgres/queries/getIntegrationTokenWithProvider.ts b/packages/server/postgres/queries/getIntegrationTokenWithProvider.ts new file mode 100644 index 00000000000..80e4f193f60 --- /dev/null +++ b/packages/server/postgres/queries/getIntegrationTokenWithProvider.ts @@ -0,0 +1,33 @@ +import getPg from '../getPg' +import {getIntegrationTokensWithProviderQuery} from './generated/getIntegrationTokensWithProviderQuery' +import {mapToIntegrationProviderMetadata} from '../types/IntegrationProvider' +import { + IntegrationTokenWithProvider, + nestIntegrationProviderOnIntegrationToken +} from '../types/IntegrationTokenWithProvider' +import {IntegrationProvidersEnum} from './generated/getIntegrationProvidersByIdsQuery' + +const getIntegrationTokenWithProvider = async ( + provider: IntegrationProvidersEnum, + teamId: string, + userId: string +): Promise => { + const [res] = await getIntegrationTokensWithProviderQuery.run( + {provider, teamId, userId, byUserId: true}, + getPg() + ) + const tokenWithProvider = nestIntegrationProviderOnIntegrationToken(res) + const {provider: integrationProvider} = tokenWithProvider + return { + ...tokenWithProvider, + provider: { + ...integrationProvider, + providerMetadata: mapToIntegrationProviderMetadata( + integrationProvider.type, + integrationProvider.providerMetadata + ) + } + } +} + +export default getIntegrationTokenWithProvider diff --git a/packages/server/postgres/queries/getIntegrationTokensByTeamWithProvider.ts b/packages/server/postgres/queries/getIntegrationTokensByTeamWithProvider.ts new file mode 100644 index 00000000000..ba6c7df9a9a --- /dev/null +++ b/packages/server/postgres/queries/getIntegrationTokensByTeamWithProvider.ts @@ -0,0 +1,32 @@ +import getPg from '../getPg' +import {mapToIntegrationProviderMetadata} from '../types/IntegrationProvider' +import { + IntegrationTokenWithProvider, + nestIntegrationProviderOnIntegrationToken +} from '../types/IntegrationTokenWithProvider' +import {IntegrationProvidersEnum} from './generated/getIntegrationProvidersByIdsQuery' +import {getIntegrationTokensWithProviderQuery} from './generated/getIntegrationTokensWithProviderQuery' + +const getIntegrationTokensByTeamWithProvider = async ( + provider: IntegrationProvidersEnum, + teamId: string +): Promise => + ( + await getIntegrationTokensWithProviderQuery.run( + {provider, teamId, userId: null, byUserId: false}, + getPg() + ) + ) + .map(nestIntegrationProviderOnIntegrationToken) + .map((integrationTokenWithProvider) => ({ + ...integrationTokenWithProvider, + provider: { + ...integrationTokenWithProvider.provider, + providerMetadata: mapToIntegrationProviderMetadata( + integrationTokenWithProvider.provider.type, + integrationTokenWithProvider.provider.providerMetadata + ) + } + })) + +export default getIntegrationTokensByTeamWithProvider diff --git a/packages/server/postgres/queries/getMattermostAuthByUserIdTeamId.ts b/packages/server/postgres/queries/getMattermostAuthByUserIdTeamId.ts deleted file mode 100644 index a5390569c96..00000000000 --- a/packages/server/postgres/queries/getMattermostAuthByUserIdTeamId.ts +++ /dev/null @@ -1,16 +0,0 @@ -import getPg from '../getPg' -import { - getMattermostAuthByUserIdTeamIdQuery, - IGetMattermostAuthByUserIdTeamIdQueryResult -} from './generated/getMattermostAuthByUserIdTeamIdQuery' - -// if we want to query multiple userIds/teamIds, just call this multiple times -export interface GetMattermostAuthByUserIdTeamIdResult - extends IGetMattermostAuthByUserIdTeamIdQueryResult { - isActive: true -} -const getMattermostAuthByUserIdTeamId = async (userId: string, teamId: string) => { - const [res] = await getMattermostAuthByUserIdTeamIdQuery.run({userId, teamId}, getPg()) - return res as GetMattermostAuthByUserIdTeamIdResult | undefined -} -export default getMattermostAuthByUserIdTeamId diff --git a/packages/server/postgres/queries/getMattermostBestAuthByUserIdTeamId.ts b/packages/server/postgres/queries/getMattermostBestAuthByUserIdTeamId.ts deleted file mode 100644 index ed7e2852c50..00000000000 --- a/packages/server/postgres/queries/getMattermostBestAuthByUserIdTeamId.ts +++ /dev/null @@ -1,15 +0,0 @@ -import getPg from '../getPg' -import { - getMattermostBestAuthByUserIdTeamIdQuery, - IGetMattermostBestAuthByUserIdTeamIdQueryResult -} from './generated/getMattermostBestAuthByUserIdTeamIdQuery' - -export interface GetMattermostBestAuthByUserIdTeamIdResult - extends IGetMattermostBestAuthByUserIdTeamIdQueryResult { - isActive: true -} -const getMattermostBestAuthByUserIdTeamId = async (userId: string, teamId: string) => { - const [res] = await getMattermostBestAuthByUserIdTeamIdQuery.run({userId, teamId}, getPg()) - return res as GetMattermostBestAuthByUserIdTeamIdResult | undefined -} -export default getMattermostBestAuthByUserIdTeamId diff --git a/packages/server/postgres/queries/insertIntegrationProvider.ts b/packages/server/postgres/queries/insertIntegrationProvider.ts new file mode 100644 index 00000000000..32bc1ef1308 --- /dev/null +++ b/packages/server/postgres/queries/insertIntegrationProvider.ts @@ -0,0 +1,10 @@ +import getPg from '../getPg' +import { + IInsertIntegrationProviderQueryParams, + insertIntegrationProviderQuery +} from './generated/insertIntegrationProviderQuery' + +const insertIntegrationProvider = async (provider: IInsertIntegrationProviderQueryParams) => + insertIntegrationProviderQuery.run(provider, getPg()) + +export default insertIntegrationProvider diff --git a/packages/server/postgres/queries/insertIntegrationProviderWithToken.ts b/packages/server/postgres/queries/insertIntegrationProviderWithToken.ts new file mode 100644 index 00000000000..87ea2b97805 --- /dev/null +++ b/packages/server/postgres/queries/insertIntegrationProviderWithToken.ts @@ -0,0 +1,11 @@ +import getPg from '../getPg' +import { + IInsertIntegrationProviderWithTokenQueryParams, + insertIntegrationProviderWithTokenQuery +} from './generated/insertIntegrationProviderWithTokenQuery' + +const insertIntegrationProviderWithToken = async ( + providerWithToken: IInsertIntegrationProviderWithTokenQueryParams +) => insertIntegrationProviderWithTokenQuery.run(providerWithToken, getPg()) + +export default insertIntegrationProviderWithToken diff --git a/packages/server/postgres/queries/removeIntegrationProvider.ts b/packages/server/postgres/queries/removeIntegrationProvider.ts new file mode 100644 index 00000000000..74fa910a290 --- /dev/null +++ b/packages/server/postgres/queries/removeIntegrationProvider.ts @@ -0,0 +1,7 @@ +import getPg from '../getPg' +import {removeIntegrationProviderQuery} from './generated/removeIntegrationProviderQuery' + +const removeIntegrationProvider = async (id: number) => { + await removeIntegrationProviderQuery.run({id}, getPg()) +} +export default removeIntegrationProvider diff --git a/packages/server/postgres/queries/removeIntegrationToken.ts b/packages/server/postgres/queries/removeIntegrationToken.ts new file mode 100644 index 00000000000..ab431bb365a --- /dev/null +++ b/packages/server/postgres/queries/removeIntegrationToken.ts @@ -0,0 +1,7 @@ +import getPg from '../getPg' +import {removeIntegrationTokenQuery} from './generated/removeIntegrationTokenQuery' + +const removeIntegrationToken = async (providerId: number, teamId: string, userId: string) => { + await removeIntegrationTokenQuery.run({providerId, teamId, userId}, getPg()) +} +export default removeIntegrationToken diff --git a/packages/server/postgres/queries/removeMattermostAuth.ts b/packages/server/postgres/queries/removeMattermostAuth.ts deleted file mode 100644 index 40053ee79e3..00000000000 --- a/packages/server/postgres/queries/removeMattermostAuth.ts +++ /dev/null @@ -1,7 +0,0 @@ -import getPg from '../getPg' -import {removeMattermostAuthQuery} from './generated/removeMattermostAuthQuery' - -const removeMattermostAuth = async (userId: string, teamId: string) => { - await removeMattermostAuthQuery.run({userId, teamId}, getPg()) -} -export default removeMattermostAuth diff --git a/packages/server/postgres/queries/src/getIntegrationProvidersByIdsQuery.sql b/packages/server/postgres/queries/src/getIntegrationProvidersByIdsQuery.sql new file mode 100644 index 00000000000..9db6bba5a8d --- /dev/null +++ b/packages/server/postgres/queries/src/getIntegrationProvidersByIdsQuery.sql @@ -0,0 +1,10 @@ +/* + @name getIntegrationProvidersByIdsQuery + @param ids -> (...) + */ +SELECT + * +FROM + "IntegrationProvider" +WHERE + id in :ids; diff --git a/packages/server/postgres/queries/src/getIntegrationProvidersQuery.sql b/packages/server/postgres/queries/src/getIntegrationProvidersQuery.sql new file mode 100644 index 00000000000..7237eb73c48 --- /dev/null +++ b/packages/server/postgres/queries/src/getIntegrationProvidersQuery.sql @@ -0,0 +1,21 @@ +/* + @name getIntegrationProvidersQuery + */ +SELECT + * +FROM + "IntegrationProvider" +WHERE + "provider" = :provider + AND "isActive" = TRUE + AND ( + "scope" = 'global' + OR ( + "scope" = 'org' + AND "orgId" = :orgId + ) + OR ( + "scope" = 'team' + AND "teamId" = :teamId + ) + ); diff --git a/packages/server/postgres/queries/src/getIntegrationTokensWithProviderQuery.sql b/packages/server/postgres/queries/src/getIntegrationTokensWithProviderQuery.sql new file mode 100644 index 00000000000..d8798602f12 --- /dev/null +++ b/packages/server/postgres/queries/src/getIntegrationTokensWithProviderQuery.sql @@ -0,0 +1,35 @@ +/* + @name getIntegrationTokensWithProviderQuery + */ +SELECT + "IntegrationToken".*, + "IntegrationProvider"."id" AS "IntegrationProvider_id", + "IntegrationProvider"."provider" AS "IntegrationProvider_provider", + "IntegrationProvider"."type" AS "IntegrationProvider_type", + "IntegrationProvider"."scope" AS "IntegrationProvider_scope", + "IntegrationProvider"."orgId" AS "IntegrationProvider_orgId", + "IntegrationProvider"."teamId" AS "IntegrationProvider_teamId", + "IntegrationProvider"."isActive" AS "IntegrationProvider_isActive", + "IntegrationProvider"."name" AS "IntegrationProvider_name", + "IntegrationProvider"."providerMetadata" AS "IntegrationProvider_providerMetadata", + "IntegrationProvider"."createdAt" AS "IntegrationProvider_createdAt", + "IntegrationProvider"."updatedAt" AS "IntegrationProvider_updatedAt" +FROM + "IntegrationToken" + JOIN "IntegrationProvider" ON ( + "IntegrationToken"."providerId" = "IntegrationProvider"."id" + ) +WHERE + ( + "IntegrationToken"."teamId" = :teamId + AND ( + FALSE = :byUserId + OR ( + TRUE = :byUserId + AND "IntegrationToken"."userId" = :userId + ) + ) + AND "IntegrationProvider"."provider" = :provider + AND "IntegrationToken"."isActive" = TRUE + AND "IntegrationProvider"."isActive" = TRUE + ); diff --git a/packages/server/postgres/queries/src/getMattermostAuthByUserIdTeamIdQuery.sql b/packages/server/postgres/queries/src/getMattermostAuthByUserIdTeamIdQuery.sql deleted file mode 100644 index 37be8baa405..00000000000 --- a/packages/server/postgres/queries/src/getMattermostAuthByUserIdTeamIdQuery.sql +++ /dev/null @@ -1,5 +0,0 @@ -/* - @name getMattermostAuthByUserIdTeamIdQuery -*/ -SELECT * from "MattermostAuth" -WHERE "userId" = :userId AND "teamId" = :teamId AND "isActive" = TRUE; diff --git a/packages/server/postgres/queries/src/getMattermostBestAuthByUserIdTeamIdQuery.sql b/packages/server/postgres/queries/src/getMattermostBestAuthByUserIdTeamIdQuery.sql deleted file mode 100644 index b39d8d693f1..00000000000 --- a/packages/server/postgres/queries/src/getMattermostBestAuthByUserIdTeamIdQuery.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - @name getMattermostBestAuthByUserIdTeamIdQuery -*/ -SELECT ("userId" = :userId)::int AS "userEquality", * - FROM "MattermostAuth" - WHERE "teamId" = :teamId AND "isActive" = TRUE - ORDER BY "userEquality" DESC, "updatedAt" DESC - LIMIT 1; \ No newline at end of file diff --git a/packages/server/postgres/queries/src/insertIntegrationProviderQuery.sql b/packages/server/postgres/queries/src/insertIntegrationProviderQuery.sql new file mode 100644 index 00000000000..afd6e536069 --- /dev/null +++ b/packages/server/postgres/queries/src/insertIntegrationProviderQuery.sql @@ -0,0 +1,23 @@ +/* + @name insertIntegrationProviderQuery + */ +INSERT INTO + "IntegrationProvider" ( + "provider", + "type", + "scope", + "name", + "providerMetadata", + "orgId", + "teamId" + ) +VALUES + ( + :provider, + :type, + :scope, + :name, + :providerMetadata, + :orgId, + :teamId + ); diff --git a/packages/server/postgres/queries/src/insertIntegrationProviderWithTokenQuery.sql b/packages/server/postgres/queries/src/insertIntegrationProviderWithTokenQuery.sql new file mode 100644 index 00000000000..1e7b23966fb --- /dev/null +++ b/packages/server/postgres/queries/src/insertIntegrationProviderWithTokenQuery.sql @@ -0,0 +1,60 @@ +/* + @name insertIntegrationProviderWithTokenQuery + @param provider -> (provider, type, scope, name, providerMetadata, orgId, teamId) + */ +WITH providerRow AS ( + INSERT INTO + "IntegrationProvider" ( + "provider", + "type", + "scope", + "name", + "providerMetadata", + "orgId", + "teamId" + ) + VALUES + :provider RETURNING * +) +INSERT INTO + "IntegrationToken" ( + "teamId", + "userId", + "providerId", + "tokenMetadata" + ) +SELECT + * +FROM + ( + VALUES + ( + ( + SELECT + "teamId" + FROM + providerRow + ), + :userId, + ( + SELECT + "id" + FROM + providerRow + ), + :tokenMetadata :: jsonb + ) + ) AS "integrationToken" ON CONFLICT ("providerId", "userId", "teamId") DO +UPDATE +SET + ( + "tokenMetadata", + "providerId", + "isActive", + "updatedAt" + ) = ( + EXCLUDED."tokenMetadata", + EXCLUDED."providerId", + TRUE, + CURRENT_TIMESTAMP + ) RETURNING "providerId" AS "id"; diff --git a/packages/server/postgres/queries/src/removeIntegrationProviderQuery.sql b/packages/server/postgres/queries/src/removeIntegrationProviderQuery.sql new file mode 100644 index 00000000000..d36554d0293 --- /dev/null +++ b/packages/server/postgres/queries/src/removeIntegrationProviderQuery.sql @@ -0,0 +1,11 @@ +/* + @name removeIntegrationProviderQuery +*/ +WITH removedTokens AS ( + UPDATE "IntegrationToken" + SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP + WHERE "providerId" = :id AND "isActive" = TRUE +) +UPDATE "IntegrationProvider" +SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP +WHERE "id" = :id AND "isActive" = TRUE; diff --git a/packages/server/postgres/queries/src/removeIntegrationTokenQuery.sql b/packages/server/postgres/queries/src/removeIntegrationTokenQuery.sql new file mode 100644 index 00000000000..99df79b3347 --- /dev/null +++ b/packages/server/postgres/queries/src/removeIntegrationTokenQuery.sql @@ -0,0 +1,9 @@ +/* + @name removeIntegrationTokenQuery +*/ +UPDATE "IntegrationToken" +SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP +WHERE "providerId" = :providerId + AND "teamId" = :teamId + AND "userId" = :userId + AND "isActive" = TRUE; \ No newline at end of file diff --git a/packages/server/postgres/queries/src/removeMattermostAuthQuery.sql b/packages/server/postgres/queries/src/removeMattermostAuthQuery.sql deleted file mode 100644 index 794f78d17a1..00000000000 --- a/packages/server/postgres/queries/src/removeMattermostAuthQuery.sql +++ /dev/null @@ -1,6 +0,0 @@ -/* - @name removeMattermostAuthQuery -*/ -UPDATE "MattermostAuth" -SET "isActive" = FALSE, "updatedAt" = CURRENT_TIMESTAMP -WHERE "userId" = :userId AND "teamId" = :teamId AND "isActive" = TRUE; diff --git a/packages/server/postgres/queries/src/updateIntegrationProviderQuery.sql b/packages/server/postgres/queries/src/updateIntegrationProviderQuery.sql new file mode 100644 index 00000000000..4f61a766252 --- /dev/null +++ b/packages/server/postgres/queries/src/updateIntegrationProviderQuery.sql @@ -0,0 +1,16 @@ +/* + @name updateIntegrationProviderQuery + @param ids -> (...) + */ +UPDATE + "IntegrationProvider" +SET + "provider" = COALESCE(:provider, "provider"), + "type" = COALESCE(:type, "type"), + "scope" = COALESCE(:scope, "scope"), + "name" = COALESCE(:name, "name"), + "providerMetadata" = COALESCE(:providerMetadata, "providerMetadata"), + "orgId" = COALESCE(:orgId, "orgId"), + "teamId" = COALESCE(:teamId, "teamId") +WHERE + id IN :ids; diff --git a/packages/server/postgres/queries/src/upsertGlobalIntegrationProviderQuery.sql b/packages/server/postgres/queries/src/upsertGlobalIntegrationProviderQuery.sql new file mode 100644 index 00000000000..15ea6781369 --- /dev/null +++ b/packages/server/postgres/queries/src/upsertGlobalIntegrationProviderQuery.sql @@ -0,0 +1,40 @@ +/* + @name upsertGlobalIntegrationProviderQuery + */ +INSERT INTO + "IntegrationProvider" ( + "provider", + "type", + "scope", + "isActive", + "name", + "providerMetadata" + ) +VALUES + ( + :provider, + 'oauth2' :: "IntegrationProviderTypesEnum", + 'global' :: "IntegrationProviderScopesEnum", + TRUE, + :name, + :providerMetadata + ) ON CONFLICT ("scopeGlobal", "provider") DO +UPDATE +SET + ( + "provider", + "type", + "scope", + "isActive", + "name", + "providerMetadata", + "updatedAt" + ) = ( + EXCLUDED."provider", + 'oauth2' :: "IntegrationProviderTypesEnum", + 'global' :: "IntegrationProviderScopesEnum", + TRUE, + EXCLUDED."name", + EXCLUDED."providerMetadata", + CURRENT_TIMESTAMP + ); diff --git a/packages/server/postgres/queries/src/upsertIntegrationTokenQuery.sql b/packages/server/postgres/queries/src/upsertIntegrationTokenQuery.sql new file mode 100644 index 00000000000..2bf163e4672 --- /dev/null +++ b/packages/server/postgres/queries/src/upsertIntegrationTokenQuery.sql @@ -0,0 +1,26 @@ +/* + @name upsertIntegrationTokenQuery + @param auth -> (tokenMetadata, providerId, teamId, userId) + */ +INSERT INTO + "IntegrationToken" ( + "tokenMetadata", + "providerId", + "teamId", + "userId" + ) +VALUES + :auth ON CONFLICT ("providerId", "userId", "teamId") DO +UPDATE +SET + ( + "tokenMetadata", + "providerId", + "isActive", + "updatedAt" + ) = ( + EXCLUDED."tokenMetadata", + EXCLUDED."providerId", + TRUE, + CURRENT_TIMESTAMP + ) RETURNING *; diff --git a/packages/server/postgres/queries/src/upsertMattermostAuthQuery.sql b/packages/server/postgres/queries/src/upsertMattermostAuthQuery.sql deleted file mode 100644 index 287e82114eb..00000000000 --- a/packages/server/postgres/queries/src/upsertMattermostAuthQuery.sql +++ /dev/null @@ -1,24 +0,0 @@ -/* - @name upsertMattermostAuthQuery - @param auth -> (webhookUrl, userId, teamId) - */ -INSERT INTO "MattermostAuth" ( - "webhookUrl", - "userId", - "teamId" - ) -VALUES :auth ON CONFLICT ("userId", "teamId") DO -UPDATE -SET ( - "isActive", - "updatedAt", - "webhookUrl", - "teamId", - "userId" - ) = ( - TRUE, - CURRENT_TIMESTAMP, - EXCLUDED."webhookUrl", - EXCLUDED."teamId", - EXCLUDED."userId" - ); \ No newline at end of file diff --git a/packages/server/postgres/queries/updateIntegrationProvider.ts b/packages/server/postgres/queries/updateIntegrationProvider.ts new file mode 100644 index 00000000000..812e3a0e7ee --- /dev/null +++ b/packages/server/postgres/queries/updateIntegrationProvider.ts @@ -0,0 +1,10 @@ +import getPg from '../getPg' +import { + IUpdateIntegrationProviderQueryParams, + updateIntegrationProviderQuery +} from './generated/updateIntegrationProviderQuery' + +const updateIntegrationProvider = async (params: IUpdateIntegrationProviderQueryParams) => { + await updateIntegrationProviderQuery.run(params, getPg()) +} +export default updateIntegrationProvider diff --git a/packages/server/postgres/queries/upsertGlobalIntegrationProvider.ts b/packages/server/postgres/queries/upsertGlobalIntegrationProvider.ts new file mode 100644 index 00000000000..b91a513b56d --- /dev/null +++ b/packages/server/postgres/queries/upsertGlobalIntegrationProvider.ts @@ -0,0 +1,12 @@ +import getPg from '../getPg' +import { + IUpsertGlobalIntegrationProviderQueryParams, + upsertGlobalIntegrationProviderQuery +} from './generated/upsertGlobalIntegrationProviderQuery' + +const upsertGlobalIntegrationProvider = async ( + provider: IUpsertGlobalIntegrationProviderQueryParams +) => { + return upsertGlobalIntegrationProviderQuery.run(provider, getPg()) +} +export default upsertGlobalIntegrationProvider diff --git a/packages/server/postgres/queries/upsertIntegrationToken.ts b/packages/server/postgres/queries/upsertIntegrationToken.ts new file mode 100644 index 00000000000..71372733ee1 --- /dev/null +++ b/packages/server/postgres/queries/upsertIntegrationToken.ts @@ -0,0 +1,10 @@ +import getPg from '../getPg' +import { + IUpsertIntegrationTokenQueryParams, + upsertIntegrationTokenQuery +} from './generated/upsertIntegrationTokenQuery' + +const upsertGitHubAuth = async (auth: IUpsertIntegrationTokenQueryParams['auth']) => { + await upsertIntegrationTokenQuery.run({auth}, getPg()) +} +export default upsertGitHubAuth diff --git a/packages/server/postgres/queries/upsertMattermostAuth.ts b/packages/server/postgres/queries/upsertMattermostAuth.ts deleted file mode 100644 index d1ef183809a..00000000000 --- a/packages/server/postgres/queries/upsertMattermostAuth.ts +++ /dev/null @@ -1,10 +0,0 @@ -import getPg from '../getPg' -import { - IUpsertMattermostAuthQueryParams, - upsertMattermostAuthQuery -} from './generated/upsertMattermostAuthQuery' - -const upsertMattermostAuth = async (auth: IUpsertMattermostAuthQueryParams['auth']) => { - await upsertMattermostAuthQuery.run({auth}, getPg()) -} -export default upsertMattermostAuth diff --git a/packages/server/postgres/types/IntegrationProvider.ts b/packages/server/postgres/types/IntegrationProvider.ts new file mode 100644 index 00000000000..af4910e3c77 --- /dev/null +++ b/packages/server/postgres/types/IntegrationProvider.ts @@ -0,0 +1,185 @@ +import { + IGetIntegrationProvidersByIdsQueryResult as _IntegrationProvider, + IntegrationProviderTypesEnum as _IntegrationProviderTypesEnum, + IntegrationProviderScopesEnum as _IntegrationProviderScopesEnum, + IntegrationProvidersEnum as _IntegrationProvidersEnum +} from '../queries/generated/getIntegrationProvidersByIdsQuery' + +export type IntegrationProviderTypesEnum = _IntegrationProviderTypesEnum +export type IntegrationProviderScopesEnum = _IntegrationProviderScopesEnum +export type IntegrationProvidersEnum = _IntegrationProvidersEnum + +/** + * Represents a single integration provider. + * Integration provider spefic data is kept in the providerMetadata field (JSONB). + * Depending on the {@link IntegrationProvider.type} metadata will have a different structure, + * @see {@link OAuth2IntegrationProviderMetadata} and {@link WebHookIntegrationProviderMetadata}. + * + * To add a global integration provider + * 1. If it's a new provider, add a new provider to the {@link IntegrationProvidersEnum} via migration + * 2. To make it availabe to all users, configure new integration in {@link makeGlobalIntegrationProvidersFromEnv}, it'll be automatically added to the database via postdeploy script + * 3. New integration can also be added in runtime by calling {@link addIntegrationProvider} mutation by superuser + * + * When adding a new integration provider with a new authentication type (not defined in {@link IntegrationProviderTypesEnum}), a few additional steps is required + * 1. Add a new type to the {@link IntegrationProviderTypesEnum} via migration + * 2. If there's any speficic data needed to be store by the integration provider define a new type, similar to {@link OAuth2IntegrationProviderMetadata} and {@link WebHookIntegrationProviderMetadata} + * 3. Make sure to add a case in {@link mapToIntegrationProviderMetadata} to get properly typed data from the providerMetadata field + * 4. Update {@link addIntegrationProvider} mutation to handle the new type properly + * 5. Update {@link updateIntegrationProvider} mutation to handle the new type properly + * 6. If new integration provider requires authorization, update {@link addIntegrationToken} mutation to handle it properly + */ +export interface IntegrationProvider extends Omit<_IntegrationProvider, 'providerMetadata'> { + providerMetadata: IntegrationProviderMetadata +} + +/** + * Metadata structure of the OAuth2 integration provider. + */ +export interface OAuth2IntegrationProviderMetadata { + scopes: string[] + clientId: string + clientSecret: string + serverBaseUrl: string +} + +/** + * Metadata structure of the WebHook integration provider. + */ +interface WebHookIntegrationProviderMetadata { + webhookUrl: string +} + +/** + * Union type representing all the possible types of integration providers + */ +export type IntegrationProviderMetadata = + | OAuth2IntegrationProviderMetadata + | WebHookIntegrationProviderMetadata + +const mapToOAuth2IntegrationProviderMetadata = ( + providerMetadata: any +): OAuth2IntegrationProviderMetadata => { + const {scopes, clientId, clientSecret, serverBaseUrl} = providerMetadata + return {scopes, clientId, clientSecret, serverBaseUrl} +} + +const mapToWebHookIntegrationProviderMetadata = (providerMetadata: any) => { + const {webhookUrl} = providerMetadata + return {webhookUrl} +} + +/** + * Parse the integration provider metadata from the database as a proper {@link IntegrationProviderMetadata} + * Used when data is fetched from the database. + * @param providerType + * @param providerMetadata + * @returns properly typed {@link IntegrationProviderMetadata} + */ +export const mapToIntegrationProviderMetadata = ( + providerType: IntegrationProviderTypesEnum, + providerMetadata: any +): IntegrationProviderMetadata => { + if (providerType === 'oauth2') { + return mapToOAuth2IntegrationProviderMetadata(providerMetadata) + } + + if (providerType === 'webhook') { + return mapToWebHookIntegrationProviderMetadata(providerMetadata) + } + + // fail early, this should never happen in production, aka famous last words + throw new Error(`Unsupported provider type: ${providerType}`) +} + +export const isOAuth2ProviderMetadata = ( + providerMetadata: IntegrationProviderMetadata +): providerMetadata is OAuth2IntegrationProviderMetadata => { + const maybeOAuth2ProviderMetadata = providerMetadata as OAuth2IntegrationProviderMetadata + return ( + maybeOAuth2ProviderMetadata.clientId !== undefined && + maybeOAuth2ProviderMetadata.clientSecret !== undefined && + maybeOAuth2ProviderMetadata.scopes !== undefined && + maybeOAuth2ProviderMetadata.serverBaseUrl !== undefined + ) +} + +export const isWebHookProviderMetadata = ( + providerMetadata: IntegrationProviderMetadata +): providerMetadata is WebHookIntegrationProviderMetadata => { + const maybeWebhookProviderMetadata = providerMetadata as WebHookIntegrationProviderMetadata + return maybeWebhookProviderMetadata.webhookUrl !== undefined +} + +export interface IntegrationProviderInput { + id: string + name: string + orgId: string + teamId: string + provider: IntegrationProvidersEnum + type: IntegrationProviderTypesEnum + scope: IntegrationProviderScopesEnum + webhookProviderMetadataInput?: { + webhookUrl: string + } + oAuth2ProviderMetadataInput?: { + scopes: string[] + clientId: string + clientSecret: string + serverBaseUrl: string + } +} + +export interface GlobalIntegrationProviderInsertParams { + provider: IntegrationProvidersEnum + name: string + providerMetadata: Record +} + +export const createGlobalIntegrationProviderUpsertParams = ( + integrationProvider: Omit +): GlobalIntegrationProviderInsertParams => { + const newIntegrationProviderMetadata = integrationProvider.oAuth2ProviderMetadataInput + if ( + !newIntegrationProviderMetadata || + !isOAuth2ProviderMetadata(newIntegrationProviderMetadata) + ) { + throw new Error('Global provider can be only OAuth2!') + } + + return { + name: integrationProvider.name, + provider: integrationProvider.provider, + providerMetadata: {...newIntegrationProviderMetadata} + } +} + +export interface IntegrationProviderInsertParams { + name: string + orgId: string + teamId: string + provider: IntegrationProvidersEnum + type: IntegrationProviderTypesEnum + scope: IntegrationProviderScopesEnum + providerMetadata: Record +} + +export const createIntegrationProviderInsertParams = ( + integrationProvider: Omit +): IntegrationProviderInsertParams => { + let providerMetadata: Record = {} + if (integrationProvider.type === 'oauth2') { + providerMetadata = integrationProvider.oAuth2ProviderMetadataInput! + } else if (integrationProvider.type === 'webhook') { + providerMetadata = integrationProvider.webhookProviderMetadataInput! + } + + return { + name: integrationProvider.name, + provider: integrationProvider.provider, + type: integrationProvider.type, + scope: integrationProvider.scope, + orgId: integrationProvider.orgId, + teamId: integrationProvider.teamId, + providerMetadata + } +} diff --git a/packages/server/postgres/types/IntegrationToken.ts b/packages/server/postgres/types/IntegrationToken.ts new file mode 100644 index 00000000000..09b21f0b929 --- /dev/null +++ b/packages/server/postgres/types/IntegrationToken.ts @@ -0,0 +1,49 @@ +import {IUpsertIntegrationTokenQueryResult as _IntegrationToken} from '../queries/generated/upsertIntegrationTokenQuery' +import {IntegrationProviderTypesEnum} from './IntegrationProvider' + +/** + * Metadata structure of the OAuth2 integration token. + */ +export interface OAuth2IntegrationTokenMetadata { + accessToken: string + refreshToken: string + scopes: string[] +} + +/** + * Union type representing all the possible types of integration tokens + */ +export type IntegrationTokenMetadata = OAuth2IntegrationTokenMetadata + +const mapToOAuth2IntegrationTokenMetadata = (metadata: any): OAuth2IntegrationTokenMetadata => { + const {accessToken, refreshToken, scopes} = metadata + return {accessToken, refreshToken, scopes} +} + +/** + * Parse the integration provider token metadata from the database as a proper {@link IntegrationTokenMetadata} + * Used when data is fetched from the database. + * @param providerType + * @param metadata + * @returns properly typed {@link IntegrationTokenMetadata} + */ +export const mapToIntegrationTokenMetadata = ( + providerType: IntegrationProviderTypesEnum, + metadata: any +): IntegrationTokenMetadata => { + if (providerType === 'oauth2') { + return mapToOAuth2IntegrationTokenMetadata(metadata) + } + + // fail early, this should never happen in production, aka famous last words + throw new Error(`Unsupported provider token type: ${providerType}`) +} + +/** + * Represents a single integration authorization token. + * Depending on the {@link IntegrationProvider.type} metadata will have a different structure. + * @see {@link IntegrationTokenMetadata} + */ +export interface IntegrationToken extends Omit<_IntegrationToken, 'tokenMetadata'> { + tokenMetadata: IntegrationTokenMetadata +} diff --git a/packages/server/postgres/types/IntegrationTokenWithProvider.ts b/packages/server/postgres/types/IntegrationTokenWithProvider.ts new file mode 100644 index 00000000000..e1bf2757b60 --- /dev/null +++ b/packages/server/postgres/types/IntegrationTokenWithProvider.ts @@ -0,0 +1,31 @@ +import {IGetIntegrationTokensWithProviderQueryResult} from '../queries/generated/getIntegrationTokensWithProviderQuery' +import {IntegrationToken} from './IntegrationToken' +import {IntegrationProvider} from './IntegrationProvider' + +export interface IntegrationTokenWithProvider extends IntegrationToken { + provider: IntegrationProvider +} + +/** + * @param flatIntegrationTokenWithProvider raw flattened integration token with provider fromn database + * @returns {IntegrationTokenWithProvider} + */ +export const nestIntegrationProviderOnIntegrationToken = ( + flatIntegrationTokenWithProvider: IGetIntegrationTokensWithProviderQueryResult +) => { + return Object.keys(flatIntegrationTokenWithProvider).reduce( + (obj, key) => { + if (key.startsWith('IntegrationProvider_')) { + return { + ...obj, + provider: { + ...obj.provider, + [key.replace('IntegrationProvider_', '')]: flatIntegrationTokenWithProvider[key] + } + } + } + return {...obj, [key]: flatIntegrationTokenWithProvider[key]} + }, + {provider: {}} + ) as IntegrationTokenWithProvider +} diff --git a/packages/server/types/githubTypes.ts b/packages/server/types/githubTypes.ts index f710b0258a4..be13a0ac63d 100644 --- a/packages/server/types/githubTypes.ts +++ b/packages/server/types/githubTypes.ts @@ -1,602 +1,605 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck -export type Maybe = T | null -export type InputMaybe = Maybe -export type Exact = {[K in keyof T]: T[K]} -export type MakeOptional = Omit & {[SubKey in K]?: Maybe} -export type MakeMaybe = Omit & {[SubKey in K]: Maybe} +export type Maybe = T | null; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { - ID: string - String: string - Boolean: boolean - Int: number - Float: number + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; /** A (potentially binary) string encoded using base64. */ - Base64String: any + Base64String: any; /** An ISO-8601 encoded date string. */ - Date: any + Date: any; /** An ISO-8601 encoded UTC date string. */ - DateTime: any + DateTime: any; /** A Git object ID. */ - GitObjectID: any + GitObjectID: any; /** Git SSH string */ - GitSSHRemote: any + GitSSHRemote: any; /** An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC. */ - GitTimestamp: any + GitTimestamp: any; /** A string containing HTML code. */ - HTML: any + HTML: any; /** An ISO-8601 encoded UTC date string with millisecond precision. */ - PreciseDateTime: any + PreciseDateTime: any; /** An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string. */ - URI: any + URI: any; /** A valid x509 certificate string */ - X509Certificate: any -} + X509Certificate: any; +}; /** Autogenerated input type of AcceptEnterpriseAdministratorInvitation */ export type AcceptEnterpriseAdministratorInvitationInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The id of the invitation being accepted */ - invitationId: Scalars['ID'] -} + invitationId: Scalars['ID']; +}; /** Autogenerated return type of AcceptEnterpriseAdministratorInvitation */ export type AcceptEnterpriseAdministratorInvitationPayload = { - __typename?: 'AcceptEnterpriseAdministratorInvitationPayload' + __typename?: 'AcceptEnterpriseAdministratorInvitationPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The invitation that was accepted. */ - invitation?: Maybe + invitation?: Maybe; /** A message confirming the result of accepting an administrator invitation. */ - message?: Maybe -} + message?: Maybe; +}; /** Autogenerated input type of AcceptTopicSuggestion */ export type AcceptTopicSuggestionInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The name of the suggested topic. */ - name: Scalars['String'] + name: Scalars['String']; /** The Node ID of the repository. */ - repositoryId: Scalars['ID'] -} + repositoryId: Scalars['ID']; +}; /** Autogenerated return type of AcceptTopicSuggestion */ export type AcceptTopicSuggestionPayload = { - __typename?: 'AcceptTopicSuggestionPayload' + __typename?: 'AcceptTopicSuggestionPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The accepted topic. */ - topic?: Maybe -} + topic?: Maybe; +}; /** Represents an object which can take actions on GitHub. Typically a User or Bot. */ export type Actor = { /** A URL pointing to the actor's public avatar. */ - avatarUrl: Scalars['URI'] + avatarUrl: Scalars['URI']; /** The username of the actor. */ - login: Scalars['String'] + login: Scalars['String']; /** The HTTP path for this actor. */ - resourcePath: Scalars['URI'] + resourcePath: Scalars['URI']; /** The HTTP URL for this actor. */ - url: Scalars['URI'] -} + url: Scalars['URI']; +}; + /** Represents an object which can take actions on GitHub. Typically a User or Bot. */ export type ActorAvatarUrlArgs = { - size?: InputMaybe -} + size?: Maybe; +}; /** Location information for an actor */ export type ActorLocation = { - __typename?: 'ActorLocation' + __typename?: 'ActorLocation'; /** City */ - city?: Maybe + city?: Maybe; /** Country name */ - country?: Maybe + country?: Maybe; /** Country code */ - countryCode?: Maybe + countryCode?: Maybe; /** Region name */ - region?: Maybe + region?: Maybe; /** Region or state code */ - regionCode?: Maybe -} + regionCode?: Maybe; +}; /** Autogenerated input type of AddAssigneesToAssignable */ export type AddAssigneesToAssignableInput = { /** The id of the assignable object to add assignees to. */ - assignableId: Scalars['ID'] + assignableId: Scalars['ID']; /** The id of users to add as assignees. */ - assigneeIds: Array + assigneeIds: Array; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe -} + clientMutationId?: Maybe; +}; /** Autogenerated return type of AddAssigneesToAssignable */ export type AddAssigneesToAssignablePayload = { - __typename?: 'AddAssigneesToAssignablePayload' + __typename?: 'AddAssigneesToAssignablePayload'; /** The item that was assigned. */ - assignable?: Maybe + assignable?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe -} + clientMutationId?: Maybe; +}; /** Autogenerated input type of AddComment */ export type AddCommentInput = { /** The contents of the comment. */ - body: Scalars['String'] + body: Scalars['String']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID'] -} + subjectId: Scalars['ID']; +}; /** Autogenerated return type of AddComment */ export type AddCommentPayload = { - __typename?: 'AddCommentPayload' + __typename?: 'AddCommentPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The edge from the subject's comment connection. */ - commentEdge?: Maybe + commentEdge?: Maybe; /** The subject */ - subject?: Maybe + subject?: Maybe; /** The edge from the subject's timeline connection. */ - timelineEdge?: Maybe -} + timelineEdge?: Maybe; +}; /** Autogenerated input type of AddDiscussionComment */ export type AddDiscussionCommentInput = { /** The contents of the comment. */ - body: Scalars['String'] + body: Scalars['String']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The Node ID of the discussion to comment on. */ - discussionId: Scalars['ID'] + discussionId: Scalars['ID']; /** The Node ID of the discussion comment within this discussion to reply to. */ - replyToId?: InputMaybe -} + replyToId?: Maybe; +}; /** Autogenerated return type of AddDiscussionComment */ export type AddDiscussionCommentPayload = { - __typename?: 'AddDiscussionCommentPayload' + __typename?: 'AddDiscussionCommentPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The newly created discussion comment. */ - comment?: Maybe -} + comment?: Maybe; +}; + +/** Represents a 'added_to_project' event on a given issue or pull request. */ +export type AddedToProjectEvent = Node & { + __typename?: 'AddedToProjectEvent'; + /** Identifies the actor who performed the event. */ + actor?: Maybe; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + /** Identifies the primary key from the database. */ + databaseId?: Maybe; + id: Scalars['ID']; +}; /** Autogenerated input type of AddEnterpriseSupportEntitlement */ export type AddEnterpriseSupportEntitlementInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The ID of the Enterprise which the admin belongs to. */ - enterpriseId: Scalars['ID'] + enterpriseId: Scalars['ID']; /** The login of a member who will receive the support entitlement. */ - login: Scalars['String'] -} + login: Scalars['String']; +}; /** Autogenerated return type of AddEnterpriseSupportEntitlement */ export type AddEnterpriseSupportEntitlementPayload = { - __typename?: 'AddEnterpriseSupportEntitlementPayload' + __typename?: 'AddEnterpriseSupportEntitlementPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** A message confirming the result of adding the support entitlement. */ - message?: Maybe -} + message?: Maybe; +}; /** Autogenerated input type of AddLabelsToLabelable */ export type AddLabelsToLabelableInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe - /** The ids of the labels to add. */ - labelIds: Array + clientMutationId?: Maybe; /** The id of the labelable object to add labels to. */ - labelableId: Scalars['ID'] -} + labelableId: Scalars['ID']; + /** The ids of the labels to add. */ + labelIds: Array; +}; /** Autogenerated return type of AddLabelsToLabelable */ export type AddLabelsToLabelablePayload = { - __typename?: 'AddLabelsToLabelablePayload' + __typename?: 'AddLabelsToLabelablePayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The item that was labeled. */ - labelable?: Maybe -} + labelable?: Maybe; +}; /** Autogenerated input type of AddProjectCard */ export type AddProjectCardInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The content of the card. Must be a member of the ProjectCardItem union */ - contentId?: InputMaybe + contentId?: Maybe; /** The note on the card. */ - note?: InputMaybe + note?: Maybe; /** The Node ID of the ProjectColumn. */ - projectColumnId: Scalars['ID'] -} + projectColumnId: Scalars['ID']; +}; /** Autogenerated return type of AddProjectCard */ export type AddProjectCardPayload = { - __typename?: 'AddProjectCardPayload' + __typename?: 'AddProjectCardPayload'; /** The edge from the ProjectColumn's card connection. */ - cardEdge?: Maybe + cardEdge?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The ProjectColumn */ - projectColumn?: Maybe -} + projectColumn?: Maybe; +}; /** Autogenerated input type of AddProjectColumn */ export type AddProjectColumnInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The name of the column. */ - name: Scalars['String'] + name: Scalars['String']; /** The Node ID of the project. */ - projectId: Scalars['ID'] -} + projectId: Scalars['ID']; +}; /** Autogenerated return type of AddProjectColumn */ export type AddProjectColumnPayload = { - __typename?: 'AddProjectColumnPayload' + __typename?: 'AddProjectColumnPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The edge from the project's column connection. */ - columnEdge?: Maybe + columnEdge?: Maybe; /** The project */ - project?: Maybe -} + project?: Maybe; +}; /** Autogenerated input type of AddPullRequestReviewComment */ export type AddPullRequestReviewCommentInput = { /** The text of the comment. */ - body: Scalars['String'] + body: Scalars['String']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The SHA of the commit to comment on. */ - commitOID?: InputMaybe + commitOID?: Maybe; /** The comment id to reply to. */ - inReplyTo?: InputMaybe + inReplyTo?: Maybe; /** The relative path of the file to comment on. */ - path?: InputMaybe + path?: Maybe; /** The line index in the diff to comment on. */ - position?: InputMaybe + position?: Maybe; /** The node ID of the pull request reviewing */ - pullRequestId?: InputMaybe + pullRequestId?: Maybe; /** The Node ID of the review to modify. */ - pullRequestReviewId?: InputMaybe -} + pullRequestReviewId?: Maybe; +}; /** Autogenerated return type of AddPullRequestReviewComment */ export type AddPullRequestReviewCommentPayload = { - __typename?: 'AddPullRequestReviewCommentPayload' + __typename?: 'AddPullRequestReviewCommentPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The newly created comment. */ - comment?: Maybe + comment?: Maybe; /** The edge from the review's comment connection. */ - commentEdge?: Maybe -} + commentEdge?: Maybe; +}; /** Autogenerated input type of AddPullRequestReview */ export type AddPullRequestReviewInput = { /** The contents of the review body comment. */ - body?: InputMaybe + body?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The review line comments. */ - comments?: InputMaybe>> + comments?: Maybe>>; /** The commit OID the review pertains to. */ - commitOID?: InputMaybe + commitOID?: Maybe; /** The event to perform on the pull request review. */ - event?: InputMaybe + event?: Maybe; /** The Node ID of the pull request to modify. */ - pullRequestId: Scalars['ID'] + pullRequestId: Scalars['ID']; /** The review line comment threads. */ - threads?: InputMaybe>> -} + threads?: Maybe>>; +}; /** Autogenerated return type of AddPullRequestReview */ export type AddPullRequestReviewPayload = { - __typename?: 'AddPullRequestReviewPayload' + __typename?: 'AddPullRequestReviewPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The newly created pull request review. */ - pullRequestReview?: Maybe + pullRequestReview?: Maybe; /** The edge from the pull request's review connection. */ - reviewEdge?: Maybe -} + reviewEdge?: Maybe; +}; /** Autogenerated input type of AddPullRequestReviewThread */ export type AddPullRequestReviewThreadInput = { /** Body of the thread's first comment. */ - body: Scalars['String'] + body: Scalars['String']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The line of the blob to which the thread refers. The end of the line range for multi-line comments. */ - line: Scalars['Int'] + line: Scalars['Int']; /** Path to the file being commented on. */ - path: Scalars['String'] + path: Scalars['String']; /** The node ID of the pull request reviewing */ - pullRequestId?: InputMaybe + pullRequestId?: Maybe; /** The Node ID of the review to modify. */ - pullRequestReviewId?: InputMaybe + pullRequestReviewId?: Maybe; /** The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range. */ - side?: InputMaybe + side?: Maybe; /** The first line of the range to which the comment refers. */ - startLine?: InputMaybe + startLine?: Maybe; /** The side of the diff on which the start line resides. */ - startSide?: InputMaybe -} + startSide?: Maybe; +}; /** Autogenerated return type of AddPullRequestReviewThread */ export type AddPullRequestReviewThreadPayload = { - __typename?: 'AddPullRequestReviewThreadPayload' + __typename?: 'AddPullRequestReviewThreadPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The newly created thread. */ - thread?: Maybe -} + thread?: Maybe; +}; /** Autogenerated input type of AddReaction */ export type AddReactionInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The name of the emoji to react with. */ - content: ReactionContent + content: ReactionContent; /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID'] -} + subjectId: Scalars['ID']; +}; /** Autogenerated return type of AddReaction */ export type AddReactionPayload = { - __typename?: 'AddReactionPayload' + __typename?: 'AddReactionPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The reaction object. */ - reaction?: Maybe + reaction?: Maybe; /** The reactable subject. */ - subject?: Maybe -} + subject?: Maybe; +}; /** Autogenerated input type of AddStar */ export type AddStarInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The Starrable ID to star. */ - starrableId: Scalars['ID'] -} + starrableId: Scalars['ID']; +}; /** Autogenerated return type of AddStar */ export type AddStarPayload = { - __typename?: 'AddStarPayload' + __typename?: 'AddStarPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The starrable. */ - starrable?: Maybe -} + starrable?: Maybe; +}; /** Autogenerated input type of AddUpvote */ export type AddUpvoteInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The Node ID of the discussion or comment to upvote. */ - subjectId: Scalars['ID'] -} + subjectId: Scalars['ID']; +}; /** Autogenerated return type of AddUpvote */ export type AddUpvotePayload = { - __typename?: 'AddUpvotePayload' + __typename?: 'AddUpvotePayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The votable subject. */ - subject?: Maybe -} + subject?: Maybe; +}; /** Autogenerated input type of AddVerifiableDomain */ export type AddVerifiableDomainInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The URL of the domain */ - domain: Scalars['URI'] + domain: Scalars['URI']; /** The ID of the owner to add the domain to */ - ownerId: Scalars['ID'] -} + ownerId: Scalars['ID']; +}; /** Autogenerated return type of AddVerifiableDomain */ export type AddVerifiableDomainPayload = { - __typename?: 'AddVerifiableDomainPayload' + __typename?: 'AddVerifiableDomainPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The verifiable domain that was added. */ - domain?: Maybe -} - -/** Represents a 'added_to_project' event on a given issue or pull request. */ -export type AddedToProjectEvent = Node & { - __typename?: 'AddedToProjectEvent' - /** Identifies the actor who performed the event. */ - actor?: Maybe - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - /** Identifies the primary key from the database. */ - databaseId?: Maybe - id: Scalars['ID'] -} + domain?: Maybe; +}; /** A GitHub App. */ export type App = Node & { - __typename?: 'App' + __typename?: 'App'; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** Identifies the primary key from the database. */ - databaseId?: Maybe + databaseId?: Maybe; /** The description of the app. */ - description?: Maybe - id: Scalars['ID'] + description?: Maybe; + id: Scalars['ID']; /** The IP addresses of the app. */ - ipAllowListEntries: IpAllowListEntryConnection + ipAllowListEntries: IpAllowListEntryConnection; /** The hex color code, without the leading '#', for the logo background. */ - logoBackgroundColor: Scalars['String'] + logoBackgroundColor: Scalars['String']; /** A URL pointing to the app's logo. */ - logoUrl: Scalars['URI'] + logoUrl: Scalars['URI']; /** The name of the app. */ - name: Scalars['String'] + name: Scalars['String']; /** A slug based on the name of the app for use in URLs. */ - slug: Scalars['String'] + slug: Scalars['String']; /** Identifies the date and time when the object was last updated. */ - updatedAt: Scalars['DateTime'] + updatedAt: Scalars['DateTime']; /** The URL to the app's homepage. */ - url: Scalars['URI'] -} + url: Scalars['URI']; +}; + /** A GitHub App. */ export type AppIpAllowListEntriesArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** A GitHub App. */ export type AppLogoUrlArgs = { - size?: InputMaybe -} + size?: Maybe; +}; /** Autogenerated input type of ApproveDeployments */ export type ApproveDeploymentsInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** Optional comment for approving deployments */ - comment?: InputMaybe + comment?: Maybe; /** The ids of environments to reject deployments */ - environmentIds: Array + environmentIds: Array; /** The node ID of the workflow run containing the pending deployments. */ - workflowRunId: Scalars['ID'] -} + workflowRunId: Scalars['ID']; +}; /** Autogenerated return type of ApproveDeployments */ export type ApproveDeploymentsPayload = { - __typename?: 'ApproveDeploymentsPayload' + __typename?: 'ApproveDeploymentsPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The affected deployments. */ - deployments?: Maybe> -} + deployments?: Maybe>; +}; /** Autogenerated input type of ApproveVerifiableDomain */ export type ApproveVerifiableDomainInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The ID of the verifiable domain to approve. */ - id: Scalars['ID'] -} + id: Scalars['ID']; +}; /** Autogenerated return type of ApproveVerifiableDomain */ export type ApproveVerifiableDomainPayload = { - __typename?: 'ApproveVerifiableDomainPayload' + __typename?: 'ApproveVerifiableDomainPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The verifiable domain that was approved. */ - domain?: Maybe -} + domain?: Maybe; +}; /** Autogenerated input type of ArchiveRepository */ export type ArchiveRepositoryInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The ID of the repository to mark as archived. */ - repositoryId: Scalars['ID'] -} + repositoryId: Scalars['ID']; +}; /** Autogenerated return type of ArchiveRepository */ export type ArchiveRepositoryPayload = { - __typename?: 'ArchiveRepositoryPayload' + __typename?: 'ArchiveRepositoryPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The repository that was marked as archived. */ - repository?: Maybe -} + repository?: Maybe; +}; /** An object that can have users assigned to it. */ export type Assignable = { /** A list of Users assigned to this object. */ - assignees: UserConnection -} + assignees: UserConnection; +}; + /** An object that can have users assigned to it. */ export type AssignableAssigneesArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; /** Represents an 'assigned' event on any assignable object. */ export type AssignedEvent = Node & { - __typename?: 'AssignedEvent' + __typename?: 'AssignedEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the assignable associated with the event. */ - assignable: Assignable + assignable: Assignable; /** Identifies the user or mannequin that was assigned. */ - assignee?: Maybe + assignee?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] + createdAt: Scalars['DateTime']; + id: Scalars['ID']; /** * Identifies the user who was assigned. * @deprecated Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC. */ - user?: Maybe -} + user?: Maybe; +}; /** Types that can be assigned to issues. */ -export type Assignee = Bot | Mannequin | Organization | User +export type Assignee = Bot | Mannequin | Organization | User; /** An entry in the audit log. */ export type AuditEntry = { /** The action name */ - action: Scalars['String'] + action: Scalars['String']; /** The user who initiated the action */ - actor?: Maybe + actor?: Maybe; /** The IP address of the actor */ - actorIp?: Maybe + actorIp?: Maybe; /** A readable representation of the actor's location */ - actorLocation?: Maybe + actorLocation?: Maybe; /** The username of the user who initiated the action */ - actorLogin?: Maybe + actorLogin?: Maybe; /** The HTTP path for the actor. */ - actorResourcePath?: Maybe + actorResourcePath?: Maybe; /** The HTTP URL for the actor. */ - actorUrl?: Maybe + actorUrl?: Maybe; /** The time the action was initiated */ - createdAt: Scalars['PreciseDateTime'] + createdAt: Scalars['PreciseDateTime']; /** The corresponding operation type for the action */ - operationType?: Maybe + operationType?: Maybe; /** The user affected by the action */ - user?: Maybe + user?: Maybe; /** For actions involving two users, the actor is the initiator and the user is the affected user. */ - userLogin?: Maybe + userLogin?: Maybe; /** The HTTP path for the user. */ - userResourcePath?: Maybe + userResourcePath?: Maybe; /** The HTTP URL for the user. */ - userUrl?: Maybe -} + userUrl?: Maybe; +}; /** Types that can initiate an audit log event. */ -export type AuditEntryActor = Bot | Organization | User +export type AuditEntryActor = Bot | Organization | User; /** Ordering options for Audit Log connections. */ export type AuditLogOrder = { /** The ordering direction. */ - direction?: InputMaybe + direction?: Maybe; /** The field to order Audit Logs by. */ - field?: InputMaybe -} + field?: Maybe; +}; /** Properties by which Audit Log connections can be ordered. */ export enum AuditLogOrderField { @@ -604,547 +607,506 @@ export enum AuditLogOrderField { CreatedAt = 'CREATED_AT' } +/** Represents a 'automatic_base_change_failed' event on a given pull request. */ +export type AutomaticBaseChangeFailedEvent = Node & { + __typename?: 'AutomaticBaseChangeFailedEvent'; + /** Identifies the actor who performed the event. */ + actor?: Maybe; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + id: Scalars['ID']; + /** The new base for this PR */ + newBase: Scalars['String']; + /** The old base for this PR */ + oldBase: Scalars['String']; + /** PullRequest referenced by event. */ + pullRequest: PullRequest; +}; + +/** Represents a 'automatic_base_change_succeeded' event on a given pull request. */ +export type AutomaticBaseChangeSucceededEvent = Node & { + __typename?: 'AutomaticBaseChangeSucceededEvent'; + /** Identifies the actor who performed the event. */ + actor?: Maybe; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + id: Scalars['ID']; + /** The new base for this PR */ + newBase: Scalars['String']; + /** The old base for this PR */ + oldBase: Scalars['String']; + /** PullRequest referenced by event. */ + pullRequest: PullRequest; +}; + /** Represents a 'auto_merge_disabled' event on a given pull request. */ export type AutoMergeDisabledEvent = Node & { - __typename?: 'AutoMergeDisabledEvent' + __typename?: 'AutoMergeDisabledEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** The user who disabled auto-merge for this Pull Request */ - disabler?: Maybe - id: Scalars['ID'] + disabler?: Maybe; + id: Scalars['ID']; /** PullRequest referenced by event */ - pullRequest?: Maybe + pullRequest?: Maybe; /** The reason auto-merge was disabled */ - reason?: Maybe + reason?: Maybe; /** The reason_code relating to why auto-merge was disabled */ - reasonCode?: Maybe -} + reasonCode?: Maybe; +}; /** Represents a 'auto_merge_enabled' event on a given pull request. */ export type AutoMergeEnabledEvent = Node & { - __typename?: 'AutoMergeEnabledEvent' + __typename?: 'AutoMergeEnabledEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** The user who enabled auto-merge for this Pull Request */ - enabler?: Maybe - id: Scalars['ID'] + enabler?: Maybe; + id: Scalars['ID']; /** PullRequest referenced by event. */ - pullRequest?: Maybe -} + pullRequest?: Maybe; +}; /** Represents an auto-merge request for a pull request */ export type AutoMergeRequest = { - __typename?: 'AutoMergeRequest' + __typename?: 'AutoMergeRequest'; /** The email address of the author of this auto-merge request. */ - authorEmail?: Maybe + authorEmail?: Maybe; /** The commit message of the auto-merge request. */ - commitBody?: Maybe + commitBody?: Maybe; /** The commit title of the auto-merge request. */ - commitHeadline?: Maybe + commitHeadline?: Maybe; /** When was this auto-merge request was enabled. */ - enabledAt?: Maybe + enabledAt?: Maybe; /** The actor who created the auto-merge request. */ - enabledBy?: Maybe + enabledBy?: Maybe; /** The merge method of the auto-merge request. */ - mergeMethod: PullRequestMergeMethod + mergeMethod: PullRequestMergeMethod; /** The pull request that this auto-merge request is set against. */ - pullRequest: PullRequest -} + pullRequest: PullRequest; +}; /** Represents a 'auto_rebase_enabled' event on a given pull request. */ export type AutoRebaseEnabledEvent = Node & { - __typename?: 'AutoRebaseEnabledEvent' + __typename?: 'AutoRebaseEnabledEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** The user who enabled auto-merge (rebase) for this Pull Request */ - enabler?: Maybe - id: Scalars['ID'] + enabler?: Maybe; + id: Scalars['ID']; /** PullRequest referenced by event. */ - pullRequest?: Maybe -} + pullRequest?: Maybe; +}; /** Represents a 'auto_squash_enabled' event on a given pull request. */ export type AutoSquashEnabledEvent = Node & { - __typename?: 'AutoSquashEnabledEvent' + __typename?: 'AutoSquashEnabledEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** The user who enabled auto-merge (squash) for this Pull Request */ - enabler?: Maybe - id: Scalars['ID'] - /** PullRequest referenced by event. */ - pullRequest?: Maybe -} - -/** Represents a 'automatic_base_change_failed' event on a given pull request. */ -export type AutomaticBaseChangeFailedEvent = Node & { - __typename?: 'AutomaticBaseChangeFailedEvent' - /** Identifies the actor who performed the event. */ - actor?: Maybe - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] - /** The new base for this PR */ - newBase: Scalars['String'] - /** The old base for this PR */ - oldBase: Scalars['String'] - /** PullRequest referenced by event. */ - pullRequest: PullRequest -} - -/** Represents a 'automatic_base_change_succeeded' event on a given pull request. */ -export type AutomaticBaseChangeSucceededEvent = Node & { - __typename?: 'AutomaticBaseChangeSucceededEvent' - /** Identifies the actor who performed the event. */ - actor?: Maybe - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] - /** The new base for this PR */ - newBase: Scalars['String'] - /** The old base for this PR */ - oldBase: Scalars['String'] + enabler?: Maybe; + id: Scalars['ID']; /** PullRequest referenced by event. */ - pullRequest: PullRequest -} + pullRequest?: Maybe; +}; /** Represents a 'base_ref_changed' event on a given issue or pull request. */ export type BaseRefChangedEvent = Node & { - __typename?: 'BaseRefChangedEvent' + __typename?: 'BaseRefChangedEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** Identifies the name of the base ref for the pull request after it was changed. */ - currentRefName: Scalars['String'] + currentRefName: Scalars['String']; /** Identifies the primary key from the database. */ - databaseId?: Maybe - id: Scalars['ID'] + databaseId?: Maybe; + id: Scalars['ID']; /** Identifies the name of the base ref for the pull request before it was changed. */ - previousRefName: Scalars['String'] + previousRefName: Scalars['String']; /** PullRequest referenced by event. */ - pullRequest: PullRequest -} + pullRequest: PullRequest; +}; /** Represents a 'base_ref_deleted' event on a given pull request. */ export type BaseRefDeletedEvent = Node & { - __typename?: 'BaseRefDeletedEvent' + __typename?: 'BaseRefDeletedEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the name of the Ref associated with the `base_ref_deleted` event. */ - baseRefName?: Maybe + baseRefName?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] + createdAt: Scalars['DateTime']; + id: Scalars['ID']; /** PullRequest referenced by event. */ - pullRequest?: Maybe -} + pullRequest?: Maybe; +}; /** Represents a 'base_ref_force_pushed' event on a given pull request. */ export type BaseRefForcePushedEvent = Node & { - __typename?: 'BaseRefForcePushedEvent' + __typename?: 'BaseRefForcePushedEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the after commit SHA for the 'base_ref_force_pushed' event. */ - afterCommit?: Maybe + afterCommit?: Maybe; /** Identifies the before commit SHA for the 'base_ref_force_pushed' event. */ - beforeCommit?: Maybe + beforeCommit?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] + createdAt: Scalars['DateTime']; + id: Scalars['ID']; /** PullRequest referenced by event. */ - pullRequest: PullRequest + pullRequest: PullRequest; /** Identifies the fully qualified ref name for the 'base_ref_force_pushed' event. */ - ref?: Maybe -} + ref?: Maybe; +}; /** Represents a Git blame. */ export type Blame = { - __typename?: 'Blame' + __typename?: 'Blame'; /** The list of ranges from a Git blame. */ - ranges: Array -} + ranges: Array; +}; /** Represents a range of information from a Git blame. */ export type BlameRange = { - __typename?: 'BlameRange' + __typename?: 'BlameRange'; /** Identifies the recency of the change, from 1 (new) to 10 (old). This is calculated as a 2-quantile and determines the length of distance between the median age of all the changes in the file and the recency of the current range's change. */ - age: Scalars['Int'] + age: Scalars['Int']; /** Identifies the line author */ - commit: Commit + commit: Commit; /** The ending line for the range */ - endingLine: Scalars['Int'] + endingLine: Scalars['Int']; /** The starting line for the range */ - startingLine: Scalars['Int'] -} + startingLine: Scalars['Int']; +}; /** Represents a Git blob. */ -export type Blob = GitObject & - Node & { - __typename?: 'Blob' - /** An abbreviated version of the Git object ID */ - abbreviatedOid: Scalars['String'] - /** Byte size of Blob object */ - byteSize: Scalars['Int'] - /** The HTTP path for this Git object */ - commitResourcePath: Scalars['URI'] - /** The HTTP URL for this Git object */ - commitUrl: Scalars['URI'] - id: Scalars['ID'] - /** Indicates whether the Blob is binary or text. Returns null if unable to determine the encoding. */ - isBinary?: Maybe - /** Indicates whether the contents is truncated */ - isTruncated: Scalars['Boolean'] - /** The Git object ID */ - oid: Scalars['GitObjectID'] - /** The Repository the Git object belongs to */ - repository: Repository - /** UTF8 text data or null if the Blob is binary */ - text?: Maybe - } +export type Blob = GitObject & Node & { + __typename?: 'Blob'; + /** An abbreviated version of the Git object ID */ + abbreviatedOid: Scalars['String']; + /** Byte size of Blob object */ + byteSize: Scalars['Int']; + /** The HTTP path for this Git object */ + commitResourcePath: Scalars['URI']; + /** The HTTP URL for this Git object */ + commitUrl: Scalars['URI']; + id: Scalars['ID']; + /** Indicates whether the Blob is binary or text. Returns null if unable to determine the encoding. */ + isBinary?: Maybe; + /** Indicates whether the contents is truncated */ + isTruncated: Scalars['Boolean']; + /** The Git object ID */ + oid: Scalars['GitObjectID']; + /** The Repository the Git object belongs to */ + repository: Repository; + /** UTF8 text data or null if the Blob is binary */ + text?: Maybe; +}; /** A special type of user which takes actions on behalf of GitHub Apps. */ -export type Bot = Actor & - Node & - UniformResourceLocatable & { - __typename?: 'Bot' - /** A URL pointing to the GitHub App's public avatar. */ - avatarUrl: Scalars['URI'] - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - /** Identifies the primary key from the database. */ - databaseId?: Maybe - id: Scalars['ID'] - /** The username of the actor. */ - login: Scalars['String'] - /** The HTTP path for this bot */ - resourcePath: Scalars['URI'] - /** Identifies the date and time when the object was last updated. */ - updatedAt: Scalars['DateTime'] - /** The HTTP URL for this bot */ - url: Scalars['URI'] - } +export type Bot = Actor & Node & UniformResourceLocatable & { + __typename?: 'Bot'; + /** A URL pointing to the GitHub App's public avatar. */ + avatarUrl: Scalars['URI']; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + /** Identifies the primary key from the database. */ + databaseId?: Maybe; + id: Scalars['ID']; + /** The username of the actor. */ + login: Scalars['String']; + /** The HTTP path for this bot */ + resourcePath: Scalars['URI']; + /** Identifies the date and time when the object was last updated. */ + updatedAt: Scalars['DateTime']; + /** The HTTP URL for this bot */ + url: Scalars['URI']; +}; + /** A special type of user which takes actions on behalf of GitHub Apps. */ export type BotAvatarUrlArgs = { - size?: InputMaybe -} + size?: Maybe; +}; /** A branch protection rule. */ export type BranchProtectionRule = Node & { - __typename?: 'BranchProtectionRule' + __typename?: 'BranchProtectionRule'; /** Can this branch be deleted. */ - allowsDeletions: Scalars['Boolean'] + allowsDeletions: Scalars['Boolean']; /** Are force pushes allowed on this branch. */ - allowsForcePushes: Scalars['Boolean'] + allowsForcePushes: Scalars['Boolean']; /** A list of conflicts matching branches protection rule and other branch protection rules */ - branchProtectionRuleConflicts: BranchProtectionRuleConflictConnection + branchProtectionRuleConflicts: BranchProtectionRuleConflictConnection; /** The actor who created this branch protection rule. */ - creator?: Maybe + creator?: Maybe; /** Identifies the primary key from the database. */ - databaseId?: Maybe + databaseId?: Maybe; /** Will new commits pushed to matching branches dismiss pull request review approvals. */ - dismissesStaleReviews: Scalars['Boolean'] - id: Scalars['ID'] + dismissesStaleReviews: Scalars['Boolean']; + id: Scalars['ID']; /** Can admins overwrite branch protection. */ - isAdminEnforced: Scalars['Boolean'] + isAdminEnforced: Scalars['Boolean']; /** Repository refs that are protected by this rule */ - matchingRefs: RefConnection + matchingRefs: RefConnection; /** Identifies the protection rule pattern. */ - pattern: Scalars['String'] + pattern: Scalars['String']; /** A list push allowances for this branch protection rule. */ - pushAllowances: PushAllowanceConnection + pushAllowances: PushAllowanceConnection; /** The repository associated with this branch protection rule. */ - repository?: Maybe + repository?: Maybe; /** Number of approving reviews required to update matching branches. */ - requiredApprovingReviewCount?: Maybe + requiredApprovingReviewCount?: Maybe; /** List of required status check contexts that must pass for commits to be accepted to matching branches. */ - requiredStatusCheckContexts?: Maybe>> + requiredStatusCheckContexts?: Maybe>>; /** Are approving reviews required to update matching branches. */ - requiresApprovingReviews: Scalars['Boolean'] + requiresApprovingReviews: Scalars['Boolean']; /** Are reviews from code owners required to update matching branches. */ - requiresCodeOwnerReviews: Scalars['Boolean'] + requiresCodeOwnerReviews: Scalars['Boolean']; /** Are commits required to be signed. */ - requiresCommitSignatures: Scalars['Boolean'] + requiresCommitSignatures: Scalars['Boolean']; /** Are conversations required to be resolved before merging. */ - requiresConversationResolution: Scalars['Boolean'] + requiresConversationResolution: Scalars['Boolean']; /** Are merge commits prohibited from being pushed to this branch. */ - requiresLinearHistory: Scalars['Boolean'] + requiresLinearHistory: Scalars['Boolean']; /** Are status checks required to update matching branches. */ - requiresStatusChecks: Scalars['Boolean'] + requiresStatusChecks: Scalars['Boolean']; /** Are branches required to be up to date before merging. */ - requiresStrictStatusChecks: Scalars['Boolean'] + requiresStrictStatusChecks: Scalars['Boolean']; /** Is pushing to matching branches restricted. */ - restrictsPushes: Scalars['Boolean'] + restrictsPushes: Scalars['Boolean']; /** Is dismissal of pull request reviews restricted. */ - restrictsReviewDismissals: Scalars['Boolean'] + restrictsReviewDismissals: Scalars['Boolean']; /** A list review dismissal allowances for this branch protection rule. */ - reviewDismissalAllowances: ReviewDismissalAllowanceConnection -} + reviewDismissalAllowances: ReviewDismissalAllowanceConnection; +}; + /** A branch protection rule. */ export type BranchProtectionRuleBranchProtectionRuleConflictsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** A branch protection rule. */ export type BranchProtectionRuleMatchingRefsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - query?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + query?: Maybe; +}; + /** A branch protection rule. */ export type BranchProtectionRulePushAllowancesArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** A branch protection rule. */ export type BranchProtectionRuleReviewDismissalAllowancesArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; /** A conflict between two branch protection rules. */ export type BranchProtectionRuleConflict = { - __typename?: 'BranchProtectionRuleConflict' + __typename?: 'BranchProtectionRuleConflict'; /** Identifies the branch protection rule. */ - branchProtectionRule?: Maybe + branchProtectionRule?: Maybe; /** Identifies the conflicting branch protection rule. */ - conflictingBranchProtectionRule?: Maybe + conflictingBranchProtectionRule?: Maybe; /** Identifies the branch ref that has conflicting rules */ - ref?: Maybe -} + ref?: Maybe; +}; /** The connection type for BranchProtectionRuleConflict. */ export type BranchProtectionRuleConflictConnection = { - __typename?: 'BranchProtectionRuleConflictConnection' + __typename?: 'BranchProtectionRuleConflictConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** An edge in a connection. */ export type BranchProtectionRuleConflictEdge = { - __typename?: 'BranchProtectionRuleConflictEdge' + __typename?: 'BranchProtectionRuleConflictEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** The connection type for BranchProtectionRule. */ export type BranchProtectionRuleConnection = { - __typename?: 'BranchProtectionRuleConnection' + __typename?: 'BranchProtectionRuleConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** An edge in a connection. */ export type BranchProtectionRuleEdge = { - __typename?: 'BranchProtectionRuleEdge' - /** A cursor for use in pagination. */ - cursor: Scalars['String'] - /** The item at the end of the edge. */ - node?: Maybe -} - -/** The Common Vulnerability Scoring System */ -export type Cvss = { - __typename?: 'CVSS' - /** The CVSS score associated with this advisory */ - score: Scalars['Float'] - /** The CVSS vector string associated with this advisory */ - vectorString?: Maybe -} - -/** A common weakness enumeration */ -export type Cwe = Node & { - __typename?: 'CWE' - /** The id of the CWE */ - cweId: Scalars['String'] - /** A detailed description of this CWE */ - description: Scalars['String'] - id: Scalars['ID'] - /** The name of this CWE */ - name: Scalars['String'] -} - -/** The connection type for CWE. */ -export type CweConnection = { - __typename?: 'CWEConnection' - /** A list of edges. */ - edges?: Maybe>> - /** A list of nodes. */ - nodes?: Maybe>> - /** Information to aid in pagination. */ - pageInfo: PageInfo - /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} - -/** An edge in a connection. */ -export type CweEdge = { - __typename?: 'CWEEdge' + __typename?: 'BranchProtectionRuleEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** Autogenerated input type of CancelEnterpriseAdminInvitation */ export type CancelEnterpriseAdminInvitationInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The Node ID of the pending enterprise administrator invitation. */ - invitationId: Scalars['ID'] -} + invitationId: Scalars['ID']; +}; /** Autogenerated return type of CancelEnterpriseAdminInvitation */ export type CancelEnterpriseAdminInvitationPayload = { - __typename?: 'CancelEnterpriseAdminInvitationPayload' + __typename?: 'CancelEnterpriseAdminInvitationPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The invitation that was canceled. */ - invitation?: Maybe + invitation?: Maybe; /** A message confirming the result of canceling an administrator invitation. */ - message?: Maybe -} + message?: Maybe; +}; /** Autogenerated input type of CancelSponsorship */ export type CancelSponsorshipInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe - /** The ID of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorLogin is not given. */ - sponsorId?: InputMaybe - /** The username of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorId is not given. */ - sponsorLogin?: InputMaybe + clientMutationId?: Maybe; /** The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. */ - sponsorableId?: InputMaybe + sponsorableId?: Maybe; /** The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. */ - sponsorableLogin?: InputMaybe -} + sponsorableLogin?: Maybe; + /** The ID of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorLogin is not given. */ + sponsorId?: Maybe; + /** The username of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorId is not given. */ + sponsorLogin?: Maybe; +}; /** Autogenerated return type of CancelSponsorship */ export type CancelSponsorshipPayload = { - __typename?: 'CancelSponsorshipPayload' + __typename?: 'CancelSponsorshipPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The tier that was being used at the time of cancellation. */ - sponsorsTier?: Maybe -} + sponsorsTier?: Maybe; +}; /** Autogenerated input type of ChangeUserStatus */ export type ChangeUserStatusInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The emoji to represent your status. Can either be a native Unicode emoji or an emoji name with colons, e.g., :grinning:. */ - emoji?: InputMaybe + emoji?: Maybe; /** If set, the user status will not be shown after this date. */ - expiresAt?: InputMaybe + expiresAt?: Maybe; /** Whether this status should indicate you are not fully available on GitHub, e.g., you are away. */ - limitedAvailability?: InputMaybe + limitedAvailability?: Maybe; /** A short description of your current status. */ - message?: InputMaybe + message?: Maybe; /** The ID of the organization whose members will be allowed to see the status. If omitted, the status will be publicly visible. */ - organizationId?: InputMaybe -} + organizationId?: Maybe; +}; /** Autogenerated return type of ChangeUserStatus */ export type ChangeUserStatusPayload = { - __typename?: 'ChangeUserStatusPayload' + __typename?: 'ChangeUserStatusPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** Your updated status. */ - status?: Maybe -} + status?: Maybe; +}; /** A single check annotation. */ export type CheckAnnotation = { - __typename?: 'CheckAnnotation' + __typename?: 'CheckAnnotation'; /** The annotation's severity level. */ - annotationLevel?: Maybe + annotationLevel?: Maybe; /** The path to the file that this annotation was made on. */ - blobUrl: Scalars['URI'] + blobUrl: Scalars['URI']; /** Identifies the primary key from the database. */ - databaseId?: Maybe + databaseId?: Maybe; /** The position of this annotation. */ - location: CheckAnnotationSpan + location: CheckAnnotationSpan; /** The annotation's message. */ - message: Scalars['String'] + message: Scalars['String']; /** The path that this annotation was made on. */ - path: Scalars['String'] + path: Scalars['String']; /** Additional information about the annotation. */ - rawDetails?: Maybe + rawDetails?: Maybe; /** The annotation's title */ - title?: Maybe -} + title?: Maybe; +}; /** The connection type for CheckAnnotation. */ export type CheckAnnotationConnection = { - __typename?: 'CheckAnnotationConnection' + __typename?: 'CheckAnnotationConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** Information from a check run analysis to specific lines of code. */ export type CheckAnnotationData = { /** Represents an annotation's information level */ - annotationLevel: CheckAnnotationLevel + annotationLevel: CheckAnnotationLevel; /** The location of the annotation */ - location: CheckAnnotationRange + location: CheckAnnotationRange; /** A short description of the feedback for these lines of code. */ - message: Scalars['String'] + message: Scalars['String']; /** The path of the file to add an annotation to. */ - path: Scalars['String'] + path: Scalars['String']; /** Details about this annotation. */ - rawDetails?: InputMaybe + rawDetails?: Maybe; /** The title that represents the annotation. */ - title?: InputMaybe -} + title?: Maybe; +}; /** An edge in a connection. */ export type CheckAnnotationEdge = { - __typename?: 'CheckAnnotationEdge' + __typename?: 'CheckAnnotationEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** Represents an annotation's information level. */ export enum CheckAnnotationLevel { @@ -1158,33 +1120,33 @@ export enum CheckAnnotationLevel { /** A character position in a check annotation. */ export type CheckAnnotationPosition = { - __typename?: 'CheckAnnotationPosition' + __typename?: 'CheckAnnotationPosition'; /** Column number (1 indexed). */ - column?: Maybe + column?: Maybe; /** Line number (1 indexed). */ - line: Scalars['Int'] -} + line: Scalars['Int']; +}; /** Information from a check run analysis to specific lines of code. */ export type CheckAnnotationRange = { /** The ending column of the range. */ - endColumn?: InputMaybe + endColumn?: Maybe; /** The ending line of the range. */ - endLine: Scalars['Int'] + endLine: Scalars['Int']; /** The starting column of the range. */ - startColumn?: InputMaybe + startColumn?: Maybe; /** The starting line of the range. */ - startLine: Scalars['Int'] -} + startLine: Scalars['Int']; +}; /** An inclusive pair of positions for a check annotation. */ export type CheckAnnotationSpan = { - __typename?: 'CheckAnnotationSpan' + __typename?: 'CheckAnnotationSpan'; /** End position (inclusive). */ - end: CheckAnnotationPosition + end: CheckAnnotationPosition; /** Start position (inclusive). */ - start: CheckAnnotationPosition -} + start: CheckAnnotationPosition; +}; /** The possible states for a check suite or run conclusion. */ export enum CheckConclusionState { @@ -1209,145 +1171,146 @@ export enum CheckConclusionState { } /** A check run. */ -export type CheckRun = Node & - RequirableByPullRequest & - UniformResourceLocatable & { - __typename?: 'CheckRun' - /** The check run's annotations */ - annotations?: Maybe - /** The check suite that this run is a part of. */ - checkSuite: CheckSuite - /** Identifies the date and time when the check run was completed. */ - completedAt?: Maybe - /** The conclusion of the check run. */ - conclusion?: Maybe - /** Identifies the primary key from the database. */ - databaseId?: Maybe - /** The corresponding deployment for this job, if any */ - deployment?: Maybe - /** The URL from which to find full details of the check run on the integrator's site. */ - detailsUrl?: Maybe - /** A reference for the check run on the integrator's system. */ - externalId?: Maybe - id: Scalars['ID'] - /** Whether this is required to pass before merging for a specific pull request. */ - isRequired: Scalars['Boolean'] - /** The name of the check for this check run. */ - name: Scalars['String'] - /** Information about a pending deployment, if any, in this check run */ - pendingDeploymentRequest?: Maybe - /** The permalink to the check run summary. */ - permalink: Scalars['URI'] - /** The repository associated with this check run. */ - repository: Repository - /** The HTTP path for this check run. */ - resourcePath: Scalars['URI'] - /** Identifies the date and time when the check run was started. */ - startedAt?: Maybe - /** The current status of the check run. */ - status: CheckStatusState - /** The check run's steps */ - steps?: Maybe - /** A string representing the check run's summary */ - summary?: Maybe - /** A string representing the check run's text */ - text?: Maybe - /** A string representing the check run */ - title?: Maybe - /** The HTTP URL for this check run. */ - url: Scalars['URI'] - } +export type CheckRun = Node & RequirableByPullRequest & UniformResourceLocatable & { + __typename?: 'CheckRun'; + /** The check run's annotations */ + annotations?: Maybe; + /** The check suite that this run is a part of. */ + checkSuite: CheckSuite; + /** Identifies the date and time when the check run was completed. */ + completedAt?: Maybe; + /** The conclusion of the check run. */ + conclusion?: Maybe; + /** Identifies the primary key from the database. */ + databaseId?: Maybe; + /** The corresponding deployment for this job, if any */ + deployment?: Maybe; + /** The URL from which to find full details of the check run on the integrator's site. */ + detailsUrl?: Maybe; + /** A reference for the check run on the integrator's system. */ + externalId?: Maybe; + id: Scalars['ID']; + /** Whether this is required to pass before merging for a specific pull request. */ + isRequired: Scalars['Boolean']; + /** The name of the check for this check run. */ + name: Scalars['String']; + /** Information about a pending deployment, if any, in this check run */ + pendingDeploymentRequest?: Maybe; + /** The permalink to the check run summary. */ + permalink: Scalars['URI']; + /** The repository associated with this check run. */ + repository: Repository; + /** The HTTP path for this check run. */ + resourcePath: Scalars['URI']; + /** Identifies the date and time when the check run was started. */ + startedAt?: Maybe; + /** The current status of the check run. */ + status: CheckStatusState; + /** The check run's steps */ + steps?: Maybe; + /** A string representing the check run's summary */ + summary?: Maybe; + /** A string representing the check run's text */ + text?: Maybe; + /** A string representing the check run */ + title?: Maybe; + /** The HTTP URL for this check run. */ + url: Scalars['URI']; +}; + /** A check run. */ export type CheckRunAnnotationsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** A check run. */ export type CheckRunIsRequiredArgs = { - pullRequestId?: InputMaybe - pullRequestNumber?: InputMaybe -} + pullRequestId?: Maybe; + pullRequestNumber?: Maybe; +}; + /** A check run. */ export type CheckRunStepsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - number?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + number?: Maybe; +}; /** Possible further actions the integrator can perform. */ export type CheckRunAction = { /** A short explanation of what this action would do. */ - description: Scalars['String'] + description: Scalars['String']; /** A reference for the action on the integrator's system. */ - identifier: Scalars['String'] + identifier: Scalars['String']; /** The text to be displayed on a button in the web UI. */ - label: Scalars['String'] -} + label: Scalars['String']; +}; /** The connection type for CheckRun. */ export type CheckRunConnection = { - __typename?: 'CheckRunConnection' + __typename?: 'CheckRunConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** An edge in a connection. */ export type CheckRunEdge = { - __typename?: 'CheckRunEdge' + __typename?: 'CheckRunEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** The filters that are available when fetching check runs. */ export type CheckRunFilter = { /** Filters the check runs created by this application ID. */ - appId?: InputMaybe + appId?: Maybe; /** Filters the check runs by this name. */ - checkName?: InputMaybe + checkName?: Maybe; /** Filters the check runs by this type. */ - checkType?: InputMaybe + checkType?: Maybe; /** Filters the check runs by this status. */ - status?: InputMaybe -} + status?: Maybe; +}; /** Descriptive details about the check run. */ export type CheckRunOutput = { /** The annotations that are made as part of the check run. */ - annotations?: InputMaybe> + annotations?: Maybe>; /** Images attached to the check run output displayed in the GitHub pull request UI. */ - images?: InputMaybe> + images?: Maybe>; /** The summary of the check run (supports Commonmark). */ - summary: Scalars['String'] + summary: Scalars['String']; /** The details of the check run (supports Commonmark). */ - text?: InputMaybe + text?: Maybe; /** A title to provide for this check run. */ - title: Scalars['String'] -} + title: Scalars['String']; +}; /** Images attached to the check run output displayed in the GitHub pull request UI. */ export type CheckRunOutputImage = { /** The alternative text for the image. */ - alt: Scalars['String'] + alt: Scalars['String']; /** A short image description. */ - caption?: InputMaybe + caption?: Maybe; /** The full URL of the image. */ - imageUrl: Scalars['URI'] -} + imageUrl: Scalars['URI']; +}; /** The possible types of check runs. */ export enum CheckRunType { @@ -1375,297 +1338,298 @@ export enum CheckStatusState { /** A single check step. */ export type CheckStep = { - __typename?: 'CheckStep' + __typename?: 'CheckStep'; /** Identifies the date and time when the check step was completed. */ - completedAt?: Maybe + completedAt?: Maybe; /** The conclusion of the check step. */ - conclusion?: Maybe + conclusion?: Maybe; /** A reference for the check step on the integrator's system. */ - externalId?: Maybe + externalId?: Maybe; /** The step's name. */ - name: Scalars['String'] + name: Scalars['String']; /** The index of the step in the list of steps of the parent check run. */ - number: Scalars['Int'] + number: Scalars['Int']; /** Number of seconds to completion. */ - secondsToCompletion?: Maybe + secondsToCompletion?: Maybe; /** Identifies the date and time when the check step was started. */ - startedAt?: Maybe + startedAt?: Maybe; /** The current status of the check step. */ - status: CheckStatusState -} + status: CheckStatusState; +}; /** The connection type for CheckStep. */ export type CheckStepConnection = { - __typename?: 'CheckStepConnection' + __typename?: 'CheckStepConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** An edge in a connection. */ export type CheckStepEdge = { - __typename?: 'CheckStepEdge' + __typename?: 'CheckStepEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** A check suite. */ export type CheckSuite = Node & { - __typename?: 'CheckSuite' + __typename?: 'CheckSuite'; /** The GitHub App which created this check suite. */ - app?: Maybe + app?: Maybe; /** The name of the branch for this check suite. */ - branch?: Maybe + branch?: Maybe; /** The check runs associated with a check suite. */ - checkRuns?: Maybe + checkRuns?: Maybe; /** The commit for this check suite */ - commit: Commit + commit: Commit; /** The conclusion of this check suite. */ - conclusion?: Maybe + conclusion?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** The user who triggered the check suite. */ - creator?: Maybe + creator?: Maybe; /** Identifies the primary key from the database. */ - databaseId?: Maybe - id: Scalars['ID'] + databaseId?: Maybe; + id: Scalars['ID']; /** A list of open pull requests matching the check suite. */ - matchingPullRequests?: Maybe + matchingPullRequests?: Maybe; /** The push that triggered this check suite. */ - push?: Maybe + push?: Maybe; /** The repository associated with this check suite. */ - repository: Repository + repository: Repository; /** The HTTP path for this check suite */ - resourcePath: Scalars['URI'] + resourcePath: Scalars['URI']; /** The status of this check suite. */ - status: CheckStatusState + status: CheckStatusState; /** Identifies the date and time when the object was last updated. */ - updatedAt: Scalars['DateTime'] + updatedAt: Scalars['DateTime']; /** The HTTP URL for this check suite */ - url: Scalars['URI'] + url: Scalars['URI']; /** The workflow run associated with this check suite. */ - workflowRun?: Maybe -} + workflowRun?: Maybe; +}; + /** A check suite. */ export type CheckSuiteCheckRunsArgs = { - after?: InputMaybe - before?: InputMaybe - filterBy?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + filterBy?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** A check suite. */ export type CheckSuiteMatchingPullRequestsArgs = { - after?: InputMaybe - baseRefName?: InputMaybe - before?: InputMaybe - first?: InputMaybe - headRefName?: InputMaybe - labels?: InputMaybe> - last?: InputMaybe - orderBy?: InputMaybe - states?: InputMaybe> -} + after?: Maybe; + baseRefName?: Maybe; + before?: Maybe; + first?: Maybe; + headRefName?: Maybe; + labels?: Maybe>; + last?: Maybe; + orderBy?: Maybe; + states?: Maybe>; +}; /** The auto-trigger preferences that are available for check suites. */ export type CheckSuiteAutoTriggerPreference = { /** The node ID of the application that owns the check suite. */ - appId: Scalars['ID'] + appId: Scalars['ID']; /** Set to `true` to enable automatic creation of CheckSuite events upon pushes to the repository. */ - setting: Scalars['Boolean'] -} + setting: Scalars['Boolean']; +}; /** The connection type for CheckSuite. */ export type CheckSuiteConnection = { - __typename?: 'CheckSuiteConnection' + __typename?: 'CheckSuiteConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** An edge in a connection. */ export type CheckSuiteEdge = { - __typename?: 'CheckSuiteEdge' + __typename?: 'CheckSuiteEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** The filters that are available when fetching check suites. */ export type CheckSuiteFilter = { /** Filters the check suites created by this application ID. */ - appId?: InputMaybe + appId?: Maybe; /** Filters the check suites by this name. */ - checkName?: InputMaybe -} + checkName?: Maybe; +}; /** Autogenerated input type of ClearLabelsFromLabelable */ export type ClearLabelsFromLabelableInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The id of the labelable object to clear the labels from. */ - labelableId: Scalars['ID'] -} + labelableId: Scalars['ID']; +}; /** Autogenerated return type of ClearLabelsFromLabelable */ export type ClearLabelsFromLabelablePayload = { - __typename?: 'ClearLabelsFromLabelablePayload' + __typename?: 'ClearLabelsFromLabelablePayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The item that was unlabeled. */ - labelable?: Maybe -} + labelable?: Maybe; +}; /** Autogenerated input type of CloneProject */ export type CloneProjectInput = { /** The description of the project. */ - body?: InputMaybe + body?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** Whether or not to clone the source project's workflows. */ - includeWorkflows: Scalars['Boolean'] + includeWorkflows: Scalars['Boolean']; /** The name of the project. */ - name: Scalars['String'] + name: Scalars['String']; /** The visibility of the project, defaults to false (private). */ - public?: InputMaybe + public?: Maybe; /** The source project to clone. */ - sourceId: Scalars['ID'] + sourceId: Scalars['ID']; /** The owner ID to create the project under. */ - targetOwnerId: Scalars['ID'] -} + targetOwnerId: Scalars['ID']; +}; /** Autogenerated return type of CloneProject */ export type CloneProjectPayload = { - __typename?: 'CloneProjectPayload' + __typename?: 'CloneProjectPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The id of the JobStatus for populating cloned fields. */ - jobStatusId?: Maybe + jobStatusId?: Maybe; /** The new cloned project. */ - project?: Maybe -} + project?: Maybe; +}; /** Autogenerated input type of CloneTemplateRepository */ export type CloneTemplateRepositoryInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** A short description of the new repository. */ - description?: InputMaybe + description?: Maybe; /** Whether to copy all branches from the template to the new repository. Defaults to copying only the default branch of the template. */ - includeAllBranches?: InputMaybe + includeAllBranches?: Maybe; /** The name of the new repository. */ - name: Scalars['String'] + name: Scalars['String']; /** The ID of the owner for the new repository. */ - ownerId: Scalars['ID'] + ownerId: Scalars['ID']; /** The Node ID of the template repository. */ - repositoryId: Scalars['ID'] + repositoryId: Scalars['ID']; /** Indicates the repository's visibility level. */ - visibility: RepositoryVisibility -} + visibility: RepositoryVisibility; +}; /** Autogenerated return type of CloneTemplateRepository */ export type CloneTemplateRepositoryPayload = { - __typename?: 'CloneTemplateRepositoryPayload' + __typename?: 'CloneTemplateRepositoryPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The new repository. */ - repository?: Maybe -} + repository?: Maybe; +}; /** An object that can be closed */ export type Closable = { /** `true` if the object is closed (definition of closed may depend on type) */ - closed: Scalars['Boolean'] + closed: Scalars['Boolean']; /** Identifies the date and time when the object was closed. */ - closedAt?: Maybe -} + closedAt?: Maybe; +}; + +/** Represents a 'closed' event on any `Closable`. */ +export type ClosedEvent = Node & UniformResourceLocatable & { + __typename?: 'ClosedEvent'; + /** Identifies the actor who performed the event. */ + actor?: Maybe; + /** Object that was closed. */ + closable: Closable; + /** Object which triggered the creation of this event. */ + closer?: Maybe; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + id: Scalars['ID']; + /** The HTTP path for this closed event. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this closed event. */ + url: Scalars['URI']; +}; /** Autogenerated input type of CloseIssue */ export type CloseIssueInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** ID of the issue to be closed. */ - issueId: Scalars['ID'] -} + issueId: Scalars['ID']; +}; /** Autogenerated return type of CloseIssue */ export type CloseIssuePayload = { - __typename?: 'CloseIssuePayload' + __typename?: 'CloseIssuePayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The issue that was closed. */ - issue?: Maybe -} + issue?: Maybe; +}; /** Autogenerated input type of ClosePullRequest */ export type ClosePullRequestInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** ID of the pull request to be closed. */ - pullRequestId: Scalars['ID'] -} + pullRequestId: Scalars['ID']; +}; /** Autogenerated return type of ClosePullRequest */ export type ClosePullRequestPayload = { - __typename?: 'ClosePullRequestPayload' + __typename?: 'ClosePullRequestPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The pull request that was closed. */ - pullRequest?: Maybe -} - -/** Represents a 'closed' event on any `Closable`. */ -export type ClosedEvent = Node & - UniformResourceLocatable & { - __typename?: 'ClosedEvent' - /** Identifies the actor who performed the event. */ - actor?: Maybe - /** Object that was closed. */ - closable: Closable - /** Object which triggered the creation of this event. */ - closer?: Maybe - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] - /** The HTTP path for this closed event. */ - resourcePath: Scalars['URI'] - /** The HTTP URL for this closed event. */ - url: Scalars['URI'] - } + pullRequest?: Maybe; +}; /** The object which triggered a `ClosedEvent`. */ -export type Closer = Commit | PullRequest +export type Closer = Commit | PullRequest; /** The Code of Conduct for a repository */ export type CodeOfConduct = Node & { - __typename?: 'CodeOfConduct' + __typename?: 'CodeOfConduct'; /** The body of the Code of Conduct */ - body?: Maybe - id: Scalars['ID'] + body?: Maybe; + id: Scalars['ID']; /** The key for the Code of Conduct */ - key: Scalars['String'] + key: Scalars['String']; /** The formal name of the Code of Conduct */ - name: Scalars['String'] + name: Scalars['String']; /** The HTTP path for this Code of Conduct */ - resourcePath?: Maybe + resourcePath?: Maybe; /** The HTTP URL for this Code of Conduct */ - url?: Maybe -} + url?: Maybe; +}; /** Collaborators affiliation level with a subject. */ export enum CollaboratorAffiliation { @@ -1680,43 +1644,44 @@ export enum CollaboratorAffiliation { /** Represents a comment. */ export type Comment = { /** The actor who authored the comment. */ - author?: Maybe + author?: Maybe; /** Author's association with the subject of the comment. */ - authorAssociation: CommentAuthorAssociation + authorAssociation: CommentAuthorAssociation; /** The body as Markdown. */ - body: Scalars['String'] + body: Scalars['String']; /** The body rendered to HTML. */ - bodyHTML: Scalars['HTML'] + bodyHTML: Scalars['HTML']; /** The body rendered to text. */ - bodyText: Scalars['String'] + bodyText: Scalars['String']; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** Check if this comment was created via an email reply. */ - createdViaEmail: Scalars['Boolean'] + createdViaEmail: Scalars['Boolean']; /** The actor who edited the comment. */ - editor?: Maybe - id: Scalars['ID'] + editor?: Maybe; + id: Scalars['ID']; /** Check if this comment was edited and includes an edit with the creation data */ - includesCreatedEdit: Scalars['Boolean'] + includesCreatedEdit: Scalars['Boolean']; /** The moment the editor made the last edit */ - lastEditedAt?: Maybe + lastEditedAt?: Maybe; /** Identifies when the comment was published at. */ - publishedAt?: Maybe + publishedAt?: Maybe; /** Identifies the date and time when the object was last updated. */ - updatedAt: Scalars['DateTime'] + updatedAt: Scalars['DateTime']; /** A list of edits to this content. */ - userContentEdits?: Maybe + userContentEdits?: Maybe; /** Did the viewer author this comment. */ - viewerDidAuthor: Scalars['Boolean'] -} + viewerDidAuthor: Scalars['Boolean']; +}; + /** Represents a comment. */ export type CommentUserContentEditsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; /** A comment author association with repository. */ export enum CommentAuthorAssociation { @@ -1724,10 +1689,10 @@ export enum CommentAuthorAssociation { Collaborator = 'COLLABORATOR', /** Author has previously committed to the repository. */ Contributor = 'CONTRIBUTOR', - /** Author has not previously committed to GitHub. */ - FirstTimer = 'FIRST_TIMER', /** Author has not previously committed to the repository. */ FirstTimeContributor = 'FIRST_TIME_CONTRIBUTOR', + /** Author has not previously committed to GitHub. */ + FirstTimer = 'FIRST_TIMER', /** Author is a placeholder for an unclaimed user. */ Mannequin = 'MANNEQUIN', /** Author is a member of the organization that owns the repository. */ @@ -1758,370 +1723,372 @@ export enum CommentCannotUpdateReason { /** Represents a 'comment_deleted' event on a given issue or pull request. */ export type CommentDeletedEvent = Node & { - __typename?: 'CommentDeletedEvent' + __typename?: 'CommentDeletedEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] + createdAt: Scalars['DateTime']; /** Identifies the primary key from the database. */ - databaseId?: Maybe + databaseId?: Maybe; /** The user who authored the deleted comment. */ - deletedCommentAuthor?: Maybe - id: Scalars['ID'] -} + deletedCommentAuthor?: Maybe; + id: Scalars['ID']; +}; /** Represents a Git commit. */ -export type Commit = GitObject & - Node & - Subscribable & - UniformResourceLocatable & { - __typename?: 'Commit' - /** An abbreviated version of the Git object ID */ - abbreviatedOid: Scalars['String'] - /** The number of additions in this commit. */ - additions: Scalars['Int'] - /** The merged Pull Request that introduced the commit to the repository. If the commit is not present in the default branch, additionally returns open Pull Requests associated with the commit */ - associatedPullRequests?: Maybe - /** Authorship details of the commit. */ - author?: Maybe - /** Check if the committer and the author match. */ - authoredByCommitter: Scalars['Boolean'] - /** The datetime when this commit was authored. */ - authoredDate: Scalars['DateTime'] - /** - * The list of authors for this commit based on the git author and the Co-authored-by - * message trailer. The git author will always be first. - */ - authors: GitActorConnection - /** Fetches `git blame` information. */ - blame: Blame - /** The number of changed files in this commit. */ - changedFiles: Scalars['Int'] - /** The check suites associated with a commit. */ - checkSuites?: Maybe - /** Comments made on the commit. */ - comments: CommitCommentConnection - /** The HTTP path for this Git object */ - commitResourcePath: Scalars['URI'] - /** The HTTP URL for this Git object */ - commitUrl: Scalars['URI'] - /** The datetime when this commit was committed. */ - committedDate: Scalars['DateTime'] - /** Check if committed via GitHub web UI. */ - committedViaWeb: Scalars['Boolean'] - /** Committer details of the commit. */ - committer?: Maybe - /** The number of deletions in this commit. */ - deletions: Scalars['Int'] - /** The deployments associated with a commit. */ - deployments?: Maybe - /** The tree entry representing the file located at the given path. */ - file?: Maybe - /** The linear commit history starting from (and including) this commit, in the same order as `git log`. */ - history: CommitHistoryConnection - id: Scalars['ID'] - /** The Git commit message */ - message: Scalars['String'] - /** The Git commit message body */ - messageBody: Scalars['String'] - /** The commit message body rendered to HTML. */ - messageBodyHTML: Scalars['HTML'] - /** The Git commit message headline */ - messageHeadline: Scalars['String'] - /** The commit message headline rendered to HTML. */ - messageHeadlineHTML: Scalars['HTML'] - /** The Git object ID */ - oid: Scalars['GitObjectID'] - /** The organization this commit was made on behalf of. */ - onBehalfOf?: Maybe - /** The parents of a commit. */ - parents: CommitConnection - /** The datetime when this commit was pushed. */ - pushedDate?: Maybe - /** The Repository this commit belongs to */ - repository: Repository - /** The HTTP path for this commit */ - resourcePath: Scalars['URI'] - /** Commit signing information, if present. */ - signature?: Maybe - /** Status information for this commit */ - status?: Maybe - /** Check and Status rollup information for this commit. */ - statusCheckRollup?: Maybe - /** Returns a list of all submodules in this repository as of this Commit parsed from the .gitmodules file. */ - submodules: SubmoduleConnection - /** - * Returns a URL to download a tarball archive for a repository. - * Note: For private repositories, these links are temporary and expire after five minutes. - */ - tarballUrl: Scalars['URI'] - /** Commit's root Tree */ - tree: Tree - /** The HTTP path for the tree of this commit */ - treeResourcePath: Scalars['URI'] - /** The HTTP URL for the tree of this commit */ - treeUrl: Scalars['URI'] - /** The HTTP URL for this commit */ - url: Scalars['URI'] - /** Check if the viewer is able to change their subscription status for the repository. */ - viewerCanSubscribe: Scalars['Boolean'] - /** Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. */ - viewerSubscription?: Maybe - /** - * Returns a URL to download a zipball archive for a repository. - * Note: For private repositories, these links are temporary and expire after five minutes. - */ - zipballUrl: Scalars['URI'] - } +export type Commit = GitObject & Node & Subscribable & UniformResourceLocatable & { + __typename?: 'Commit'; + /** An abbreviated version of the Git object ID */ + abbreviatedOid: Scalars['String']; + /** The number of additions in this commit. */ + additions: Scalars['Int']; + /** The merged Pull Request that introduced the commit to the repository. If the commit is not present in the default branch, additionally returns open Pull Requests associated with the commit */ + associatedPullRequests?: Maybe; + /** Authorship details of the commit. */ + author?: Maybe; + /** Check if the committer and the author match. */ + authoredByCommitter: Scalars['Boolean']; + /** The datetime when this commit was authored. */ + authoredDate: Scalars['DateTime']; + /** + * The list of authors for this commit based on the git author and the Co-authored-by + * message trailer. The git author will always be first. + */ + authors: GitActorConnection; + /** Fetches `git blame` information. */ + blame: Blame; + /** The number of changed files in this commit. */ + changedFiles: Scalars['Int']; + /** The check suites associated with a commit. */ + checkSuites?: Maybe; + /** Comments made on the commit. */ + comments: CommitCommentConnection; + /** The HTTP path for this Git object */ + commitResourcePath: Scalars['URI']; + /** The datetime when this commit was committed. */ + committedDate: Scalars['DateTime']; + /** Check if committed via GitHub web UI. */ + committedViaWeb: Scalars['Boolean']; + /** Committer details of the commit. */ + committer?: Maybe; + /** The HTTP URL for this Git object */ + commitUrl: Scalars['URI']; + /** The number of deletions in this commit. */ + deletions: Scalars['Int']; + /** The deployments associated with a commit. */ + deployments?: Maybe; + /** The tree entry representing the file located at the given path. */ + file?: Maybe; + /** The linear commit history starting from (and including) this commit, in the same order as `git log`. */ + history: CommitHistoryConnection; + id: Scalars['ID']; + /** The Git commit message */ + message: Scalars['String']; + /** The Git commit message body */ + messageBody: Scalars['String']; + /** The commit message body rendered to HTML. */ + messageBodyHTML: Scalars['HTML']; + /** The Git commit message headline */ + messageHeadline: Scalars['String']; + /** The commit message headline rendered to HTML. */ + messageHeadlineHTML: Scalars['HTML']; + /** The Git object ID */ + oid: Scalars['GitObjectID']; + /** The organization this commit was made on behalf of. */ + onBehalfOf?: Maybe; + /** The parents of a commit. */ + parents: CommitConnection; + /** The datetime when this commit was pushed. */ + pushedDate?: Maybe; + /** The Repository this commit belongs to */ + repository: Repository; + /** The HTTP path for this commit */ + resourcePath: Scalars['URI']; + /** Commit signing information, if present. */ + signature?: Maybe; + /** Status information for this commit */ + status?: Maybe; + /** Check and Status rollup information for this commit. */ + statusCheckRollup?: Maybe; + /** Returns a list of all submodules in this repository as of this Commit parsed from the .gitmodules file. */ + submodules: SubmoduleConnection; + /** + * Returns a URL to download a tarball archive for a repository. + * Note: For private repositories, these links are temporary and expire after five minutes. + */ + tarballUrl: Scalars['URI']; + /** Commit's root Tree */ + tree: Tree; + /** The HTTP path for the tree of this commit */ + treeResourcePath: Scalars['URI']; + /** The HTTP URL for the tree of this commit */ + treeUrl: Scalars['URI']; + /** The HTTP URL for this commit */ + url: Scalars['URI']; + /** Check if the viewer is able to change their subscription status for the repository. */ + viewerCanSubscribe: Scalars['Boolean']; + /** Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. */ + viewerSubscription?: Maybe; + /** + * Returns a URL to download a zipball archive for a repository. + * Note: For private repositories, these links are temporary and expire after five minutes. + */ + zipballUrl: Scalars['URI']; +}; + /** Represents a Git commit. */ export type CommitAssociatedPullRequestsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** Represents a Git commit. */ export type CommitAuthorsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** Represents a Git commit. */ export type CommitBlameArgs = { - path: Scalars['String'] -} + path: Scalars['String']; +}; + /** Represents a Git commit. */ export type CommitCheckSuitesArgs = { - after?: InputMaybe - before?: InputMaybe - filterBy?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + filterBy?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** Represents a Git commit. */ export type CommitCommentsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** Represents a Git commit. */ export type CommitDeploymentsArgs = { - after?: InputMaybe - before?: InputMaybe - environments?: InputMaybe> - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + environments?: Maybe>; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** Represents a Git commit. */ export type CommitFileArgs = { - path: Scalars['String'] -} + path: Scalars['String']; +}; + /** Represents a Git commit. */ export type CommitHistoryArgs = { - after?: InputMaybe - author?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - path?: InputMaybe - since?: InputMaybe - until?: InputMaybe -} + after?: Maybe; + author?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + path?: Maybe; + since?: Maybe; + until?: Maybe; +}; + /** Represents a Git commit. */ export type CommitParentsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; + /** Represents a Git commit. */ export type CommitSubmodulesArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; /** Specifies an author for filtering Git commits. */ export type CommitAuthor = { /** Email addresses to filter by. Commits authored by any of the specified email addresses will be returned. */ - emails?: InputMaybe> + emails?: Maybe>; /** ID of a User to filter by. If non-null, only commits authored by this user will be returned. This field takes precedence over emails. */ - id?: InputMaybe -} + id?: Maybe; +}; /** Represents a comment on a given Commit. */ -export type CommitComment = Comment & - Deletable & - Minimizable & - Node & - Reactable & - RepositoryNode & - Updatable & - UpdatableComment & { - __typename?: 'CommitComment' - /** The actor who authored the comment. */ - author?: Maybe - /** Author's association with the subject of the comment. */ - authorAssociation: CommentAuthorAssociation - /** Identifies the comment body. */ - body: Scalars['String'] - /** The body rendered to HTML. */ - bodyHTML: Scalars['HTML'] - /** The body rendered to text. */ - bodyText: Scalars['String'] - /** Identifies the commit associated with the comment, if the commit exists. */ - commit?: Maybe - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - /** Check if this comment was created via an email reply. */ - createdViaEmail: Scalars['Boolean'] - /** Identifies the primary key from the database. */ - databaseId?: Maybe - /** The actor who edited the comment. */ - editor?: Maybe - id: Scalars['ID'] - /** Check if this comment was edited and includes an edit with the creation data */ - includesCreatedEdit: Scalars['Boolean'] - /** Returns whether or not a comment has been minimized. */ - isMinimized: Scalars['Boolean'] - /** The moment the editor made the last edit */ - lastEditedAt?: Maybe - /** Returns why the comment was minimized. */ - minimizedReason?: Maybe - /** Identifies the file path associated with the comment. */ - path?: Maybe - /** Identifies the line position associated with the comment. */ - position?: Maybe - /** Identifies when the comment was published at. */ - publishedAt?: Maybe - /** A list of reactions grouped by content left on the subject. */ - reactionGroups?: Maybe> - /** A list of Reactions left on the Issue. */ - reactions: ReactionConnection - /** The repository associated with this node. */ - repository: Repository - /** The HTTP path permalink for this commit comment. */ - resourcePath: Scalars['URI'] - /** Identifies the date and time when the object was last updated. */ - updatedAt: Scalars['DateTime'] - /** The HTTP URL permalink for this commit comment. */ - url: Scalars['URI'] - /** A list of edits to this content. */ - userContentEdits?: Maybe - /** Check if the current viewer can delete this object. */ - viewerCanDelete: Scalars['Boolean'] - /** Check if the current viewer can minimize this object. */ - viewerCanMinimize: Scalars['Boolean'] - /** Can user react to this subject */ - viewerCanReact: Scalars['Boolean'] - /** Check if the current viewer can update this object. */ - viewerCanUpdate: Scalars['Boolean'] - /** Reasons why the current viewer can not update this comment. */ - viewerCannotUpdateReasons: Array - /** Did the viewer author this comment. */ - viewerDidAuthor: Scalars['Boolean'] - } +export type CommitComment = Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment & { + __typename?: 'CommitComment'; + /** The actor who authored the comment. */ + author?: Maybe; + /** Author's association with the subject of the comment. */ + authorAssociation: CommentAuthorAssociation; + /** Identifies the comment body. */ + body: Scalars['String']; + /** The body rendered to HTML. */ + bodyHTML: Scalars['HTML']; + /** The body rendered to text. */ + bodyText: Scalars['String']; + /** Identifies the commit associated with the comment, if the commit exists. */ + commit?: Maybe; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + /** Check if this comment was created via an email reply. */ + createdViaEmail: Scalars['Boolean']; + /** Identifies the primary key from the database. */ + databaseId?: Maybe; + /** The actor who edited the comment. */ + editor?: Maybe; + id: Scalars['ID']; + /** Check if this comment was edited and includes an edit with the creation data */ + includesCreatedEdit: Scalars['Boolean']; + /** Returns whether or not a comment has been minimized. */ + isMinimized: Scalars['Boolean']; + /** The moment the editor made the last edit */ + lastEditedAt?: Maybe; + /** Returns why the comment was minimized. */ + minimizedReason?: Maybe; + /** Identifies the file path associated with the comment. */ + path?: Maybe; + /** Identifies the line position associated with the comment. */ + position?: Maybe; + /** Identifies when the comment was published at. */ + publishedAt?: Maybe; + /** A list of reactions grouped by content left on the subject. */ + reactionGroups?: Maybe>; + /** A list of Reactions left on the Issue. */ + reactions: ReactionConnection; + /** The repository associated with this node. */ + repository: Repository; + /** The HTTP path permalink for this commit comment. */ + resourcePath: Scalars['URI']; + /** Identifies the date and time when the object was last updated. */ + updatedAt: Scalars['DateTime']; + /** The HTTP URL permalink for this commit comment. */ + url: Scalars['URI']; + /** A list of edits to this content. */ + userContentEdits?: Maybe; + /** Check if the current viewer can delete this object. */ + viewerCanDelete: Scalars['Boolean']; + /** Check if the current viewer can minimize this object. */ + viewerCanMinimize: Scalars['Boolean']; + /** Reasons why the current viewer can not update this comment. */ + viewerCannotUpdateReasons: Array; + /** Can user react to this subject */ + viewerCanReact: Scalars['Boolean']; + /** Check if the current viewer can update this object. */ + viewerCanUpdate: Scalars['Boolean']; + /** Did the viewer author this comment. */ + viewerDidAuthor: Scalars['Boolean']; +}; + /** Represents a comment on a given Commit. */ export type CommitCommentReactionsArgs = { - after?: InputMaybe - before?: InputMaybe - content?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + content?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** Represents a comment on a given Commit. */ export type CommitCommentUserContentEditsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; /** The connection type for CommitComment. */ export type CommitCommentConnection = { - __typename?: 'CommitCommentConnection' + __typename?: 'CommitCommentConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** An edge in a connection. */ export type CommitCommentEdge = { - __typename?: 'CommitCommentEdge' + __typename?: 'CommitCommentEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** A thread of comments on a commit. */ -export type CommitCommentThread = Node & - RepositoryNode & { - __typename?: 'CommitCommentThread' - /** The comments that exist in this thread. */ - comments: CommitCommentConnection - /** The commit the comments were made on. */ - commit?: Maybe - id: Scalars['ID'] - /** The file the comments were made on. */ - path?: Maybe - /** The position in the diff for the commit that the comment was made on. */ - position?: Maybe - /** The repository associated with this node. */ - repository: Repository - } +export type CommitCommentThread = Node & RepositoryNode & { + __typename?: 'CommitCommentThread'; + /** The comments that exist in this thread. */ + comments: CommitCommentConnection; + /** The commit the comments were made on. */ + commit?: Maybe; + id: Scalars['ID']; + /** The file the comments were made on. */ + path?: Maybe; + /** The position in the diff for the commit that the comment was made on. */ + position?: Maybe; + /** The repository associated with this node. */ + repository: Repository; +}; + /** A thread of comments on a commit. */ export type CommitCommentThreadCommentsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; +}; /** The connection type for Commit. */ export type CommitConnection = { - __typename?: 'CommitConnection' + __typename?: 'CommitConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** Ordering options for commit contribution connections. */ export type CommitContributionOrder = { /** The ordering direction. */ - direction: OrderDirection + direction: OrderDirection; /** The field by which to order commit contributions. */ - field: CommitContributionOrderField -} + field: CommitContributionOrderField; +}; /** Properties by which commit contribution connections can be ordered. */ export enum CommitContributionOrderField { @@ -2133,55 +2100,56 @@ export enum CommitContributionOrderField { /** This aggregates commits made by a user within one repository. */ export type CommitContributionsByRepository = { - __typename?: 'CommitContributionsByRepository' + __typename?: 'CommitContributionsByRepository'; /** The commit contributions, each representing a day. */ - contributions: CreatedCommitContributionConnection + contributions: CreatedCommitContributionConnection; /** The repository in which the commits were made. */ - repository: Repository + repository: Repository; /** The HTTP path for the user's commits to the repository in this time range. */ - resourcePath: Scalars['URI'] + resourcePath: Scalars['URI']; /** The HTTP URL for the user's commits to the repository in this time range. */ - url: Scalars['URI'] -} + url: Scalars['URI']; +}; + /** This aggregates commits made by a user within one repository. */ export type CommitContributionsByRepositoryContributionsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; /** An edge in a connection. */ export type CommitEdge = { - __typename?: 'CommitEdge' + __typename?: 'CommitEdge'; /** A cursor for use in pagination. */ - cursor: Scalars['String'] + cursor: Scalars['String']; /** The item at the end of the edge. */ - node?: Maybe -} + node?: Maybe; +}; /** The connection type for Commit. */ export type CommitHistoryConnection = { - __typename?: 'CommitHistoryConnection' + __typename?: 'CommitHistoryConnection'; /** A list of edges. */ - edges?: Maybe>> + edges?: Maybe>>; /** A list of nodes. */ - nodes?: Maybe>> + nodes?: Maybe>>; /** Information to aid in pagination. */ - pageInfo: PageInfo + pageInfo: PageInfo; /** Identifies the total count of items in the connection. */ - totalCount: Scalars['Int'] -} + totalCount: Scalars['Int']; +}; /** A message to include with a new commit */ export type CommitMessage = { /** The body of the message. */ - body?: InputMaybe + body?: Maybe; /** The headline of the message. */ - headline: Scalars['String'] -} + headline: Scalars['String']; +}; /** * A git ref for a commit to be appended to. @@ -2208,28 +2176,28 @@ export type CommitMessage = { */ export type CommittableBranch = { /** The unqualified name of the branch to append the commit to. */ - branchName?: InputMaybe + branchName?: Maybe; /** The Node ID of the Ref to be updated. */ - id?: InputMaybe + id?: Maybe; /** The nameWithOwner of the repository to commit to. */ - repositoryNameWithOwner?: InputMaybe -} + repositoryNameWithOwner?: Maybe; +}; /** Represents a 'connected' event on a given issue or pull request. */ export type ConnectedEvent = Node & { - __typename?: 'ConnectedEvent' + __typename?: 'ConnectedEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] + createdAt: Scalars['DateTime']; + id: Scalars['ID']; /** Reference originated in a different repository. */ - isCrossRepository: Scalars['Boolean'] + isCrossRepository: Scalars['Boolean']; /** Issue or pull request that made the reference. */ - source: ReferencedSubject + source: ReferencedSubject; /** Issue or pull request which was connected. */ - subject: ReferencedSubject -} + subject: ReferencedSubject; +}; /** Represents a contribution a user made on GitHub, such as opening an issue. */ export type Contribution = { @@ -2238,68 +2206,68 @@ export type Contribution = { * example, your own 'first issue' contribution may have been made on a repository you can no * longer access. */ - isRestricted: Scalars['Boolean'] + isRestricted: Scalars['Boolean']; /** When this contribution was made. */ - occurredAt: Scalars['DateTime'] + occurredAt: Scalars['DateTime']; /** The HTTP path for this contribution. */ - resourcePath: Scalars['URI'] + resourcePath: Scalars['URI']; /** The HTTP URL for this contribution. */ - url: Scalars['URI'] + url: Scalars['URI']; /** The user who made this contribution. */ - user: User -} + user: User; +}; /** A calendar of contributions made on GitHub by a user. */ export type ContributionCalendar = { - __typename?: 'ContributionCalendar' + __typename?: 'ContributionCalendar'; /** A list of hex color codes used in this calendar. The darker the color, the more contributions it represents. */ - colors: Array + colors: Array; /** Determine if the color set was chosen because it's currently Halloween. */ - isHalloween: Scalars['Boolean'] + isHalloween: Scalars['Boolean']; /** A list of the months of contributions in this calendar. */ - months: Array + months: Array; /** The count of total contributions in the calendar. */ - totalContributions: Scalars['Int'] + totalContributions: Scalars['Int']; /** A list of the weeks of contributions in this calendar. */ - weeks: Array -} + weeks: Array; +}; /** Represents a single day of contributions on GitHub by a user. */ export type ContributionCalendarDay = { - __typename?: 'ContributionCalendarDay' + __typename?: 'ContributionCalendarDay'; /** The hex color code that represents how many contributions were made on this day compared to others in the calendar. */ - color: Scalars['String'] + color: Scalars['String']; /** How many contributions were made by the user on this day. */ - contributionCount: Scalars['Int'] + contributionCount: Scalars['Int']; /** Indication of contributions, relative to other days. Can be used to indicate which color to represent this day on a calendar. */ - contributionLevel: ContributionLevel + contributionLevel: ContributionLevel; /** The day this square represents. */ - date: Scalars['Date'] + date: Scalars['Date']; /** A number representing which day of the week this square represents, e.g., 1 is Monday. */ - weekday: Scalars['Int'] -} + weekday: Scalars['Int']; +}; /** A month of contributions in a user's contribution graph. */ export type ContributionCalendarMonth = { - __typename?: 'ContributionCalendarMonth' + __typename?: 'ContributionCalendarMonth'; /** The date of the first day of this month. */ - firstDay: Scalars['Date'] + firstDay: Scalars['Date']; /** The name of the month. */ - name: Scalars['String'] + name: Scalars['String']; /** How many weeks started in this month. */ - totalWeeks: Scalars['Int'] + totalWeeks: Scalars['Int']; /** The year the month occurred in. */ - year: Scalars['Int'] -} + year: Scalars['Int']; +}; /** A week of contributions in a user's contribution graph. */ export type ContributionCalendarWeek = { - __typename?: 'ContributionCalendarWeek' + __typename?: 'ContributionCalendarWeek'; /** The days of contributions in this week. */ - contributionDays: Array + contributionDays: Array; /** The date of the earliest square in this week. */ - firstDay: Scalars['Date'] -} + firstDay: Scalars['Date']; +}; /** Varying levels of contributions from none to many. */ export enum ContributionLevel { @@ -2318,569 +2286,811 @@ export enum ContributionLevel { /** Ordering options for contribution connections. */ export type ContributionOrder = { /** The ordering direction. */ - direction: OrderDirection -} + direction: OrderDirection; +}; /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollection = { - __typename?: 'ContributionsCollection' + __typename?: 'ContributionsCollection'; /** Commit contributions made by the user, grouped by repository. */ - commitContributionsByRepository: Array + commitContributionsByRepository: Array; /** A calendar of this user's contributions on GitHub. */ - contributionCalendar: ContributionCalendar + contributionCalendar: ContributionCalendar; /** The years the user has been making contributions with the most recent year first. */ - contributionYears: Array + contributionYears: Array; /** Determine if this collection's time span ends in the current month. */ - doesEndInCurrentMonth: Scalars['Boolean'] + doesEndInCurrentMonth: Scalars['Boolean']; /** The date of the first restricted contribution the user made in this time period. Can only be non-null when the user has enabled private contribution counts. */ - earliestRestrictedContributionDate?: Maybe + earliestRestrictedContributionDate?: Maybe; /** The ending date and time of this collection. */ - endedAt: Scalars['DateTime'] + endedAt: Scalars['DateTime']; /** The first issue the user opened on GitHub. This will be null if that issue was opened outside the collection's time range and ignoreTimeRange is false. If the issue is not visible but the user has opted to show private contributions, a RestrictedContribution will be returned. */ - firstIssueContribution?: Maybe + firstIssueContribution?: Maybe; /** The first pull request the user opened on GitHub. This will be null if that pull request was opened outside the collection's time range and ignoreTimeRange is not true. If the pull request is not visible but the user has opted to show private contributions, a RestrictedContribution will be returned. */ - firstPullRequestContribution?: Maybe + firstPullRequestContribution?: Maybe; /** The first repository the user created on GitHub. This will be null if that first repository was created outside the collection's time range and ignoreTimeRange is false. If the repository is not visible, then a RestrictedContribution is returned. */ - firstRepositoryContribution?: Maybe + firstRepositoryContribution?: Maybe; /** Does the user have any more activity in the timeline that occurred prior to the collection's time range? */ - hasActivityInThePast: Scalars['Boolean'] + hasActivityInThePast: Scalars['Boolean']; /** Determine if there are any contributions in this collection. */ - hasAnyContributions: Scalars['Boolean'] + hasAnyContributions: Scalars['Boolean']; /** Determine if the user made any contributions in this time frame whose details are not visible because they were made in a private repository. Can only be true if the user enabled private contribution counts. */ - hasAnyRestrictedContributions: Scalars['Boolean'] + hasAnyRestrictedContributions: Scalars['Boolean']; /** Whether or not the collector's time span is all within the same day. */ - isSingleDay: Scalars['Boolean'] + isSingleDay: Scalars['Boolean']; /** A list of issues the user opened. */ - issueContributions: CreatedIssueContributionConnection + issueContributions: CreatedIssueContributionConnection; /** Issue contributions made by the user, grouped by repository. */ - issueContributionsByRepository: Array + issueContributionsByRepository: Array; /** When the user signed up for GitHub. This will be null if that sign up date falls outside the collection's time range and ignoreTimeRange is false. */ - joinedGitHubContribution?: Maybe + joinedGitHubContribution?: Maybe; /** The date of the most recent restricted contribution the user made in this time period. Can only be non-null when the user has enabled private contribution counts. */ - latestRestrictedContributionDate?: Maybe + latestRestrictedContributionDate?: Maybe; /** * When this collection's time range does not include any activity from the user, use this * to get a different collection from an earlier time range that does have activity. */ - mostRecentCollectionWithActivity?: Maybe + mostRecentCollectionWithActivity?: Maybe; /** * Returns a different contributions collection from an earlier time range than this one * that does not have any contributions. */ - mostRecentCollectionWithoutActivity?: Maybe + mostRecentCollectionWithoutActivity?: Maybe; /** * The issue the user opened on GitHub that received the most comments in the specified * time frame. */ - popularIssueContribution?: Maybe + popularIssueContribution?: Maybe; /** * The pull request the user opened on GitHub that received the most comments in the * specified time frame. */ - popularPullRequestContribution?: Maybe + popularPullRequestContribution?: Maybe; /** Pull request contributions made by the user. */ - pullRequestContributions: CreatedPullRequestContributionConnection + pullRequestContributions: CreatedPullRequestContributionConnection; /** Pull request contributions made by the user, grouped by repository. */ - pullRequestContributionsByRepository: Array + pullRequestContributionsByRepository: Array; /** Pull request review contributions made by the user. */ - pullRequestReviewContributions: CreatedPullRequestReviewContributionConnection + pullRequestReviewContributions: CreatedPullRequestReviewContributionConnection; /** Pull request review contributions made by the user, grouped by repository. */ - pullRequestReviewContributionsByRepository: Array + pullRequestReviewContributionsByRepository: Array; /** A list of repositories owned by the user that the user created in this time range. */ - repositoryContributions: CreatedRepositoryContributionConnection + repositoryContributions: CreatedRepositoryContributionConnection; /** A count of contributions made by the user that the viewer cannot access. Only non-zero when the user has chosen to share their private contribution counts. */ - restrictedContributionsCount: Scalars['Int'] + restrictedContributionsCount: Scalars['Int']; /** The beginning date and time of this collection. */ - startedAt: Scalars['DateTime'] + startedAt: Scalars['DateTime']; /** How many commits were made by the user in this time span. */ - totalCommitContributions: Scalars['Int'] + totalCommitContributions: Scalars['Int']; /** How many issues the user opened. */ - totalIssueContributions: Scalars['Int'] + totalIssueContributions: Scalars['Int']; /** How many pull requests the user opened. */ - totalPullRequestContributions: Scalars['Int'] + totalPullRequestContributions: Scalars['Int']; /** How many pull request reviews the user left. */ - totalPullRequestReviewContributions: Scalars['Int'] + totalPullRequestReviewContributions: Scalars['Int']; /** How many different repositories the user committed to. */ - totalRepositoriesWithContributedCommits: Scalars['Int'] + totalRepositoriesWithContributedCommits: Scalars['Int']; /** How many different repositories the user opened issues in. */ - totalRepositoriesWithContributedIssues: Scalars['Int'] + totalRepositoriesWithContributedIssues: Scalars['Int']; /** How many different repositories the user left pull request reviews in. */ - totalRepositoriesWithContributedPullRequestReviews: Scalars['Int'] + totalRepositoriesWithContributedPullRequestReviews: Scalars['Int']; /** How many different repositories the user opened pull requests in. */ - totalRepositoriesWithContributedPullRequests: Scalars['Int'] + totalRepositoriesWithContributedPullRequests: Scalars['Int']; /** How many repositories the user created. */ - totalRepositoryContributions: Scalars['Int'] + totalRepositoryContributions: Scalars['Int']; /** The user who made the contributions in this collection. */ - user: User -} + user: User; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionCommitContributionsByRepositoryArgs = { - maxRepositories?: InputMaybe -} + maxRepositories?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionIssueContributionsArgs = { - after?: InputMaybe - before?: InputMaybe - excludeFirst?: InputMaybe - excludePopular?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + excludeFirst?: Maybe; + excludePopular?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionIssueContributionsByRepositoryArgs = { - excludeFirst?: InputMaybe - excludePopular?: InputMaybe - maxRepositories?: InputMaybe -} + excludeFirst?: Maybe; + excludePopular?: Maybe; + maxRepositories?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionPullRequestContributionsArgs = { - after?: InputMaybe - before?: InputMaybe - excludeFirst?: InputMaybe - excludePopular?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + excludeFirst?: Maybe; + excludePopular?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionPullRequestContributionsByRepositoryArgs = { - excludeFirst?: InputMaybe - excludePopular?: InputMaybe - maxRepositories?: InputMaybe -} + excludeFirst?: Maybe; + excludePopular?: Maybe; + maxRepositories?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionPullRequestReviewContributionsArgs = { - after?: InputMaybe - before?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionPullRequestReviewContributionsByRepositoryArgs = { - maxRepositories?: InputMaybe -} + maxRepositories?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionRepositoryContributionsArgs = { - after?: InputMaybe - before?: InputMaybe - excludeFirst?: InputMaybe - first?: InputMaybe - last?: InputMaybe - orderBy?: InputMaybe -} + after?: Maybe; + before?: Maybe; + excludeFirst?: Maybe; + first?: Maybe; + last?: Maybe; + orderBy?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionTotalIssueContributionsArgs = { - excludeFirst?: InputMaybe - excludePopular?: InputMaybe -} + excludeFirst?: Maybe; + excludePopular?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionTotalPullRequestContributionsArgs = { - excludeFirst?: InputMaybe - excludePopular?: InputMaybe -} + excludeFirst?: Maybe; + excludePopular?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionTotalRepositoriesWithContributedIssuesArgs = { - excludeFirst?: InputMaybe - excludePopular?: InputMaybe -} + excludeFirst?: Maybe; + excludePopular?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionTotalRepositoriesWithContributedPullRequestsArgs = { - excludeFirst?: InputMaybe - excludePopular?: InputMaybe -} + excludeFirst?: Maybe; + excludePopular?: Maybe; +}; + /** A contributions collection aggregates contributions such as opened issues and commits created by a user. */ export type ContributionsCollectionTotalRepositoryContributionsArgs = { - excludeFirst?: InputMaybe -} + excludeFirst?: Maybe; +}; + +/** Represents a 'converted_note_to_issue' event on a given issue or pull request. */ +export type ConvertedNoteToIssueEvent = Node & { + __typename?: 'ConvertedNoteToIssueEvent'; + /** Identifies the actor who performed the event. */ + actor?: Maybe; + /** Identifies the date and time when the object was created. */ + createdAt: Scalars['DateTime']; + /** Identifies the primary key from the database. */ + databaseId?: Maybe; + id: Scalars['ID']; +}; /** Autogenerated input type of ConvertProjectCardNoteToIssue */ export type ConvertProjectCardNoteToIssueInput = { /** The body of the newly created issue. */ - body?: InputMaybe + body?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The ProjectCard ID to convert. */ - projectCardId: Scalars['ID'] + projectCardId: Scalars['ID']; /** The ID of the repository to create the issue in. */ - repositoryId: Scalars['ID'] + repositoryId: Scalars['ID']; /** The title of the newly created issue. Defaults to the card's note text. */ - title?: InputMaybe -} + title?: Maybe; +}; /** Autogenerated return type of ConvertProjectCardNoteToIssue */ export type ConvertProjectCardNoteToIssuePayload = { - __typename?: 'ConvertProjectCardNoteToIssuePayload' + __typename?: 'ConvertProjectCardNoteToIssuePayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The updated ProjectCard. */ - projectCard?: Maybe -} + projectCard?: Maybe; +}; /** Autogenerated input type of ConvertPullRequestToDraft */ export type ConvertPullRequestToDraftInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** ID of the pull request to convert to draft */ - pullRequestId: Scalars['ID'] -} + pullRequestId: Scalars['ID']; +}; /** Autogenerated return type of ConvertPullRequestToDraft */ export type ConvertPullRequestToDraftPayload = { - __typename?: 'ConvertPullRequestToDraftPayload' + __typename?: 'ConvertPullRequestToDraftPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The pull request that is now a draft. */ - pullRequest?: Maybe -} + pullRequest?: Maybe; +}; /** Represents a 'convert_to_draft' event on a given pull request. */ -export type ConvertToDraftEvent = Node & - UniformResourceLocatable & { - __typename?: 'ConvertToDraftEvent' - /** Identifies the actor who performed the event. */ - actor?: Maybe - /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - id: Scalars['ID'] - /** PullRequest referenced by event. */ - pullRequest: PullRequest - /** The HTTP path for this convert to draft event. */ - resourcePath: Scalars['URI'] - /** The HTTP URL for this convert to draft event. */ - url: Scalars['URI'] - } - -/** Represents a 'converted_note_to_issue' event on a given issue or pull request. */ -export type ConvertedNoteToIssueEvent = Node & { - __typename?: 'ConvertedNoteToIssueEvent' +export type ConvertToDraftEvent = Node & UniformResourceLocatable & { + __typename?: 'ConvertToDraftEvent'; /** Identifies the actor who performed the event. */ - actor?: Maybe + actor?: Maybe; /** Identifies the date and time when the object was created. */ - createdAt: Scalars['DateTime'] - /** Identifies the primary key from the database. */ - databaseId?: Maybe - id: Scalars['ID'] -} + createdAt: Scalars['DateTime']; + id: Scalars['ID']; + /** PullRequest referenced by event. */ + pullRequest: PullRequest; + /** The HTTP path for this convert to draft event. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this convert to draft event. */ + url: Scalars['URI']; +}; /** Autogenerated input type of CreateBranchProtectionRule */ export type CreateBranchProtectionRuleInput = { /** Can this branch be deleted. */ - allowsDeletions?: InputMaybe + allowsDeletions?: Maybe; /** Are force pushes allowed on this branch. */ - allowsForcePushes?: InputMaybe + allowsForcePushes?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** Will new commits pushed to matching branches dismiss pull request review approvals. */ - dismissesStaleReviews?: InputMaybe + dismissesStaleReviews?: Maybe; /** Can admins overwrite branch protection. */ - isAdminEnforced?: InputMaybe + isAdminEnforced?: Maybe; /** The glob-like pattern used to determine matching branches. */ - pattern: Scalars['String'] + pattern: Scalars['String']; /** A list of User, Team or App IDs allowed to push to matching branches. */ - pushActorIds?: InputMaybe> + pushActorIds?: Maybe>; /** The global relay id of the repository in which a new branch protection rule should be created in. */ - repositoryId: Scalars['ID'] + repositoryId: Scalars['ID']; /** Number of approving reviews required to update matching branches. */ - requiredApprovingReviewCount?: InputMaybe + requiredApprovingReviewCount?: Maybe; /** List of required status check contexts that must pass for commits to be accepted to matching branches. */ - requiredStatusCheckContexts?: InputMaybe> + requiredStatusCheckContexts?: Maybe>; /** Are approving reviews required to update matching branches. */ - requiresApprovingReviews?: InputMaybe + requiresApprovingReviews?: Maybe; /** Are reviews from code owners required to update matching branches. */ - requiresCodeOwnerReviews?: InputMaybe + requiresCodeOwnerReviews?: Maybe; /** Are commits required to be signed. */ - requiresCommitSignatures?: InputMaybe + requiresCommitSignatures?: Maybe; /** Are conversations required to be resolved before merging. */ - requiresConversationResolution?: InputMaybe + requiresConversationResolution?: Maybe; /** Are merge commits prohibited from being pushed to this branch. */ - requiresLinearHistory?: InputMaybe + requiresLinearHistory?: Maybe; /** Are status checks required to update matching branches. */ - requiresStatusChecks?: InputMaybe + requiresStatusChecks?: Maybe; /** Are branches required to be up to date before merging. */ - requiresStrictStatusChecks?: InputMaybe + requiresStrictStatusChecks?: Maybe; /** Is pushing to matching branches restricted. */ - restrictsPushes?: InputMaybe + restrictsPushes?: Maybe; /** Is dismissal of pull request reviews restricted. */ - restrictsReviewDismissals?: InputMaybe + restrictsReviewDismissals?: Maybe; /** A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches. */ - reviewDismissalActorIds?: InputMaybe> -} + reviewDismissalActorIds?: Maybe>; +}; /** Autogenerated return type of CreateBranchProtectionRule */ export type CreateBranchProtectionRulePayload = { - __typename?: 'CreateBranchProtectionRulePayload' + __typename?: 'CreateBranchProtectionRulePayload'; /** The newly created BranchProtectionRule. */ - branchProtectionRule?: Maybe + branchProtectionRule?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe -} + clientMutationId?: Maybe; +}; /** Autogenerated input type of CreateCheckRun */ export type CreateCheckRunInput = { /** Possible further actions the integrator can perform, which a user may trigger. */ - actions?: InputMaybe> + actions?: Maybe>; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The time that the check run finished. */ - completedAt?: InputMaybe + completedAt?: Maybe; /** The final conclusion of the check. */ - conclusion?: InputMaybe + conclusion?: Maybe; /** The URL of the integrator's site that has the full details of the check. */ - detailsUrl?: InputMaybe + detailsUrl?: Maybe; /** A reference for the run on the integrator's system. */ - externalId?: InputMaybe + externalId?: Maybe; /** The SHA of the head commit. */ - headSha: Scalars['GitObjectID'] + headSha: Scalars['GitObjectID']; /** The name of the check. */ - name: Scalars['String'] + name: Scalars['String']; /** Descriptive details about the run. */ - output?: InputMaybe + output?: Maybe; /** The node ID of the repository. */ - repositoryId: Scalars['ID'] + repositoryId: Scalars['ID']; /** The time that the check run began. */ - startedAt?: InputMaybe + startedAt?: Maybe; /** The current status. */ - status?: InputMaybe -} + status?: Maybe; +}; /** Autogenerated return type of CreateCheckRun */ export type CreateCheckRunPayload = { - __typename?: 'CreateCheckRunPayload' + __typename?: 'CreateCheckRunPayload'; /** The newly created check run. */ - checkRun?: Maybe + checkRun?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe -} + clientMutationId?: Maybe; +}; /** Autogenerated input type of CreateCheckSuite */ export type CreateCheckSuiteInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The SHA of the head commit. */ - headSha: Scalars['GitObjectID'] + headSha: Scalars['GitObjectID']; /** The Node ID of the repository. */ - repositoryId: Scalars['ID'] -} + repositoryId: Scalars['ID']; +}; /** Autogenerated return type of CreateCheckSuite */ export type CreateCheckSuitePayload = { - __typename?: 'CreateCheckSuitePayload' + __typename?: 'CreateCheckSuitePayload'; /** The newly created check suite. */ - checkSuite?: Maybe + checkSuite?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe -} + clientMutationId?: Maybe; +}; /** Autogenerated input type of CreateCommitOnBranch */ export type CreateCommitOnBranchInput = { /** The Ref to be updated. Must be a branch. */ - branch: CommittableBranch + branch: CommittableBranch; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The git commit oid expected at the head of the branch prior to the commit */ - expectedHeadOid: Scalars['GitObjectID'] + expectedHeadOid: Scalars['GitObjectID']; /** A description of changes to files in this commit. */ - fileChanges?: InputMaybe + fileChanges?: Maybe; /** The commit message the be included with the commit. */ - message: CommitMessage -} + message: CommitMessage; +}; /** Autogenerated return type of CreateCommitOnBranch */ export type CreateCommitOnBranchPayload = { - __typename?: 'CreateCommitOnBranchPayload' + __typename?: 'CreateCommitOnBranchPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The new commit. */ - commit?: Maybe + commit?: Maybe; /** The ref which has been updated to point to the new commit. */ - ref?: Maybe -} + ref?: Maybe; +}; + +/** Represents the contribution a user made by committing to a repository. */ +export type CreatedCommitContribution = Contribution & { + __typename?: 'CreatedCommitContribution'; + /** How many commits were made on this day to this repository by the user. */ + commitCount: Scalars['Int']; + /** + * Whether this contribution is associated with a record you do not have access to. For + * example, your own 'first issue' contribution may have been made on a repository you can no + * longer access. + */ + isRestricted: Scalars['Boolean']; + /** When this contribution was made. */ + occurredAt: Scalars['DateTime']; + /** The repository the user made a commit in. */ + repository: Repository; + /** The HTTP path for this contribution. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this contribution. */ + url: Scalars['URI']; + /** The user who made this contribution. */ + user: User; +}; + +/** The connection type for CreatedCommitContribution. */ +export type CreatedCommitContributionConnection = { + __typename?: 'CreatedCommitContributionConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** A list of nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of commits across days and repositories in the connection. */ + totalCount: Scalars['Int']; +}; + +/** An edge in a connection. */ +export type CreatedCommitContributionEdge = { + __typename?: 'CreatedCommitContributionEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']; + /** The item at the end of the edge. */ + node?: Maybe; +}; /** Autogenerated input type of CreateDiscussion */ export type CreateDiscussionInput = { /** The body of the discussion. */ - body: Scalars['String'] + body: Scalars['String']; /** The id of the discussion category to associate with this discussion. */ - categoryId: Scalars['ID'] + categoryId: Scalars['ID']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The id of the repository on which to create the discussion. */ - repositoryId: Scalars['ID'] + repositoryId: Scalars['ID']; /** The title of the discussion. */ - title: Scalars['String'] -} + title: Scalars['String']; +}; /** Autogenerated return type of CreateDiscussion */ export type CreateDiscussionPayload = { - __typename?: 'CreateDiscussionPayload' + __typename?: 'CreateDiscussionPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The discussion that was just created. */ - discussion?: Maybe -} + discussion?: Maybe; +}; + +/** Represents the contribution a user made on GitHub by opening an issue. */ +export type CreatedIssueContribution = Contribution & { + __typename?: 'CreatedIssueContribution'; + /** + * Whether this contribution is associated with a record you do not have access to. For + * example, your own 'first issue' contribution may have been made on a repository you can no + * longer access. + */ + isRestricted: Scalars['Boolean']; + /** The issue that was opened. */ + issue: Issue; + /** When this contribution was made. */ + occurredAt: Scalars['DateTime']; + /** The HTTP path for this contribution. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this contribution. */ + url: Scalars['URI']; + /** The user who made this contribution. */ + user: User; +}; + +/** The connection type for CreatedIssueContribution. */ +export type CreatedIssueContributionConnection = { + __typename?: 'CreatedIssueContributionConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** A list of nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']; +}; + +/** An edge in a connection. */ +export type CreatedIssueContributionEdge = { + __typename?: 'CreatedIssueContributionEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Represents either a issue the viewer can access or a restricted contribution. */ +export type CreatedIssueOrRestrictedContribution = CreatedIssueContribution | RestrictedContribution; + +/** Represents the contribution a user made on GitHub by opening a pull request. */ +export type CreatedPullRequestContribution = Contribution & { + __typename?: 'CreatedPullRequestContribution'; + /** + * Whether this contribution is associated with a record you do not have access to. For + * example, your own 'first issue' contribution may have been made on a repository you can no + * longer access. + */ + isRestricted: Scalars['Boolean']; + /** When this contribution was made. */ + occurredAt: Scalars['DateTime']; + /** The pull request that was opened. */ + pullRequest: PullRequest; + /** The HTTP path for this contribution. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this contribution. */ + url: Scalars['URI']; + /** The user who made this contribution. */ + user: User; +}; + +/** The connection type for CreatedPullRequestContribution. */ +export type CreatedPullRequestContributionConnection = { + __typename?: 'CreatedPullRequestContributionConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** A list of nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']; +}; + +/** An edge in a connection. */ +export type CreatedPullRequestContributionEdge = { + __typename?: 'CreatedPullRequestContributionEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Represents either a pull request the viewer can access or a restricted contribution. */ +export type CreatedPullRequestOrRestrictedContribution = CreatedPullRequestContribution | RestrictedContribution; + +/** Represents the contribution a user made by leaving a review on a pull request. */ +export type CreatedPullRequestReviewContribution = Contribution & { + __typename?: 'CreatedPullRequestReviewContribution'; + /** + * Whether this contribution is associated with a record you do not have access to. For + * example, your own 'first issue' contribution may have been made on a repository you can no + * longer access. + */ + isRestricted: Scalars['Boolean']; + /** When this contribution was made. */ + occurredAt: Scalars['DateTime']; + /** The pull request the user reviewed. */ + pullRequest: PullRequest; + /** The review the user left on the pull request. */ + pullRequestReview: PullRequestReview; + /** The repository containing the pull request that the user reviewed. */ + repository: Repository; + /** The HTTP path for this contribution. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this contribution. */ + url: Scalars['URI']; + /** The user who made this contribution. */ + user: User; +}; + +/** The connection type for CreatedPullRequestReviewContribution. */ +export type CreatedPullRequestReviewContributionConnection = { + __typename?: 'CreatedPullRequestReviewContributionConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** A list of nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']; +}; + +/** An edge in a connection. */ +export type CreatedPullRequestReviewContributionEdge = { + __typename?: 'CreatedPullRequestReviewContributionEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Represents the contribution a user made on GitHub by creating a repository. */ +export type CreatedRepositoryContribution = Contribution & { + __typename?: 'CreatedRepositoryContribution'; + /** + * Whether this contribution is associated with a record you do not have access to. For + * example, your own 'first issue' contribution may have been made on a repository you can no + * longer access. + */ + isRestricted: Scalars['Boolean']; + /** When this contribution was made. */ + occurredAt: Scalars['DateTime']; + /** The repository that was created. */ + repository: Repository; + /** The HTTP path for this contribution. */ + resourcePath: Scalars['URI']; + /** The HTTP URL for this contribution. */ + url: Scalars['URI']; + /** The user who made this contribution. */ + user: User; +}; + +/** The connection type for CreatedRepositoryContribution. */ +export type CreatedRepositoryContributionConnection = { + __typename?: 'CreatedRepositoryContributionConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** A list of nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']; +}; + +/** An edge in a connection. */ +export type CreatedRepositoryContributionEdge = { + __typename?: 'CreatedRepositoryContributionEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['String']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Represents either a repository the viewer can access or a restricted contribution. */ +export type CreatedRepositoryOrRestrictedContribution = CreatedRepositoryContribution | RestrictedContribution; /** Autogenerated input type of CreateEnterpriseOrganization */ export type CreateEnterpriseOrganizationInput = { /** The logins for the administrators of the new organization. */ - adminLogins: Array + adminLogins: Array; /** The email used for sending billing receipts. */ - billingEmail: Scalars['String'] + billingEmail: Scalars['String']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The ID of the enterprise owning the new organization. */ - enterpriseId: Scalars['ID'] + enterpriseId: Scalars['ID']; /** The login of the new organization. */ - login: Scalars['String'] + login: Scalars['String']; /** The profile name of the new organization. */ - profileName: Scalars['String'] -} + profileName: Scalars['String']; +}; /** Autogenerated return type of CreateEnterpriseOrganization */ export type CreateEnterpriseOrganizationPayload = { - __typename?: 'CreateEnterpriseOrganizationPayload' + __typename?: 'CreateEnterpriseOrganizationPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The enterprise that owns the created organization. */ - enterprise?: Maybe + enterprise?: Maybe; /** The organization that was created. */ - organization?: Maybe -} + organization?: Maybe; +}; /** Autogenerated input type of CreateEnvironment */ export type CreateEnvironmentInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The name of the environment. */ - name: Scalars['String'] + name: Scalars['String']; /** The node ID of the repository. */ - repositoryId: Scalars['ID'] -} + repositoryId: Scalars['ID']; +}; /** Autogenerated return type of CreateEnvironment */ export type CreateEnvironmentPayload = { - __typename?: 'CreateEnvironmentPayload' + __typename?: 'CreateEnvironmentPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The new or existing environment. */ - environment?: Maybe -} + environment?: Maybe; +}; /** Autogenerated input type of CreateIpAllowListEntry */ export type CreateIpAllowListEntryInput = { /** An IP address or range of addresses in CIDR notation. */ - allowListValue: Scalars['String'] + allowListValue: Scalars['String']; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** Whether the IP allow list entry is active when an IP allow list is enabled. */ - isActive: Scalars['Boolean'] + isActive: Scalars['Boolean']; /** An optional name for the IP allow list entry. */ - name?: InputMaybe + name?: Maybe; /** The ID of the owner for which to create the new IP allow list entry. */ - ownerId: Scalars['ID'] -} + ownerId: Scalars['ID']; +}; /** Autogenerated return type of CreateIpAllowListEntry */ export type CreateIpAllowListEntryPayload = { - __typename?: 'CreateIpAllowListEntryPayload' + __typename?: 'CreateIpAllowListEntryPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The IP allow list entry that was created. */ - ipAllowListEntry?: Maybe -} + ipAllowListEntry?: Maybe; +}; /** Autogenerated input type of CreateIssue */ export type CreateIssueInput = { /** The Node ID for the user assignee for this issue. */ - assigneeIds?: InputMaybe> + assigneeIds?: Maybe>; /** The body for the issue description. */ - body?: InputMaybe + body?: Maybe; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** The name of an issue template in the repository, assigns labels and assignees from the template to the issue */ - issueTemplate?: InputMaybe + issueTemplate?: Maybe; /** An array of Node IDs of labels for this issue. */ - labelIds?: InputMaybe> + labelIds?: Maybe>; /** The Node ID of the milestone for this issue. */ - milestoneId?: InputMaybe + milestoneId?: Maybe; /** An array of Node IDs for projects associated with this issue. */ - projectIds?: InputMaybe> + projectIds?: Maybe>; /** The Node ID of the repository. */ - repositoryId: Scalars['ID'] + repositoryId: Scalars['ID']; /** The title for the issue. */ - title: Scalars['String'] -} + title: Scalars['String']; +}; /** Autogenerated return type of CreateIssue */ export type CreateIssuePayload = { - __typename?: 'CreateIssuePayload' + __typename?: 'CreateIssuePayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The new issue. */ - issue?: Maybe -} + issue?: Maybe; +}; /** Autogenerated input type of CreateLabel */ export type CreateLabelInput = { /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe + clientMutationId?: Maybe; /** A 6 character hex code, without the leading #, identifying the color of the label. */ - color: Scalars['String'] + color: Scalars['String']; /** A brief description of the label, such as its purpose. */ - description?: InputMaybe + description?: Maybe; /** The name of the label. */ - name: Scalars['String'] + name: Scalars['String']; /** The Node ID of the repository. */ - repositoryId: Scalars['ID'] -} + repositoryId: Scalars['ID']; +}; /** Autogenerated return type of CreateLabel */ export type CreateLabelPayload = { - __typename?: 'CreateLabelPayload' + __typename?: 'CreateLabelPayload'; /** A unique identifier for the client performing the mutation. */ - clientMutationId?: Maybe + clientMutationId?: Maybe; /** The new label. */ - label?: Maybe