Compare commits

..

1 Commits

Author SHA1 Message Date
19bdf69830 Add suggestPositionShot schema types and operation
Mirrors the backend's position-play search: SuggestPositionShotInputGQL
(pot lock + target-area polygon), PositionSuggestionGQL /
PositionShotCandidateGQL / CueStrikeGQL, the Query field, and a
SuggestPositionShot operation with a shared candidate fragment. The
regenerated hooks also provide the result types the mobile app uses to
shape local (billsim) physics results.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 16:28:45 -07:00
6 changed files with 6 additions and 408 deletions

View File

@@ -243,15 +243,6 @@ export type ClusterAssignmentInput = {
userId?: InputMaybe<Scalars['Int']['input']>;
};
export type CohortStatsGql = {
__typename?: 'CohortStatsGQL';
activated7d: Scalars['Int']['output'];
activatedNotPaid7d: Scalars['Int']['output'];
paid7d: Scalars['Int']['output'];
signups: Scalars['Int']['output'];
weekStart: Scalars['Date']['output'];
};
export type CommentGql = {
__typename?: 'CommentGQL';
id: Scalars['Int']['output'];
@@ -588,11 +579,6 @@ export type Header = {
value: Scalars['String']['output'];
};
export enum HomographyBackendGql {
Classic = 'CLASSIC',
Tablenet = 'TABLENET'
}
export type HomographyInfoGql = {
__typename?: 'HomographyInfoGQL';
crop: BoundingBoxGql;
@@ -1337,7 +1323,6 @@ export type Query = {
getQuotaStatus: QuotaStatusGql;
getResolvedTier: ResolvedTierGql;
getRuns: GetRunsResult;
getSessionCoach: SessionCoachGql;
getShotAnnotationTypes: Array<ShotAnnotationTypeGql>;
getShotTableState: ShotTableStateGql;
getShots: Array<ShotGql>;
@@ -1503,11 +1488,6 @@ export type QueryGetRunsArgs = {
};
export type QueryGetSessionCoachArgs = {
videoId: Scalars['Int']['input'];
};
export type QueryGetShotAnnotationTypesArgs = {
errorTypes?: InputMaybe<Scalars['Boolean']['input']>;
};
@@ -1851,84 +1831,6 @@ export type SerializedShotPathsGql = {
b64EncodedBuffer?: Maybe<Scalars['String']['output']>;
};
export enum SessionCoachCandidateFamilyEnum {
Aiming = 'AIMING',
BackCut = 'BACK_CUT',
CueToObjectDistance = 'CUE_TO_OBJECT_DISTANCE',
CutAngle = 'CUT_ANGLE',
ObjectToPocketDistance = 'OBJECT_TO_POCKET_DISTANCE',
Spin = 'SPIN'
}
export type SessionCoachCandidateGql = {
__typename?: 'SessionCoachCandidateGQL';
action: Scalars['String']['output'];
body: Scalars['String']['output'];
drillId?: Maybe<Scalars['String']['output']>;
evidence: SessionCoachEvidenceGql;
family: SessionCoachCandidateFamilyEnum;
id: Scalars['ID']['output'];
kind: SessionCoachCandidateKindEnum;
limitations: Array<Scalars['String']['output']>;
rank: Scalars['Int']['output'];
supportingShotIds: Array<Scalars['Int']['output']>;
title: Scalars['String']['output'];
};
export enum SessionCoachCandidateKindEnum {
DirectionalMiss = 'DIRECTIONAL_MISS',
OutcomePattern = 'OUTCOME_PATTERN',
UsagePattern = 'USAGE_PATTERN'
}
export type SessionCoachEvidenceGql = {
__typename?: 'SessionCoachEvidenceGQL';
attemptCount: Scalars['Int']['output'];
bucketKey: Scalars['String']['output'];
bucketLabel: Scalars['String']['output'];
comparisonAttemptCount: Scalars['Int']['output'];
comparisonMadeCount: Scalars['Int']['output'];
comparisonMakePercentage?: Maybe<Scalars['Float']['output']>;
madeCount: Scalars['Int']['output'];
makePercentage: Scalars['Float']['output'];
missedCount: Scalars['Int']['output'];
patternShotCount: Scalars['Int']['output'];
rankReason: Scalars['String']['output'];
score: Scalars['Float']['output'];
};
export type SessionCoachGql = {
__typename?: 'SessionCoachGQL';
analysisVersion: Scalars['String']['output'];
analyzedShotCount: Scalars['Int']['output'];
candidates: Array<SessionCoachCandidateGql>;
generatedAt: Scalars['DateTime']['output'];
ineligibilityReason?: Maybe<SessionCoachIneligibilityReasonEnum>;
madeCount: Scalars['Int']['output'];
makePercentage?: Maybe<Scalars['Float']['output']>;
missedCount: Scalars['Int']['output'];
primaryCandidate?: Maybe<SessionCoachCandidateGql>;
processingId?: Maybe<Scalars['Int']['output']>;
processingStatus?: Maybe<Scalars['String']['output']>;
shotCount: Scalars['Int']['output'];
state: SessionCoachStateEnum;
summary?: Maybe<Scalars['String']['output']>;
unknownOutcomeCount: Scalars['Int']['output'];
videoId: Scalars['Int']['output'];
};
export enum SessionCoachIneligibilityReasonEnum {
Multiplayer = 'MULTIPLAYER'
}
export enum SessionCoachStateEnum {
Failed = 'FAILED',
Ineligible = 'INELIGIBLE',
NoTrackedShots = 'NO_TRACKED_SHOTS',
Processing = 'PROCESSING',
Ready = 'READY'
}
export type ShotAnnotationGql = {
__typename?: 'ShotAnnotationGQL';
createdAt?: Maybe<Scalars['DateTime']['output']>;
@@ -2350,7 +2252,6 @@ export type UsageStatsDailyGql = {
export type UsageStatsGql = {
__typename?: 'UsageStatsGQL';
cohorts: Array<CohortStatsGql>;
daily: Array<UsageStatsDailyGql>;
funnel: FunnelStatsGql;
processingLast24h: Array<ProcessingStatusCountGql>;
@@ -2523,7 +2424,6 @@ export type VideoMetadataInput = {
framesPerSecond?: InputMaybe<Scalars['Float']['input']>;
/** @deprecated `game_type` is deprecated. Use `tags` instead. */
gameType?: InputMaybe<Scalars['String']['input']>;
homographyBackend?: InputMaybe<HomographyBackendGql>;
lastIntendedSegmentBound?: InputMaybe<Scalars['Int']['input']>;
pocketSize?: InputMaybe<Scalars['Float']['input']>;
private?: InputMaybe<Scalars['Boolean']['input']>;
@@ -2792,11 +2692,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, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, uploadCompletionCursor: number, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, uploadCompletionCursor: number, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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 GetVideoFeedSessionCountQueryVariables = Exact<{
limit?: Scalars['Int']['input'];
@@ -2827,7 +2727,7 @@ export type GetVideoFeedQueryVariables = Exact<{
}>;
export type GetVideoFeedQuery = { __typename?: 'Query', getFeedVideos: { __typename?: 'VideoHistoryGQL', hasFollowing: boolean, followingCount: number, videos: Array<{ __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, uploadCompletionCursor: number, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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, followingCount: number, videos: Array<{ __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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>;
@@ -3134,7 +3034,7 @@ export type GetRecordedStreamShotsQueryVariables = Exact<{
}>;
export type GetRecordedStreamShotsQuery = { __typename?: 'Query', getOrderedShots: { __typename?: 'GetShotsResult', shots: Array<{ __typename?: 'ShotGQL', id: number, videoId: number, startFrame: number, endFrame: number, serializedShotPaths?: { __typename?: 'SerializedShotPathsGQL', b64EncodedBuffer?: string | null } | null, cueObjectFeatures?: { __typename?: 'CueObjectFeaturesGQL', cueObjectDistance?: number | null, cueObjectAngle?: number | null, cueBallSpeed?: number | null, shotDirection?: ShotDirectionEnum | null, spinType?: SpinTypeEnum | null } | null, pocketingIntentionFeatures?: { __typename?: 'PocketingIntentionFeaturesGQL', make?: boolean | null, targetPocketDistance?: number | null, targetPocketAngle?: number | null, targetPocketAngleDirection?: ShotDirectionEnum | null, marginOfErrorInDegrees?: number | null, intendedPocketType?: PocketEnum | null, difficulty?: number | null } | null, pocketingIntentionInfo?: { __typename?: 'PocketingIntentionInfoGQL', ballId: number, pocketId: PocketIdentifier, pathMetadataIndex: number } | null }> } };
export type GetRecordedStreamShotsQuery = { __typename?: 'Query', getOrderedShots: { __typename?: 'GetShotsResult', shots: Array<{ __typename?: 'ShotGQL', id: number, videoId: number, startFrame: number, endFrame: number }> } };
export type GetRunsForHighlightsQueryVariables = Exact<{
filterInput: RunFilterInput;
@@ -3158,15 +3058,6 @@ export type GetRunsWithTimestampsQueryVariables = Exact<{
export type GetRunsWithTimestampsQuery = { __typename?: 'Query', getRuns: { __typename?: 'GetRunsResult', count?: number | null, runIds: Array<number>, runs: Array<{ __typename?: 'RunGQL', id: number, runLength: number, userId: number, videoId: number, shots: Array<{ __typename?: 'ShotGQL', videoId: number, id: number, createdAt?: any | null, pocketingIntentionFeatures?: { __typename?: 'PocketingIntentionFeaturesGQL', make?: boolean | null, targetPocketDistance?: number | null, targetPocketAngle?: number | null, targetPocketAngleDirection?: ShotDirectionEnum | null, marginOfErrorInDegrees?: number | null, intendedPocketType?: PocketEnum | null, difficulty?: number | null } | null }> }> } };
export type GetSessionCoachQueryVariables = Exact<{
videoId: Scalars['Int']['input'];
}>;
export type GetSessionCoachQuery = { __typename?: 'Query', getSessionCoach: { __typename?: 'SessionCoachGQL', videoId: number, processingId?: number | null, analysisVersion: string, state: SessionCoachStateEnum, generatedAt: any, processingStatus?: string | null, ineligibilityReason?: SessionCoachIneligibilityReasonEnum | null, summary?: string | null, shotCount: number, madeCount: number, missedCount: number, unknownOutcomeCount: number, analyzedShotCount: number, makePercentage?: number | null, primaryCandidate?: { __typename?: 'SessionCoachCandidateGQL', id: string, rank: number, family: SessionCoachCandidateFamilyEnum, kind: SessionCoachCandidateKindEnum, title: string, body: string, action: string, supportingShotIds: Array<number>, drillId?: string | null, limitations: Array<string>, evidence: { __typename?: 'SessionCoachEvidenceGQL', bucketKey: string, bucketLabel: string, attemptCount: number, madeCount: number, missedCount: number, makePercentage: number, comparisonAttemptCount: number, comparisonMadeCount: number, comparisonMakePercentage?: number | null, patternShotCount: number, score: number, rankReason: string } } | null, candidates: Array<{ __typename?: 'SessionCoachCandidateGQL', id: string, rank: number, family: SessionCoachCandidateFamilyEnum, kind: SessionCoachCandidateKindEnum, title: string, body: string, action: string, supportingShotIds: Array<number>, drillId?: string | null, limitations: Array<string>, evidence: { __typename?: 'SessionCoachEvidenceGQL', bucketKey: string, bucketLabel: string, attemptCount: number, madeCount: number, missedCount: number, makePercentage: number, comparisonAttemptCount: number, comparisonMadeCount: number, comparisonMakePercentage?: number | null, patternShotCount: number, score: number, rankReason: string } }> } };
export type SessionCoachCandidateFieldsFragment = { __typename?: 'SessionCoachCandidateGQL', id: string, rank: number, family: SessionCoachCandidateFamilyEnum, kind: SessionCoachCandidateKindEnum, title: string, body: string, action: string, supportingShotIds: Array<number>, drillId?: string | null, limitations: Array<string>, evidence: { __typename?: 'SessionCoachEvidenceGQL', bucketKey: string, bucketLabel: string, attemptCount: number, madeCount: number, missedCount: number, makePercentage: number, comparisonAttemptCount: number, comparisonMadeCount: number, comparisonMakePercentage?: number | null, patternShotCount: number, score: number, rankReason: string } };
export type PlayerSummaryFieldsFragment = { __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } };
export type PlayerClusterShotFieldsFragment = { __typename?: 'PlayerClusterShotGQL', shotId: number, bboxX1: number, bboxY1: number, bboxX2: number, bboxY2: number, confidence: number, isConfirmed: boolean, cropUrl?: string | null, fullFrameUrl?: string | null };
@@ -3343,7 +3234,7 @@ export type GetUsageStatsQueryVariables = Exact<{
}>;
export type GetUsageStatsQuery = { __typename?: 'Query', getUsageStats: { __typename?: 'UsageStatsGQL', totalUsers: number, totalVideos: number, totalShots: number, totalRuns: number, funnel: { __typename?: 'FunnelStatsGQL', freemiumEpoch: any, eraSignups: number, eraPaying: number, activationCohort: number, activationActivated: number, payingUsers: number, newPaid7d: number, newPaid30d: number, retentionPrevActive: number, retentionReturned: number }, cohorts: Array<{ __typename?: 'CohortStatsGQL', weekStart: any, signups: number, activated7d: number, paid7d: number, activatedNotPaid7d: number }>, windows: Array<{ __typename?: 'UsageStatsWindowGQL', label: string, newUsers: number, activeUsers: number, sessions: number, shots: number }>, daily: Array<{ __typename?: 'UsageStatsDailyGQL', day: any, newUsers: number, activeUsers: number, sessions: number, shots: number }>, processingLast24h: Array<{ __typename?: 'ProcessingStatusCountGQL', status: string, count: number }> } };
export type GetUsageStatsQuery = { __typename?: 'Query', getUsageStats: { __typename?: 'UsageStatsGQL', totalUsers: number, totalVideos: number, totalShots: number, totalRuns: number, funnel: { __typename?: 'FunnelStatsGQL', freemiumEpoch: any, eraSignups: number, eraPaying: number, activationCohort: number, activationActivated: number, payingUsers: number, newPaid7d: number, newPaid30d: number, retentionPrevActive: number, retentionReturned: number }, windows: Array<{ __typename?: 'UsageStatsWindowGQL', label: string, newUsers: number, activeUsers: number, sessions: number, shots: number }>, daily: Array<{ __typename?: 'UsageStatsDailyGQL', day: any, newUsers: number, activeUsers: number, sessions: number, shots: number }>, processingLast24h: Array<{ __typename?: 'ProcessingStatusCountGQL', status: string, count: number }> } };
export type GetProfileImageUploadLinkMutationVariables = Exact<{
fileExt?: InputMaybe<Scalars['String']['input']>;
@@ -3512,7 +3403,7 @@ export type GetVideoCardQueryVariables = Exact<{
}>;
export type GetVideoCardQuery = { __typename?: 'Query', getVideo: { __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, uploadCompletionCursor: number, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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 GetVideoCardQuery = { __typename?: 'Query', getVideo: { __typename?: 'VideoGQL', id: number, name?: string | null, screenshotUri?: string | null, totalShots: number, makePercentage: number, averageTimeBetweenShots?: number | null, averageDifficulty?: number | null, startTime?: 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, streamSegmentType: StreamSegmentTypeEnum, isCompleted: boolean, lastSegmentUploadedAt?: any | null, clientUploadStatus?: ClientUploadStatusEnum | null } | null, tags: Array<{ __typename?: 'VideoTag', name: string, tagClasses: Array<{ __typename?: 'VideoTagClass', name: string }> }>, playerSummaries: Array<{ __typename?: 'PlayerSummaryGQL', clusterId: number, userId?: number | null, username?: string | null, profileImageUri?: string | null, representativeFullFrameUrl?: string | null, totalShots: number, totalShotsMade: number, makePercentage: number, score?: number | null, longestRun: number, runLengths: Array<number>, averageDifficulty?: number | null, averageTimeBetweenShots?: number | null, spinTypeBreakdown: { __typename?: 'SpinTypeBreakdownGQL', draw: number, center: number, follow: number } }>, currentProcessing?: { __typename?: 'VideoProcessingGQL', id: number, 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 GetVideosQueryVariables = Exact<{
videoIds: Array<Scalars['Int']['input']> | Scalars['Int']['input'];
@@ -3771,7 +3662,6 @@ export const VideoCardFieldsFragmentDoc = gql`
stream {
id
lastIntendedSegmentBound
uploadCompletionCursor
streamSegmentType
isCompleted
lastSegmentUploadedAt
@@ -3954,34 +3844,6 @@ export const PocketingIntentionFragmentFragmentDoc = gql`
difficulty
}
`;
export const SessionCoachCandidateFieldsFragmentDoc = gql`
fragment SessionCoachCandidateFields on SessionCoachCandidateGQL {
id
rank
family
kind
title
body
action
supportingShotIds
drillId
limitations
evidence {
bucketKey
bucketLabel
attemptCount
madeCount
missedCount
makePercentage
comparisonAttemptCount
comparisonMadeCount
comparisonMakePercentage
patternShotCount
score
rankReason
}
}
`;
export const PlayerClusterShotFieldsFragmentDoc = gql`
fragment PlayerClusterShotFields on PlayerClusterShotGQL {
shotId
@@ -7370,30 +7232,6 @@ export const GetRecordedStreamShotsDocument = gql`
videoId
startFrame
endFrame
serializedShotPaths {
b64EncodedBuffer
}
cueObjectFeatures {
cueObjectDistance
cueObjectAngle
cueBallSpeed
shotDirection
spinType
}
pocketingIntentionFeatures {
make
targetPocketDistance
targetPocketAngle
targetPocketAngleDirection
marginOfErrorInDegrees
intendedPocketType
difficulty
}
pocketingIntentionInfo {
ballId
pocketId
pathMetadataIndex
}
}
}
}
@@ -7550,65 +7388,6 @@ export type GetRunsWithTimestampsQueryHookResult = ReturnType<typeof useGetRunsW
export type GetRunsWithTimestampsLazyQueryHookResult = ReturnType<typeof useGetRunsWithTimestampsLazyQuery>;
export type GetRunsWithTimestampsSuspenseQueryHookResult = ReturnType<typeof useGetRunsWithTimestampsSuspenseQuery>;
export type GetRunsWithTimestampsQueryResult = Apollo.QueryResult<GetRunsWithTimestampsQuery, GetRunsWithTimestampsQueryVariables>;
export const GetSessionCoachDocument = gql`
query GetSessionCoach($videoId: Int!) {
getSessionCoach(videoId: $videoId) {
videoId
processingId
analysisVersion
state
generatedAt
processingStatus
ineligibilityReason
summary
shotCount
madeCount
missedCount
unknownOutcomeCount
analyzedShotCount
makePercentage
primaryCandidate {
...SessionCoachCandidateFields
}
candidates {
...SessionCoachCandidateFields
}
}
}
${SessionCoachCandidateFieldsFragmentDoc}`;
/**
* __useGetSessionCoachQuery__
*
* To run a query within a React component, call `useGetSessionCoachQuery` and pass it any options that fit your needs.
* When your component renders, `useGetSessionCoachQuery` 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 } = useGetSessionCoachQuery({
* variables: {
* videoId: // value for 'videoId'
* },
* });
*/
export function useGetSessionCoachQuery(baseOptions: Apollo.QueryHookOptions<GetSessionCoachQuery, GetSessionCoachQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useQuery<GetSessionCoachQuery, GetSessionCoachQueryVariables>(GetSessionCoachDocument, options);
}
export function useGetSessionCoachLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSessionCoachQuery, GetSessionCoachQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useLazyQuery<GetSessionCoachQuery, GetSessionCoachQueryVariables>(GetSessionCoachDocument, options);
}
export function useGetSessionCoachSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions<GetSessionCoachQuery, GetSessionCoachQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useSuspenseQuery<GetSessionCoachQuery, GetSessionCoachQueryVariables>(GetSessionCoachDocument, options);
}
export type GetSessionCoachQueryHookResult = ReturnType<typeof useGetSessionCoachQuery>;
export type GetSessionCoachLazyQueryHookResult = ReturnType<typeof useGetSessionCoachLazyQuery>;
export type GetSessionCoachSuspenseQueryHookResult = ReturnType<typeof useGetSessionCoachSuspenseQuery>;
export type GetSessionCoachQueryResult = Apollo.QueryResult<GetSessionCoachQuery, GetSessionCoachQueryVariables>;
export const VideoPlayerClustersDocument = gql`
query VideoPlayerClusters($videoId: Int!) {
videoPlayerClusters(videoId: $videoId) {
@@ -8536,13 +8315,6 @@ export const GetUsageStatsDocument = gql`
retentionPrevActive
retentionReturned
}
cohorts {
weekStart
signups
activated7d
paid7d
activatedNotPaid7d
}
totalUsers
totalVideos
totalShots

View File

@@ -41,7 +41,6 @@ fragment VideoCardFields on VideoGQL {
stream {
id
lastIntendedSegmentBound
uploadCompletionCursor
streamSegmentType
isCompleted
lastSegmentUploadedAt

View File

@@ -33,30 +33,6 @@ query GetRecordedStreamShots($videoId: Int!, $limit: Int! = 200) {
videoId
startFrame
endFrame
serializedShotPaths {
b64EncodedBuffer
}
cueObjectFeatures {
cueObjectDistance
cueObjectAngle
cueBallSpeed
shotDirection
spinType
}
pocketingIntentionFeatures {
make
targetPocketDistance
targetPocketAngle
targetPocketAngleDirection
marginOfErrorInDegrees
intendedPocketType
difficulty
}
pocketingIntentionInfo {
ballId
pocketId
pathMetadataIndex
}
}
}
}

View File

@@ -1,51 +0,0 @@
query GetSessionCoach($videoId: Int!) {
getSessionCoach(videoId: $videoId) {
videoId
processingId
analysisVersion
state
generatedAt
processingStatus
ineligibilityReason
summary
shotCount
madeCount
missedCount
unknownOutcomeCount
analyzedShotCount
makePercentage
primaryCandidate {
...SessionCoachCandidateFields
}
candidates {
...SessionCoachCandidateFields
}
}
}
fragment SessionCoachCandidateFields on SessionCoachCandidateGQL {
id
rank
family
kind
title
body
action
supportingShotIds
drillId
limitations
evidence {
bucketKey
bucketLabel
attemptCount
madeCount
missedCount
makePercentage
comparisonAttemptCount
comparisonMadeCount
comparisonMakePercentage
patternShotCount
score
rankReason
}
}

View File

@@ -12,13 +12,6 @@ query getUsageStats($days: Int! = 30) {
retentionPrevActive
retentionReturned
}
cohorts {
weekStart
signups
activated7d
paid7d
activatedNotPaid7d
}
totalUsers
totalVideos
totalShots

View File

@@ -65,7 +65,6 @@ type Query {
limit: Int! = 500
countRespectsLimit: Boolean! = false
): GetRunsResult!
getSessionCoach(videoId: Int!): SessionCoachGQL!
videoPlayerClusters(videoId: Int!): [PlayerClusterGQL!]!
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
getTableState(
@@ -999,81 +998,6 @@ input DatetimeOrdering {
startingAt: DateTime = null
}
type SessionCoachGQL {
videoId: Int!
processingId: Int
analysisVersion: String!
state: SessionCoachStateEnum!
generatedAt: DateTime!
processingStatus: String
ineligibilityReason: SessionCoachIneligibilityReasonEnum
summary: String
shotCount: Int!
madeCount: Int!
missedCount: Int!
unknownOutcomeCount: Int!
analyzedShotCount: Int!
makePercentage: Float
primaryCandidate: SessionCoachCandidateGQL
candidates: [SessionCoachCandidateGQL!]!
}
enum SessionCoachStateEnum {
PROCESSING
READY
NO_TRACKED_SHOTS
INELIGIBLE
FAILED
}
enum SessionCoachIneligibilityReasonEnum {
MULTIPLAYER
}
type SessionCoachCandidateGQL {
id: ID!
rank: Int!
family: SessionCoachCandidateFamilyEnum!
kind: SessionCoachCandidateKindEnum!
title: String!
body: String!
action: String!
supportingShotIds: [Int!]!
drillId: String
evidence: SessionCoachEvidenceGQL!
limitations: [String!]!
}
enum SessionCoachCandidateFamilyEnum {
AIMING
CUT_ANGLE
SPIN
OBJECT_TO_POCKET_DISTANCE
CUE_TO_OBJECT_DISTANCE
BACK_CUT
}
enum SessionCoachCandidateKindEnum {
DIRECTIONAL_MISS
OUTCOME_PATTERN
USAGE_PATTERN
}
type SessionCoachEvidenceGQL {
bucketKey: String!
bucketLabel: String!
attemptCount: Int!
madeCount: Int!
missedCount: Int!
makePercentage: Float!
comparisonAttemptCount: Int!
comparisonMadeCount: Int!
comparisonMakePercentage: Float
patternShotCount: Int!
score: Float!
rankReason: String!
}
type PlayerClusterGQL {
videoId: Int!
clusterId: Int!
@@ -1300,7 +1224,6 @@ type UsageStatsGQL {
totalVideos: Int!
totalShots: Int!
totalRuns: Int!
cohorts: [CohortStatsGQL!]!
windows: [UsageStatsWindowGQL!]!
daily: [UsageStatsDailyGQL!]!
processingLast24h: [ProcessingStatusCountGQL!]!
@@ -1319,14 +1242,6 @@ type FunnelStatsGQL {
retentionReturned: Int!
}
type CohortStatsGQL {
weekStart: Date!
signups: Int!
activated7d: Int!
paid7d: Int!
activatedNotPaid7d: Int!
}
type UsageStatsWindowGQL {
label: String!
newUsers: Int!
@@ -1942,7 +1857,6 @@ input VideoMetadataInput {
clientUploadStatus: ClientUploadStatusEnum = null
resolution: VideoResolution = null
framesPerSecond: Float = null
homographyBackend: HomographyBackendGQL = null
}
input VideoResolution {
@@ -1950,11 +1864,6 @@ input VideoResolution {
height: Int!
}
enum HomographyBackendGQL {
CLASSIC
TABLENET
}
type GetUploadLinkReturn {
value: UploadLinkGetUploadLinkErrors!
stream: UploadStreamGQL