Compare commits

..

5 Commits

Author SHA1 Message Date
f002ce1752 operations 2025-12-16 13:04:08 -08:00
065e979217 add submitCancellationFeedback & cancellation reason enum
Some checks failed
Tests / Tests (pull_request) Failing after 0s
2025-12-16 12:33:37 -08:00
09267529cd Merge pull request 'dean/add-challenge-feature' (#212) from dean/add-challenge-feature into master
Reviewed-on: #212
2025-12-10 19:11:18 +00:00
2b48ec48d5 Merge pull request 'feat: Add pocketSize to VideoCardFields fragment' (#214) from dean/feed-pocket-size-v2 into master
Reviewed-on: #214
2025-12-10 18:33:30 +00:00
dean
93bf341c0f feat: Add pocketSize to VideoCardFields fragment
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2025-12-10 10:31:36 -08:00
5 changed files with 81 additions and 58 deletions

View File

@@ -123,6 +123,15 @@ export type BucketSetInputGql = {
feature: Scalars['String']['input'];
};
export enum CancellationReasonEnum {
DataNotAccurate = 'DATA_NOT_ACCURATE',
DontPlayEnough = 'DONT_PLAY_ENOUGH',
MissingFeatures = 'MISSING_FEATURES',
Other = 'OTHER',
TechnicalIssues = 'TECHNICAL_ISSUES',
TooExpensive = 'TOO_EXPENSIVE'
}
export type Challenge = {
__typename?: 'Challenge';
createdAt: Scalars['DateTime']['output'];
@@ -521,6 +530,7 @@ export type Mutation = {
setLoggerLevel: Scalars['Boolean']['output'];
setSegmentDuration: Scalars['Boolean']['output'];
startChallenge: ChallengeEntry;
submitCancellationFeedback: Scalars['Boolean']['output'];
submitChallengeEntry: ChallengeEntry;
undismissChallenge: Scalars['Boolean']['output'];
unfollowUser: UserGql;
@@ -733,6 +743,12 @@ export type MutationStartChallengeArgs = {
};
export type MutationSubmitCancellationFeedbackArgs = {
feedback?: InputMaybe<Scalars['String']['input']>;
reasons?: InputMaybe<Array<CancellationReasonEnum>>;
};
export type MutationSubmitChallengeEntryArgs = {
entryId: Scalars['ID']['input'];
videoId: Scalars['ID']['input'];
@@ -1872,11 +1888,11 @@ export type GetFeedQueryVariables = Exact<{
}>;
export type GetFeedQuery = { __typename?: 'Query', getUserVideos: { __typename?: 'VideoHistoryGQL', videos: Array<{ __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShotsMade: number, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, createdAt?: any | null, updatedAt?: any | null, startTime?: any | null, endTime?: any | null, private: boolean, elapsedTime?: number | null, tableSize: number, owner?: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null } | null, stream?: { __typename?: 'UploadStreamGQL', id: string, lastIntendedSegmentBound?: number | null, isCompleted: boolean, streamSegmentType: StreamSegmentTypeEnum } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, status: ProcessingStatusEnum, errors: Array<{ __typename?: 'VideoProcessingErrorGQL', message: string }>, statuses: Array<{ __typename?: 'VideoProcessingStatusGQL', status: ProcessingStatusEnum }> } | null, reactions: Array<{ __typename?: 'ReactionGQL', videoId: number, reaction: ReactionEnum, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }>, comments: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null }, replies: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }> }> }>, pageInfo: { __typename?: 'PageInfoGQL', hasNextPage: boolean, endCursor?: string | null } } };
export type GetFeedQuery = { __typename?: 'Query', getUserVideos: { __typename?: 'VideoHistoryGQL', videos: Array<{ __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShotsMade: number, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, createdAt?: any | null, updatedAt?: any | null, startTime?: any | null, endTime?: any | null, private: boolean, elapsedTime?: number | null, tableSize: number, pocketSize?: number | null, owner?: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null } | null, stream?: { __typename?: 'UploadStreamGQL', id: string, lastIntendedSegmentBound?: number | null, isCompleted: boolean, streamSegmentType: StreamSegmentTypeEnum } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, status: ProcessingStatusEnum, errors: Array<{ __typename?: 'VideoProcessingErrorGQL', message: string }>, statuses: Array<{ __typename?: 'VideoProcessingStatusGQL', status: ProcessingStatusEnum }> } | null, reactions: Array<{ __typename?: 'ReactionGQL', videoId: number, reaction: ReactionEnum, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }>, comments: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null }, replies: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }> }> }>, pageInfo: { __typename?: 'PageInfoGQL', hasNextPage: boolean, endCursor?: string | null } } };
export type UserSocialsFieldsFragment = { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null };
export type VideoCardFieldsFragment = { __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShotsMade: number, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, createdAt?: any | null, updatedAt?: any | null, startTime?: any | null, endTime?: any | null, private: boolean, elapsedTime?: number | null, tableSize: number, owner?: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null } | null, stream?: { __typename?: 'UploadStreamGQL', id: string, lastIntendedSegmentBound?: number | null, isCompleted: boolean, streamSegmentType: StreamSegmentTypeEnum } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, status: ProcessingStatusEnum, errors: Array<{ __typename?: 'VideoProcessingErrorGQL', message: string }>, statuses: Array<{ __typename?: 'VideoProcessingStatusGQL', status: ProcessingStatusEnum }> } | null, reactions: Array<{ __typename?: 'ReactionGQL', videoId: number, reaction: ReactionEnum, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }>, comments: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null }, replies: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }> }> };
export type VideoCardFieldsFragment = { __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShotsMade: number, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, createdAt?: any | null, updatedAt?: any | null, startTime?: any | null, endTime?: any | null, private: boolean, elapsedTime?: number | null, tableSize: number, pocketSize?: number | null, owner?: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null } | null, stream?: { __typename?: 'UploadStreamGQL', id: string, lastIntendedSegmentBound?: number | null, isCompleted: boolean, streamSegmentType: StreamSegmentTypeEnum } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, status: ProcessingStatusEnum, errors: Array<{ __typename?: 'VideoProcessingErrorGQL', message: string }>, statuses: Array<{ __typename?: 'VideoProcessingStatusGQL', status: ProcessingStatusEnum }> } | null, reactions: Array<{ __typename?: 'ReactionGQL', videoId: number, reaction: ReactionEnum, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }>, comments: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null }, replies: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }> }> };
export type GetVideoFeedQueryVariables = Exact<{
limit?: Scalars['Int']['input'];
@@ -1888,7 +1904,7 @@ export type GetVideoFeedQueryVariables = Exact<{
}>;
export type GetVideoFeedQuery = { __typename?: 'Query', getFeedVideos: { __typename?: 'VideoHistoryGQL', hasFollowing: boolean, videos: Array<{ __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShotsMade: number, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, createdAt?: any | null, updatedAt?: any | null, startTime?: any | null, endTime?: any | null, private: boolean, elapsedTime?: number | null, tableSize: number, owner?: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null } | null, stream?: { __typename?: 'UploadStreamGQL', id: string, lastIntendedSegmentBound?: number | null, isCompleted: boolean, streamSegmentType: StreamSegmentTypeEnum } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, status: ProcessingStatusEnum, errors: Array<{ __typename?: 'VideoProcessingErrorGQL', message: string }>, statuses: Array<{ __typename?: 'VideoProcessingStatusGQL', status: ProcessingStatusEnum }> } | null, reactions: Array<{ __typename?: 'ReactionGQL', videoId: number, reaction: ReactionEnum, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }>, comments: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null }, replies: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }> }> }>, pageInfo: { __typename?: 'PageInfoGQL', hasNextPage: boolean, endCursor?: string | null } } };
export type GetVideoFeedQuery = { __typename?: 'Query', getFeedVideos: { __typename?: 'VideoHistoryGQL', hasFollowing: boolean, videos: Array<{ __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShotsMade: number, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, createdAt?: any | null, updatedAt?: any | null, startTime?: any | null, endTime?: any | null, private: boolean, elapsedTime?: number | null, tableSize: number, pocketSize?: number | null, owner?: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null } | null, stream?: { __typename?: 'UploadStreamGQL', id: string, lastIntendedSegmentBound?: number | null, isCompleted: boolean, streamSegmentType: StreamSegmentTypeEnum } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, status: ProcessingStatusEnum, errors: Array<{ __typename?: 'VideoProcessingErrorGQL', message: string }>, statuses: Array<{ __typename?: 'VideoProcessingStatusGQL', status: ProcessingStatusEnum }> } | null, reactions: Array<{ __typename?: 'ReactionGQL', videoId: number, reaction: ReactionEnum, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }>, comments: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null }, replies: Array<{ __typename?: 'CommentGQL', id: number, message: string, user: { __typename?: 'UserGQL', id: number, username: string, profileImageUri?: string | null, isFollowedByCurrentUser?: boolean | null } }> }> }>, pageInfo: { __typename?: 'PageInfoGQL', hasNextPage: boolean, endCursor?: string | null } } };
export type GetMakesLeaderboardQueryVariables = Exact<{
interval?: InputMaybe<TimeInterval>;
@@ -1993,6 +2009,14 @@ export type CancelSubscriptionMutationVariables = Exact<{ [key: string]: never;
export type CancelSubscriptionMutation = { __typename?: 'Mutation', cancelSubscription: { __typename?: 'UserSubscriptionStatusGQL', hasActiveSubscription: boolean, subscriptionStatus?: StripeSubscriptionStatusEnum | null, currentPeriodStart?: any | null, currentPeriodEnd?: any | null, validUntil?: any | null, stripePriceId?: string | null, stripeSubscriptionId?: string | null } };
export type SubmitCancellationFeedbackMutationVariables = Exact<{
reasons?: InputMaybe<Array<CancellationReasonEnum> | CancellationReasonEnum>;
feedback?: InputMaybe<Scalars['String']['input']>;
}>;
export type SubmitCancellationFeedbackMutation = { __typename?: 'Mutation', submitCancellationFeedback: boolean };
export type ReactToVideoMutationVariables = Exact<{
videoId: Scalars['Int']['input'];
reaction?: InputMaybe<ReactionEnum>;
@@ -2305,13 +2329,6 @@ export type GetMedianRunForVideoQueryVariables = Exact<{
export type GetMedianRunForVideoQuery = { __typename?: 'Query', getVideo: { __typename?: 'VideoGQL', id: number, medianRun?: number | null } };
export type GetAverageDifficultyForVideoQueryVariables = Exact<{
videoId: Scalars['Int']['input'];
}>;
export type GetAverageDifficultyForVideoQuery = { __typename?: 'Query', getVideo: { __typename?: 'VideoGQL', id: number, averageDifficulty?: number | null } };
export type StreamWithEndFramesFragment = { __typename?: 'UploadStreamGQL', id: string, streamSegmentType: StreamSegmentTypeEnum, segmentEndFrames: Array<number>, resolution: { __typename?: 'VideoResolutionGQL', width?: number | null, height?: number | null }, segments: Array<{ __typename?: 'UploadSegmentGQL', uploaded: boolean, valid: boolean, segmentIndex: number, endFrameIndex?: number | null, framesPerSecond?: number | null }> };
export type SegmentEndFramesFragment = { __typename?: 'SegmentEndFramesGQL', id: number, segmentEndFrames: Array<number> };
@@ -2449,6 +2466,7 @@ export const VideoCardFieldsFragmentDoc = gql`
streamSegmentType
}
tableSize
pocketSize
tags {
tagClasses {
name
@@ -4615,6 +4633,38 @@ export function useCancelSubscriptionMutation(baseOptions?: Apollo.MutationHookO
export type CancelSubscriptionMutationHookResult = ReturnType<typeof useCancelSubscriptionMutation>;
export type CancelSubscriptionMutationResult = Apollo.MutationResult<CancelSubscriptionMutation>;
export type CancelSubscriptionMutationOptions = Apollo.BaseMutationOptions<CancelSubscriptionMutation, CancelSubscriptionMutationVariables>;
export const SubmitCancellationFeedbackDocument = gql`
mutation SubmitCancellationFeedback($reasons: [CancellationReasonEnum!], $feedback: String) {
submitCancellationFeedback(reasons: $reasons, feedback: $feedback)
}
`;
export type SubmitCancellationFeedbackMutationFn = Apollo.MutationFunction<SubmitCancellationFeedbackMutation, SubmitCancellationFeedbackMutationVariables>;
/**
* __useSubmitCancellationFeedbackMutation__
*
* To run a mutation, you first call `useSubmitCancellationFeedbackMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useSubmitCancellationFeedbackMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [submitCancellationFeedbackMutation, { data, loading, error }] = useSubmitCancellationFeedbackMutation({
* variables: {
* reasons: // value for 'reasons'
* feedback: // value for 'feedback'
* },
* });
*/
export function useSubmitCancellationFeedbackMutation(baseOptions?: Apollo.MutationHookOptions<SubmitCancellationFeedbackMutation, SubmitCancellationFeedbackMutationVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useMutation<SubmitCancellationFeedbackMutation, SubmitCancellationFeedbackMutationVariables>(SubmitCancellationFeedbackDocument, options);
}
export type SubmitCancellationFeedbackMutationHookResult = ReturnType<typeof useSubmitCancellationFeedbackMutation>;
export type SubmitCancellationFeedbackMutationResult = Apollo.MutationResult<SubmitCancellationFeedbackMutation>;
export type SubmitCancellationFeedbackMutationOptions = Apollo.BaseMutationOptions<SubmitCancellationFeedbackMutation, SubmitCancellationFeedbackMutationVariables>;
export const ReactToVideoDocument = gql`
mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) {
reactToVideo(videoId: $videoId, reaction: $reaction)
@@ -6422,47 +6472,6 @@ export type GetMedianRunForVideoQueryHookResult = ReturnType<typeof useGetMedian
export type GetMedianRunForVideoLazyQueryHookResult = ReturnType<typeof useGetMedianRunForVideoLazyQuery>;
export type GetMedianRunForVideoSuspenseQueryHookResult = ReturnType<typeof useGetMedianRunForVideoSuspenseQuery>;
export type GetMedianRunForVideoQueryResult = Apollo.QueryResult<GetMedianRunForVideoQuery, GetMedianRunForVideoQueryVariables>;
export const GetAverageDifficultyForVideoDocument = gql`
query GetAverageDifficultyForVideo($videoId: Int!) {
getVideo(videoId: $videoId) {
id
averageDifficulty
}
}
`;
/**
* __useGetAverageDifficultyForVideoQuery__
*
* To run a query within a React component, call `useGetAverageDifficultyForVideoQuery` and pass it any options that fit your needs.
* When your component renders, `useGetAverageDifficultyForVideoQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetAverageDifficultyForVideoQuery({
* variables: {
* videoId: // value for 'videoId'
* },
* });
*/
export function useGetAverageDifficultyForVideoQuery(baseOptions: Apollo.QueryHookOptions<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useQuery<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>(GetAverageDifficultyForVideoDocument, options);
}
export function useGetAverageDifficultyForVideoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useLazyQuery<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>(GetAverageDifficultyForVideoDocument, options);
}
export function useGetAverageDifficultyForVideoSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useSuspenseQuery<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>(GetAverageDifficultyForVideoDocument, options);
}
export type GetAverageDifficultyForVideoQueryHookResult = ReturnType<typeof useGetAverageDifficultyForVideoQuery>;
export type GetAverageDifficultyForVideoLazyQueryHookResult = ReturnType<typeof useGetAverageDifficultyForVideoLazyQuery>;
export type GetAverageDifficultyForVideoSuspenseQueryHookResult = ReturnType<typeof useGetAverageDifficultyForVideoSuspenseQuery>;
export type GetAverageDifficultyForVideoQueryResult = Apollo.QueryResult<GetAverageDifficultyForVideoQuery, GetAverageDifficultyForVideoQueryVariables>;
export const GetVideoForClipTimesDocument = gql`
query GetVideoForClipTimes($videoId: Int!) {
getVideo(videoId: $videoId) {

View File

@@ -50,6 +50,7 @@ fragment VideoCardFields on VideoGQL {
streamSegmentType
}
tableSize
pocketSize
tags {
tagClasses {
name

View File

@@ -63,3 +63,10 @@ mutation CancelSubscription {
stripeSubscriptionId
}
}
mutation SubmitCancellationFeedback(
$reasons: [CancellationReasonEnum!]
$feedback: String
) {
submitCancellationFeedback(reasons: $reasons, feedback: $feedback)
}

View File

@@ -211,13 +211,6 @@ query GetMedianRunForVideo($videoId: Int!) {
}
}
query GetAverageDifficultyForVideo($videoId: Int!) {
getVideo(videoId: $videoId) {
id
averageDifficulty
}
}
fragment StreamWithEndFrames on UploadStreamGQL {
id
streamSegmentType

View File

@@ -1072,6 +1072,10 @@ type Mutation {
deleteUser: Boolean!
createSubscription(priceId: String!): CreateSubscriptionResultGQL!
cancelSubscription: UserSubscriptionStatusGQL!
submitCancellationFeedback(
reasons: [CancellationReasonEnum!] = null
feedback: String = null
): Boolean!
findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL
createUploadStream(
videoMetadata: VideoMetadataInput!
@@ -1196,6 +1200,15 @@ type CreateSubscriptionResultGQL {
sessionId: String!
}
enum CancellationReasonEnum {
DONT_PLAY_ENOUGH
TOO_EXPENSIVE
MISSING_FEATURES
TECHNICAL_ISSUES
DATA_NOT_ACCURATE
OTHER
}
type CreateUploadStreamReturn {
videoId: Int!
}