From 119ff65896e1277386e1d3c97b5ae06e3112d988 Mon Sep 17 00:00:00 2001 From: Mike Allison Date: Tue, 3 Feb 2026 22:26:10 +0000 Subject: [PATCH 1/8] feat: add AuthenticatedUser type and resolver for user entity - Introduced the AuthenticatedUser type in both API schemas, enhancing user data representation. - Implemented a resolver for AuthenticatedUser to handle user retrieval and fallback for missing first names. - Updated user object exports to include AuthenticatedUser for better federation support. --- apis/api-gateway/schema.graphql | 10 +++++ apis/api-users/schema.graphql | 12 ++++++ .../src/schema/user/objects/index.ts | 5 ++- .../api-users/src/schema/user/objects/user.ts | 32 ++++++++++++++++ apis/api-users/src/schema/user/user.ts | 37 ++++++++++++++++++- 5 files changed, 94 insertions(+), 2 deletions(-) diff --git a/apis/api-gateway/schema.graphql b/apis/api-gateway/schema.graphql index 8f4e6cd71e3..9674113db0a 100644 --- a/apis/api-gateway/schema.graphql +++ b/apis/api-gateway/schema.graphql @@ -3257,6 +3257,16 @@ type ZodFieldError @join__type(graph: API_MEDIA) { path: [String!]! } +type AuthenticatedUser @join__type(graph: API_USERS, key: "id") { + id: ID! + firstName: String! + lastName: String + email: String! + imageUrl: String + superAdmin: Boolean + emailVerified: Boolean! +} + interface BaseError @join__type(graph: API_ANALYTICS) @join__type(graph: API_MEDIA) { message: String } diff --git a/apis/api-users/schema.graphql b/apis/api-users/schema.graphql index e8efcd93300..d2dedb1d674 100644 --- a/apis/api-users/schema.graphql +++ b/apis/api-users/schema.graphql @@ -1,6 +1,18 @@ extend schema @link(url: "https://specs.apollo.dev/federation/v2.6", import: ["@key"]) +type AuthenticatedUser + @key(fields: "id") +{ + id: ID! + firstName: String! + lastName: String + email: String! + imageUrl: String + superAdmin: Boolean + emailVerified: Boolean! +} + input CreateVerificationRequestInput { redirect: String } diff --git a/apis/api-users/src/schema/user/objects/index.ts b/apis/api-users/src/schema/user/objects/index.ts index 88377789070..ea476b13fbd 100644 --- a/apis/api-users/src/schema/user/objects/index.ts +++ b/apis/api-users/src/schema/user/objects/index.ts @@ -1,3 +1,6 @@ import './user' -export { User } from './user' +export { + AuthenticatedUser, + User, +} from './user' diff --git a/apis/api-users/src/schema/user/objects/user.ts b/apis/api-users/src/schema/user/objects/user.ts index adc67c1c1ed..d3c35cc9d18 100644 --- a/apis/api-users/src/schema/user/objects/user.ts +++ b/apis/api-users/src/schema/user/objects/user.ts @@ -1,6 +1,7 @@ import { builder } from '../../builder' export const User = builder.prismaObject('User', { + 'name': 'User', fields: (t) => ({ id: t.exposeID('id', { nullable: false }), firstName: t.field({ @@ -24,3 +25,34 @@ export const User = builder.prismaObject('User', { emailVerified: t.exposeBoolean('emailVerified', { nullable: false }) }) }) + +export const AuthenticatedUser = builder.prismaObject('User', { + variant: 'AuthenticatedUser', + fields: (t) => ({ + id: t.exposeID('id', { nullable: false }), + firstName: t.field({ + type: 'String', + nullable: false, + resolve: (user) => { + // Additional safeguard for firstName field + if (!user.firstName || user.firstName.trim() === '') { + console.warn( + `User ${user.userId} has invalid firstName: "${user.firstName}", using fallback` + ) + return 'Unknown User' + } + return user.firstName + } + }), + lastName: t.exposeString('lastName'), + email: t.field({ + type: 'String', + nullable: false, + resolve: (user) => user.email ?? '' + }), + imageUrl: t.exposeString('imageUrl'), + superAdmin: t.exposeBoolean('superAdmin'), + emailVerified: t.exposeBoolean('emailVerified', { nullable: false }) + }) +}) + diff --git a/apis/api-users/src/schema/user/user.ts b/apis/api-users/src/schema/user/user.ts index 3b04e525fc0..3d2103d0c69 100644 --- a/apis/api-users/src/schema/user/user.ts +++ b/apis/api-users/src/schema/user/user.ts @@ -7,7 +7,7 @@ import { builder } from '../builder' import { findOrFetchUser } from './findOrFetchUser' import { CreateVerificationRequestInput, MeInput } from './inputs' -import { User } from './objects' +import { AuthenticatedUser, User } from './objects' import { validateEmail } from './validateEmail' import { verifyUser } from './verifyUser' @@ -46,6 +46,41 @@ builder.asEntity(User, { } }) +builder.asEntity(AuthenticatedUser, { + key: builder.selection<{ id: string }>('id'), + resolveReference: async ({ id }) => { + try { + const user = await prisma.user.findUnique({ where: { userId: id } }) + + // Handle cases where user doesn't exist + if (user == null) { + console.warn(`Federation: User not found for userId: ${id}`) + return null + } + + // Handle cases where firstName is null or empty (data integrity issue) + // This provides a fallback to prevent GraphQL federation errors + if (user.firstName == null || user.firstName.trim() === '') { + console.warn( + `Federation: User ${id} has null/empty firstName, using fallback` + ) + return { + ...user, + firstName: 'Unknown User' + } + } + + return user + } catch (error) { + console.error( + `Federation: Error resolving User entity for userId: ${id}`, + error + ) + return null + } + } +}) + builder.queryFields((t) => ({ me: t.withAuth({ isAuthenticated: true }).prismaField({ type: 'User', From c24e616f0c4203682bd6ecfbe2ba45d237056bd8 Mon Sep 17 00:00:00 2001 From: Mike Allison Date: Wed, 4 Feb 2026 00:46:38 +0000 Subject: [PATCH 2/8] feat: enhance AuthenticatedUser type and extend its functionality - Added the AuthenticatedUser type to the API schemas, including fields for user details. - Extended the AuthenticatedUser type to support federation with external services. - Updated generated TypeScript definitions to reflect the new structure of AuthenticatedUser. - Modified user-related GraphQL operations to incorporate the new AuthenticatedUser type. --- apis/api-gateway/schema.graphql | 20 +++++++++---------- apis/api-journeys/schema.graphql | 8 +++++++- .../api-journeys/src/__generated__/graphql.ts | 18 +++++++++++++++++ .../src/app/__generated__/graphql.ts | 4 ++++ .../src/app/modules/userTeam/userTeam.graphql | 4 ++++ .../gql/src/__generated__/graphql-env.d.ts | 3 ++- 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/apis/api-gateway/schema.graphql b/apis/api-gateway/schema.graphql index 9674113db0a..094b93bb0cd 100644 --- a/apis/api-gateway/schema.graphql +++ b/apis/api-gateway/schema.graphql @@ -2199,6 +2199,16 @@ type UserRole @join__type(graph: API_JOURNEYS, key: "id") @join__type(graph: AP roles: [Role!] } +type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { + id: ID! + firstName: String! @join__field(graph: API_USERS) + lastName: String @join__field(graph: API_USERS) + email: String! @join__field(graph: API_USERS) + imageUrl: String @join__field(graph: API_USERS) + superAdmin: Boolean @join__field(graph: API_USERS) + emailVerified: Boolean! @join__field(graph: API_USERS) +} + type UserTeamInvite @join__type(graph: API_JOURNEYS) @join__type(graph: API_JOURNEYS_MODERN) { id: ID! teamId: ID! @@ -3257,16 +3267,6 @@ type ZodFieldError @join__type(graph: API_MEDIA) { path: [String!]! } -type AuthenticatedUser @join__type(graph: API_USERS, key: "id") { - id: ID! - firstName: String! - lastName: String - email: String! - imageUrl: String - superAdmin: Boolean - emailVerified: Boolean! -} - interface BaseError @join__type(graph: API_ANALYTICS) @join__type(graph: API_MEDIA) { message: String } diff --git a/apis/api-journeys/schema.graphql b/apis/api-journeys/schema.graphql index d86f741d92c..245663c9b46 100644 --- a/apis/api-journeys/schema.graphql +++ b/apis/api-journeys/schema.graphql @@ -2739,6 +2739,12 @@ enum Role { publisher } +extend type AuthenticatedUser + @key(fields: "id") +{ + id: ID! @external +} + enum UserTeamRole { manager member @@ -3048,4 +3054,4 @@ type _Service { sdl: String } -union _Entity = Journey | JourneyProfile | JourneyVisitor | Language | ShortLink | Tag | Team | User | UserInvite | UserJourney | UserRole | UserTeam | Video | VideoBlock | Visitor +union _Entity = AuthenticatedUser | Journey | JourneyProfile | JourneyVisitor | Language | ShortLink | Tag | Team | User | UserInvite | UserJourney | UserRole | UserTeam | Video | VideoBlock | Visitor diff --git a/apis/api-journeys/src/__generated__/graphql.ts b/apis/api-journeys/src/__generated__/graphql.ts index 6ae8342f590..fce78ace97e 100644 --- a/apis/api-journeys/src/__generated__/graphql.ts +++ b/apis/api-journeys/src/__generated__/graphql.ts @@ -52,6 +52,17 @@ export type AudioPreview = { value: Scalars['String']['output']; }; +export type AuthenticatedUser = { + __typename?: 'AuthenticatedUser'; + email: Scalars['String']['output']; + emailVerified: Scalars['Boolean']['output']; + firstName: Scalars['String']['output']; + id: Scalars['ID']['output']; + imageUrl?: Maybe; + lastName?: Maybe; + superAdmin?: Maybe; +}; + export type BaseError = { message?: Maybe; }; @@ -1817,6 +1828,8 @@ export type Mutation = { deleteMuxVideo: Scalars['Boolean']['output']; enableMuxDownload?: Maybe; fixVideoLanguages: Scalars['Boolean']['output']; + /** Triggers a backfill of the Google Sheets sync. Clears existing data and re-exports all events. */ + googleSheetsSyncBackfill: GoogleSheetsSync; googleSheetsSyncCreate: GoogleSheetsSync; googleSheetsSyncDelete: GoogleSheetsSync; hostCreate: Host; @@ -2290,6 +2303,11 @@ export type MutationFixVideoLanguagesArgs = { }; +export type MutationGoogleSheetsSyncBackfillArgs = { + id: Scalars['ID']['input']; +}; + + export type MutationGoogleSheetsSyncCreateArgs = { input: CreateGoogleSheetsSyncInput; }; diff --git a/apis/api-journeys/src/app/__generated__/graphql.ts b/apis/api-journeys/src/app/__generated__/graphql.ts index 3a791603c5b..cb6a8c22013 100644 --- a/apis/api-journeys/src/app/__generated__/graphql.ts +++ b/apis/api-journeys/src/app/__generated__/graphql.ts @@ -2030,6 +2030,10 @@ export class User { id: string; } +export class AuthenticatedUser { + id: string; +} + export type DateTime = String; export type Json = any; diff --git a/apis/api-journeys/src/app/modules/userTeam/userTeam.graphql b/apis/api-journeys/src/app/modules/userTeam/userTeam.graphql index 296542f6398..698c1512a7c 100644 --- a/apis/api-journeys/src/app/modules/userTeam/userTeam.graphql +++ b/apis/api-journeys/src/app/modules/userTeam/userTeam.graphql @@ -2,6 +2,10 @@ extend type User @key(fields: "id") { id: ID! @external } +extend type AuthenticatedUser @key(fields: "id") { + id: ID! @external +} + enum UserTeamRole { manager member diff --git a/libs/shared/gql/src/__generated__/graphql-env.d.ts b/libs/shared/gql/src/__generated__/graphql-env.d.ts index d223f3a8132..d25910967a2 100644 --- a/libs/shared/gql/src/__generated__/graphql-env.d.ts +++ b/libs/shared/gql/src/__generated__/graphql-env.d.ts @@ -5,6 +5,7 @@ export type introspection_types = { 'Action': { kind: 'INTERFACE'; name: 'Action'; fields: { 'gtmEventName': { name: 'gtmEventName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'parentBlock': { name: 'parentBlock'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; } }; 'parentBlockId': { name: 'parentBlockId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; }; possibleTypes: 'ChatAction' | 'EmailAction' | 'LinkAction' | 'NavigateToBlockAction' | 'PhoneAction'; }; 'ArclightApiKey': { kind: 'OBJECT'; name: 'ArclightApiKey'; fields: { 'defaultPlatform': { name: 'defaultPlatform'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DefaultPlatform'; ofType: null; }; } }; 'desc': { name: 'desc'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'key': { name: 'key'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; 'AudioPreview': { kind: 'OBJECT'; name: 'AudioPreview'; fields: { 'bitrate': { name: 'bitrate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'codec': { name: 'codec'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'duration': { name: 'duration'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'language': { name: 'language'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Language'; ofType: null; }; } }; 'languageId': { name: 'languageId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'size': { name: 'size'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'value': { name: 'value'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; + 'AuthenticatedUser': { kind: 'OBJECT'; name: 'AuthenticatedUser'; fields: { 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'emailVerified': { name: 'emailVerified'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'firstName': { name: 'firstName'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'imageUrl': { name: 'imageUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'lastName': { name: 'lastName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'superAdmin': { name: 'superAdmin'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; }; }; 'BaseError': { kind: 'INTERFACE'; name: 'BaseError'; fields: { 'message': { name: 'message'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; possibleTypes: 'Error' | 'ForeignKeyConstraintError' | 'NotFoundError' | 'NotUniqueError' | 'ZodError'; }; 'BibleBook': { kind: 'OBJECT'; name: 'BibleBook'; fields: { 'alternateName': { name: 'alternateName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'isNewTestament': { name: 'isNewTestament'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'BibleBookName'; ofType: null; }; }; }; } }; 'order': { name: 'order'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'osisId': { name: 'osisId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'paratextAbbreviation': { name: 'paratextAbbreviation'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; 'BibleBookName': { kind: 'OBJECT'; name: 'BibleBookName'; fields: { 'language': { name: 'language'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Language'; ofType: null; }; } }; 'primary': { name: 'primary'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'value': { name: 'value'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; @@ -178,7 +179,7 @@ export type introspection_types = { 'MultiselectOptionBlockUpdateInput': { kind: 'INPUT_OBJECT'; name: 'MultiselectOptionBlockUpdateInput'; isOneOf: false; inputFields: [{ name: 'parentBlockId'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'label'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; 'MultiselectSubmissionEvent': { kind: 'OBJECT'; name: 'MultiselectSubmissionEvent'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'journeyId': { name: 'journeyId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'label': { name: 'label'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'value': { name: 'value'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; 'MultiselectSubmissionEventCreateInput': { kind: 'INPUT_OBJECT'; name: 'MultiselectSubmissionEventCreateInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'blockId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'stepId'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'label'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'values'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; }; }; defaultValue: null }]; }; - 'Mutation': { kind: 'OBJECT'; name: 'Mutation'; fields: { 'audioPreviewCreate': { name: 'audioPreviewCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AudioPreview'; ofType: null; }; } }; 'audioPreviewDelete': { name: 'audioPreviewDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AudioPreview'; ofType: null; }; } }; 'audioPreviewUpdate': { name: 'audioPreviewUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AudioPreview'; ofType: null; }; } }; 'bibleCitationCreate': { name: 'bibleCitationCreate'; type: { kind: 'OBJECT'; name: 'BibleCitation'; ofType: null; } }; 'bibleCitationDelete': { name: 'bibleCitationDelete'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'bibleCitationUpdate': { name: 'bibleCitationUpdate'; type: { kind: 'OBJECT'; name: 'BibleCitation'; ofType: null; } }; 'blockDelete': { name: 'blockDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockDeleteAction': { name: 'blockDeleteAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; } }; 'blockDuplicate': { name: 'blockDuplicate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockOrderUpdate': { name: 'blockOrderUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockRestore': { name: 'blockRestore'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockUpdateAction': { name: 'blockUpdateAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Action'; ofType: null; }; } }; 'blockUpdateChatAction': { name: 'blockUpdateChatAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatAction'; ofType: null; }; } }; 'blockUpdateEmailAction': { name: 'blockUpdateEmailAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'EmailAction'; ofType: null; }; } }; 'blockUpdateLinkAction': { name: 'blockUpdateLinkAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'LinkAction'; ofType: null; }; } }; 'blockUpdateNavigateToBlockAction': { name: 'blockUpdateNavigateToBlockAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'NavigateToBlockAction'; ofType: null; }; } }; 'blockUpdatePhoneAction': { name: 'blockUpdatePhoneAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PhoneAction'; ofType: null; }; } }; 'buttonBlockCreate': { name: 'buttonBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ButtonBlock'; ofType: null; }; } }; 'buttonBlockUpdate': { name: 'buttonBlockUpdate'; type: { kind: 'OBJECT'; name: 'ButtonBlock'; ofType: null; } }; 'buttonClickEventCreate': { name: 'buttonClickEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ButtonClickEvent'; ofType: null; }; } }; 'cardBlockCreate': { name: 'cardBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CardBlock'; ofType: null; }; } }; 'cardBlockUpdate': { name: 'cardBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CardBlock'; ofType: null; }; } }; 'chatButtonCreate': { name: 'chatButtonCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatButton'; ofType: null; }; } }; 'chatButtonRemove': { name: 'chatButtonRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatButton'; ofType: null; }; } }; 'chatButtonUpdate': { name: 'chatButtonUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatButton'; ofType: null; }; } }; 'chatOpenEventCreate': { name: 'chatOpenEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatOpenEvent'; ofType: null; }; } }; 'cloudflareR2CompleteMultipart': { name: 'cloudflareR2CompleteMultipart'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2'; ofType: null; }; } }; 'cloudflareR2Create': { name: 'cloudflareR2Create'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2'; ofType: null; }; } }; 'cloudflareR2Delete': { name: 'cloudflareR2Delete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2'; ofType: null; }; } }; 'cloudflareR2MultipartPrepare': { name: 'cloudflareR2MultipartPrepare'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2MultipartPrepared'; ofType: null; }; } }; 'cloudflareUploadComplete': { name: 'cloudflareUploadComplete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'createCloudflareImageFromPrompt': { name: 'createCloudflareImageFromPrompt'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createCloudflareUploadByFile': { name: 'createCloudflareUploadByFile'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createCloudflareUploadByUrl': { name: 'createCloudflareUploadByUrl'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createImageBySegmindPrompt': { name: 'createImageBySegmindPrompt'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createJourneyEventsExportLog': { name: 'createJourneyEventsExportLog'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyEventsExportLog'; ofType: null; }; } }; 'createKeyword': { name: 'createKeyword'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Keyword'; ofType: null; }; } }; 'createMuxVideoAndQueueUpload': { name: 'createMuxVideoAndQueueUpload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; }; } }; 'createMuxVideoUploadByFile': { name: 'createMuxVideoUploadByFile'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; }; } }; 'createMuxVideoUploadByUrl': { name: 'createMuxVideoUploadByUrl'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; }; } }; 'createVerificationRequest': { name: 'createVerificationRequest'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'customDomainCheck': { name: 'customDomainCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomainCheck'; ofType: null; }; } }; 'customDomainCreate': { name: 'customDomainCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomain'; ofType: null; }; } }; 'customDomainDelete': { name: 'customDomainDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomain'; ofType: null; }; } }; 'customDomainUpdate': { name: 'customDomainUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomain'; ofType: null; }; } }; 'deleteCloudflareImage': { name: 'deleteCloudflareImage'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'deleteMuxVideo': { name: 'deleteMuxVideo'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'enableMuxDownload': { name: 'enableMuxDownload'; type: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; } }; 'fixVideoLanguages': { name: 'fixVideoLanguages'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'googleSheetsSyncCreate': { name: 'googleSheetsSyncCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GoogleSheetsSync'; ofType: null; }; } }; 'googleSheetsSyncDelete': { name: 'googleSheetsSyncDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GoogleSheetsSync'; ofType: null; }; } }; 'hostCreate': { name: 'hostCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Host'; ofType: null; }; } }; 'hostDelete': { name: 'hostDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Host'; ofType: null; }; } }; 'hostUpdate': { name: 'hostUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Host'; ofType: null; }; } }; 'iconBlockCreate': { name: 'iconBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IconBlock'; ofType: null; }; } }; 'iconBlockUpdate': { name: 'iconBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IconBlock'; ofType: null; }; } }; 'imageBlockCreate': { name: 'imageBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ImageBlock'; ofType: null; }; } }; 'imageBlockUpdate': { name: 'imageBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ImageBlock'; ofType: null; }; } }; 'integrationDelete': { name: 'integrationDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Integration'; ofType: null; }; } }; 'integrationGoogleCreate': { name: 'integrationGoogleCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGoogle'; ofType: null; }; } }; 'integrationGoogleUpdate': { name: 'integrationGoogleUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGoogle'; ofType: null; }; } }; 'integrationGrowthSpacesCreate': { name: 'integrationGrowthSpacesCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGrowthSpaces'; ofType: null; }; } }; 'integrationGrowthSpacesUpdate': { name: 'integrationGrowthSpacesUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGrowthSpaces'; ofType: null; }; } }; 'journeyAiTranslateCreate': { name: 'journeyAiTranslateCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyCollectionCreate': { name: 'journeyCollectionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCollection'; ofType: null; }; } }; 'journeyCollectionDelete': { name: 'journeyCollectionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCollection'; ofType: null; }; } }; 'journeyCollectionUpdate': { name: 'journeyCollectionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCollection'; ofType: null; }; } }; 'journeyCreate': { name: 'journeyCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyCustomizationFieldPublisherUpdate': { name: 'journeyCustomizationFieldPublisherUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCustomizationField'; ofType: null; }; }; }; } }; 'journeyCustomizationFieldUserUpdate': { name: 'journeyCustomizationFieldUserUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCustomizationField'; ofType: null; }; }; }; } }; 'journeyDuplicate': { name: 'journeyDuplicate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyFeature': { name: 'journeyFeature'; type: { kind: 'OBJECT'; name: 'Journey'; ofType: null; } }; 'journeyLanguageAiDetect': { name: 'journeyLanguageAiDetect'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'journeyNotificationUpdate': { name: 'journeyNotificationUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyNotification'; ofType: null; }; } }; 'journeyProfileCreate': { name: 'journeyProfileCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyProfile'; ofType: null; }; } }; 'journeyProfileUpdate': { name: 'journeyProfileUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyProfile'; ofType: null; }; } }; 'journeyPublish': { name: 'journeyPublish'; type: { kind: 'OBJECT'; name: 'Journey'; ofType: null; } }; 'journeySimpleUpdate': { name: 'journeySimpleUpdate'; type: { kind: 'SCALAR'; name: 'Json'; ofType: null; } }; 'journeyTemplate': { name: 'journeyTemplate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyThemeCreate': { name: 'journeyThemeCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyTheme'; ofType: null; }; } }; 'journeyThemeDelete': { name: 'journeyThemeDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyTheme'; ofType: null; }; } }; 'journeyThemeUpdate': { name: 'journeyThemeUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyTheme'; ofType: null; }; } }; 'journeyUpdate': { name: 'journeyUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyViewEventCreate': { name: 'journeyViewEventCreate'; type: { kind: 'OBJECT'; name: 'JourneyViewEvent'; ofType: null; } }; 'journeyVisitorExportToGoogleSheet': { name: 'journeyVisitorExportToGoogleSheet'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyVisitorGoogleSheetExportResult'; ofType: null; }; } }; 'journeysArchive': { name: 'journeysArchive'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeysDelete': { name: 'journeysDelete'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeysRestore': { name: 'journeysRestore'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeysTrash': { name: 'journeysTrash'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'multiselectBlockCreate': { name: 'multiselectBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectBlock'; ofType: null; }; } }; 'multiselectBlockUpdate': { name: 'multiselectBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectBlock'; ofType: null; }; } }; 'multiselectOptionBlockCreate': { name: 'multiselectOptionBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectOptionBlock'; ofType: null; }; } }; 'multiselectOptionBlockUpdate': { name: 'multiselectOptionBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectOptionBlock'; ofType: null; }; } }; 'multiselectSubmissionEventCreate': { name: 'multiselectSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectSubmissionEvent'; ofType: null; }; } }; 'playlistCreate': { name: 'playlistCreate'; type: { kind: 'UNION'; name: 'MutationPlaylistCreateResult'; ofType: null; } }; 'playlistDelete': { name: 'playlistDelete'; type: { kind: 'UNION'; name: 'MutationPlaylistDeleteResult'; ofType: null; } }; 'playlistItemAdd': { name: 'playlistItemAdd'; type: { kind: 'UNION'; name: 'MutationPlaylistItemAddResult'; ofType: null; } }; 'playlistItemAddWithVideoAndLanguageIds': { name: 'playlistItemAddWithVideoAndLanguageIds'; type: { kind: 'UNION'; name: 'MutationPlaylistItemAddWithVideoAndLanguageIdsResult'; ofType: null; } }; 'playlistItemRemove': { name: 'playlistItemRemove'; type: { kind: 'UNION'; name: 'MutationPlaylistItemRemoveResult'; ofType: null; } }; 'playlistItemsReorder': { name: 'playlistItemsReorder'; type: { kind: 'UNION'; name: 'MutationPlaylistItemsReorderResult'; ofType: null; } }; 'playlistUpdate': { name: 'playlistUpdate'; type: { kind: 'UNION'; name: 'MutationPlaylistUpdateResult'; ofType: null; } }; 'qrCodeCreate': { name: 'qrCodeCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'QrCode'; ofType: null; }; } }; 'qrCodeDelete': { name: 'qrCodeDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'QrCode'; ofType: null; }; } }; 'qrCodeUpdate': { name: 'qrCodeUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'QrCode'; ofType: null; }; } }; 'radioOptionBlockCreate': { name: 'radioOptionBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioOptionBlock'; ofType: null; }; } }; 'radioOptionBlockUpdate': { name: 'radioOptionBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioOptionBlock'; ofType: null; }; } }; 'radioQuestionBlockCreate': { name: 'radioQuestionBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioQuestionBlock'; ofType: null; }; } }; 'radioQuestionBlockUpdate': { name: 'radioQuestionBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioQuestionBlock'; ofType: null; }; } }; 'radioQuestionSubmissionEventCreate': { name: 'radioQuestionSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioQuestionSubmissionEvent'; ofType: null; }; } }; 'shortLinkCreate': { name: 'shortLinkCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkCreateResult'; ofType: null; }; } }; 'shortLinkDelete': { name: 'shortLinkDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDeleteResult'; ofType: null; }; } }; 'shortLinkDomainCreate': { name: 'shortLinkDomainCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDomainCreateResult'; ofType: null; }; } }; 'shortLinkDomainDelete': { name: 'shortLinkDomainDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDomainDeleteResult'; ofType: null; }; } }; 'shortLinkDomainUpdate': { name: 'shortLinkDomainUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDomainUpdateResult'; ofType: null; }; } }; 'shortLinkUpdate': { name: 'shortLinkUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkUpdateResult'; ofType: null; }; } }; 'signUpBlockCreate': { name: 'signUpBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SignUpBlock'; ofType: null; }; } }; 'signUpBlockUpdate': { name: 'signUpBlockUpdate'; type: { kind: 'OBJECT'; name: 'SignUpBlock'; ofType: null; } }; 'signUpSubmissionEventCreate': { name: 'signUpSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SignUpSubmissionEvent'; ofType: null; }; } }; 'siteCreate': { name: 'siteCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationSiteCreateResult'; ofType: null; }; } }; 'spacerBlockCreate': { name: 'spacerBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SpacerBlock'; ofType: null; }; } }; 'spacerBlockUpdate': { name: 'spacerBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SpacerBlock'; ofType: null; }; } }; 'stepBlockCreate': { name: 'stepBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepBlock'; ofType: null; }; } }; 'stepBlockPositionUpdate': { name: 'stepBlockPositionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepBlock'; ofType: null; }; }; }; } }; 'stepBlockUpdate': { name: 'stepBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepBlock'; ofType: null; }; } }; 'stepNextEventCreate': { name: 'stepNextEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepNextEvent'; ofType: null; }; } }; 'stepPreviousEventCreate': { name: 'stepPreviousEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepPreviousEvent'; ofType: null; }; } }; 'stepViewEventCreate': { name: 'stepViewEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepViewEvent'; ofType: null; }; } }; 'teamCreate': { name: 'teamCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Team'; ofType: null; }; } }; 'teamUpdate': { name: 'teamUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Team'; ofType: null; }; } }; 'textResponseBlockCreate': { name: 'textResponseBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TextResponseBlock'; ofType: null; }; } }; 'textResponseBlockUpdate': { name: 'textResponseBlockUpdate'; type: { kind: 'OBJECT'; name: 'TextResponseBlock'; ofType: null; } }; 'textResponseSubmissionEventCreate': { name: 'textResponseSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TextResponseSubmissionEvent'; ofType: null; }; } }; 'triggerUnsplashDownload': { name: 'triggerUnsplashDownload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'typographyBlockCreate': { name: 'typographyBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TypographyBlock'; ofType: null; }; } }; 'typographyBlockUpdate': { name: 'typographyBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TypographyBlock'; ofType: null; }; } }; 'updateJourneysEmailPreference': { name: 'updateJourneysEmailPreference'; type: { kind: 'OBJECT'; name: 'JourneysEmailPreference'; ofType: null; } }; 'updateVideoAlgoliaIndex': { name: 'updateVideoAlgoliaIndex'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'updateVideoVariantAlgoliaIndex': { name: 'updateVideoVariantAlgoliaIndex'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'userImpersonate': { name: 'userImpersonate'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'userInviteAcceptAll': { name: 'userInviteAcceptAll'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserInvite'; ofType: null; }; }; }; } }; 'userInviteCreate': { name: 'userInviteCreate'; type: { kind: 'OBJECT'; name: 'UserInvite'; ofType: null; } }; 'userInviteRemove': { name: 'userInviteRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserInvite'; ofType: null; }; } }; 'userJourneyApprove': { name: 'userJourneyApprove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userJourneyOpen': { name: 'userJourneyOpen'; type: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; } }; 'userJourneyPromote': { name: 'userJourneyPromote'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userJourneyRemove': { name: 'userJourneyRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userJourneyRemoveAll': { name: 'userJourneyRemoveAll'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; }; }; } }; 'userJourneyRequest': { name: 'userJourneyRequest'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userTeamDelete': { name: 'userTeamDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeam'; ofType: null; }; } }; 'userTeamInviteAcceptAll': { name: 'userTeamInviteAcceptAll'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeamInvite'; ofType: null; }; }; }; } }; 'userTeamInviteCreate': { name: 'userTeamInviteCreate'; type: { kind: 'OBJECT'; name: 'UserTeamInvite'; ofType: null; } }; 'userTeamInviteRemove': { name: 'userTeamInviteRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeamInvite'; ofType: null; }; } }; 'userTeamUpdate': { name: 'userTeamUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeam'; ofType: null; }; } }; 'validateEmail': { name: 'validateEmail'; type: { kind: 'OBJECT'; name: 'User'; ofType: null; } }; 'videoBlockCreate': { name: 'videoBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoBlock'; ofType: null; }; } }; 'videoBlockUpdate': { name: 'videoBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoBlock'; ofType: null; }; } }; 'videoCollapseEventCreate': { name: 'videoCollapseEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoCollapseEvent'; ofType: null; }; } }; 'videoCompleteEventCreate': { name: 'videoCompleteEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoCompleteEvent'; ofType: null; }; } }; 'videoCreate': { name: 'videoCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Video'; ofType: null; }; } }; 'videoDelete': { name: 'videoDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Video'; ofType: null; }; } }; 'videoDescriptionCreate': { name: 'videoDescriptionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoDescription'; ofType: null; }; } }; 'videoDescriptionDelete': { name: 'videoDescriptionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoDescription'; ofType: null; }; } }; 'videoDescriptionUpdate': { name: 'videoDescriptionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoDescription'; ofType: null; }; } }; 'videoEditionCreate': { name: 'videoEditionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoEdition'; ofType: null; }; } }; 'videoEditionDelete': { name: 'videoEditionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoEdition'; ofType: null; }; } }; 'videoEditionUpdate': { name: 'videoEditionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoEdition'; ofType: null; }; } }; 'videoExpandEventCreate': { name: 'videoExpandEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoExpandEvent'; ofType: null; }; } }; 'videoImageAltCreate': { name: 'videoImageAltCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoImageAlt'; ofType: null; }; } }; 'videoImageAltDelete': { name: 'videoImageAltDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoImageAlt'; ofType: null; }; } }; 'videoImageAltUpdate': { name: 'videoImageAltUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoImageAlt'; ofType: null; }; } }; 'videoOriginCreate': { name: 'videoOriginCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoOrigin'; ofType: null; }; } }; 'videoOriginDelete': { name: 'videoOriginDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoOrigin'; ofType: null; }; } }; 'videoOriginUpdate': { name: 'videoOriginUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoOrigin'; ofType: null; }; } }; 'videoPauseEventCreate': { name: 'videoPauseEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPauseEvent'; ofType: null; }; } }; 'videoPlayEventCreate': { name: 'videoPlayEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPlayEvent'; ofType: null; }; } }; 'videoProgressEventCreate': { name: 'videoProgressEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoProgressEvent'; ofType: null; }; } }; 'videoPublishChildren': { name: 'videoPublishChildren'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPublishChildrenResult'; ofType: null; }; } }; 'videoPublishChildrenAndLanguages': { name: 'videoPublishChildrenAndLanguages'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPublishChildrenAndLanguagesResult'; ofType: null; }; } }; 'videoSnippetCreate': { name: 'videoSnippetCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSnippet'; ofType: null; }; } }; 'videoSnippetDelete': { name: 'videoSnippetDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSnippet'; ofType: null; }; } }; 'videoSnippetUpdate': { name: 'videoSnippetUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSnippet'; ofType: null; }; } }; 'videoStartEventCreate': { name: 'videoStartEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStartEvent'; ofType: null; }; } }; 'videoStudyQuestionCreate': { name: 'videoStudyQuestionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStudyQuestion'; ofType: null; }; } }; 'videoStudyQuestionDelete': { name: 'videoStudyQuestionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStudyQuestion'; ofType: null; }; } }; 'videoStudyQuestionUpdate': { name: 'videoStudyQuestionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStudyQuestion'; ofType: null; }; } }; 'videoSubtitleCreate': { name: 'videoSubtitleCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSubtitle'; ofType: null; }; } }; 'videoSubtitleDelete': { name: 'videoSubtitleDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSubtitle'; ofType: null; }; } }; 'videoSubtitleUpdate': { name: 'videoSubtitleUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSubtitle'; ofType: null; }; } }; 'videoTitleCreate': { name: 'videoTitleCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoTitle'; ofType: null; }; } }; 'videoTitleDelete': { name: 'videoTitleDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoTitle'; ofType: null; }; } }; 'videoTitleUpdate': { name: 'videoTitleUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoTitle'; ofType: null; }; } }; 'videoUpdate': { name: 'videoUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Video'; ofType: null; }; } }; 'videoVariantCreate': { name: 'videoVariantCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariant'; ofType: null; }; } }; 'videoVariantDelete': { name: 'videoVariantDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariant'; ofType: null; }; } }; 'videoVariantDownloadCreate': { name: 'videoVariantDownloadCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariantDownload'; ofType: null; }; } }; 'videoVariantDownloadDelete': { name: 'videoVariantDownloadDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariantDownload'; ofType: null; }; } }; 'videoVariantDownloadUpdate': { name: 'videoVariantDownloadUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariantDownload'; ofType: null; }; } }; 'videoVariantUpdate': { name: 'videoVariantUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariant'; ofType: null; }; } }; 'visitorUpdate': { name: 'visitorUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Visitor'; ofType: null; }; } }; 'visitorUpdateForCurrentUser': { name: 'visitorUpdateForCurrentUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Visitor'; ofType: null; }; } }; }; }; + 'Mutation': { kind: 'OBJECT'; name: 'Mutation'; fields: { 'audioPreviewCreate': { name: 'audioPreviewCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AudioPreview'; ofType: null; }; } }; 'audioPreviewDelete': { name: 'audioPreviewDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AudioPreview'; ofType: null; }; } }; 'audioPreviewUpdate': { name: 'audioPreviewUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AudioPreview'; ofType: null; }; } }; 'bibleCitationCreate': { name: 'bibleCitationCreate'; type: { kind: 'OBJECT'; name: 'BibleCitation'; ofType: null; } }; 'bibleCitationDelete': { name: 'bibleCitationDelete'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'bibleCitationUpdate': { name: 'bibleCitationUpdate'; type: { kind: 'OBJECT'; name: 'BibleCitation'; ofType: null; } }; 'blockDelete': { name: 'blockDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockDeleteAction': { name: 'blockDeleteAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; } }; 'blockDuplicate': { name: 'blockDuplicate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockOrderUpdate': { name: 'blockOrderUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockRestore': { name: 'blockRestore'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; }; }; } }; 'blockUpdateAction': { name: 'blockUpdateAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Action'; ofType: null; }; } }; 'blockUpdateChatAction': { name: 'blockUpdateChatAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatAction'; ofType: null; }; } }; 'blockUpdateEmailAction': { name: 'blockUpdateEmailAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'EmailAction'; ofType: null; }; } }; 'blockUpdateLinkAction': { name: 'blockUpdateLinkAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'LinkAction'; ofType: null; }; } }; 'blockUpdateNavigateToBlockAction': { name: 'blockUpdateNavigateToBlockAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'NavigateToBlockAction'; ofType: null; }; } }; 'blockUpdatePhoneAction': { name: 'blockUpdatePhoneAction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PhoneAction'; ofType: null; }; } }; 'buttonBlockCreate': { name: 'buttonBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ButtonBlock'; ofType: null; }; } }; 'buttonBlockUpdate': { name: 'buttonBlockUpdate'; type: { kind: 'OBJECT'; name: 'ButtonBlock'; ofType: null; } }; 'buttonClickEventCreate': { name: 'buttonClickEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ButtonClickEvent'; ofType: null; }; } }; 'cardBlockCreate': { name: 'cardBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CardBlock'; ofType: null; }; } }; 'cardBlockUpdate': { name: 'cardBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CardBlock'; ofType: null; }; } }; 'chatButtonCreate': { name: 'chatButtonCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatButton'; ofType: null; }; } }; 'chatButtonRemove': { name: 'chatButtonRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatButton'; ofType: null; }; } }; 'chatButtonUpdate': { name: 'chatButtonUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatButton'; ofType: null; }; } }; 'chatOpenEventCreate': { name: 'chatOpenEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ChatOpenEvent'; ofType: null; }; } }; 'cloudflareR2CompleteMultipart': { name: 'cloudflareR2CompleteMultipart'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2'; ofType: null; }; } }; 'cloudflareR2Create': { name: 'cloudflareR2Create'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2'; ofType: null; }; } }; 'cloudflareR2Delete': { name: 'cloudflareR2Delete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2'; ofType: null; }; } }; 'cloudflareR2MultipartPrepare': { name: 'cloudflareR2MultipartPrepare'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareR2MultipartPrepared'; ofType: null; }; } }; 'cloudflareUploadComplete': { name: 'cloudflareUploadComplete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'createCloudflareImageFromPrompt': { name: 'createCloudflareImageFromPrompt'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createCloudflareUploadByFile': { name: 'createCloudflareUploadByFile'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createCloudflareUploadByUrl': { name: 'createCloudflareUploadByUrl'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createImageBySegmindPrompt': { name: 'createImageBySegmindPrompt'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CloudflareImage'; ofType: null; }; } }; 'createJourneyEventsExportLog': { name: 'createJourneyEventsExportLog'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyEventsExportLog'; ofType: null; }; } }; 'createKeyword': { name: 'createKeyword'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Keyword'; ofType: null; }; } }; 'createMuxVideoAndQueueUpload': { name: 'createMuxVideoAndQueueUpload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; }; } }; 'createMuxVideoUploadByFile': { name: 'createMuxVideoUploadByFile'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; }; } }; 'createMuxVideoUploadByUrl': { name: 'createMuxVideoUploadByUrl'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; }; } }; 'createVerificationRequest': { name: 'createVerificationRequest'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'customDomainCheck': { name: 'customDomainCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomainCheck'; ofType: null; }; } }; 'customDomainCreate': { name: 'customDomainCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomain'; ofType: null; }; } }; 'customDomainDelete': { name: 'customDomainDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomain'; ofType: null; }; } }; 'customDomainUpdate': { name: 'customDomainUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CustomDomain'; ofType: null; }; } }; 'deleteCloudflareImage': { name: 'deleteCloudflareImage'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'deleteMuxVideo': { name: 'deleteMuxVideo'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'enableMuxDownload': { name: 'enableMuxDownload'; type: { kind: 'OBJECT'; name: 'MuxVideo'; ofType: null; } }; 'fixVideoLanguages': { name: 'fixVideoLanguages'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'googleSheetsSyncBackfill': { name: 'googleSheetsSyncBackfill'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GoogleSheetsSync'; ofType: null; }; } }; 'googleSheetsSyncCreate': { name: 'googleSheetsSyncCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GoogleSheetsSync'; ofType: null; }; } }; 'googleSheetsSyncDelete': { name: 'googleSheetsSyncDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GoogleSheetsSync'; ofType: null; }; } }; 'hostCreate': { name: 'hostCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Host'; ofType: null; }; } }; 'hostDelete': { name: 'hostDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Host'; ofType: null; }; } }; 'hostUpdate': { name: 'hostUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Host'; ofType: null; }; } }; 'iconBlockCreate': { name: 'iconBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IconBlock'; ofType: null; }; } }; 'iconBlockUpdate': { name: 'iconBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IconBlock'; ofType: null; }; } }; 'imageBlockCreate': { name: 'imageBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ImageBlock'; ofType: null; }; } }; 'imageBlockUpdate': { name: 'imageBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ImageBlock'; ofType: null; }; } }; 'integrationDelete': { name: 'integrationDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Integration'; ofType: null; }; } }; 'integrationGoogleCreate': { name: 'integrationGoogleCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGoogle'; ofType: null; }; } }; 'integrationGoogleUpdate': { name: 'integrationGoogleUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGoogle'; ofType: null; }; } }; 'integrationGrowthSpacesCreate': { name: 'integrationGrowthSpacesCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGrowthSpaces'; ofType: null; }; } }; 'integrationGrowthSpacesUpdate': { name: 'integrationGrowthSpacesUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IntegrationGrowthSpaces'; ofType: null; }; } }; 'journeyAiTranslateCreate': { name: 'journeyAiTranslateCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyCollectionCreate': { name: 'journeyCollectionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCollection'; ofType: null; }; } }; 'journeyCollectionDelete': { name: 'journeyCollectionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCollection'; ofType: null; }; } }; 'journeyCollectionUpdate': { name: 'journeyCollectionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCollection'; ofType: null; }; } }; 'journeyCreate': { name: 'journeyCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyCustomizationFieldPublisherUpdate': { name: 'journeyCustomizationFieldPublisherUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCustomizationField'; ofType: null; }; }; }; } }; 'journeyCustomizationFieldUserUpdate': { name: 'journeyCustomizationFieldUserUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyCustomizationField'; ofType: null; }; }; }; } }; 'journeyDuplicate': { name: 'journeyDuplicate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyFeature': { name: 'journeyFeature'; type: { kind: 'OBJECT'; name: 'Journey'; ofType: null; } }; 'journeyLanguageAiDetect': { name: 'journeyLanguageAiDetect'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'journeyNotificationUpdate': { name: 'journeyNotificationUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyNotification'; ofType: null; }; } }; 'journeyProfileCreate': { name: 'journeyProfileCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyProfile'; ofType: null; }; } }; 'journeyProfileUpdate': { name: 'journeyProfileUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyProfile'; ofType: null; }; } }; 'journeyPublish': { name: 'journeyPublish'; type: { kind: 'OBJECT'; name: 'Journey'; ofType: null; } }; 'journeySimpleUpdate': { name: 'journeySimpleUpdate'; type: { kind: 'SCALAR'; name: 'Json'; ofType: null; } }; 'journeyTemplate': { name: 'journeyTemplate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyThemeCreate': { name: 'journeyThemeCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyTheme'; ofType: null; }; } }; 'journeyThemeDelete': { name: 'journeyThemeDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyTheme'; ofType: null; }; } }; 'journeyThemeUpdate': { name: 'journeyThemeUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyTheme'; ofType: null; }; } }; 'journeyUpdate': { name: 'journeyUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeyViewEventCreate': { name: 'journeyViewEventCreate'; type: { kind: 'OBJECT'; name: 'JourneyViewEvent'; ofType: null; } }; 'journeyVisitorExportToGoogleSheet': { name: 'journeyVisitorExportToGoogleSheet'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'JourneyVisitorGoogleSheetExportResult'; ofType: null; }; } }; 'journeysArchive': { name: 'journeysArchive'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeysDelete': { name: 'journeysDelete'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeysRestore': { name: 'journeysRestore'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'journeysTrash': { name: 'journeysTrash'; type: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'Journey'; ofType: null; }; } }; 'multiselectBlockCreate': { name: 'multiselectBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectBlock'; ofType: null; }; } }; 'multiselectBlockUpdate': { name: 'multiselectBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectBlock'; ofType: null; }; } }; 'multiselectOptionBlockCreate': { name: 'multiselectOptionBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectOptionBlock'; ofType: null; }; } }; 'multiselectOptionBlockUpdate': { name: 'multiselectOptionBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectOptionBlock'; ofType: null; }; } }; 'multiselectSubmissionEventCreate': { name: 'multiselectSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MultiselectSubmissionEvent'; ofType: null; }; } }; 'playlistCreate': { name: 'playlistCreate'; type: { kind: 'UNION'; name: 'MutationPlaylistCreateResult'; ofType: null; } }; 'playlistDelete': { name: 'playlistDelete'; type: { kind: 'UNION'; name: 'MutationPlaylistDeleteResult'; ofType: null; } }; 'playlistItemAdd': { name: 'playlistItemAdd'; type: { kind: 'UNION'; name: 'MutationPlaylistItemAddResult'; ofType: null; } }; 'playlistItemAddWithVideoAndLanguageIds': { name: 'playlistItemAddWithVideoAndLanguageIds'; type: { kind: 'UNION'; name: 'MutationPlaylistItemAddWithVideoAndLanguageIdsResult'; ofType: null; } }; 'playlistItemRemove': { name: 'playlistItemRemove'; type: { kind: 'UNION'; name: 'MutationPlaylistItemRemoveResult'; ofType: null; } }; 'playlistItemsReorder': { name: 'playlistItemsReorder'; type: { kind: 'UNION'; name: 'MutationPlaylistItemsReorderResult'; ofType: null; } }; 'playlistUpdate': { name: 'playlistUpdate'; type: { kind: 'UNION'; name: 'MutationPlaylistUpdateResult'; ofType: null; } }; 'qrCodeCreate': { name: 'qrCodeCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'QrCode'; ofType: null; }; } }; 'qrCodeDelete': { name: 'qrCodeDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'QrCode'; ofType: null; }; } }; 'qrCodeUpdate': { name: 'qrCodeUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'QrCode'; ofType: null; }; } }; 'radioOptionBlockCreate': { name: 'radioOptionBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioOptionBlock'; ofType: null; }; } }; 'radioOptionBlockUpdate': { name: 'radioOptionBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioOptionBlock'; ofType: null; }; } }; 'radioQuestionBlockCreate': { name: 'radioQuestionBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioQuestionBlock'; ofType: null; }; } }; 'radioQuestionBlockUpdate': { name: 'radioQuestionBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioQuestionBlock'; ofType: null; }; } }; 'radioQuestionSubmissionEventCreate': { name: 'radioQuestionSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'RadioQuestionSubmissionEvent'; ofType: null; }; } }; 'shortLinkCreate': { name: 'shortLinkCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkCreateResult'; ofType: null; }; } }; 'shortLinkDelete': { name: 'shortLinkDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDeleteResult'; ofType: null; }; } }; 'shortLinkDomainCreate': { name: 'shortLinkDomainCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDomainCreateResult'; ofType: null; }; } }; 'shortLinkDomainDelete': { name: 'shortLinkDomainDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDomainDeleteResult'; ofType: null; }; } }; 'shortLinkDomainUpdate': { name: 'shortLinkDomainUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkDomainUpdateResult'; ofType: null; }; } }; 'shortLinkUpdate': { name: 'shortLinkUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationShortLinkUpdateResult'; ofType: null; }; } }; 'signUpBlockCreate': { name: 'signUpBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SignUpBlock'; ofType: null; }; } }; 'signUpBlockUpdate': { name: 'signUpBlockUpdate'; type: { kind: 'OBJECT'; name: 'SignUpBlock'; ofType: null; } }; 'signUpSubmissionEventCreate': { name: 'signUpSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SignUpSubmissionEvent'; ofType: null; }; } }; 'siteCreate': { name: 'siteCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'UNION'; name: 'MutationSiteCreateResult'; ofType: null; }; } }; 'spacerBlockCreate': { name: 'spacerBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SpacerBlock'; ofType: null; }; } }; 'spacerBlockUpdate': { name: 'spacerBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SpacerBlock'; ofType: null; }; } }; 'stepBlockCreate': { name: 'stepBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepBlock'; ofType: null; }; } }; 'stepBlockPositionUpdate': { name: 'stepBlockPositionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepBlock'; ofType: null; }; }; }; } }; 'stepBlockUpdate': { name: 'stepBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepBlock'; ofType: null; }; } }; 'stepNextEventCreate': { name: 'stepNextEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepNextEvent'; ofType: null; }; } }; 'stepPreviousEventCreate': { name: 'stepPreviousEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepPreviousEvent'; ofType: null; }; } }; 'stepViewEventCreate': { name: 'stepViewEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'StepViewEvent'; ofType: null; }; } }; 'teamCreate': { name: 'teamCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Team'; ofType: null; }; } }; 'teamUpdate': { name: 'teamUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Team'; ofType: null; }; } }; 'textResponseBlockCreate': { name: 'textResponseBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TextResponseBlock'; ofType: null; }; } }; 'textResponseBlockUpdate': { name: 'textResponseBlockUpdate'; type: { kind: 'OBJECT'; name: 'TextResponseBlock'; ofType: null; } }; 'textResponseSubmissionEventCreate': { name: 'textResponseSubmissionEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TextResponseSubmissionEvent'; ofType: null; }; } }; 'triggerUnsplashDownload': { name: 'triggerUnsplashDownload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'typographyBlockCreate': { name: 'typographyBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TypographyBlock'; ofType: null; }; } }; 'typographyBlockUpdate': { name: 'typographyBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TypographyBlock'; ofType: null; }; } }; 'updateJourneysEmailPreference': { name: 'updateJourneysEmailPreference'; type: { kind: 'OBJECT'; name: 'JourneysEmailPreference'; ofType: null; } }; 'updateVideoAlgoliaIndex': { name: 'updateVideoAlgoliaIndex'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'updateVideoVariantAlgoliaIndex': { name: 'updateVideoVariantAlgoliaIndex'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'userImpersonate': { name: 'userImpersonate'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'userInviteAcceptAll': { name: 'userInviteAcceptAll'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserInvite'; ofType: null; }; }; }; } }; 'userInviteCreate': { name: 'userInviteCreate'; type: { kind: 'OBJECT'; name: 'UserInvite'; ofType: null; } }; 'userInviteRemove': { name: 'userInviteRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserInvite'; ofType: null; }; } }; 'userJourneyApprove': { name: 'userJourneyApprove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userJourneyOpen': { name: 'userJourneyOpen'; type: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; } }; 'userJourneyPromote': { name: 'userJourneyPromote'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userJourneyRemove': { name: 'userJourneyRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userJourneyRemoveAll': { name: 'userJourneyRemoveAll'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; }; }; } }; 'userJourneyRequest': { name: 'userJourneyRequest'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserJourney'; ofType: null; }; } }; 'userTeamDelete': { name: 'userTeamDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeam'; ofType: null; }; } }; 'userTeamInviteAcceptAll': { name: 'userTeamInviteAcceptAll'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeamInvite'; ofType: null; }; }; }; } }; 'userTeamInviteCreate': { name: 'userTeamInviteCreate'; type: { kind: 'OBJECT'; name: 'UserTeamInvite'; ofType: null; } }; 'userTeamInviteRemove': { name: 'userTeamInviteRemove'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeamInvite'; ofType: null; }; } }; 'userTeamUpdate': { name: 'userTeamUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UserTeam'; ofType: null; }; } }; 'validateEmail': { name: 'validateEmail'; type: { kind: 'OBJECT'; name: 'User'; ofType: null; } }; 'videoBlockCreate': { name: 'videoBlockCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoBlock'; ofType: null; }; } }; 'videoBlockUpdate': { name: 'videoBlockUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoBlock'; ofType: null; }; } }; 'videoCollapseEventCreate': { name: 'videoCollapseEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoCollapseEvent'; ofType: null; }; } }; 'videoCompleteEventCreate': { name: 'videoCompleteEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoCompleteEvent'; ofType: null; }; } }; 'videoCreate': { name: 'videoCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Video'; ofType: null; }; } }; 'videoDelete': { name: 'videoDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Video'; ofType: null; }; } }; 'videoDescriptionCreate': { name: 'videoDescriptionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoDescription'; ofType: null; }; } }; 'videoDescriptionDelete': { name: 'videoDescriptionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoDescription'; ofType: null; }; } }; 'videoDescriptionUpdate': { name: 'videoDescriptionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoDescription'; ofType: null; }; } }; 'videoEditionCreate': { name: 'videoEditionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoEdition'; ofType: null; }; } }; 'videoEditionDelete': { name: 'videoEditionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoEdition'; ofType: null; }; } }; 'videoEditionUpdate': { name: 'videoEditionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoEdition'; ofType: null; }; } }; 'videoExpandEventCreate': { name: 'videoExpandEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoExpandEvent'; ofType: null; }; } }; 'videoImageAltCreate': { name: 'videoImageAltCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoImageAlt'; ofType: null; }; } }; 'videoImageAltDelete': { name: 'videoImageAltDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoImageAlt'; ofType: null; }; } }; 'videoImageAltUpdate': { name: 'videoImageAltUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoImageAlt'; ofType: null; }; } }; 'videoOriginCreate': { name: 'videoOriginCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoOrigin'; ofType: null; }; } }; 'videoOriginDelete': { name: 'videoOriginDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoOrigin'; ofType: null; }; } }; 'videoOriginUpdate': { name: 'videoOriginUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoOrigin'; ofType: null; }; } }; 'videoPauseEventCreate': { name: 'videoPauseEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPauseEvent'; ofType: null; }; } }; 'videoPlayEventCreate': { name: 'videoPlayEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPlayEvent'; ofType: null; }; } }; 'videoProgressEventCreate': { name: 'videoProgressEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoProgressEvent'; ofType: null; }; } }; 'videoPublishChildren': { name: 'videoPublishChildren'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPublishChildrenResult'; ofType: null; }; } }; 'videoPublishChildrenAndLanguages': { name: 'videoPublishChildrenAndLanguages'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoPublishChildrenAndLanguagesResult'; ofType: null; }; } }; 'videoSnippetCreate': { name: 'videoSnippetCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSnippet'; ofType: null; }; } }; 'videoSnippetDelete': { name: 'videoSnippetDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSnippet'; ofType: null; }; } }; 'videoSnippetUpdate': { name: 'videoSnippetUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSnippet'; ofType: null; }; } }; 'videoStartEventCreate': { name: 'videoStartEventCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStartEvent'; ofType: null; }; } }; 'videoStudyQuestionCreate': { name: 'videoStudyQuestionCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStudyQuestion'; ofType: null; }; } }; 'videoStudyQuestionDelete': { name: 'videoStudyQuestionDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStudyQuestion'; ofType: null; }; } }; 'videoStudyQuestionUpdate': { name: 'videoStudyQuestionUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoStudyQuestion'; ofType: null; }; } }; 'videoSubtitleCreate': { name: 'videoSubtitleCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSubtitle'; ofType: null; }; } }; 'videoSubtitleDelete': { name: 'videoSubtitleDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSubtitle'; ofType: null; }; } }; 'videoSubtitleUpdate': { name: 'videoSubtitleUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoSubtitle'; ofType: null; }; } }; 'videoTitleCreate': { name: 'videoTitleCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoTitle'; ofType: null; }; } }; 'videoTitleDelete': { name: 'videoTitleDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoTitle'; ofType: null; }; } }; 'videoTitleUpdate': { name: 'videoTitleUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoTitle'; ofType: null; }; } }; 'videoUpdate': { name: 'videoUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Video'; ofType: null; }; } }; 'videoVariantCreate': { name: 'videoVariantCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariant'; ofType: null; }; } }; 'videoVariantDelete': { name: 'videoVariantDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariant'; ofType: null; }; } }; 'videoVariantDownloadCreate': { name: 'videoVariantDownloadCreate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariantDownload'; ofType: null; }; } }; 'videoVariantDownloadDelete': { name: 'videoVariantDownloadDelete'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariantDownload'; ofType: null; }; } }; 'videoVariantDownloadUpdate': { name: 'videoVariantDownloadUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariantDownload'; ofType: null; }; } }; 'videoVariantUpdate': { name: 'videoVariantUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'VideoVariant'; ofType: null; }; } }; 'visitorUpdate': { name: 'visitorUpdate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Visitor'; ofType: null; }; } }; 'visitorUpdateForCurrentUser': { name: 'visitorUpdateForCurrentUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Visitor'; ofType: null; }; } }; }; }; 'MutationAudioPreviewCreateInput': { kind: 'INPUT_OBJECT'; name: 'MutationAudioPreviewCreateInput'; isOneOf: false; inputFields: [{ name: 'languageId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'value'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'duration'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'size'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'bitrate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'codec'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; }; 'MutationAudioPreviewUpdateInput': { kind: 'INPUT_OBJECT'; name: 'MutationAudioPreviewUpdateInput'; isOneOf: false; inputFields: [{ name: 'languageId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'value'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'duration'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'bitrate'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'codec'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; 'MutationBibleCitationCreateInput': { kind: 'INPUT_OBJECT'; name: 'MutationBibleCitationCreateInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'osisId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'videoId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'bibleBookId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'chapterStart'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'chapterEnd'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'verseStart'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'verseEnd'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'order'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; }; From 40c35596806d130227c2cefd1a29ee11b511b01b Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 00:51:30 +0000 Subject: [PATCH 3/8] fix: lint issues --- apis/api-users/src/schema/user/objects/index.ts | 5 +---- apis/api-users/src/schema/user/objects/user.ts | 3 +-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/apis/api-users/src/schema/user/objects/index.ts b/apis/api-users/src/schema/user/objects/index.ts index ea476b13fbd..6aaabe50131 100644 --- a/apis/api-users/src/schema/user/objects/index.ts +++ b/apis/api-users/src/schema/user/objects/index.ts @@ -1,6 +1,3 @@ import './user' -export { - AuthenticatedUser, - User, -} from './user' +export { AuthenticatedUser, User } from './user' diff --git a/apis/api-users/src/schema/user/objects/user.ts b/apis/api-users/src/schema/user/objects/user.ts index d3c35cc9d18..7055e2736a6 100644 --- a/apis/api-users/src/schema/user/objects/user.ts +++ b/apis/api-users/src/schema/user/objects/user.ts @@ -1,7 +1,7 @@ import { builder } from '../../builder' export const User = builder.prismaObject('User', { - 'name': 'User', + name: 'User', fields: (t) => ({ id: t.exposeID('id', { nullable: false }), firstName: t.field({ @@ -55,4 +55,3 @@ export const AuthenticatedUser = builder.prismaObject('User', { emailVerified: t.exposeBoolean('emailVerified', { nullable: false }) }) }) - From 56c3aae60d2ee20e9a2c4000ebb678b0d12df8a0 Mon Sep 17 00:00:00 2001 From: Mike Allison Date: Wed, 4 Feb 2026 01:05:20 +0000 Subject: [PATCH 4/8] feat: enhance AuthenticatedUser type for federation support - Updated the AuthenticatedUser type in the API schemas to include federation capabilities with the API_JOURNEYS_MODERN graph. - Introduced a new external reference for AuthenticatedUser in the user schema to facilitate integration. - Modified TypeScript exports to include the new AuthenticatedUser reference for improved type handling. --- apis/api-gateway/schema.graphql | 2 +- apis/api-journeys-modern/schema.graphql | 7 +++++++ apis/api-journeys-modern/src/schema/user/index.ts | 2 +- apis/api-journeys-modern/src/schema/user/user.ts | 14 ++++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/apis/api-gateway/schema.graphql b/apis/api-gateway/schema.graphql index 094b93bb0cd..38a273906c8 100644 --- a/apis/api-gateway/schema.graphql +++ b/apis/api-gateway/schema.graphql @@ -2199,7 +2199,7 @@ type UserRole @join__type(graph: API_JOURNEYS, key: "id") @join__type(graph: AP roles: [Role!] } -type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { +type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_JOURNEYS_MODERN, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { id: ID! firstName: String! @join__field(graph: API_USERS) lastName: String @join__field(graph: API_USERS) diff --git a/apis/api-journeys-modern/schema.graphql b/apis/api-journeys-modern/schema.graphql index cdefbabbfdb..0ee985a166e 100644 --- a/apis/api-journeys-modern/schema.graphql +++ b/apis/api-journeys-modern/schema.graphql @@ -7,6 +7,13 @@ interface Action { parentBlock: Block! } +type AuthenticatedUser + @key(fields: "id") + @extends +{ + id: ID! @external +} + interface Block { id: ID! journeyId: ID! diff --git a/apis/api-journeys-modern/src/schema/user/index.ts b/apis/api-journeys-modern/src/schema/user/index.ts index ddac8a72157..51b52301de8 100644 --- a/apis/api-journeys-modern/src/schema/user/index.ts +++ b/apis/api-journeys-modern/src/schema/user/index.ts @@ -1,3 +1,3 @@ import './user' -export { UserRef } from './user' +export { AuthenticatedUserRef, UserRef } from './user' diff --git a/apis/api-journeys-modern/src/schema/user/user.ts b/apis/api-journeys-modern/src/schema/user/user.ts index 30b98bee598..c8645a8c4dc 100644 --- a/apis/api-journeys-modern/src/schema/user/user.ts +++ b/apis/api-journeys-modern/src/schema/user/user.ts @@ -13,3 +13,17 @@ UserRef.implement({ // No additional fields needed - this is just the external reference }) }) + +// Define the federated AuthenticatedUser type reference - this should only be defined once +export const AuthenticatedUserRef = builder.externalRef( + 'AuthenticatedUser', + builder.selection<{ id: string }>('id') +) + +// Implement the external fields for the AuthenticatedUser type +AuthenticatedUserRef.implement({ + externalFields: (t) => ({ id: t.id({ nullable: false }) }), + fields: (t) => ({ + // No additional fields needed - this is just the external reference + }) +}) From 612bd1fc2c2a7731b3eaf0456cd6bb00ec76b8ed Mon Sep 17 00:00:00 2001 From: Mike Allison Date: Wed, 4 Feb 2026 19:40:25 +0000 Subject: [PATCH 5/8] refactor: remove AuthenticatedUser type from schema.graphql - Deleted the AuthenticatedUser type definition from the GraphQL schema to streamline user data representation. - This change simplifies the API by removing unnecessary complexity related to user authentication details. --- apis/api-gateway/schema.graphql | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/apis/api-gateway/schema.graphql b/apis/api-gateway/schema.graphql index 7a2327249f8..094b93bb0cd 100644 --- a/apis/api-gateway/schema.graphql +++ b/apis/api-gateway/schema.graphql @@ -3267,16 +3267,6 @@ type ZodFieldError @join__type(graph: API_MEDIA) { path: [String!]! } -type AuthenticatedUser @join__type(graph: API_USERS, key: "id") { - id: ID! - firstName: String! - lastName: String - email: String! - imageUrl: String - superAdmin: Boolean - emailVerified: Boolean! -} - interface BaseError @join__type(graph: API_ANALYTICS) @join__type(graph: API_MEDIA) { message: String } From e7de15a3353fedb39897f14af9a77a81513a8f5a Mon Sep 17 00:00:00 2001 From: Mike Allison Date: Wed, 4 Feb 2026 20:42:04 +0000 Subject: [PATCH 6/8] feat: enhance AuthenticatedUser type with language roles - Added languageUserRoles field to the AuthenticatedUser type in both schema.graphql and schema.graphql for API_LANGUAGES. - Implemented resolver for languageUserRoles in the user schema to fetch user-specific language roles from the database. - This update improves the user model by integrating language role management into the authentication process. --- apis/api-gateway/schema.graphql | 11 +++++----- apis/api-languages/schema.graphql | 8 ++++++++ apis/api-languages/src/schema/user/user.ts | 24 ++++++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/apis/api-gateway/schema.graphql b/apis/api-gateway/schema.graphql index 38a273906c8..0ec0b0c4e64 100644 --- a/apis/api-gateway/schema.graphql +++ b/apis/api-gateway/schema.graphql @@ -2199,8 +2199,9 @@ type UserRole @join__type(graph: API_JOURNEYS, key: "id") @join__type(graph: AP roles: [Role!] } -type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_JOURNEYS_MODERN, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { +type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_JOURNEYS_MODERN, key: "id", extension: true) @join__type(graph: API_LANGUAGES, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { id: ID! + languageUserRoles: [LanguageRole!]! @join__field(graph: API_LANGUAGES) firstName: String! @join__field(graph: API_USERS) lastName: String @join__field(graph: API_USERS) email: String! @join__field(graph: API_USERS) @@ -3738,15 +3739,15 @@ enum PlausibleEvent @join__type(graph: API_JOURNEYS_MODERN) { journeyResponses @join__enumValue(graph: API_JOURNEYS_MODERN) } +enum LanguageRole @join__type(graph: API_LANGUAGES) { + publisher @join__enumValue(graph: API_LANGUAGES) +} + enum LanguageIdType @join__type(graph: API_LANGUAGES) { databaseId @join__enumValue(graph: API_LANGUAGES) bcp47 @join__enumValue(graph: API_LANGUAGES) } -enum LanguageRole @join__type(graph: API_LANGUAGES) { - publisher @join__enumValue(graph: API_LANGUAGES) -} - enum DefaultPlatform @join__type(graph: API_MEDIA) { ios @join__enumValue(graph: API_MEDIA) android @join__enumValue(graph: API_MEDIA) diff --git a/apis/api-languages/schema.graphql b/apis/api-languages/schema.graphql index cff25a5040e..f2a3bca05b6 100644 --- a/apis/api-languages/schema.graphql +++ b/apis/api-languages/schema.graphql @@ -13,6 +13,14 @@ type AudioPreview codec: String! } +type AuthenticatedUser + @key(fields: "id") + @extends +{ + id: ID! @external + languageUserRoles: [LanguageRole!]! +} + type Continent { id: ID! name(languageId: ID, primary: Boolean): [ContinentName!]! diff --git a/apis/api-languages/src/schema/user/user.ts b/apis/api-languages/src/schema/user/user.ts index 642944b581f..3888ac3dc99 100644 --- a/apis/api-languages/src/schema/user/user.ts +++ b/apis/api-languages/src/schema/user/user.ts @@ -24,3 +24,27 @@ builder.externalRef('User', builder.selection<{ id: string }>('id')).implement({ }) }) }) + +builder + .externalRef('AuthenticatedUser', builder.selection<{ id: string }>('id')) + .implement({ + externalFields: (t) => ({ + id: t.id({ nullable: false }) + }), + fields: (t) => ({ + languageUserRoles: t.field({ + type: [LanguageRole], + nullable: false, + resolve: async (data) => { + return ( + ( + await prisma.userLanguageRole.findUnique({ + where: { userId: data.id } + }) + )?.roles ?? [] + ) + } + }) + }) + }) + \ No newline at end of file From a2462ab57f590f00b48a68807a79721b60d02d64 Mon Sep 17 00:00:00 2001 From: Mike Allison Date: Wed, 4 Feb 2026 20:47:35 +0000 Subject: [PATCH 7/8] feat: extend AuthenticatedUser type with media roles - Added mediaUserRoles field to the AuthenticatedUser type in both schema.graphql files for API_MEDIA. - Implemented resolver for mediaUserRoles in the user schema to fetch user-specific media roles from the database. - Updated TypeScript exports to include the new AuthenticatedUser reference for better type management. --- apis/api-gateway/schema.graphql | 11 ++++++----- apis/api-media/schema.graphql | 8 ++++++++ apis/api-media/src/schema/user/index.ts | 2 +- apis/api-media/src/schema/user/user.ts | 26 +++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/apis/api-gateway/schema.graphql b/apis/api-gateway/schema.graphql index 0ec0b0c4e64..a0a91fcaa46 100644 --- a/apis/api-gateway/schema.graphql +++ b/apis/api-gateway/schema.graphql @@ -2199,9 +2199,10 @@ type UserRole @join__type(graph: API_JOURNEYS, key: "id") @join__type(graph: AP roles: [Role!] } -type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_JOURNEYS_MODERN, key: "id", extension: true) @join__type(graph: API_LANGUAGES, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { +type AuthenticatedUser @join__type(graph: API_JOURNEYS, key: "id", extension: true) @join__type(graph: API_JOURNEYS_MODERN, key: "id", extension: true) @join__type(graph: API_LANGUAGES, key: "id", extension: true) @join__type(graph: API_MEDIA, key: "id", extension: true) @join__type(graph: API_USERS, key: "id") { id: ID! languageUserRoles: [LanguageRole!]! @join__field(graph: API_LANGUAGES) + mediaUserRoles: [MediaRole!]! @join__field(graph: API_MEDIA) firstName: String! @join__field(graph: API_USERS) lastName: String @join__field(graph: API_USERS) email: String! @join__field(graph: API_USERS) @@ -3754,6 +3755,10 @@ enum DefaultPlatform @join__type(graph: API_MEDIA) { web @join__enumValue(graph: API_MEDIA) } +enum MediaRole @join__type(graph: API_MEDIA) { + publisher @join__enumValue(graph: API_MEDIA) +} + enum ImageAspectRatio @join__type(graph: API_MEDIA) { hd @join__enumValue(graph: API_MEDIA) banner @join__enumValue(graph: API_MEDIA) @@ -3765,10 +3770,6 @@ enum MaxResolutionTier @join__type(graph: API_MEDIA) { uhd @join__enumValue(graph: API_MEDIA) } -enum MediaRole @join__type(graph: API_MEDIA) { - publisher @join__enumValue(graph: API_MEDIA) -} - enum SegmindModel @join__type(graph: API_MEDIA) { sdxl1__0_txt2img @join__enumValue(graph: API_MEDIA) kandinsky2__2_txt2img @join__enumValue(graph: API_MEDIA) diff --git a/apis/api-media/schema.graphql b/apis/api-media/schema.graphql index 5111a0c6174..9a25cb13871 100644 --- a/apis/api-media/schema.graphql +++ b/apis/api-media/schema.graphql @@ -9,6 +9,14 @@ type ArclightApiKey defaultPlatform: DefaultPlatform! } +type AuthenticatedUser + @key(fields: "id") + @extends +{ + id: ID! @external + mediaUserRoles: [MediaRole!]! +} + interface BaseError { message: String } diff --git a/apis/api-media/src/schema/user/index.ts b/apis/api-media/src/schema/user/index.ts index cacb05ea5af..f39da98322e 100644 --- a/apis/api-media/src/schema/user/index.ts +++ b/apis/api-media/src/schema/user/index.ts @@ -1,4 +1,4 @@ import './enums' import './user' -export { UserRef } from './user' +export { AuthenticatedUserRef, UserRef } from './user' diff --git a/apis/api-media/src/schema/user/user.ts b/apis/api-media/src/schema/user/user.ts index f27b1297abc..4722942b26a 100644 --- a/apis/api-media/src/schema/user/user.ts +++ b/apis/api-media/src/schema/user/user.ts @@ -29,3 +29,29 @@ UserRef.implement({ }) }) }) + +export const AuthenticatedUserRef = builder.externalRef( + 'AuthenticatedUser', + builder.selection<{ id: string }>('id') +) + +AuthenticatedUserRef.implement({ + externalFields: (t) => ({ + id: t.id({ nullable: false }) + }), + fields: (t) => ({ + mediaUserRoles: t.field({ + type: [MediaRole], + nullable: false, + resolve: async (data) => { + return ( + ( + await prisma.userMediaRole.findUnique({ + where: { id: data.id } + }) + )?.roles ?? [] + ) + } + }) + }) +}) From ab487e0c0f0fbafbeff212335c5f35fbba78b2d3 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 20:53:19 +0000 Subject: [PATCH 8/8] fix: lint issues --- apis/api-languages/src/schema/user/user.ts | 1 - libs/shared/gql/src/__generated__/graphql-env.d.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/apis/api-languages/src/schema/user/user.ts b/apis/api-languages/src/schema/user/user.ts index 3888ac3dc99..15647bc8580 100644 --- a/apis/api-languages/src/schema/user/user.ts +++ b/apis/api-languages/src/schema/user/user.ts @@ -47,4 +47,3 @@ builder }) }) }) - \ No newline at end of file diff --git a/libs/shared/gql/src/__generated__/graphql-env.d.ts b/libs/shared/gql/src/__generated__/graphql-env.d.ts index d25910967a2..e150d21351b 100644 --- a/libs/shared/gql/src/__generated__/graphql-env.d.ts +++ b/libs/shared/gql/src/__generated__/graphql-env.d.ts @@ -5,7 +5,7 @@ export type introspection_types = { 'Action': { kind: 'INTERFACE'; name: 'Action'; fields: { 'gtmEventName': { name: 'gtmEventName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'parentBlock': { name: 'parentBlock'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Block'; ofType: null; }; } }; 'parentBlockId': { name: 'parentBlockId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; }; possibleTypes: 'ChatAction' | 'EmailAction' | 'LinkAction' | 'NavigateToBlockAction' | 'PhoneAction'; }; 'ArclightApiKey': { kind: 'OBJECT'; name: 'ArclightApiKey'; fields: { 'defaultPlatform': { name: 'defaultPlatform'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DefaultPlatform'; ofType: null; }; } }; 'desc': { name: 'desc'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'key': { name: 'key'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; 'AudioPreview': { kind: 'OBJECT'; name: 'AudioPreview'; fields: { 'bitrate': { name: 'bitrate'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'codec': { name: 'codec'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'duration': { name: 'duration'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'language': { name: 'language'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Language'; ofType: null; }; } }; 'languageId': { name: 'languageId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'size': { name: 'size'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'value': { name: 'value'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; - 'AuthenticatedUser': { kind: 'OBJECT'; name: 'AuthenticatedUser'; fields: { 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'emailVerified': { name: 'emailVerified'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'firstName': { name: 'firstName'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'imageUrl': { name: 'imageUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'lastName': { name: 'lastName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'superAdmin': { name: 'superAdmin'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; }; }; + 'AuthenticatedUser': { kind: 'OBJECT'; name: 'AuthenticatedUser'; fields: { 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'emailVerified': { name: 'emailVerified'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'firstName': { name: 'firstName'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'imageUrl': { name: 'imageUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'languageUserRoles': { name: 'languageUserRoles'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'LanguageRole'; ofType: null; }; }; }; } }; 'lastName': { name: 'lastName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'mediaUserRoles': { name: 'mediaUserRoles'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MediaRole'; ofType: null; }; }; }; } }; 'superAdmin': { name: 'superAdmin'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; }; }; 'BaseError': { kind: 'INTERFACE'; name: 'BaseError'; fields: { 'message': { name: 'message'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; possibleTypes: 'Error' | 'ForeignKeyConstraintError' | 'NotFoundError' | 'NotUniqueError' | 'ZodError'; }; 'BibleBook': { kind: 'OBJECT'; name: 'BibleBook'; fields: { 'alternateName': { name: 'alternateName'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'isNewTestament': { name: 'isNewTestament'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'BibleBookName'; ofType: null; }; }; }; } }; 'order': { name: 'order'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'osisId': { name: 'osisId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'paratextAbbreviation': { name: 'paratextAbbreviation'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; 'BibleBookName': { kind: 'OBJECT'; name: 'BibleBookName'; fields: { 'language': { name: 'language'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Language'; ofType: null; }; } }; 'primary': { name: 'primary'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'value': { name: 'value'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; };