Compare commits
	
		
			233 Commits
		
	
	
		
			9db95c4e6c
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5c62d45068 | |||
| a7649351b3 | |||
| 051555f9fc | |||
| d7bbe882b7 | |||
| e783050a02 | |||
| d8ee83c627 | |||
| d32cd87a60 | |||
| b956cfe0f9 | |||
| 3f520a0331 | |||
| a563834269 | |||
| 80a5bded47 | |||
| 16d8510465 | |||
| 9b21ce1e3a | |||
| dde4cfd99b | |||
| 845fb361b9 | |||
| 9f5fcc066e | |||
| dfb0361e12 | |||
| 77477d63db | |||
| 01fb113e1c | |||
| c660ed54cd | |||
| b5fd2e2183 | |||
| ddee57f4c2 | |||
| a497abd44d | |||
| 49d43b2703 | |||
| 99f8968a36 | |||
| 76a98aa0c3 | |||
| f5177a877c | |||
| 6685849cc2 | |||
| 567cbc549c | |||
| 2b43493a4f | |||
| 358eee2e16 | |||
| a1d3d776aa | |||
| 82af3a3ce9 | |||
| 7b51c317ca | |||
| 04f1bb4d74 | |||
| fbd7c2020b | |||
| c0636a8863 | |||
| 7302d6b8b6 | |||
| 492178455c | |||
| 55a2edb042 | |||
| 31cf492889 | |||
| de7dc675a1 | |||
| f8f00d9c24 | |||
| dc207bce55 | |||
| 2e5b8d2563 | |||
| 46bcd08ae1 | |||
| bd383b1d55 | |||
| 2459cb78f8 | |||
| 8859ad8951 | |||
| bdc3961e46 | |||
| 7c8c932a78 | |||
| ae746ccac0 | |||
| 98266c7775 | |||
|  | 4918720ae3 | ||
| 8463ebf0e7 | |||
| 753179ca58 | |||
| 9ee5c721c1 | |||
| 00cca10cb3 | |||
| ad704cad75 | |||
| e2743abb59 | |||
| e109e89a40 | |||
| 67bad20d24 | |||
| 0160455b9f | |||
| 170ff70b7a | |||
| 8df09b8c93 | |||
| 644ea66e98 | |||
| 0a5097c5c0 | |||
| f4445f7ecb | |||
| b18fedae8e | |||
| 31baa2b096 | |||
| 85cd37f70f | |||
| b53aa172fa | |||
| df2e534745 | |||
|  | ea4980947f | ||
| 65475bca9b | |||
| 280f5a66bd | |||
| 84daf2d136 | |||
| 6558fb60e9 | |||
| 6462a6a464 | |||
| 41a5bb7609 | |||
| b8aaabea8b | |||
| 2745521664 | |||
| 8efa2e067c | |||
| 919fe5ba24 | |||
| 7ff60dc9c5 | |||
| 7e0d8a84ee | |||
| 9f26b5aa0f | |||
| 70303b9363 | |||
| 9ee1422d3e | |||
| 7a9d2545c4 | |||
| c561ea20ab | |||
| 7ce0c058b7 | |||
| c399edd882 | |||
| 32d8cb0d41 | |||
| 9d912ed21e | |||
| 0bcfd32b14 | |||
| 9b27d288da | |||
| b0f94f5ea8 | |||
| de653ba54c | |||
| 2657628a54 | |||
| cd20cfcb40 | |||
| 2657a9baf7 | |||
| 9bb4b7c513 | |||
| a5050ed08d | |||
| b9e26243e9 | |||
| 021cd35278 | |||
| 8dda81236a | |||
| c7ff615fe4 | |||
| 365cbb5f70 | |||
| 194d0dcd22 | |||
| 8fcaa1397a | |||
| e8e318b919 | |||
| ff0a11ea0d | |||
| 84192d1387 | |||
| f1ae2b62d6 | |||
| 4f78cd94ab | |||
| bfdda67d1a | |||
| 881350619a | |||
| 8bc67f75b0 | |||
| df8495df77 | |||
| 0c45855f7d | |||
| a2e659dfcb | |||
| 2a36a392ce | |||
| 145c2f9558 | |||
| 3f2e5d331f | |||
| bf8e851139 | |||
| eb15f4f3b8 | |||
| 82ff8546d4 | |||
| 284334606d | |||
| a883bc3e2f | |||
| b50ea5b573 | |||
| de17659dbb | |||
| 33886b4e9e | |||
| 9d0ba908dc | |||
| 7b4880a990 | |||
| 8ed177b0f3 | |||
| 976cc66ccb | |||
| af461fff00 | |||
| 7a39b4ca60 | |||
| 9befbe3833 | |||
| 68a4c064f3 | |||
| 54fd741670 | |||
| 2f9e630de4 | |||
| 5efd8ef8e5 | |||
| 6ad3d449d8 | |||
| 8fe20d1c41 | |||
| e151f39582 | |||
| f136ddb9ca | |||
| 5d05614e07 | |||
| c4c3ccde00 | |||
| e137ce8ad1 | |||
| bd5bebb747 | |||
| 034facebf3 | |||
| ac1fceb648 | |||
| fd87ade629 | |||
| 1fab007654 | |||
| cd2cdb475a | |||
| c3c74379fb | |||
| da21627f15 | |||
| 8fabfd67cf | |||
| e6960038f2 | |||
| b6ec7ed39d | |||
| 545ba638c2 | |||
| 94e4e55558 | |||
| 2536f5db6b | |||
| ffd0814a98 | |||
| 55bfe42484 | |||
| dabb0d1d9c | |||
| a538c1d81c | |||
| 872bce3adb | |||
| 457d375bed | |||
| 12798e368c | |||
| a3d6e6e19e | |||
| f7a6e393e7 | |||
| ee11e506ed | |||
| 90ec47848b | |||
| 21acb5219d | |||
| 087d511efc | |||
| 7cc0dca821 | |||
| f826121aa3 | |||
| 2aadb8b49b | |||
| 5468b7ccda | |||
| 08dfafe1a3 | |||
| 36b6804719 | |||
| 0120c15064 | |||
| 9cc99d956a | |||
| 985fa8b8e5 | |||
| c4868e7ebe | |||
| 58e1c18034 | |||
| 592dea0ca2 | |||
| 0e00ae9297 | |||
| e16812f242 | |||
| 3e9b7a0d16 | |||
| 309deb9473 | |||
| d5ba9c2ba5 | |||
| 73771a263a | |||
| 655e59c43c | |||
| 056120a68a | |||
| bd7ffa7fdb | |||
| ec58923c65 | |||
| 63869cd7ca | |||
| 08ae9611cf | |||
| 4e610b7df2 | |||
| 2d6d3964ad | |||
| 73a58de36e | |||
| dc6f246489 | |||
| c0a3aa97dc | |||
| f4e43b24f2 | |||
| 51ab8320d7 | |||
| f9a00ad3eb | |||
| 998b2ffc8c | |||
| c7642e6204 | |||
| b2ce1c2f96 | |||
| d0cf071934 | |||
| 6b410b3d78 | |||
| 607504261c | |||
| 0421be855d | |||
| 014aab473b | |||
| 353872401e | |||
| 433dfdaf74 | |||
| a2d9e688e9 | |||
| b3259dac1f | |||
| 0982b9e60c | |||
| 1710ae451c | |||
| de9e7dea6a | |||
| cfcf1dbcd2 | |||
| 05e3182e8b | |||
| baf139aab5 | |||
| b3b454ef83 | |||
| f6e4a1bc0b | |||
| 9d8155527d | |||
| 8690e81029 | |||
| 4ef13a482a | 
| @@ -12,7 +12,7 @@ | |||||||
|   "author": "Ivan Malison <IvanMalison@gmail.com>", |   "author": "Ivan Malison <IvanMalison@gmail.com>", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@apollo/client": "^3.9.2", |     "@apollo/client": "^3.11.10", | ||||||
|     "@graphql-codegen/cli": "^5.0.0", |     "@graphql-codegen/cli": "^5.0.0", | ||||||
|     "@graphql-codegen/typescript": "^4.0.1", |     "@graphql-codegen/typescript": "^4.0.1", | ||||||
|     "@graphql-codegen/typescript-operations": "^4.0.1", |     "@graphql-codegen/typescript-operations": "^4.0.1", | ||||||
|   | |||||||
| @@ -1,9 +1,16 @@ | |||||||
| # see: https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/ | # see: https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/ | ||||||
| directive @client on FIELD | directive @client on FIELD | ||||||
|  |  | ||||||
|  | type SegmentInfo { | ||||||
|  |   index: Int! | ||||||
|  |   time: Float! | ||||||
|  | } | ||||||
|  |  | ||||||
| extend type ShotGQL { | extend type ShotGQL { | ||||||
|   startTime: Float! |   startTime: Float! | ||||||
|   endTime: Float! |   endTime: Float! | ||||||
|  |   startSegment: SegmentInfo! | ||||||
|  |   endSegment: SegmentInfo! | ||||||
| } | } | ||||||
|  |  | ||||||
| extend type UploadStreamGQL { | extend type UploadStreamGQL { | ||||||
|   | |||||||
							
								
								
									
										4318
									
								
								src/index.tsx
									
									
									
									
									
								
							
							
						
						
									
										4318
									
								
								src/index.tsx
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										19
									
								
								src/operations/comments.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/operations/comments.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | mutation CommentOnVideo( | ||||||
|  |   $videoId: Int! | ||||||
|  |   $message: String! | ||||||
|  |   $parentCommentId: Int | ||||||
|  | ) { | ||||||
|  |   commentOnVideo( | ||||||
|  |     videoId: $videoId | ||||||
|  |     message: $message | ||||||
|  |     parentCommentId: $parentCommentId | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation EditComment($videoId: Int!, $commentId: Int!, $newMessage: String!) { | ||||||
|  |   editComment(videoId: $videoId, commentId: $commentId, newMessage: $newMessage) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation DeleteComment($videoId: Int!, $commentId: Int!) { | ||||||
|  |   deleteComment(videoId: $videoId, commentId: $commentId) | ||||||
|  | } | ||||||
| @@ -5,5 +5,14 @@ query getDeployedConfig { | |||||||
|     environment |     environment | ||||||
|     firebase |     firebase | ||||||
|     minimumAllowedAppVersion |     minimumAllowedAppVersion | ||||||
|  |     subscriptionGatingEnabled | ||||||
|  |     bannerMessages { | ||||||
|  |       color | ||||||
|  |       dismissible | ||||||
|  |       id | ||||||
|  |       kind | ||||||
|  |       message | ||||||
|  |       priority | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								src/operations/content-moderation.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/operations/content-moderation.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | mutation blockContent($videoId: Int!) { | ||||||
|  |   blockContent(videoId: $videoId) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation blockUser($userId: Int!) { | ||||||
|  |   blockUser(userId: $userId) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation reportContent( | ||||||
|  |   $videoId: Int! | ||||||
|  |   $reason: ReportReasonEnum! | ||||||
|  |   $customReason: String = null | ||||||
|  | ) { | ||||||
|  |   reportContent(videoId: $videoId, reason: $reason, customReason: $customReason) | ||||||
|  | } | ||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | # DO NOT USE: use getVideoFeed instead | ||||||
| query GetFeed( | query GetFeed( | ||||||
|   $limit: Int! = 5 |   $limit: Int! = 5 | ||||||
|   $after: String = null |   $after: String = null | ||||||
| @@ -5,24 +6,52 @@ query GetFeed( | |||||||
| ) { | ) { | ||||||
|   getUserVideos(limit: $limit, after: $after, filters: $filters) { |   getUserVideos(limit: $limit, after: $after, filters: $filters) { | ||||||
|     videos { |     videos { | ||||||
|  |       ...VideoCardFields | ||||||
|  |     } | ||||||
|  |     pageInfo { | ||||||
|  |       hasNextPage | ||||||
|  |       endCursor | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fragment UserSocialsFields on UserGQL { | ||||||
|  |   id | ||||||
|  |   username | ||||||
|  |   profileImageUri | ||||||
|  |   followers { | ||||||
|  |     id | ||||||
|  |     username | ||||||
|  |     profileImageUri | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fragment VideoCardFields on VideoGQL { | ||||||
|   id |   id | ||||||
|   owner { |   owner { | ||||||
|  |     id | ||||||
|     username |     username | ||||||
|  |     profileImageUri | ||||||
|   } |   } | ||||||
|   name |   name | ||||||
|   screenshotUri |   screenshotUri | ||||||
|   totalShotsMade |   totalShotsMade | ||||||
|   totalShots |   totalShots | ||||||
|   makePercentage |   makePercentage | ||||||
|  |   averageTimeBetweenShots | ||||||
|  |   averageDifficulty | ||||||
|   createdAt |   createdAt | ||||||
|   updatedAt |   updatedAt | ||||||
|   startTime |   startTime | ||||||
|   endTime |   endTime | ||||||
|  |   private | ||||||
|   elapsedTime |   elapsedTime | ||||||
|   screenshotUri |   screenshotUri | ||||||
|   stream { |   stream { | ||||||
|     id |     id | ||||||
|  |     lastIntendedSegmentBound | ||||||
|     isCompleted |     isCompleted | ||||||
|  |     streamSegmentType | ||||||
|   } |   } | ||||||
|   tableSize |   tableSize | ||||||
|   tags { |   tags { | ||||||
| @@ -31,6 +60,57 @@ query GetFeed( | |||||||
|     } |     } | ||||||
|     name |     name | ||||||
|   } |   } | ||||||
|  |   currentProcessing { | ||||||
|  |     id | ||||||
|  |     errors { | ||||||
|  |       message | ||||||
|  |     } | ||||||
|  |     status | ||||||
|  |     statuses { | ||||||
|  |       status | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   reactions { | ||||||
|  |     videoId | ||||||
|  |     user { | ||||||
|  |       ...UserSocialsFields | ||||||
|  |     } | ||||||
|  |     reaction | ||||||
|  |   } | ||||||
|  |   comments { | ||||||
|  |     id | ||||||
|  |     message | ||||||
|  |     user { | ||||||
|  |       ...UserSocialsFields | ||||||
|  |     } | ||||||
|  |     replies { | ||||||
|  |       id | ||||||
|  |       message | ||||||
|  |       user { | ||||||
|  |         ...UserSocialsFields | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetVideoFeed( | ||||||
|  |   $limit: Int! = 5 | ||||||
|  |   $after: String = null | ||||||
|  |   $filters: VideoFilterInput = null | ||||||
|  |   $includeCallersVideos: Boolean = null | ||||||
|  |   $includePrivate: IncludePrivateEnum = MINE | ||||||
|  |   $feedInput: VideoFeedInputGQL = null | ||||||
|  | ) { | ||||||
|  |   getFeedVideos( | ||||||
|  |     limit: $limit | ||||||
|  |     after: $after | ||||||
|  |     filters: $filters | ||||||
|  |     includeCallersVideos: $includeCallersVideos | ||||||
|  |     includePrivate: $includePrivate | ||||||
|  |     feedInput: $feedInput | ||||||
|  |   ) { | ||||||
|  |     videos { | ||||||
|  |       ...VideoCardFields | ||||||
|     } |     } | ||||||
|     pageInfo { |     pageInfo { | ||||||
|       hasNextPage |       hasNextPage | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								src/operations/leaderboards.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/operations/leaderboards.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | query GetMakesLeaderboard($interval: TimeInterval, $when: DateTime) { | ||||||
|  |   getMakesLeaderboard(interval: $interval, when: $when) { | ||||||
|  |     entries { | ||||||
|  |       user { | ||||||
|  |         id | ||||||
|  |         username | ||||||
|  |         profileImageUri | ||||||
|  |       } | ||||||
|  |       value | ||||||
|  |       proportionMade | ||||||
|  |       total | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetRunsLeaderboard($interval: TimeInterval, $when: DateTime) { | ||||||
|  |   getLongestRunsLeaderboard(interval: $interval, when: $when) { | ||||||
|  |     entries { | ||||||
|  |       id | ||||||
|  |       runLength | ||||||
|  |       video { | ||||||
|  |         name | ||||||
|  |         createdAt | ||||||
|  |       } | ||||||
|  |       user { | ||||||
|  |         id | ||||||
|  |         username | ||||||
|  |         profileImageUri | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										75
									
								
								src/operations/medals.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/operations/medals.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | fragment MedalFields on MedalGQL { | ||||||
|  |   count | ||||||
|  |   nickname | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query getMedals($scope: MedalScope!, $userId: Int) { | ||||||
|  |   getMedals(scope: $scope, userId: $userId) { | ||||||
|  |     distanceOver78 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     distanceOver90 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength3 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength5 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength8 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength10 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength15 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength20 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength25 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength30 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength40 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     runLength50 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     totalMakes100 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     totalMakes500 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     totalMakes1000 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     totalMakes5000 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     totalMakes10000 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     dailyMakes50 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     dailyMakes100 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     dailyMakes150 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     dailyMakes200 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |     dailyMakes250 { | ||||||
|  |       ...MedalFields | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										65
									
								
								src/operations/payments.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/operations/payments.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | mutation EnsureStripeCustomerExists { | ||||||
|  |   ensureStripeCustomerExists { | ||||||
|  |     id | ||||||
|  |     firebaseUid | ||||||
|  |     username | ||||||
|  |     stripeCustomerId | ||||||
|  |     profileImageUri | ||||||
|  |     isAdmin | ||||||
|  |     fargoRating | ||||||
|  |     videosPrivateByDefault | ||||||
|  |     createdAt | ||||||
|  |     updatedAt | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation CreateSubscription($priceId: String!) { | ||||||
|  |   createSubscription(priceId: $priceId) { | ||||||
|  |     checkoutUrl | ||||||
|  |     sessionId | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetAvailableSubscriptionOptions { | ||||||
|  |   getAvailableSubscriptionOptions { | ||||||
|  |     products { | ||||||
|  |       id | ||||||
|  |       name | ||||||
|  |       description | ||||||
|  |       active | ||||||
|  |       prices { | ||||||
|  |         id | ||||||
|  |         currency | ||||||
|  |         unitAmount | ||||||
|  |         recurringInterval | ||||||
|  |         recurringIntervalCount | ||||||
|  |         type | ||||||
|  |         active | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetSubscriptionStatus { | ||||||
|  |   getUserSubscriptionStatus { | ||||||
|  |     hasActiveSubscription | ||||||
|  |     subscriptionStatus | ||||||
|  |     currentPeriodStart | ||||||
|  |     currentPeriodEnd | ||||||
|  |     validUntil | ||||||
|  |     stripePriceId | ||||||
|  |     stripeSubscriptionId | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation CancelSubscription { | ||||||
|  |   cancelSubscription { | ||||||
|  |     hasActiveSubscription | ||||||
|  |     subscriptionStatus | ||||||
|  |     currentPeriodStart | ||||||
|  |     currentPeriodEnd | ||||||
|  |     validUntil | ||||||
|  |     stripePriceId | ||||||
|  |     stripeSubscriptionId | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								src/operations/reactions.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/operations/reactions.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) { | ||||||
|  |   reactToVideo(videoId: $videoId, reaction: $reaction) | ||||||
|  | } | ||||||
							
								
								
									
										67
									
								
								src/operations/runs.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/operations/runs.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | |||||||
|  | query GetRunsForHighlights( | ||||||
|  |   $filterInput: RunFilterInput! | ||||||
|  |   $runIds: [Int!] = null | ||||||
|  |   $runsOrdering: GetRunsOrdering | ||||||
|  |   $limit: Int! = 500 | ||||||
|  |   $countRespectsLimit: Boolean! = false | ||||||
|  | ) { | ||||||
|  |   getRuns( | ||||||
|  |     filterInput: $filterInput | ||||||
|  |     runIds: $runIds | ||||||
|  |     runsOrdering: $runsOrdering | ||||||
|  |     limit: $limit | ||||||
|  |     countRespectsLimit: $countRespectsLimit | ||||||
|  |   ) { | ||||||
|  |     count | ||||||
|  |     runs { | ||||||
|  |       id | ||||||
|  |       runLength | ||||||
|  |       userId | ||||||
|  |       videoId | ||||||
|  |       shots { | ||||||
|  |         videoId | ||||||
|  |         id | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     runIds | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fragment PocketingIntentionFragment on PocketingIntentionFeaturesGQL { | ||||||
|  |   make | ||||||
|  |   targetPocketDistance | ||||||
|  |   targetPocketAngle | ||||||
|  |   targetPocketAngleDirection | ||||||
|  |   marginOfErrorInDegrees | ||||||
|  |   intendedPocketType | ||||||
|  |   difficulty | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetRunsWithTimestamps( | ||||||
|  |   $filterInput: RunFilterInput! | ||||||
|  |   $runIds: [Int!] = null | ||||||
|  |   $runsOrdering: GetRunsOrdering | ||||||
|  | ) { | ||||||
|  |   getRuns( | ||||||
|  |     filterInput: $filterInput | ||||||
|  |     runIds: $runIds | ||||||
|  |     runsOrdering: $runsOrdering | ||||||
|  |   ) { | ||||||
|  |     count | ||||||
|  |     runs { | ||||||
|  |       id | ||||||
|  |       runLength | ||||||
|  |       userId | ||||||
|  |       videoId | ||||||
|  |       shots { | ||||||
|  |         videoId | ||||||
|  |         id | ||||||
|  |         createdAt | ||||||
|  |         pocketingIntentionFeatures { | ||||||
|  |           ...PocketingIntentionFragment | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     runIds | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -40,6 +40,7 @@ mutation UpdateShotAnnotations( | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | ## Should be deprecated | ||||||
| query GetShotsWithVideoGql( | query GetShotsWithVideoGql( | ||||||
|   $filterInput: FilterInput! |   $filterInput: FilterInput! | ||||||
|   $shotsOrdering: GetShotsOrdering |   $shotsOrdering: GetShotsOrdering | ||||||
| @@ -61,18 +62,40 @@ query GetShotsWithVideoGql( | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | query GetShotsWithJustIds( | ||||||
|  |   $filterInput: FilterInput! | ||||||
|  |   $shotsOrdering: GetShotsOrdering | ||||||
|  |   $limit: Int | ||||||
|  |   $countRespectsLimit: Boolean | ||||||
|  | ) { | ||||||
|  |   getOrderedShots( | ||||||
|  |     filterInput: $filterInput | ||||||
|  |     shotsOrdering: $shotsOrdering | ||||||
|  |     limit: $limit | ||||||
|  |     countRespectsLimit: $countRespectsLimit | ||||||
|  |   ) { | ||||||
|  |     count | ||||||
|  |     shots { | ||||||
|  |       id | ||||||
|  |       videoId | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| ## Reserved for playlists (which are created from a filter) | ## Reserved for playlists (which are created from a filter) | ||||||
| query GetShotsWithMetadataFilterResult( | query GetShotsWithMetadataFilterResult( | ||||||
|   $filterInput: FilterInput! |   $filterInput: FilterInput! | ||||||
|   $shotsOrdering: GetShotsOrdering |   $shotsOrdering: GetShotsOrdering | ||||||
|   $limit: Int |   $limit: Int | ||||||
|   $ids: [Int!] |   $ids: [Int!] | ||||||
|  |   $countRespectsLimit: Boolean | ||||||
| ) { | ) { | ||||||
|   getOrderedShots( |   getOrderedShots( | ||||||
|     filterInput: $filterInput |     filterInput: $filterInput | ||||||
|     shotsOrdering: $shotsOrdering |     shotsOrdering: $shotsOrdering | ||||||
|     limit: $limit |     limit: $limit | ||||||
|     ids: $ids |     ids: $ids | ||||||
|  |     countRespectsLimit: $countRespectsLimit | ||||||
|   ) { |   ) { | ||||||
|     count |     count | ||||||
|     shots { |     shots { | ||||||
| @@ -116,6 +139,14 @@ fragment ShotWithAllFeatures on ShotGQL { | |||||||
|   endFrame |   endFrame | ||||||
|   startTime @client |   startTime @client | ||||||
|   endTime @client |   endTime @client | ||||||
|  |   startSegment @client { | ||||||
|  |     index | ||||||
|  |     time | ||||||
|  |   } | ||||||
|  |   endSegment @client { | ||||||
|  |     index | ||||||
|  |     time | ||||||
|  |   } | ||||||
|   user { |   user { | ||||||
|     id |     id | ||||||
|   } |   } | ||||||
| @@ -136,6 +167,7 @@ fragment ShotWithAllFeatures on ShotGQL { | |||||||
|     targetPocketAngleDirection |     targetPocketAngleDirection | ||||||
|     marginOfErrorInDegrees |     marginOfErrorInDegrees | ||||||
|     intendedPocketType |     intendedPocketType | ||||||
|  |     difficulty | ||||||
|   } |   } | ||||||
|   pocketingIntentionInfo { |   pocketingIntentionInfo { | ||||||
|     ballId |     ballId | ||||||
| @@ -153,4 +185,23 @@ fragment ShotWithAllFeatures on ShotGQL { | |||||||
|     } |     } | ||||||
|     notes |     notes | ||||||
|   } |   } | ||||||
|  |   video { | ||||||
|  |     id | ||||||
|  |     stream { | ||||||
|  |       id | ||||||
|  |       streamSegmentType | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation EditShot($shotId: Int!, $fieldsToEdit: EditableShotFieldInputGQL!) { | ||||||
|  |   editShot(shotId: $shotId, fieldsToEdit: $fieldsToEdit) { | ||||||
|  |     error { | ||||||
|  |       shotId | ||||||
|  |       msg | ||||||
|  |     } | ||||||
|  |     shot { | ||||||
|  |       ...ShotWithAllFeatures | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								src/operations/tags.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/operations/tags.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | mutation RetireTags($tagIds: [Int!]!) { | ||||||
|  |   retireTags(tagIds: $tagIds) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation DeleteTags($videoId: Int!, $tagsToDelete: [VideoTagInput!]!) { | ||||||
|  |   deleteTags(videoId: $videoId, tagsToDelete: $tagsToDelete) | ||||||
|  | } | ||||||
| @@ -21,31 +21,24 @@ mutation getProfileImageUploadLink($fileExt: String = ".png") { | |||||||
|  |  | ||||||
| mutation editProfileImageUri($profileImageUri: String!) { | mutation editProfileImageUri($profileImageUri: String!) { | ||||||
|   editProfileImageUri(profileImageUri: $profileImageUri) { |   editProfileImageUri(profileImageUri: $profileImageUri) { | ||||||
|     id |     ...UserFragment | ||||||
|     firebaseUid |  | ||||||
|     username |  | ||||||
|     profileImageUri |  | ||||||
|     createdAt |  | ||||||
|     updatedAt |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| query getLoggedInUser { | query getLoggedInUser { | ||||||
|   getLoggedInUser { |   getLoggedInUser { | ||||||
|     id |     ...UserFragment | ||||||
|     firebaseUid |  | ||||||
|     username |  | ||||||
|     isAdmin |  | ||||||
|     profileImageUri |  | ||||||
|     fargoRating |  | ||||||
|     activeVideoId |  | ||||||
|     createdAt |  | ||||||
|     updatedAt |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| query GetUserPlayTime($userId: Int!) { | query GetUser($userId: Int!) { | ||||||
|   getPlayTime(userId: $userId) { |   getUser(userId: $userId) { | ||||||
|  |     ...UserFragment | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetUserPlayTime($userId: Int!, $filters: VideoFilterInput) { | ||||||
|  |   getPlayTime(userId: $userId, filters: $filters) { | ||||||
|     totalSeconds |     totalSeconds | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -73,6 +66,7 @@ query getUserRelationshipsMatching( | |||||||
|     relationships { |     relationships { | ||||||
|       toUser { |       toUser { | ||||||
|         username |         username | ||||||
|  |         profileImageUri | ||||||
|         id |         id | ||||||
|       } |       } | ||||||
|       toUserFollows |       toUserFollows | ||||||
| @@ -85,17 +79,24 @@ query GetUserTags { | |||||||
|   getUserTags { |   getUserTags { | ||||||
|     id |     id | ||||||
|     name |     name | ||||||
|  |     tagClasses { | ||||||
|  |       id | ||||||
|  |       name | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| mutation followUser($followedUserId: Int!) { | mutation followUser($followedUserId: Int!) { | ||||||
|   followUser(followedUserId: $followedUserId) { |   followUser(followedUserId: $followedUserId) { | ||||||
|     username |     username | ||||||
|  |     id | ||||||
|     following { |     following { | ||||||
|       id |       id | ||||||
|  |       username | ||||||
|     } |     } | ||||||
|     followers { |     followers { | ||||||
|       id |       id | ||||||
|  |       username | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -103,11 +104,14 @@ mutation followUser($followedUserId: Int!) { | |||||||
| mutation unfollowUser($followedUserId: Int!) { | mutation unfollowUser($followedUserId: Int!) { | ||||||
|   unfollowUser(followedUserId: $followedUserId) { |   unfollowUser(followedUserId: $followedUserId) { | ||||||
|     username |     username | ||||||
|  |     id | ||||||
|     following { |     following { | ||||||
|       id |       id | ||||||
|  |       username | ||||||
|     } |     } | ||||||
|     followers { |     followers { | ||||||
|       id |       id | ||||||
|  |       username | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -118,10 +122,58 @@ query getUserFollowingFollowers { | |||||||
|     following { |     following { | ||||||
|       id |       id | ||||||
|       username |       username | ||||||
|  |       profileImageUri | ||||||
|     } |     } | ||||||
|     followers { |     followers { | ||||||
|       id |       id | ||||||
|       username |       username | ||||||
|  |       profileImageUri | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | query doesUsernameExist($candidateUsername: String!) { | ||||||
|  |   doesUsernameExist(candidateUsername: $candidateUsername) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation editUser( | ||||||
|  |   $username: String | ||||||
|  |   $fargoRating: Int | ||||||
|  |   $videosPrivateByDefault: Boolean | ||||||
|  |   $agreesToMarketing: Boolean | ||||||
|  | ) { | ||||||
|  |   editUser( | ||||||
|  |     input: { | ||||||
|  |       username: $username | ||||||
|  |       fargoRating: $fargoRating | ||||||
|  |       videosPrivateByDefault: $videosPrivateByDefault | ||||||
|  |       agreesToMarketing: $agreesToMarketing | ||||||
|  |     } | ||||||
|  |   ) { | ||||||
|  |     id | ||||||
|  |     firebaseUid | ||||||
|  |     username | ||||||
|  |     fargoRating | ||||||
|  |     updatedAt | ||||||
|  |     videosPrivateByDefault | ||||||
|  |     agreesToMarketing | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation deleteUser { | ||||||
|  |   deleteUser | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fragment UserFragment on UserGQL { | ||||||
|  |   id | ||||||
|  |   firebaseUid | ||||||
|  |   username | ||||||
|  |   isAdmin | ||||||
|  |   profileImageUri | ||||||
|  |   fargoRating | ||||||
|  |   activeVideoId | ||||||
|  |   createdAt | ||||||
|  |   updatedAt | ||||||
|  |   videosPrivateByDefault | ||||||
|  |   agreesToMarketing | ||||||
|  | } | ||||||
|   | |||||||
| @@ -5,44 +5,7 @@ query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) { | |||||||
|     makePercentage |     makePercentage | ||||||
|     elapsedTime |     elapsedTime | ||||||
|     currentHomography { |     currentHomography { | ||||||
|       crop { |       ...HomographyInfo | ||||||
|         left |  | ||||||
|         top |  | ||||||
|         width |  | ||||||
|         height |  | ||||||
|       } |  | ||||||
|       pockets { |  | ||||||
|         left |  | ||||||
|         top |  | ||||||
|         width |  | ||||||
|         height |  | ||||||
|       } |  | ||||||
|       sourcePoints { |  | ||||||
|         topLeft { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         topSide { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         topRight { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         bottomLeft { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         bottomSide { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         bottomRight { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|     stream { |     stream { | ||||||
|       id |       id | ||||||
| @@ -55,6 +18,7 @@ query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) { | |||||||
|       initPlaylistUploadStatus |       initPlaylistUploadStatus | ||||||
|     } |     } | ||||||
|     currentProcessing { |     currentProcessing { | ||||||
|  |       id | ||||||
|       errors { |       errors { | ||||||
|         message |         message | ||||||
|         startSegmentIndex |         startSegmentIndex | ||||||
| @@ -72,6 +36,7 @@ query GetVideoUpdatePageDetails($videoId: Int!) { | |||||||
|     makePercentage |     makePercentage | ||||||
|     elapsedTime |     elapsedTime | ||||||
|     tableSize |     tableSize | ||||||
|  |     private | ||||||
|     tags { |     tags { | ||||||
|       tagClasses { |       tagClasses { | ||||||
|         name |         name | ||||||
| @@ -101,6 +66,7 @@ query GetVideoDetails($videoId: Int!) { | |||||||
|     createdAt |     createdAt | ||||||
|     updatedAt |     updatedAt | ||||||
|     tableSize |     tableSize | ||||||
|  |     private | ||||||
|     owner { |     owner { | ||||||
|       id |       id | ||||||
|       firebaseUid |       firebaseUid | ||||||
| @@ -116,6 +82,57 @@ query GetVideoDetails($videoId: Int!) { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | fragment UserSocialsFields on UserGQL { | ||||||
|  |   id | ||||||
|  |   username | ||||||
|  |   profileImageUri | ||||||
|  |   followers { | ||||||
|  |     id | ||||||
|  |     username | ||||||
|  |     profileImageUri | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query GetVideoSocialDetailsById($videoId: Int!) { | ||||||
|  |   getVideo(videoId: $videoId) { | ||||||
|  |     id | ||||||
|  |     name | ||||||
|  |     owner { | ||||||
|  |       id | ||||||
|  |       firebaseUid | ||||||
|  |       username | ||||||
|  |       profileImageUri | ||||||
|  |     } | ||||||
|  |     tags { | ||||||
|  |       tagClasses { | ||||||
|  |         name | ||||||
|  |       } | ||||||
|  |       name | ||||||
|  |     } | ||||||
|  |     reactions { | ||||||
|  |       videoId | ||||||
|  |       user { | ||||||
|  |         ...UserSocialsFields | ||||||
|  |       } | ||||||
|  |       reaction | ||||||
|  |     } | ||||||
|  |     comments { | ||||||
|  |       id | ||||||
|  |       message | ||||||
|  |       user { | ||||||
|  |         ...UserSocialsFields | ||||||
|  |       } | ||||||
|  |       replies { | ||||||
|  |         id | ||||||
|  |         message | ||||||
|  |         user { | ||||||
|  |           ...UserSocialsFields | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| query GetVideos($videoIds: [Int!]!) { | query GetVideos($videoIds: [Int!]!) { | ||||||
|   getVideos(videoIds: $videoIds) { |   getVideos(videoIds: $videoIds) { | ||||||
|     ...VideoStreamMetadata |     ...VideoStreamMetadata | ||||||
| @@ -154,45 +171,7 @@ query GetVideo($videoId: Int!) { | |||||||
|       segmentDurations |       segmentDurations | ||||||
|     } |     } | ||||||
|     homographyHistory { |     homographyHistory { | ||||||
|       frameIndex |       ...HomographyInfo | ||||||
|       crop { |  | ||||||
|         left |  | ||||||
|         top |  | ||||||
|         width |  | ||||||
|         height |  | ||||||
|       } |  | ||||||
|       pockets { |  | ||||||
|         left |  | ||||||
|         top |  | ||||||
|         width |  | ||||||
|         height |  | ||||||
|       } |  | ||||||
|       sourcePoints { |  | ||||||
|         topLeft { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         topSide { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         topRight { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         bottomLeft { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         bottomSide { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|         bottomRight { |  | ||||||
|           x |  | ||||||
|           y |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|     stream { |     stream { | ||||||
|       id |       id | ||||||
| @@ -288,3 +267,69 @@ query GetHeaderInfoByVideoId($videoId: Int!) { | |||||||
|     startTime |     startTime | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | query GetBannerInfoByVideoId($videoId: Int!) { | ||||||
|  |   getVideo(videoId: $videoId) { | ||||||
|  |     id | ||||||
|  |     name | ||||||
|  |     stream { | ||||||
|  |       id | ||||||
|  |       lastIntendedSegmentBound | ||||||
|  |     } | ||||||
|  |     owner { | ||||||
|  |       id | ||||||
|  |     } | ||||||
|  |     currentProcessing { | ||||||
|  |       id | ||||||
|  |       status | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mutation FindPrerecordTableLayout($b64Image: String!, $videoId: Int!) { | ||||||
|  |   findPrerecordTableLayout(b64Image: $b64Image, videoId: $videoId) { | ||||||
|  |     ...HomographyInfo | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fragment HomographyInfo on HomographyInfoGQL { | ||||||
|  |   id | ||||||
|  |   frameIndex | ||||||
|  |   crop { | ||||||
|  |     left | ||||||
|  |     top | ||||||
|  |     width | ||||||
|  |     height | ||||||
|  |   } | ||||||
|  |   pockets { | ||||||
|  |     left | ||||||
|  |     top | ||||||
|  |     width | ||||||
|  |     height | ||||||
|  |   } | ||||||
|  |   sourcePoints { | ||||||
|  |     topLeft { | ||||||
|  |       x | ||||||
|  |       y | ||||||
|  |     } | ||||||
|  |     topSide { | ||||||
|  |       x | ||||||
|  |       y | ||||||
|  |     } | ||||||
|  |     topRight { | ||||||
|  |       x | ||||||
|  |       y | ||||||
|  |     } | ||||||
|  |     bottomLeft { | ||||||
|  |       x | ||||||
|  |       y | ||||||
|  |     } | ||||||
|  |     bottomSide { | ||||||
|  |       x | ||||||
|  |       y | ||||||
|  |     } | ||||||
|  |     bottomRight { | ||||||
|  |       x | ||||||
|  |       y | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -101,13 +101,8 @@ query GetUploadStreams( | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| query GetUploadStreamsWithDetails( |  | ||||||
|   $limit: Int! = 5 | fragment UploadStreamWithDetails on VideoGQL { | ||||||
|   $after: String = null |  | ||||||
|   $filters: VideoFilterInput = null |  | ||||||
| ) { |  | ||||||
|   getUserVideos(limit: $limit, after: $after, filters: $filters) { |  | ||||||
|     videos { |  | ||||||
|   id |   id | ||||||
|   name |   name | ||||||
|   startTime |   startTime | ||||||
| @@ -118,6 +113,16 @@ query GetUploadStreamsWithDetails( | |||||||
|     uploadsCompleted |     uploadsCompleted | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | query GetUploadStreamsWithDetails( | ||||||
|  |   $limit: Int! = 5 | ||||||
|  |   $after: String = null | ||||||
|  |   $filters: VideoFilterInput = null | ||||||
|  | ) { | ||||||
|  |   getUserVideos(limit: $limit, after: $after, filters: $filters) { | ||||||
|  |     videos { | ||||||
|  |       ...UploadStreamWithDetails | ||||||
|  |     } | ||||||
|     pageInfo { |     pageInfo { | ||||||
|       hasNextPage |       hasNextPage | ||||||
|       endCursor |       endCursor | ||||||
|   | |||||||
							
								
								
									
										531
									
								
								src/schema.gql
									
									
									
									
									
								
							
							
						
						
									
										531
									
								
								src/schema.gql
									
									
									
									
									
								
							| @@ -5,57 +5,94 @@ type Query { | |||||||
|   getBucketSet(keyName: String!): BucketSetGQL |   getBucketSet(keyName: String!): BucketSetGQL | ||||||
|   getDeployedConfig: DeployedConfigGQL! |   getDeployedConfig: DeployedConfigGQL! | ||||||
|   waitFor(duration: Float!): Float! |   waitFor(duration: Float!): Float! | ||||||
|  |   getFeedVideos( | ||||||
|  |     limit: Int! = 5 | ||||||
|  |     after: String = null | ||||||
|  |     includePrivate: IncludePrivateEnum! = MINE | ||||||
|  |     includeCallersVideos: Boolean = true | ||||||
|  |     filters: VideoFilterInput = null | ||||||
|  |     feedInput: VideoFeedInputGQL = null | ||||||
|  |   ): VideoHistoryGQL! | ||||||
|   getVideoMakePercentageIntervals( |   getVideoMakePercentageIntervals( | ||||||
|     videoId: ID! |     videoId: ID! | ||||||
|     intervalDuration: Int! = 300 |     intervalDuration: Int! = 300 | ||||||
|   ): [MakePercentageIntervalGQL!]! |   ): [MakePercentageIntervalGQL!]! | ||||||
|  |   getLongestRunsLeaderboard( | ||||||
|  |     interval: TimeInterval = null | ||||||
|  |     when: DateTime = null | ||||||
|  |     limit: Int! = 100 | ||||||
|  |     requiredTags: [String!] = null | ||||||
|  |   ): RunLeaderboardGQL! | ||||||
|  |   getMakesLeaderboard( | ||||||
|  |     interval: TimeInterval = null | ||||||
|  |     when: DateTime = null | ||||||
|  |   ): CountLeaderboardGQL! | ||||||
|  |   getMedals(scope: MedalScope!, userId: Int = null): RequestedMedalsGQL! | ||||||
|  |   getRuns( | ||||||
|  |     filterInput: RunFilterInput! | ||||||
|  |     runIds: [Int!] = null | ||||||
|  |     runsOrdering: GetRunsOrdering = null | ||||||
|  |     limit: Int! = 500 | ||||||
|  |     countRespectsLimit: Boolean! = false | ||||||
|  |   ): GetRunsResult! | ||||||
|  |   getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]! | ||||||
|  |   getTableState( | ||||||
|  |     b64Image: String! | ||||||
|  |     tableSize: Float = 100 | ||||||
|  |     useHomography: HomographyInputGQL = null | ||||||
|  |   ): TableStateGQL! | ||||||
|   getOrderedShots( |   getOrderedShots( | ||||||
|     filterInput: FilterInput! |     filterInput: FilterInput! | ||||||
|     ids: [Int!] = null |     ids: [Int!] = null | ||||||
|     shotsOrdering: GetShotsOrdering = null |     shotsOrdering: GetShotsOrdering = null | ||||||
|     limit: Int! = 500 |     limit: Int! = 500 | ||||||
|  |     countRespectsLimit: Boolean! = false | ||||||
|   ): GetShotsResult! |   ): GetShotsResult! | ||||||
|   getShotsWithMetadata( |   getShotsWithMetadata( | ||||||
|     filterInput: FilterInput! |     filterInput: FilterInput! | ||||||
|     ids: [Int!] = null |     ids: [Int!] = null | ||||||
|     shotsPagination: GetShotsPagination = null |     shotsPagination: GetShotsPagination = null | ||||||
|     limit: Int! = 500 |     limit: Int! = 500 | ||||||
|  |     countRespectsLimit: Boolean! = false | ||||||
|   ): GetShotsResult! |   ): GetShotsResult! | ||||||
|   getShots( |   getShots( | ||||||
|     filterInput: FilterInput! |     filterInput: FilterInput! | ||||||
|     shotsPagination: GetShotsPagination = null |     shotsPagination: GetShotsPagination = null | ||||||
|     limit: Int! = 500 |     limit: Int! = 500 | ||||||
|  |     countRespectsLimit: Boolean! = false | ||||||
|   ): [ShotGQL!]! |   ): [ShotGQL!]! | ||||||
|   getShotsByIds(ids: [Int!]!): [ShotGQL!]! |   getShotsByIds(ids: [Int!]!): [ShotGQL!]! | ||||||
|   getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]! |  | ||||||
|   getUser(userId: Int!): UserGQL |   getUser(userId: Int!): UserGQL | ||||||
|  |   doesUsernameExist(candidateUsername: String!): Boolean! | ||||||
|   getLoggedInUser: UserGQL |   getLoggedInUser: UserGQL | ||||||
|   getUsernames( |   getUsernames( | ||||||
|     matchString: String = null |     matchString: String = null | ||||||
|     limit: Int = null |     limit: Int = null | ||||||
|     after: String = null |     after: String = null | ||||||
|   ): [String!]! |   ): [String!]! | ||||||
|  |   getUsersMatching( | ||||||
|  |     matchString: String = null | ||||||
|  |     limit: Int = null | ||||||
|  |     after: String = null | ||||||
|  |   ): [UserGQL!]! | ||||||
|   getUserRelationshipsMatching( |   getUserRelationshipsMatching( | ||||||
|     userId: Int! |     userId: Int! | ||||||
|     matchString: String = null |     matchString: String = null | ||||||
|     limit: Int = 100 |     limit: Int = 100 | ||||||
|     after: String = null |     after: String = null | ||||||
|   ): UserRelationshipsResult! |   ): UserRelationshipsResult! | ||||||
|   getPlayTime(userId: Int!): UserPlayTimeGQL! |   getAvailableSubscriptionOptions: StripeSubscriptionOptionsGQL! | ||||||
|  |   getUserSubscriptionStatus: UserSubscriptionStatusGQL! | ||||||
|  |   getPlayTime(userId: Int!, filters: VideoFilterInput = null): UserPlayTimeGQL! | ||||||
|   getUserVideos( |   getUserVideos( | ||||||
|     userId: Int = null |     userId: Int = null | ||||||
|     limit: Int! = 5 |     limit: Int! = 5 | ||||||
|     after: String = null |     after: String = null | ||||||
|     filters: VideoFilterInput = null |     filters: VideoFilterInput = null | ||||||
|   ): VideoHistoryGQL! |   ): VideoHistoryGQL! | ||||||
|   getUserTags: [TagGQL!]! |   getUserTags(includeRetiredTags: Boolean = false): [TagGQL!]! | ||||||
|   getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL! |   getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL! | ||||||
|   getVideos(videoIds: [Int!]!): [VideoGQL!]! |   getVideos(videoIds: [Int!]!): [VideoGQL!]! | ||||||
|   getFeedVideos( |  | ||||||
|     limit: Int! = 5 |  | ||||||
|     after: String = null |  | ||||||
|     filters: VideoFilterInput = null |  | ||||||
|   ): VideoHistoryGQL! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type AggregateResultGQL { | type AggregateResultGQL { | ||||||
| @@ -158,6 +195,7 @@ input FilterInput @oneOf { | |||||||
|   shotDirection: [ShotDirectionEnum!] |   shotDirection: [ShotDirectionEnum!] | ||||||
|   videoId: [Int!] |   videoId: [Int!] | ||||||
|   userId: [Int!] |   userId: [Int!] | ||||||
|  |   runId: [Int!] | ||||||
|   username: [String!] |   username: [String!] | ||||||
|   fargoRating: FloatRangeFilter |   fargoRating: FloatRangeFilter | ||||||
|   make: [Boolean!] |   make: [Boolean!] | ||||||
| @@ -169,6 +207,7 @@ input FilterInput @oneOf { | |||||||
|   isLeftMiss: [Boolean!] |   isLeftMiss: [Boolean!] | ||||||
|   isRightMiss: [Boolean!] |   isRightMiss: [Boolean!] | ||||||
|   isDirect: [Boolean!] |   isDirect: [Boolean!] | ||||||
|  |   isBreakHeuristic: [Boolean!] | ||||||
|   tableSize: FloatRangeFilter |   tableSize: FloatRangeFilter | ||||||
|   bankAngle: FloatRangeFilter |   bankAngle: FloatRangeFilter | ||||||
|   bankDistance: FloatRangeFilter |   bankDistance: FloatRangeFilter | ||||||
| @@ -259,17 +298,75 @@ type DeployedConfigGQL { | |||||||
|   devMode: Boolean! |   devMode: Boolean! | ||||||
|   environment: String! |   environment: String! | ||||||
|   minimumAllowedAppVersion: String! |   minimumAllowedAppVersion: String! | ||||||
|  |   subscriptionGatingEnabled: Boolean! | ||||||
|  |   bannerMessages: [BannerGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| type MakePercentageIntervalGQL { | type BannerGQL { | ||||||
|  |   id: Int! | ||||||
|  |   message: String! | ||||||
|  |   color: String! | ||||||
|  |   kind: BannerKindEnum! | ||||||
|  |   dismissible: Boolean! | ||||||
|  |   priority: Int! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | enum BannerKindEnum { | ||||||
|  |   INFO | ||||||
|  |   WARNING | ||||||
|  |   ERROR | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type VideoHistoryGQL { | ||||||
|  |   videos: [VideoGQL!]! | ||||||
|  |   pageInfo: PageInfoGQL! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type VideoGQL { | ||||||
|  |   id: Int! | ||||||
|  |   owner: UserGQL | ||||||
|  |   name: String | ||||||
|  |   screenshotUri: String | ||||||
|  |   totalShotsMade: Int! | ||||||
|  |   totalShots: Int! | ||||||
|   makePercentage: Float! |   makePercentage: Float! | ||||||
|   elapsedTime: Float! |   medianRun: Float | ||||||
|  |   averageTimeBetweenShots: Float | ||||||
|  |   averageDifficulty: Float | ||||||
|  |   createdAt: DateTime | ||||||
|  |   updatedAt: DateTime | ||||||
|  |   shots: [ShotGQL!]! | ||||||
|  |   startTime: DateTime | ||||||
|  |   endTime: DateTime | ||||||
|  |   elapsedTime: Float | ||||||
|  |   framesPerSecond: Float! | ||||||
|  |   tableSize: Float! | ||||||
|  |   private: Boolean! | ||||||
|  |   stream: UploadStreamGQL | ||||||
|  |   playlist: HLSPlaylistGQL | ||||||
|  |   tags: [VideoTag!]! | ||||||
|  |   currentHomography: HomographyInfoGQL | ||||||
|  |   homographyHistory: [HomographyInfoGQL!]! | ||||||
|  |   currentProcessing: VideoProcessingGQL | ||||||
|  |   reactions: [ReactionGQL!]! | ||||||
|  |   comments: [CommentGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| type GetShotsResult { | type UserGQL { | ||||||
|   shots: [ShotGQL!]! |   id: Int! | ||||||
|   count: Int |   firebaseUid: String | ||||||
|   ids: [Int!]! |   username: String! | ||||||
|  |   isAdmin: Boolean | ||||||
|  |   fargoRating: Int | ||||||
|  |   activeVideoId: Int | ||||||
|  |   stripeCustomerId: String | ||||||
|  |   profileImageUri: String | ||||||
|  |   createdAt: DateTime | ||||||
|  |   updatedAt: DateTime | ||||||
|  |   videosPrivateByDefault: Boolean | ||||||
|  |   agreesToMarketing: Boolean | ||||||
|  |   following: [UserGQL!] | ||||||
|  |   followers: [UserGQL!] | ||||||
| } | } | ||||||
|  |  | ||||||
| type ShotGQL { | type ShotGQL { | ||||||
| @@ -288,6 +385,8 @@ type ShotGQL { | |||||||
|   annotations: [ShotAnnotationGQL!]! |   annotations: [ShotAnnotationGQL!]! | ||||||
|   falsePositiveScore: Float |   falsePositiveScore: Float | ||||||
|   video: VideoGQL |   video: VideoGQL | ||||||
|  |   run: RunGQL | ||||||
|  |   runFeatures: RunFeaturesGQL | ||||||
| } | } | ||||||
|  |  | ||||||
| type CueObjectFeaturesGQL { | type CueObjectFeaturesGQL { | ||||||
| @@ -339,20 +438,6 @@ type SerializedShotPathsGQL { | |||||||
|   b64EncodedBuffer: String |   b64EncodedBuffer: String | ||||||
| } | } | ||||||
|  |  | ||||||
| type UserGQL { |  | ||||||
|   id: Int! |  | ||||||
|   firebaseUid: String |  | ||||||
|   username: String! |  | ||||||
|   isAdmin: Boolean |  | ||||||
|   fargoRating: Int |  | ||||||
|   activeVideoId: Int |  | ||||||
|   profileImageUri: String |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
|   following: [UserGQL!] |  | ||||||
|   followers: [UserGQL!] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type ShotAnnotationGQL { | type ShotAnnotationGQL { | ||||||
|   shotId: Int! |   shotId: Int! | ||||||
|   type: ShotAnnotationTypeGQL! |   type: ShotAnnotationTypeGQL! | ||||||
| @@ -368,30 +453,19 @@ type ShotAnnotationTypeGQL { | |||||||
|   name: String! |   name: String! | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoGQL { | type RunGQL { | ||||||
|   id: Int! |   id: Int! | ||||||
|   owner: UserGQL |   runLength: Int! | ||||||
|   name: String |   videoId: Int! | ||||||
|   screenshotUri: String |   userId: Int! | ||||||
|   totalShotsMade: Int! |  | ||||||
|   totalShots: Int! |  | ||||||
|   makePercentage: Float! |  | ||||||
|   medianRun: Float |  | ||||||
|   averageTimeBetweenShots: Float |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
|   shots: [ShotGQL!]! |   shots: [ShotGQL!]! | ||||||
|   startTime: DateTime |   video: VideoGQL! | ||||||
|   endTime: DateTime |   user: UserGQL! | ||||||
|   elapsedTime: Float | } | ||||||
|   framesPerSecond: Float! |  | ||||||
|   tableSize: Float! | type RunFeaturesGQL { | ||||||
|   stream: UploadStreamGQL |   runId: Int! | ||||||
|   playlist: HLSPlaylistGQL |   indexInRun: Int! | ||||||
|   tags: [VideoTag!]! |  | ||||||
|   currentHomography: HomographyInfoGQL |  | ||||||
|   homographyHistory: [HomographyInfoGQL!]! |  | ||||||
|   currentProcessing: VideoProcessingGQL |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type UploadStreamGQL { | type UploadStreamGQL { | ||||||
| @@ -408,6 +482,7 @@ type UploadStreamGQL { | |||||||
|   createdAt: DateTime! |   createdAt: DateTime! | ||||||
|   updatedAt: DateTime! |   updatedAt: DateTime! | ||||||
|   segments: [UploadSegmentGQL!]! |   segments: [UploadSegmentGQL!]! | ||||||
|  |   clientUploadStatus: ClientUploadStatusEnum | ||||||
|   resolution: VideoResolutionGQL! |   resolution: VideoResolutionGQL! | ||||||
|   streamSegmentType: StreamSegmentTypeEnum! |   streamSegmentType: StreamSegmentTypeEnum! | ||||||
| } | } | ||||||
| @@ -432,6 +507,11 @@ type UploadSegmentGQL { | |||||||
|   linksRequested: Int! |   linksRequested: Int! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | enum ClientUploadStatusEnum { | ||||||
|  |   UPLOAD_ENABLED | ||||||
|  |   UPLOAD_DISABLED | ||||||
|  | } | ||||||
|  |  | ||||||
| type VideoResolutionGQL { | type VideoResolutionGQL { | ||||||
|   width: Int |   width: Int | ||||||
|   height: Int |   height: Int | ||||||
| @@ -458,6 +538,7 @@ type VideoTagClass { | |||||||
| } | } | ||||||
|  |  | ||||||
| type HomographyInfoGQL { | type HomographyInfoGQL { | ||||||
|  |   id: Int! | ||||||
|   frameIndex: Int! |   frameIndex: Int! | ||||||
|   crop: BoundingBoxGQL! |   crop: BoundingBoxGQL! | ||||||
|   pockets: [BoundingBoxGQL!]! |   pockets: [BoundingBoxGQL!]! | ||||||
| @@ -487,9 +568,13 @@ type IntPoint2D { | |||||||
| } | } | ||||||
|  |  | ||||||
| type VideoProcessingGQL { | type VideoProcessingGQL { | ||||||
|  |   id: Int! | ||||||
|   errors: [VideoProcessingErrorGQL!]! |   errors: [VideoProcessingErrorGQL!]! | ||||||
|   status: ProcessingStatusEnum! |   status: ProcessingStatusEnum! | ||||||
|   statuses: [VideoProcessingStatusGQL!]! |   statuses: [VideoProcessingStatusGQL!]! | ||||||
|  |   framesProcessed: Int | ||||||
|  |   currentSegment: Int | ||||||
|  |   progressPercentage: Float | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoProcessingErrorGQL { | type VideoProcessingErrorGQL { | ||||||
| @@ -517,33 +602,213 @@ type VideoProcessingStatusGQL { | |||||||
|   updatedAt: DateTime |   updatedAt: DateTime | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type ReactionGQL { | ||||||
|  |   videoId: Int! | ||||||
|  |   user: UserGQL! | ||||||
|  |   reaction: ReactionEnum! | ||||||
|  |   createdAt: DateTime | ||||||
|  |   updatedAt: DateTime | ||||||
|  | } | ||||||
|  |  | ||||||
|  | enum ReactionEnum { | ||||||
|  |   LIKE | ||||||
|  |   HEART | ||||||
|  |   BULLSEYE | ||||||
|  |   HUNDRED | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type CommentGQL { | ||||||
|  |   id: Int! | ||||||
|  |   user: UserGQL! | ||||||
|  |   message: String! | ||||||
|  |   replies: [CommentGQL!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type PageInfoGQL { | ||||||
|  |   hasNextPage: Boolean! | ||||||
|  |   endCursor: String | ||||||
|  | } | ||||||
|  |  | ||||||
|  | enum IncludePrivateEnum { | ||||||
|  |   ALL | ||||||
|  |   MINE | ||||||
|  |   NONE | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input VideoFilterInput { | ||||||
|  |   isStreamCompleted: Boolean = null | ||||||
|  |   requireCursorCompletion: Boolean! = true | ||||||
|  |   createdAt: DateRangeFilter = null | ||||||
|  |   excludeVideosWithNoShots: Boolean = null | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input VideoFeedInputGQL @oneOf { | ||||||
|  |   followedByUserId: Int | ||||||
|  |   userId: Int | ||||||
|  |   allUsers: Boolean | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MakePercentageIntervalGQL { | ||||||
|  |   makePercentage: Float! | ||||||
|  |   elapsedTime: Float! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type RunLeaderboardGQL { | ||||||
|  |   entries: [RunGQL!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type CountLeaderboardGQL { | ||||||
|  |   entries: [UserShotCountEntry!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type UserShotCountEntry { | ||||||
|  |   user: UserGQL! | ||||||
|  |   value: Int! | ||||||
|  |   total: Int! | ||||||
|  |   proportionMade: Float! | ||||||
|  |   videos: Int! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type RequestedMedalsGQL { | ||||||
|  |   distanceOver66: MedalGQL | ||||||
|  |   distanceOver78: MedalGQL | ||||||
|  |   distanceOver90: MedalGQL | ||||||
|  |   runLength3: MedalGQL | ||||||
|  |   runLength5: MedalGQL | ||||||
|  |   runLength8: MedalGQL | ||||||
|  |   runLength10: MedalGQL | ||||||
|  |   runLength15: MedalGQL | ||||||
|  |   runLength20: MedalGQL | ||||||
|  |   runLength25: MedalGQL | ||||||
|  |   runLength30: MedalGQL | ||||||
|  |   runLength40: MedalGQL | ||||||
|  |   runLength50: MedalGQL | ||||||
|  |   totalMakes25: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes50: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes75: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes200: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes300: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes400: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes750: MedalGQL @deprecated(reason: "no longer supported") | ||||||
|  |   totalMakes100: MedalGQL | ||||||
|  |   totalMakes500: MedalGQL | ||||||
|  |   totalMakes1000: MedalGQL | ||||||
|  |   totalMakes5000: MedalGQL | ||||||
|  |   totalMakes10000: MedalGQL | ||||||
|  |   dailyMakes50: MedalGQL | ||||||
|  |   dailyMakes100: MedalGQL | ||||||
|  |   dailyMakes150: MedalGQL | ||||||
|  |   dailyMakes200: MedalGQL | ||||||
|  |   dailyMakes250: MedalGQL | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MedalGQL { | ||||||
|  |   count: Int! | ||||||
|  |   nickname: String | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input MedalScope @oneOf { | ||||||
|  |   videoId: Int | ||||||
|  |   interval: TimeInterval | ||||||
|  |     @deprecated(reason: "NO LONGER SUPPORTED, USE DATETIME_RANGE") | ||||||
|  |   datetimeRange: DatetimeRangeAggregationInput | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type GetRunsResult { | ||||||
|  |   runs: [RunGQL!]! | ||||||
|  |   count: Int | ||||||
|  |   runIds: [Int!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input RunFilterInput { | ||||||
|  |   videoId: [Int!] | ||||||
|  |   userId: [Int!] | ||||||
|  |   username: [String!] | ||||||
|  |   andFilters: [RunFilterInput!] | ||||||
|  |   orFilters: [RunFilterInput!] | ||||||
|  |   notFilter: RunFilterInput | ||||||
|  |   tableSize: FloatRangeFilter | ||||||
|  |   createdAt: DateRangeFilter | ||||||
|  |   runLength: FloatRangeFilter | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input GetRunsOrdering { | ||||||
|  |   orderings: [RunsOrderingComponent!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input RunsOrderingComponent @oneOf { | ||||||
|  |   runLength: IntOrdering | ||||||
|  |   videoId: IntOrdering | ||||||
|  |   videoCreation: DatetimeOrdering | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input IntOrdering { | ||||||
|  |   descending: Boolean! = true | ||||||
|  |   startingAt: Int = null | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input DatetimeOrdering { | ||||||
|  |   descending: Boolean! = true | ||||||
|  |   startingAt: DateTime = null | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type TableStateGQL { | ||||||
|  |   identifierToPosition: [[Float!]!]! | ||||||
|  |   homography: HomographyInfoGQL | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input HomographyInputGQL { | ||||||
|  |   crop: BoundingBoxInputGQL! | ||||||
|  |   pockets: [BoundingBoxInputGQL!]! | ||||||
|  |   sourcePoints: PocketPointsInputGQL! | ||||||
|  |   destPoints: PocketPointsInputGQL! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input BoundingBoxInputGQL { | ||||||
|  |   left: Float! | ||||||
|  |   top: Float! | ||||||
|  |   width: Float! | ||||||
|  |   height: Float! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input PocketPointsInputGQL { | ||||||
|  |   topLeft: IntPoint2DInput! | ||||||
|  |   topSide: IntPoint2DInput! | ||||||
|  |   topRight: IntPoint2DInput! | ||||||
|  |   bottomLeft: IntPoint2DInput! | ||||||
|  |   bottomSide: IntPoint2DInput! | ||||||
|  |   bottomRight: IntPoint2DInput! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input IntPoint2DInput { | ||||||
|  |   x: Int! | ||||||
|  |   y: Int! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type GetShotsResult { | ||||||
|  |   shots: [ShotGQL!]! | ||||||
|  |   count: Int | ||||||
|  |   ids: [Int!]! | ||||||
|  | } | ||||||
|  |  | ||||||
| input GetShotsOrdering { | input GetShotsOrdering { | ||||||
|   orderings: [ShotsOrderingComponent!]! |   orderings: [ShotsOrderingComponent!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| input ShotsOrderingComponent @oneOf { | input ShotsOrderingComponent @oneOf { | ||||||
|   videoCreation: DatetimeShotOrdering |   videoCreation: DatetimeOrdering | ||||||
|   marginOfError: FloatShotOrdering |   marginOfError: FloatOrdering | ||||||
|   videoId: IntShotOrdering |   difficulty: FloatOrdering | ||||||
|   startFrame: IntShotOrdering |   videoId: IntOrdering | ||||||
|   runLength: IntShotOrdering |   startFrame: IntOrdering | ||||||
|  |   runLength: IntOrdering | ||||||
| } | } | ||||||
|  |  | ||||||
| input DatetimeShotOrdering { | input FloatOrdering { | ||||||
|   descending: Boolean! = true |  | ||||||
|   startingAt: DateTime = null |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input FloatShotOrdering { |  | ||||||
|   descending: Boolean! = true |   descending: Boolean! = true | ||||||
|   startingAt: Float = null |   startingAt: Float = null | ||||||
| } | } | ||||||
|  |  | ||||||
| input IntShotOrdering { |  | ||||||
|   descending: Boolean! = true |  | ||||||
|   startingAt: Int = null |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input GetShotsPagination { | input GetShotsPagination { | ||||||
|   createdAfter: CreatedAfter! |   createdAfter: CreatedAfter! | ||||||
|   startFrameAfter: Int! |   startFrameAfter: Int! | ||||||
| @@ -565,29 +830,63 @@ type UserRelationship { | |||||||
|   toUserIsFollowedBy: Boolean! |   toUserIsFollowedBy: Boolean! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type StripeSubscriptionOptionsGQL { | ||||||
|  |   products: [StripeProductGQL!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type StripeProductGQL { | ||||||
|  |   id: String! | ||||||
|  |   name: String! | ||||||
|  |   description: String | ||||||
|  |   active: Boolean! | ||||||
|  |   prices: [StripePriceGQL!]! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type StripePriceGQL { | ||||||
|  |   id: String! | ||||||
|  |   currency: String! | ||||||
|  |   unitAmount: Int | ||||||
|  |   recurringInterval: String | ||||||
|  |   recurringIntervalCount: Int | ||||||
|  |   type: String! | ||||||
|  |   active: Boolean! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type UserSubscriptionStatusGQL { | ||||||
|  |   hasActiveSubscription: Boolean! | ||||||
|  |   subscriptionStatus: StripeSubscriptionStatusEnum | ||||||
|  |   currentPeriodStart: DateTime | ||||||
|  |   currentPeriodEnd: DateTime | ||||||
|  |   validUntil: DateTime | ||||||
|  |   stripePriceId: String | ||||||
|  |   stripeSubscriptionId: String | ||||||
|  | } | ||||||
|  |  | ||||||
|  | enum StripeSubscriptionStatusEnum { | ||||||
|  |   INCOMPLETE | ||||||
|  |   INCOMPLETE_EXPIRED | ||||||
|  |   TRIALING | ||||||
|  |   ACTIVE | ||||||
|  |   PAST_DUE | ||||||
|  |   CANCELED | ||||||
|  |   UNPAID | ||||||
|  |   PAUSED | ||||||
|  | } | ||||||
|  |  | ||||||
| type UserPlayTimeGQL { | type UserPlayTimeGQL { | ||||||
|   totalSeconds: Float! |   totalSeconds: Float! | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoHistoryGQL { |  | ||||||
|   videos: [VideoGQL!]! |  | ||||||
|   pageInfo: PageInfoGQL! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type PageInfoGQL { |  | ||||||
|   hasNextPage: Boolean! |  | ||||||
|   endCursor: String |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input VideoFilterInput { |  | ||||||
|   isStreamCompleted: Boolean = null |  | ||||||
|   requireCursorCompletion: Boolean! = true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type TagGQL { | type TagGQL { | ||||||
|   name: String! |  | ||||||
|   id: Int! |   id: Int! | ||||||
|   group: String |   name: String! | ||||||
|  |   tagClasses: [TagClassGQL!] | ||||||
|  |   retired: Boolean! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type TagClassGQL { | ||||||
|  |   id: Int! | ||||||
|  |   name: String! | ||||||
| } | } | ||||||
|  |  | ||||||
| """ | """ | ||||||
| @@ -601,6 +900,21 @@ scalar JSON | |||||||
| type Mutation { | type Mutation { | ||||||
|   createBucketSet(params: CreateBucketSetInput!): BucketSetGQL! |   createBucketSet(params: CreateBucketSetInput!): BucketSetGQL! | ||||||
|   setLoggerLevel(path: String!, level: String!): Boolean! |   setLoggerLevel(path: String!, level: String!): Boolean! | ||||||
|  |   reactToVideo(videoId: Int!, reaction: ReactionEnum): Boolean! | ||||||
|  |   commentOnVideo( | ||||||
|  |     videoId: Int! | ||||||
|  |     message: String! | ||||||
|  |     parentCommentId: Int | ||||||
|  |   ): Boolean! | ||||||
|  |   editComment(videoId: Int!, commentId: Int!, newMessage: String!): Boolean! | ||||||
|  |   deleteComment(videoId: Int!, commentId: Int!): Boolean! | ||||||
|  |   blockContent(videoId: Int!): Boolean! | ||||||
|  |   blockUser(userId: Int!): Boolean! | ||||||
|  |   reportContent( | ||||||
|  |     videoId: Int! | ||||||
|  |     reason: ReportReasonEnum! | ||||||
|  |     customReason: String = null | ||||||
|  |   ): Boolean! | ||||||
|   addAnnotationToShot( |   addAnnotationToShot( | ||||||
|     shotId: Int! |     shotId: Int! | ||||||
|     annotationName: String! |     annotationName: String! | ||||||
| @@ -610,6 +924,10 @@ type Mutation { | |||||||
|     shotId: Int! |     shotId: Int! | ||||||
|     annotations: [UpdateAnnotationInputGQL!]! |     annotations: [UpdateAnnotationInputGQL!]! | ||||||
|   ): UpdateShotAnnotationReturn! |   ): UpdateShotAnnotationReturn! | ||||||
|  |   editShot( | ||||||
|  |     shotId: Int! | ||||||
|  |     fieldsToEdit: EditableShotFieldInputGQL! | ||||||
|  |   ): EditShotReturn! | ||||||
|   getProfileImageUploadLink( |   getProfileImageUploadLink( | ||||||
|     fileExt: String = ".png" |     fileExt: String = ".png" | ||||||
|   ): GetProfileUploadLinkReturn! |   ): GetProfileUploadLinkReturn! | ||||||
| @@ -617,6 +935,12 @@ type Mutation { | |||||||
|   editUser(input: EditUserInputGQL!): UserGQL! |   editUser(input: EditUserInputGQL!): UserGQL! | ||||||
|   followUser(followedUserId: Int!): UserGQL! |   followUser(followedUserId: Int!): UserGQL! | ||||||
|   unfollowUser(followedUserId: Int!): UserGQL! |   unfollowUser(followedUserId: Int!): UserGQL! | ||||||
|  |   retireTags(tagIds: [Int!]!): Boolean! | ||||||
|  |   ensureStripeCustomerExists: UserGQL! | ||||||
|  |   deleteUser: Boolean! | ||||||
|  |   createSubscription(priceId: String!): CreateSubscriptionResultGQL! | ||||||
|  |   cancelSubscription: UserSubscriptionStatusGQL! | ||||||
|  |   findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL | ||||||
|   createUploadStream( |   createUploadStream( | ||||||
|     videoMetadata: VideoMetadataInput! |     videoMetadata: VideoMetadataInput! | ||||||
|   ): CreateUploadStreamReturn! |   ): CreateUploadStreamReturn! | ||||||
| @@ -629,6 +953,7 @@ type Mutation { | |||||||
|   ): Boolean! |   ): Boolean! | ||||||
|   editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean! |   editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean! | ||||||
|   deleteVideo(videoId: Int!): Boolean! |   deleteVideo(videoId: Int!): Boolean! | ||||||
|  |   deleteTags(videoId: Int!, tagsToDelete: [VideoTagInput!]!): Boolean! | ||||||
| } | } | ||||||
|  |  | ||||||
| input CreateBucketSetInput { | input CreateBucketSetInput { | ||||||
| @@ -637,6 +962,15 @@ input CreateBucketSetInput { | |||||||
|   buckets: [BucketInputGQL!]! |   buckets: [BucketInputGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | enum ReportReasonEnum { | ||||||
|  |   SPAM | ||||||
|  |   NUDITY | ||||||
|  |   VIOLENCE | ||||||
|  |   HATE | ||||||
|  |   COPYRIGHT | ||||||
|  |   OTHER | ||||||
|  | } | ||||||
|  |  | ||||||
| type AddShotAnnotationReturn { | type AddShotAnnotationReturn { | ||||||
|   value: SuccessfulAddAddShotAnnotationErrors! |   value: SuccessfulAddAddShotAnnotationErrors! | ||||||
| } | } | ||||||
| @@ -676,6 +1010,22 @@ input UpdateAnnotationInputGQL { | |||||||
|   notes: String = null |   notes: String = null | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type EditShotReturn { | ||||||
|  |   shot: ShotGQL | ||||||
|  |   error: DoesNotOwnShotErr | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input EditableShotFieldInputGQL { | ||||||
|  |   intendedPocketType: PocketEnum | ||||||
|  |   shotDirection: ShotDirectionEnum | ||||||
|  |   spinType: SpinTypeEnum | ||||||
|  |   targetPocketAngleDirection: ShotDirectionEnum | ||||||
|  |   make: Boolean | ||||||
|  |   backcut: Boolean | ||||||
|  |   excludeFromStats: Boolean | ||||||
|  |   notes: String | ||||||
|  | } | ||||||
|  |  | ||||||
| type GetProfileUploadLinkReturn { | type GetProfileUploadLinkReturn { | ||||||
|   value: UploadLinkGetProfileUploadLinkErrors! |   value: UploadLinkGetProfileUploadLinkErrors! | ||||||
| } | } | ||||||
| @@ -705,6 +1055,13 @@ type TooManyProfileImageUploadsErr { | |||||||
| input EditUserInputGQL { | input EditUserInputGQL { | ||||||
|   username: String = null |   username: String = null | ||||||
|   fargoRating: Int = null |   fargoRating: Int = null | ||||||
|  |   videosPrivateByDefault: Boolean = null | ||||||
|  |   agreesToMarketing: Boolean = null | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type CreateSubscriptionResultGQL { | ||||||
|  |   checkoutUrl: String! | ||||||
|  |   sessionId: String! | ||||||
| } | } | ||||||
|  |  | ||||||
| type CreateUploadStreamReturn { | type CreateUploadStreamReturn { | ||||||
| @@ -716,10 +1073,18 @@ input VideoMetadataInput { | |||||||
|   startTime: DateTime = null |   startTime: DateTime = null | ||||||
|   endTime: DateTime = null |   endTime: DateTime = null | ||||||
|   gameType: String = null |   gameType: String = null | ||||||
|  |     @deprecated(reason: "`game_type` is deprecated. Use `tags` instead.") | ||||||
|  |  | ||||||
|  |   """ | ||||||
|  |   A list of tags associated with the video. Replace `game_type` | ||||||
|  |   """ | ||||||
|  |   tags: [VideoTagInput!] = null | ||||||
|   tableSize: Float = null |   tableSize: Float = null | ||||||
|   lastIntendedSegmentBound: Int = null |   lastIntendedSegmentBound: Int = null | ||||||
|   streamSegmentType: StreamSegmentTypeEnum = null |   streamSegmentType: StreamSegmentTypeEnum = null | ||||||
|  |   private: Boolean = null | ||||||
|   endStream: Boolean! = false |   endStream: Boolean! = false | ||||||
|  |   clientUploadStatus: ClientUploadStatusEnum = null | ||||||
|   resolution: VideoResolution = null |   resolution: VideoResolution = null | ||||||
|   framesPerSecond: Float = null |   framesPerSecond: Float = null | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								yarn.lock
									
									
									
									
									
								
							| @@ -10,10 +10,10 @@ | |||||||
|     "@jridgewell/gen-mapping" "^0.3.0" |     "@jridgewell/gen-mapping" "^0.3.0" | ||||||
|     "@jridgewell/trace-mapping" "^0.3.9" |     "@jridgewell/trace-mapping" "^0.3.9" | ||||||
|  |  | ||||||
| "@apollo/client@^3.9.2": | "@apollo/client@^3.11.10": | ||||||
|   version "3.9.2" |   version "3.12.3" | ||||||
|   resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.9.2.tgz#96edf2c212f828bad1ef3d84234fa473c5a27ff8" |   resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.12.3.tgz#0d252749baad8328e06883fe118dc7e73e3bbb1f" | ||||||
|   integrity sha512-Zw9WvXjqhpbgkvAvnj52vstOWwM0iedKWtn1hSq1cODQyoe1CF2uFwMYFI7l56BrAY9CzLi6MQA0AhxpgJgvxw== |   integrity sha512-KZ5zymRdb8bMbGUb1wP2U04ff7qIGgaC1BCdCVC+IPFiXkxEhHBc5fDEQOwAUT+vUo9KbBh3g7QK/JCOswn59w== | ||||||
|   dependencies: |   dependencies: | ||||||
|     "@graphql-typed-document-node/core" "^3.1.1" |     "@graphql-typed-document-node/core" "^3.1.1" | ||||||
|     "@wry/caches" "^1.0.0" |     "@wry/caches" "^1.0.0" | ||||||
| @@ -23,7 +23,7 @@ | |||||||
|     hoist-non-react-statics "^3.3.2" |     hoist-non-react-statics "^3.3.2" | ||||||
|     optimism "^0.18.0" |     optimism "^0.18.0" | ||||||
|     prop-types "^15.7.2" |     prop-types "^15.7.2" | ||||||
|     rehackt "0.0.3" |     rehackt "^0.1.0" | ||||||
|     response-iterator "^0.2.6" |     response-iterator "^0.2.6" | ||||||
|     symbol-observable "^4.0.0" |     symbol-observable "^4.0.0" | ||||||
|     ts-invariant "^0.10.3" |     ts-invariant "^0.10.3" | ||||||
| @@ -2633,10 +2633,10 @@ regenerator-runtime@^0.14.0: | |||||||
|   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" |   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" | ||||||
|   integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== |   integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== | ||||||
|  |  | ||||||
| rehackt@0.0.3: | rehackt@^0.1.0: | ||||||
|   version "0.0.3" |   version "0.1.0" | ||||||
|   resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.0.3.tgz#1ea454620d4641db8342e2db44595cf0e7ac6aa0" |   resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" | ||||||
|   integrity sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g== |   integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== | ||||||
|  |  | ||||||
| relay-runtime@12.0.0: | relay-runtime@12.0.0: | ||||||
|   version "12.0.0" |   version "12.0.0" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user