Compare commits

..

1 Commits

Author SHA1 Message Date
669958178d scope upload quotas
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2026-04-14 15:40:15 -07:00
3 changed files with 109 additions and 4 deletions

View File

@@ -2462,6 +2462,7 @@ export type MutationCreateSubscriptionArgs = {
export type MutationCreateUploadStreamArgs = {
expectedDurationSeconds?: InputMaybe<Scalars["Float"]["input"]>;
uploadKind?: InputMaybe<UploadKindEnum>;
videoMetadata: VideoMetadataInput;
};
@@ -2959,9 +2960,11 @@ export type QuotaStatusGql = {
durationLimitSeconds?: Maybe<Scalars["Int"]["output"]>;
durationRemainingSeconds?: Maybe<Scalars["Float"]["output"]>;
durationUsedSeconds: Scalars["Float"]["output"];
importUploadPermission: UploadPermissionGql;
maxVideoDurationSeconds?: Maybe<Scalars["Int"]["output"]>;
periodEnd: Scalars["DateTime"]["output"];
periodStart: Scalars["DateTime"]["output"];
recordingPermission: UploadPermissionGql;
tierName: Scalars["String"]["output"];
};
@@ -3347,6 +3350,11 @@ export type UpdateShotAnnotationReturn = {
shot?: Maybe<ShotGql>;
};
export enum UploadKindEnum {
Import = "IMPORT",
Recording = "RECORDING",
}
export type UploadLink = {
__typename?: "UploadLink";
headers: Array<Maybe<Header>>;
@@ -3359,6 +3367,12 @@ export type UploadLinkGetProfileUploadLinkErrors =
export type UploadLinkGetUploadLinkErrors = GetUploadLinkErrors | UploadLink;
export type UploadPermissionGql = {
__typename?: "UploadPermissionGQL";
allowed: Scalars["Boolean"]["output"];
reason?: Maybe<Scalars["String"]["output"]>;
};
export type UploadSegmentGql = {
__typename?: "UploadSegmentGQL";
durationInSeconds?: Maybe<Scalars["Float"]["output"]>;
@@ -4097,11 +4111,15 @@ export type GetFeedQuery = {
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;
@@ -4116,13 +4134,26 @@ export type GetFeedQuery = {
__typename?: "UploadStreamGQL";
id: string;
lastIntendedSegmentBound?: number | null;
isCompleted: boolean;
streamSegmentType: StreamSegmentTypeEnum;
} | null;
tags: Array<{ __typename?: "VideoTag"; name: string }>;
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";
@@ -4182,11 +4213,15 @@ export type VideoCardFieldsFragment = {
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;
@@ -4201,13 +4236,23 @@ export type VideoCardFieldsFragment = {
__typename?: "UploadStreamGQL";
id: string;
lastIntendedSegmentBound?: number | null;
isCompleted: boolean;
streamSegmentType: StreamSegmentTypeEnum;
} | null;
tags: Array<{ __typename?: "VideoTag"; name: string }>;
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";
@@ -4281,11 +4326,15 @@ export type GetVideoFeedQuery = {
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;
@@ -4300,13 +4349,26 @@ export type GetVideoFeedQuery = {
__typename?: "UploadStreamGQL";
id: string;
lastIntendedSegmentBound?: number | null;
isCompleted: boolean;
streamSegmentType: StreamSegmentTypeEnum;
} | null;
tags: Array<{ __typename?: "VideoTag"; name: string }>;
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";
@@ -6471,26 +6533,41 @@ export const VideoCardFieldsFragmentDoc = gql`
}
name
screenshotUri
totalShotsMade
totalShots
makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt
updatedAt
startTime
endTime
private
elapsedTime
screenshotUri
stream {
id
lastIntendedSegmentBound
isCompleted
streamSegmentType
}
tableSize
pocketSize
tags {
tagClasses {
name
}
name
}
currentProcessing {
id
errors {
message
}
status
statuses {
status
}
}
reactions {
videoId

View File

@@ -31,26 +31,41 @@ fragment VideoCardFields on VideoGQL {
}
name
screenshotUri
totalShotsMade
totalShots
makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt
updatedAt
startTime
endTime
private
elapsedTime
screenshotUri
stream {
id
lastIntendedSegmentBound
isCompleted
streamSegmentType
}
tableSize
pocketSize
tags {
tagClasses {
name
}
name
}
currentProcessing {
id
errors {
message
}
status
statuses {
status
}
}
reactions {
videoId

View File

@@ -28,7 +28,7 @@ type Query {
getLongestRunsLeaderboard(
interval: TimeInterval = null
when: DateTime = null
limit: Int! = 50
limit: Int! = 100
requiredTags: [String!] = null
): RunLeaderboardGQL!
getMakesLeaderboard(
@@ -998,10 +998,17 @@ type QuotaStatusGQL {
durationUsedSeconds: Float!
durationLimitSeconds: Int
maxVideoDurationSeconds: Int
recordingPermission: UploadPermissionGQL!
importUploadPermission: UploadPermissionGQL!
durationRemainingSeconds: Float
canUpload: Boolean!
}
type UploadPermissionGQL {
allowed: Boolean!
reason: String
}
type UserPlayTimeGQL {
totalSeconds: Float!
}
@@ -1134,6 +1141,7 @@ type Mutation {
findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL
createUploadStream(
videoMetadata: VideoMetadataInput!
uploadKind: UploadKindEnum = null
expectedDurationSeconds: Float = null
): CreateUploadStreamReturn!
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
@@ -1302,6 +1310,11 @@ input VideoResolution {
height: Int!
}
enum UploadKindEnum {
RECORDING
IMPORT
}
type GetUploadLinkReturn {
value: UploadLinkGetUploadLinkErrors!
stream: UploadStreamGQL