diff --git a/api/generated-schema.graphql b/api/generated-schema.graphql index a17ae1ee06..f5d6b0dcea 100644 --- a/api/generated-schema.graphql +++ b/api/generated-schema.graphql @@ -939,6 +939,11 @@ type BrandingConfig { """ bannerImage: String + """ + Built-in case model value written to case-model.cfg when no custom override is supplied. + """ + caseModel: String + """ Case model image source. Supports local path, remote URL, or data URI/base64. """ @@ -1425,6 +1430,7 @@ input BrandingConfigInput { showBannerGradient: Boolean theme: String bannerImage: String + caseModel: String caseModelImage: String partnerLogoLightUrl: String partnerLogoDarkUrl: String diff --git a/api/src/unraid-api/graph/resolvers/customization/activation-code.model.ts b/api/src/unraid-api/graph/resolvers/customization/activation-code.model.ts index a3ea1de5ed..aa8bf8741d 100644 --- a/api/src/unraid-api/graph/resolvers/customization/activation-code.model.ts +++ b/api/src/unraid-api/graph/resolvers/customization/activation-code.model.ts @@ -145,6 +145,16 @@ export class BrandingConfig { @Transform(({ value }) => sanitizeString(value)) bannerImage?: string | null; + @Field(() => String, { + nullable: true, + description: + 'Built-in case model value written to case-model.cfg when no custom override is supplied.', + }) + @IsOptional() + @IsString() + @Transform(({ value }) => sanitizeString(value)) + caseModel?: string | null; + @Field(() => String, { nullable: true, description: 'Case model image source. Supports local path, remote URL, or data URI/base64.', diff --git a/api/src/unraid-api/graph/resolvers/customization/onboarding.service.spec.ts b/api/src/unraid-api/graph/resolvers/customization/onboarding.service.spec.ts index e510b2fccc..79ad738de2 100644 --- a/api/src/unraid-api/graph/resolvers/customization/onboarding.service.spec.ts +++ b/api/src/unraid-api/graph/resolvers/customization/onboarding.service.spec.ts @@ -948,6 +948,27 @@ describe('OnboardingService', () => { ); }); + it('applyCaseModelConfig should write the built-in case model when no custom asset exists', async () => { + (service as any).activationData = plainToInstance(ActivationCode, { + ...mockActivationData, + branding: { + ...mockActivationData.branding, + caseModel: 'mid-tower', + caseModelImage: null, + }, + }); + (service as any).materializedPartnerMedia = { + banner: true, + caseModel: false, + }; + vi.mocked(fileExists).mockResolvedValue(false); + + await (service as any).applyCaseModelConfig(); + + expect(fs.writeFile).toHaveBeenCalledWith(caseModelCfg, 'mid-tower'); + expect(loggerLogSpy).toHaveBeenCalledWith(`Case model set to mid-tower in ${caseModelCfg}`); + }); + it('applyServerIdentity should call emcmd directly', async () => { const updateSpy = vi.spyOn(service as any, 'updateCfgFile'); @@ -1478,7 +1499,7 @@ describe('applyActivationCustomizations specific tests', () => { ) ); expect(loggerLogSpy).toHaveBeenCalledWith( - 'No partner case-model image configured in activation code, skipping case model setup.' + 'No partner case-model configured in activation code, skipping case model setup.' ); // Other steps should still run diff --git a/api/src/unraid-api/graph/resolvers/customization/onboarding.service.ts b/api/src/unraid-api/graph/resolvers/customization/onboarding.service.ts index 1863183c8a..5f798d715a 100644 --- a/api/src/unraid-api/graph/resolvers/customization/onboarding.service.ts +++ b/api/src/unraid-api/graph/resolvers/customization/onboarding.service.ts @@ -782,9 +782,10 @@ export class OnboardingService implements OnModuleInit { this.logger.warn('No activation data available for case model setup.'); return; } - if (!this.materializedPartnerMedia.caseModel) { + const configuredCaseModel = this.activationData.branding?.caseModel?.trim() ?? ''; + if (!this.materializedPartnerMedia.caseModel && !configuredCaseModel) { this.logger.log( - 'No partner case-model image configured in activation code, skipping case model setup.' + 'No partner case-model configured in activation code, skipping case model setup.' ); return; } @@ -805,6 +806,10 @@ export class OnboardingService implements OnModuleInit { await fs.mkdir(path.dirname(this.caseModelCfg), { recursive: true }); await fs.writeFile(this.caseModelCfg, modelToSet); this.logger.log(`Case model set to ${modelToSet} in ${this.caseModelCfg}`); + } else if (configuredCaseModel) { + await fs.mkdir(path.dirname(this.caseModelCfg), { recursive: true }); + await fs.writeFile(this.caseModelCfg, configuredCaseModel); + this.logger.log(`Case model set to ${configuredCaseModel} in ${this.caseModelCfg}`); } else { this.logger.log('No custom case model file found in activation assets.'); } diff --git a/api/src/unraid-api/graph/resolvers/onboarding/onboarding.model.ts b/api/src/unraid-api/graph/resolvers/onboarding/onboarding.model.ts index dadfe46f06..f16f5534a8 100644 --- a/api/src/unraid-api/graph/resolvers/onboarding/onboarding.model.ts +++ b/api/src/unraid-api/graph/resolvers/onboarding/onboarding.model.ts @@ -113,6 +113,11 @@ export class BrandingConfigInput { @IsString() bannerImage?: string; + @Field(() => String, { nullable: true }) + @IsOptional() + @IsString() + caseModel?: string; + @Field(() => String, { nullable: true }) @IsOptional() @IsString() diff --git a/web/src/components/Onboarding/graphql/activationCode.query.ts b/web/src/components/Onboarding/graphql/activationCode.query.ts index c55faebaa5..6f4d5be232 100644 --- a/web/src/components/Onboarding/graphql/activationCode.query.ts +++ b/web/src/components/Onboarding/graphql/activationCode.query.ts @@ -23,6 +23,7 @@ export const ACTIVATION_CODE_QUERY = parse(/* GraphQL */ ` showBannerGradient theme bannerImage + caseModel caseModelImage partnerLogoLightUrl partnerLogoDarkUrl diff --git a/web/src/components/Onboarding/standalone/OnboardingAdminPanel.standalone.vue b/web/src/components/Onboarding/standalone/OnboardingAdminPanel.standalone.vue index 1b050cea1a..bcbe62d2cd 100644 --- a/web/src/components/Onboarding/standalone/OnboardingAdminPanel.standalone.vue +++ b/web/src/components/Onboarding/standalone/OnboardingAdminPanel.standalone.vue @@ -79,6 +79,7 @@ type PartnerConfigPayload = { type BrandingConfigPayload = { bannerImage?: string; + caseModel?: string; caseModelImage?: string; partnerLogoLightUrl?: string; partnerLogoDarkUrl?: string; @@ -140,6 +141,7 @@ const genericPartnerConfig: PartnerConfigPayload = { const genericBrandingConfig: BrandingConfigPayload = { bannerImage: './assets/banner.png', + caseModel: 'mid-tower', caseModelImage: './assets/case-model.png', partnerLogoLightUrl: './assets/partner-logo-light.svg', partnerLogoDarkUrl: './assets/partner-logo-dark.svg', @@ -1026,6 +1028,16 @@ const currentRegistrationState = computed({ Banner image source (optional): relative path, URL, data URI, or base64 + + activationCode.branding.caseModel + + *.activationcode + + + Built-in case model value for case-model.cfg + when no custom image override is provided + + activationCode.branding.caseModelImage diff --git a/web/src/composables/gql/gql.ts b/web/src/composables/gql/gql.ts index 9aab9a29b9..5267cbd49b 100644 --- a/web/src/composables/gql/gql.ts +++ b/web/src/composables/gql/gql.ts @@ -65,7 +65,7 @@ type Documents = { "\n subscription NotificationAddedSub {\n notificationAdded {\n ...NotificationFragment\n }\n }\n": typeof types.NotificationAddedSubDocument, "\n subscription NotificationOverviewSub {\n notificationsOverview {\n archive {\n ...NotificationCountFragment\n }\n unread {\n ...NotificationCountFragment\n }\n }\n }\n": typeof types.NotificationOverviewSubDocument, "\n subscription NotificationsWarningsAndAlertsSub {\n notificationsWarningsAndAlerts {\n ...NotificationFragment\n }\n }\n": typeof types.NotificationsWarningsAndAlertsSubDocument, - "\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n": typeof types.ActivationCodeDocument, + "\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModel\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n": typeof types.ActivationCodeDocument, "\n query Onboarding {\n customization {\n onboarding {\n status\n isPartnerBuild\n completed\n completedAtVersion\n }\n }\n }\n": typeof types.OnboardingDocument, "\n query GetAvailableLanguages {\n customization {\n availableLanguages {\n code\n name\n url\n }\n }\n }\n": typeof types.GetAvailableLanguagesDocument, "\n mutation CompleteOnboarding {\n onboarding {\n completeOnboarding {\n status\n isPartnerBuild\n completed\n completedAtVersion\n }\n }\n }\n": typeof types.CompleteOnboardingDocument, @@ -150,7 +150,7 @@ const documents: Documents = { "\n subscription NotificationAddedSub {\n notificationAdded {\n ...NotificationFragment\n }\n }\n": types.NotificationAddedSubDocument, "\n subscription NotificationOverviewSub {\n notificationsOverview {\n archive {\n ...NotificationCountFragment\n }\n unread {\n ...NotificationCountFragment\n }\n }\n }\n": types.NotificationOverviewSubDocument, "\n subscription NotificationsWarningsAndAlertsSub {\n notificationsWarningsAndAlerts {\n ...NotificationFragment\n }\n }\n": types.NotificationsWarningsAndAlertsSubDocument, - "\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n": types.ActivationCodeDocument, + "\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModel\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n": types.ActivationCodeDocument, "\n query Onboarding {\n customization {\n onboarding {\n status\n isPartnerBuild\n completed\n completedAtVersion\n }\n }\n }\n": types.OnboardingDocument, "\n query GetAvailableLanguages {\n customization {\n availableLanguages {\n code\n name\n url\n }\n }\n }\n": types.GetAvailableLanguagesDocument, "\n mutation CompleteOnboarding {\n onboarding {\n completeOnboarding {\n status\n isPartnerBuild\n completed\n completedAtVersion\n }\n }\n }\n": types.CompleteOnboardingDocument, @@ -405,7 +405,7 @@ export function graphql(source: "\n subscription NotificationsWarningsAndAlerts /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n"): (typeof documents)["\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n"]; +export function graphql(source: "\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModel\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n"): (typeof documents)["\n query ActivationCode {\n customization {\n activationCode {\n code\n partner {\n name\n url\n hardwareSpecsUrl\n manualUrl\n supportUrl\n extraLinks {\n title\n url\n }\n }\n branding {\n header\n headermetacolor\n background\n showBannerGradient\n theme\n bannerImage\n caseModel\n caseModelImage\n partnerLogoLightUrl\n partnerLogoDarkUrl\n hasPartnerLogo\n onboardingTitle\n onboardingSubtitle\n onboardingTitleFreshInstall\n onboardingSubtitleFreshInstall\n onboardingTitleUpgrade\n onboardingSubtitleUpgrade\n onboardingTitleDowngrade\n onboardingSubtitleDowngrade\n onboardingTitleIncomplete\n onboardingSubtitleIncomplete\n }\n system {\n serverName\n model\n }\n }\n onboarding {\n onboardingState {\n registrationState\n isRegistered\n isFreshInstall\n hasActivationCode\n activationRequired\n }\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/web/src/composables/gql/graphql.ts b/web/src/composables/gql/graphql.ts index 14ba4c5a20..6165ee2024 100644 --- a/web/src/composables/gql/graphql.ts +++ b/web/src/composables/gql/graphql.ts @@ -413,6 +413,8 @@ export type BrandingConfig = { background?: Maybe; /** Banner image source. Supports local path, remote URL, or data URI/base64. */ bannerImage?: Maybe; + /** Built-in case model value written to case-model.cfg when no custom override is supplied. */ + caseModel?: Maybe; /** Case model image source. Supports local path, remote URL, or data URI/base64. */ caseModelImage?: Maybe; /** Indicates if a partner logo exists */ @@ -450,6 +452,7 @@ export type BrandingConfig = { export type BrandingConfigInput = { background?: InputMaybe; bannerImage?: InputMaybe; + caseModel?: InputMaybe; caseModelImage?: InputMaybe; hasPartnerLogo?: InputMaybe; header?: InputMaybe; @@ -3841,7 +3844,7 @@ export type NotificationsWarningsAndAlertsSubSubscription = { __typename?: 'Subs export type ActivationCodeQueryVariables = Exact<{ [key: string]: never; }>; -export type ActivationCodeQuery = { __typename?: 'Query', customization?: { __typename?: 'Customization', activationCode?: { __typename?: 'ActivationCode', code?: string | null, partner?: { __typename?: 'PartnerConfig', name?: string | null, url?: string | null, hardwareSpecsUrl?: string | null, manualUrl?: string | null, supportUrl?: string | null, extraLinks?: Array<{ __typename?: 'PartnerLink', title: string, url: string }> | null } | null, branding?: { __typename?: 'BrandingConfig', header?: string | null, headermetacolor?: string | null, background?: string | null, showBannerGradient?: boolean | null, theme?: string | null, bannerImage?: string | null, caseModelImage?: string | null, partnerLogoLightUrl?: string | null, partnerLogoDarkUrl?: string | null, hasPartnerLogo?: boolean | null, onboardingTitle?: string | null, onboardingSubtitle?: string | null, onboardingTitleFreshInstall?: string | null, onboardingSubtitleFreshInstall?: string | null, onboardingTitleUpgrade?: string | null, onboardingSubtitleUpgrade?: string | null, onboardingTitleDowngrade?: string | null, onboardingSubtitleDowngrade?: string | null, onboardingTitleIncomplete?: string | null, onboardingSubtitleIncomplete?: string | null } | null, system?: { __typename?: 'SystemConfig', serverName?: string | null, model?: string | null } | null } | null, onboarding: { __typename?: 'Onboarding', onboardingState: { __typename?: 'OnboardingState', registrationState?: RegistrationState | null, isRegistered: boolean, isFreshInstall: boolean, hasActivationCode: boolean, activationRequired: boolean } } } | null }; +export type ActivationCodeQuery = { __typename?: 'Query', customization?: { __typename?: 'Customization', activationCode?: { __typename?: 'ActivationCode', code?: string | null, partner?: { __typename?: 'PartnerConfig', name?: string | null, url?: string | null, hardwareSpecsUrl?: string | null, manualUrl?: string | null, supportUrl?: string | null, extraLinks?: Array<{ __typename?: 'PartnerLink', title: string, url: string }> | null } | null, branding?: { __typename?: 'BrandingConfig', header?: string | null, headermetacolor?: string | null, background?: string | null, showBannerGradient?: boolean | null, theme?: string | null, bannerImage?: string | null, caseModel?: string | null, caseModelImage?: string | null, partnerLogoLightUrl?: string | null, partnerLogoDarkUrl?: string | null, hasPartnerLogo?: boolean | null, onboardingTitle?: string | null, onboardingSubtitle?: string | null, onboardingTitleFreshInstall?: string | null, onboardingSubtitleFreshInstall?: string | null, onboardingTitleUpgrade?: string | null, onboardingSubtitleUpgrade?: string | null, onboardingTitleDowngrade?: string | null, onboardingSubtitleDowngrade?: string | null, onboardingTitleIncomplete?: string | null, onboardingSubtitleIncomplete?: string | null } | null, system?: { __typename?: 'SystemConfig', serverName?: string | null, model?: string | null } | null } | null, onboarding: { __typename?: 'Onboarding', onboardingState: { __typename?: 'OnboardingState', registrationState?: RegistrationState | null, isRegistered: boolean, isFreshInstall: boolean, hasActivationCode: boolean, activationRequired: boolean } } } | null }; export type OnboardingQueryVariables = Exact<{ [key: string]: never; }>; @@ -4079,7 +4082,7 @@ export const NotifyIfUniqueDocument = {"kind":"Document","definitions":[{"kind": export const NotificationAddedSubDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"NotificationAddedSub"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"notificationAdded"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"NotificationFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Notification"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"importance"}},{"kind":"Field","name":{"kind":"Name","value":"link"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"timestamp"}},{"kind":"Field","name":{"kind":"Name","value":"formattedTimestamp"}}]}}]} as unknown as DocumentNode; export const NotificationOverviewSubDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"NotificationOverviewSub"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"notificationsOverview"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"archive"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"NotificationCountFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"unread"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"NotificationCountFragment"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationCountFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"NotificationCounts"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"warning"}},{"kind":"Field","name":{"kind":"Name","value":"alert"}}]}}]} as unknown as DocumentNode; export const NotificationsWarningsAndAlertsSubDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"NotificationsWarningsAndAlertsSub"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"notificationsWarningsAndAlerts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"NotificationFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NotificationFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Notification"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"importance"}},{"kind":"Field","name":{"kind":"Name","value":"link"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"timestamp"}},{"kind":"Field","name":{"kind":"Name","value":"formattedTimestamp"}}]}}]} as unknown as DocumentNode; -export const ActivationCodeDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ActivationCode"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"customization"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activationCode"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"code"}},{"kind":"Field","name":{"kind":"Name","value":"partner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"hardwareSpecsUrl"}},{"kind":"Field","name":{"kind":"Name","value":"manualUrl"}},{"kind":"Field","name":{"kind":"Name","value":"supportUrl"}},{"kind":"Field","name":{"kind":"Name","value":"extraLinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"branding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"header"}},{"kind":"Field","name":{"kind":"Name","value":"headermetacolor"}},{"kind":"Field","name":{"kind":"Name","value":"background"}},{"kind":"Field","name":{"kind":"Name","value":"showBannerGradient"}},{"kind":"Field","name":{"kind":"Name","value":"theme"}},{"kind":"Field","name":{"kind":"Name","value":"bannerImage"}},{"kind":"Field","name":{"kind":"Name","value":"caseModelImage"}},{"kind":"Field","name":{"kind":"Name","value":"partnerLogoLightUrl"}},{"kind":"Field","name":{"kind":"Name","value":"partnerLogoDarkUrl"}},{"kind":"Field","name":{"kind":"Name","value":"hasPartnerLogo"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitle"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitle"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleFreshInstall"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleFreshInstall"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleUpgrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleUpgrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleDowngrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleDowngrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleIncomplete"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleIncomplete"}}]}},{"kind":"Field","name":{"kind":"Name","value":"system"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverName"}},{"kind":"Field","name":{"kind":"Name","value":"model"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"onboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"onboardingState"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"registrationState"}},{"kind":"Field","name":{"kind":"Name","value":"isRegistered"}},{"kind":"Field","name":{"kind":"Name","value":"isFreshInstall"}},{"kind":"Field","name":{"kind":"Name","value":"hasActivationCode"}},{"kind":"Field","name":{"kind":"Name","value":"activationRequired"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const ActivationCodeDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ActivationCode"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"customization"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activationCode"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"code"}},{"kind":"Field","name":{"kind":"Name","value":"partner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"hardwareSpecsUrl"}},{"kind":"Field","name":{"kind":"Name","value":"manualUrl"}},{"kind":"Field","name":{"kind":"Name","value":"supportUrl"}},{"kind":"Field","name":{"kind":"Name","value":"extraLinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"branding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"header"}},{"kind":"Field","name":{"kind":"Name","value":"headermetacolor"}},{"kind":"Field","name":{"kind":"Name","value":"background"}},{"kind":"Field","name":{"kind":"Name","value":"showBannerGradient"}},{"kind":"Field","name":{"kind":"Name","value":"theme"}},{"kind":"Field","name":{"kind":"Name","value":"bannerImage"}},{"kind":"Field","name":{"kind":"Name","value":"caseModel"}},{"kind":"Field","name":{"kind":"Name","value":"caseModelImage"}},{"kind":"Field","name":{"kind":"Name","value":"partnerLogoLightUrl"}},{"kind":"Field","name":{"kind":"Name","value":"partnerLogoDarkUrl"}},{"kind":"Field","name":{"kind":"Name","value":"hasPartnerLogo"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitle"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitle"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleFreshInstall"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleFreshInstall"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleUpgrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleUpgrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleDowngrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleDowngrade"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingTitleIncomplete"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingSubtitleIncomplete"}}]}},{"kind":"Field","name":{"kind":"Name","value":"system"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverName"}},{"kind":"Field","name":{"kind":"Name","value":"model"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"onboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"onboardingState"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"registrationState"}},{"kind":"Field","name":{"kind":"Name","value":"isRegistered"}},{"kind":"Field","name":{"kind":"Name","value":"isFreshInstall"}},{"kind":"Field","name":{"kind":"Name","value":"hasActivationCode"}},{"kind":"Field","name":{"kind":"Name","value":"activationRequired"}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const OnboardingDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Onboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"customization"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"onboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"isPartnerBuild"}},{"kind":"Field","name":{"kind":"Name","value":"completed"}},{"kind":"Field","name":{"kind":"Name","value":"completedAtVersion"}}]}}]}}]}}]} as unknown as DocumentNode; export const GetAvailableLanguagesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAvailableLanguages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"customization"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableLanguages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"code"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}}]}}]} as unknown as DocumentNode; export const CompleteOnboardingDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CompleteOnboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"onboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"completeOnboarding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"isPartnerBuild"}},{"kind":"Field","name":{"kind":"Name","value":"completed"}},{"kind":"Field","name":{"kind":"Name","value":"completedAtVersion"}}]}}]}}]}}]} as unknown as DocumentNode;