Compare commits
	
		
			1 Commits
		
	
	
		
			993f62b6cf
			...
			kat/add-sh
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e23546de88 | 
| @@ -1,9 +0,0 @@ | |||||||
| root = true |  | ||||||
|  |  | ||||||
| [*.json] |  | ||||||
| end_of_line = lf |  | ||||||
| charset = utf-8 |  | ||||||
| indent_style = space |  | ||||||
| indent_size =  2 |  | ||||||
| trim_trailing_whitespace = true |  | ||||||
| insert_final_newline = true |  | ||||||
							
								
								
									
										5
									
								
								.envrc
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								.envrc
									
									
									
									
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| use flake . --impure |  | ||||||
|  |  | ||||||
| if [ -f .envrc.local ]; then |  | ||||||
|     source .envrc.local |  | ||||||
| fi |  | ||||||
| @@ -1,17 +0,0 @@ | |||||||
| name: Tests |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|  |  | ||||||
| env: |  | ||||||
|   NIXPKGS_ALLOW_UNFREE: 1 |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   install: |  | ||||||
|     name: Tests |  | ||||||
|     runs-on: nixos-x86_64-linux |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@v3 |  | ||||||
|         with: |  | ||||||
|           submodules: recursive |  | ||||||
|       - name: codegen causes no changes |  | ||||||
|         run: ./bin/assert-no-changes-wrapper.sh |  | ||||||
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +0,0 @@ | |||||||
| node_modules |  | ||||||
| dist |  | ||||||
| .direnv |  | ||||||
| /after.txt |  | ||||||
| /before.txt |  | ||||||
| **/__pycache__/** |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| GQL_DIR=$(dirname $(dirname "$(realpath "$BASH_SOURCE")")) |  | ||||||
|  |  | ||||||
| cd $GQL_DIR |  | ||||||
|  |  | ||||||
| LD_LIBRARY_PATH="" nix develop --impure --command bash "$GQL_DIR/bin/assert-no-changes.sh" |  | ||||||
| @@ -1,17 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| git ls-files | xargs md5sum > before.txt |  | ||||||
|  |  | ||||||
| yarn install |  | ||||||
| yarn graphql-codegen |  | ||||||
| prettier ./src --write |  | ||||||
| for proto in $(find ./rbproto -iname '*.proto'); do |  | ||||||
| 		name=$(basename "$proto" .proto) |  | ||||||
| 		protoc -I=./rbproto --python_out=./rbproto/python --pyi_out=./rbproto/python ./rbproto/shot.proto |  | ||||||
|     yarn pbjs ./rbproto/shot.proto --ts ./rbproto/ts/shot.ts |  | ||||||
| done |  | ||||||
| prettier ./rbproto --write |  | ||||||
|  |  | ||||||
| git ls-files | xargs md5sum > after.txt |  | ||||||
|  |  | ||||||
|  |  | ||||||
| diff before.txt after.txt |  | ||||||
| @@ -2,7 +2,7 @@ overwrite: true | |||||||
| schema: "src/schema.gql" | schema: "src/schema.gql" | ||||||
| documents: "src/**/*.gql" | documents: "src/**/*.gql" | ||||||
| generates: | generates: | ||||||
|   src/index.tsx: |   src/generated/graphql.tsx: | ||||||
|     plugins: |     plugins: | ||||||
|       - "typescript" |       - "typescript" | ||||||
|       - "typescript-operations" |       - "typescript-operations" | ||||||
|   | |||||||
							
								
								
									
										80
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										80
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @@ -1,80 +0,0 @@ | |||||||
| { |  | ||||||
|   "nodes": { |  | ||||||
|     "flake-utils": { |  | ||||||
|       "inputs": { |  | ||||||
|         "systems": "systems" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1705309234, |  | ||||||
|         "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "gitignore": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": ["nixpkgs"] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1703887061, |  | ||||||
|         "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "gitignore.nix", |  | ||||||
|         "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "gitignore.nix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixpkgs": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1706732774, |  | ||||||
|         "narHash": "sha256-hqJlyJk4MRpcItGYMF+3uHe8HvxNETWvlGtLuVpqLU0=", |  | ||||||
|         "owner": "nixos", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "rev": "b8b232ae7b8b144397fdb12d20f592e5e7c1a64d", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nixos", |  | ||||||
|         "ref": "nixos-unstable", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "root": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-utils": "flake-utils", |  | ||||||
|         "gitignore": "gitignore", |  | ||||||
|         "nixpkgs": "nixpkgs" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "systems": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1681028828, |  | ||||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   "root": "root", |  | ||||||
|   "version": 7 |  | ||||||
| } |  | ||||||
							
								
								
									
										27
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								flake.nix
									
									
									
									
									
								
							| @@ -1,27 +0,0 @@ | |||||||
| { |  | ||||||
|   description = "Sample Nix ts-node build"; |  | ||||||
|   inputs = { |  | ||||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; |  | ||||||
|     flake-utils.url = "github:numtide/flake-utils"; |  | ||||||
|     gitignore = { |  | ||||||
|       url = "github:hercules-ci/gitignore.nix"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
|   outputs = { |  | ||||||
|     self, |  | ||||||
|     nixpkgs, |  | ||||||
|     flake-utils, |  | ||||||
|     gitignore, |  | ||||||
|     ... |  | ||||||
|   }: |  | ||||||
|     flake-utils.lib.eachDefaultSystem (system: let |  | ||||||
|       pkgs = import nixpkgs {inherit system;}; |  | ||||||
|       nodejs = pkgs.nodejs-18_x; |  | ||||||
|     in |  | ||||||
|       with pkgs; { |  | ||||||
|         devShell = mkShell { |  | ||||||
|           buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just protobuf]; |  | ||||||
|         }; |  | ||||||
|       }); |  | ||||||
| } |  | ||||||
							
								
								
									
										39
									
								
								justfile
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								justfile
									
									
									
									
									
								
							| @@ -1,39 +0,0 @@ | |||||||
| NIX := "LD_LIBRARY_PATH='' nix" |  | ||||||
| PROTOBUF_DIR := "$PWD/rbproto" |  | ||||||
|  |  | ||||||
| prettier-gql: |  | ||||||
| 	#!/usr/bin/env bash |  | ||||||
| 	set -euxo pipefail |  | ||||||
| 	{{NIX}} develop --impure --command prettier ./src --write |  | ||||||
|  |  | ||||||
| gql-codegen: |  | ||||||
| 	#!/usr/bin/env bash |  | ||||||
| 	set -euxo pipefail |  | ||||||
| 	{{NIX}} develop --impure --command bash -c 'yarn install && yarn graphql-codegen' |  | ||||||
|  |  | ||||||
|  |  | ||||||
| gql: gql-codegen prettier-gql |  | ||||||
|  |  | ||||||
| protobuf-compile-a-python name: |  | ||||||
| 	protoc -I={{ PROTOBUF_DIR }} --python_out={{ PROTOBUF_DIR }}/python --pyi_out={{ PROTOBUF_DIR }}/python {{ PROTOBUF_DIR }}/shot.proto |  | ||||||
|  |  | ||||||
| protobuf-compile-a-js name: |  | ||||||
| 	#!/usr/bin/env bash |  | ||||||
| 	set -euxo pipefail |  | ||||||
| 	{{NIX}} develop --impure --command bash -c 'yarn pbjs {{ PROTOBUF_DIR }}/shot.proto --ts {{ PROTOBUF_DIR }}/ts/shot.ts && yarn prettier ./rbproto --write' |  | ||||||
|  |  | ||||||
| protobuf-compile-all-js: |  | ||||||
| 	#!/usr/bin/env bash |  | ||||||
| 	for proto in $(find {{ PROTOBUF_DIR }} -iname '*.proto'); do |  | ||||||
| 		name=$(basename "$proto" .proto) |  | ||||||
| 		just protobuf-compile-a-js $name |  | ||||||
| 	done |  | ||||||
|  |  | ||||||
| protobuf-compile-all-python: |  | ||||||
| 	#!/usr/bin/env bash |  | ||||||
| 	for proto in $(find {{ PROTOBUF_DIR }} -iname '*.proto'); do |  | ||||||
| 		name=$(basename "$proto" .proto) |  | ||||||
| 		just protobuf-compile-a-python $name |  | ||||||
| 	done |  | ||||||
|  |  | ||||||
| protobuf-compile-everything: protobuf-compile-all-js protobuf-compile-all-python |  | ||||||
							
								
								
									
										22
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,33 +1,15 @@ | |||||||
| { | { | ||||||
|   "name": "railbird-gql", |   "name": "railbird-gql", | ||||||
|   "version": "1.0.0", |   "version": "1.0.0", | ||||||
|   "main": "dist/index.js", |   "main": "index.js", | ||||||
|   "types": "dist/index.d.ts", |  | ||||||
|   "scripts": { |  | ||||||
|     "build": "tsc", |  | ||||||
|     "prepublishOnly": "npm run build", |  | ||||||
|     "postinstall": "tsc" |  | ||||||
|   }, |  | ||||||
|   "repository": "ssh://gitea@dev.railbird.ai:1123/railbird/railbird-gql.git", |   "repository": "ssh://gitea@dev.railbird.ai:1123/railbird/railbird-gql.git", | ||||||
|   "author": "Ivan Malison <IvanMalison@gmail.com>", |   "author": "Ivan Malison <IvanMalison@gmail.com>", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@apollo/client": "^3.9.2", |  | ||||||
|     "@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", | ||||||
|     "@graphql-codegen/typescript-react-apollo": "^4.2.0", |     "@graphql-codegen/typescript-react-apollo": "^4.2.0", | ||||||
|     "graphql": "^16.8.1", |     "graphql": "^16.8.1" | ||||||
|     "pbjs": "^0.0.14", |  | ||||||
|     "prettier": "^3.2.5", |  | ||||||
|     "prettier-plugin-organize-imports": "^3.2.4" |  | ||||||
|   }, |  | ||||||
|   "prettier": { |  | ||||||
|     "plugins": [ |  | ||||||
|       "prettier-plugin-organize-imports" |  | ||||||
|     ] |  | ||||||
|   }, |  | ||||||
|   "devDependencies": { |  | ||||||
|     "typescript": "^4.x" |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,16 +0,0 @@ | |||||||
| [tool.poetry] |  | ||||||
| name = "rbproto" |  | ||||||
| version = "0.1.0" |  | ||||||
| description = "" |  | ||||||
| authors = ["Mike Kalange <countablecloud@gmail.com>"] |  | ||||||
| readme = "README.md" |  | ||||||
| packages = [{include = "rbproto"}] |  | ||||||
|  |  | ||||||
| [tool.poetry.dependencies] |  | ||||||
| python = ">=3.10,<3.12" |  | ||||||
| protobuf = "^4.25.3" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| [build-system] |  | ||||||
| requires = ["poetry-core"] |  | ||||||
| build-backend = "poetry.core.masonry.api" |  | ||||||
| @@ -1 +0,0 @@ | |||||||
| from .python.shot_pb2 import *  # noqa: F401 |  | ||||||
| @@ -1,41 +0,0 @@ | |||||||
| # -*- coding: utf-8 -*- |  | ||||||
| # Generated by the protocol buffer compiler.  DO NOT EDIT! |  | ||||||
| # source: shot.proto |  | ||||||
| """Generated protocol buffer code.""" |  | ||||||
| from google.protobuf import descriptor as _descriptor |  | ||||||
| from google.protobuf import descriptor_pool as _descriptor_pool |  | ||||||
| from google.protobuf import symbol_database as _symbol_database |  | ||||||
| from google.protobuf.internal import builder as _builder |  | ||||||
| # @@protoc_insertion_point(imports) |  | ||||||
|  |  | ||||||
| _sym_db = _symbol_database.Default() |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nshot.proto\x12\x0fserialized_shot\"?\n\x03\x42ox\x12\x0c\n\x04left\x18\x01 \x01(\x02\x12\x0b\n\x03top\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12\x0e\n\x06height\x18\x04 \x01(\x02\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"\x7f\n\rBallDetection\x12.\n\x0eplane_position\x18\x01 \x01(\x0b\x32\x16.serialized_shot.Point\x12(\n\nannotation\x18\x02 \x01(\x0b\x32\x14.serialized_shot.Box\x12\x14\n\x0cinterpolated\x18\x03 \x01(\x08\"T\n\x10RLEBallDetection\x12\x31\n\tdetection\x18\x01 \x01(\x0b\x32\x1e.serialized_shot.BallDetection\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"L\n\x13RLEDetectionHistory\x12\x35\n\ndetections\x18\x01 \x03(\x0b\x32!.serialized_shot.RLEBallDetection\"F\n\x10\x44\x65tectionHistory\x12\x32\n\ndetections\x18\x01 \x03(\x0b\x32\x1e.serialized_shot.BallDetection\"\xe6\x01\n\x04Path\x12\x13\n\x0bstart_frame\x18\x01 \x01(\r\x12\x11\n\tend_frame\x18\x02 \x01(\r\x12\x37\n\ndetections\x18\x03 \x01(\x0b\x32!.serialized_shot.DetectionHistoryH\x00\x12>\n\x0erle_detections\x18\x04 \x01(\x0b\x32$.serialized_shot.RLEDetectionHistoryH\x00\x12\x15\n\x0bnot_present\x18\x05 \x01(\x08H\x00\x12\x11\n\tis_static\x18\x06 \x01(\x08\x42\x13\n\x11\x64\x65tection_history\"R\n\x11IdentifierHistory\x12\x17\n\x0f\x62\x61ll_identifier\x18\x01 \x01(\r\x12$\n\x05paths\x18\x02 \x03(\x0b\x32\x15.serialized_shot.Path\"H\n\x04Shot\x12@\n\x14identifier_histories\x18\x03 \x03(\x0b\x32\".serialized_shot.IdentifierHistoryb\x06proto3') |  | ||||||
|  |  | ||||||
| _globals = globals() |  | ||||||
| _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) |  | ||||||
| _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'shot_pb2', _globals) |  | ||||||
| if _descriptor._USE_C_DESCRIPTORS == False: |  | ||||||
|   DESCRIPTOR._options = None |  | ||||||
|   _globals['_BOX']._serialized_start=31 |  | ||||||
|   _globals['_BOX']._serialized_end=94 |  | ||||||
|   _globals['_POINT']._serialized_start=96 |  | ||||||
|   _globals['_POINT']._serialized_end=125 |  | ||||||
|   _globals['_BALLDETECTION']._serialized_start=127 |  | ||||||
|   _globals['_BALLDETECTION']._serialized_end=254 |  | ||||||
|   _globals['_RLEBALLDETECTION']._serialized_start=256 |  | ||||||
|   _globals['_RLEBALLDETECTION']._serialized_end=340 |  | ||||||
|   _globals['_RLEDETECTIONHISTORY']._serialized_start=342 |  | ||||||
|   _globals['_RLEDETECTIONHISTORY']._serialized_end=418 |  | ||||||
|   _globals['_DETECTIONHISTORY']._serialized_start=420 |  | ||||||
|   _globals['_DETECTIONHISTORY']._serialized_end=490 |  | ||||||
|   _globals['_PATH']._serialized_start=493 |  | ||||||
|   _globals['_PATH']._serialized_end=723 |  | ||||||
|   _globals['_IDENTIFIERHISTORY']._serialized_start=725 |  | ||||||
|   _globals['_IDENTIFIERHISTORY']._serialized_end=807 |  | ||||||
|   _globals['_SHOT']._serialized_start=809 |  | ||||||
|   _globals['_SHOT']._serialized_end=881 |  | ||||||
| # @@protoc_insertion_point(module_scope) |  | ||||||
| @@ -1,86 +0,0 @@ | |||||||
| from google.protobuf.internal import containers as _containers |  | ||||||
| from google.protobuf import descriptor as _descriptor |  | ||||||
| from google.protobuf import message as _message |  | ||||||
| from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union |  | ||||||
|  |  | ||||||
| DESCRIPTOR: _descriptor.FileDescriptor |  | ||||||
|  |  | ||||||
| class Box(_message.Message): |  | ||||||
|     __slots__ = ["left", "top", "width", "height"] |  | ||||||
|     LEFT_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     TOP_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     WIDTH_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     HEIGHT_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     left: float |  | ||||||
|     top: float |  | ||||||
|     width: float |  | ||||||
|     height: float |  | ||||||
|     def __init__(self, left: _Optional[float] = ..., top: _Optional[float] = ..., width: _Optional[float] = ..., height: _Optional[float] = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class Point(_message.Message): |  | ||||||
|     __slots__ = ["x", "y"] |  | ||||||
|     X_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     Y_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     x: float |  | ||||||
|     y: float |  | ||||||
|     def __init__(self, x: _Optional[float] = ..., y: _Optional[float] = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class BallDetection(_message.Message): |  | ||||||
|     __slots__ = ["plane_position", "annotation", "interpolated"] |  | ||||||
|     PLANE_POSITION_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     ANNOTATION_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     INTERPOLATED_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     plane_position: Point |  | ||||||
|     annotation: Box |  | ||||||
|     interpolated: bool |  | ||||||
|     def __init__(self, plane_position: _Optional[_Union[Point, _Mapping]] = ..., annotation: _Optional[_Union[Box, _Mapping]] = ..., interpolated: bool = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class RLEBallDetection(_message.Message): |  | ||||||
|     __slots__ = ["detection", "count"] |  | ||||||
|     DETECTION_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     COUNT_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     detection: BallDetection |  | ||||||
|     count: int |  | ||||||
|     def __init__(self, detection: _Optional[_Union[BallDetection, _Mapping]] = ..., count: _Optional[int] = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class RLEDetectionHistory(_message.Message): |  | ||||||
|     __slots__ = ["detections"] |  | ||||||
|     DETECTIONS_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     detections: _containers.RepeatedCompositeFieldContainer[RLEBallDetection] |  | ||||||
|     def __init__(self, detections: _Optional[_Iterable[_Union[RLEBallDetection, _Mapping]]] = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class DetectionHistory(_message.Message): |  | ||||||
|     __slots__ = ["detections"] |  | ||||||
|     DETECTIONS_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     detections: _containers.RepeatedCompositeFieldContainer[BallDetection] |  | ||||||
|     def __init__(self, detections: _Optional[_Iterable[_Union[BallDetection, _Mapping]]] = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class Path(_message.Message): |  | ||||||
|     __slots__ = ["start_frame", "end_frame", "detections", "rle_detections", "not_present", "is_static"] |  | ||||||
|     START_FRAME_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     END_FRAME_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     DETECTIONS_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     RLE_DETECTIONS_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     NOT_PRESENT_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     IS_STATIC_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     start_frame: int |  | ||||||
|     end_frame: int |  | ||||||
|     detections: DetectionHistory |  | ||||||
|     rle_detections: RLEDetectionHistory |  | ||||||
|     not_present: bool |  | ||||||
|     is_static: bool |  | ||||||
|     def __init__(self, start_frame: _Optional[int] = ..., end_frame: _Optional[int] = ..., detections: _Optional[_Union[DetectionHistory, _Mapping]] = ..., rle_detections: _Optional[_Union[RLEDetectionHistory, _Mapping]] = ..., not_present: bool = ..., is_static: bool = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class IdentifierHistory(_message.Message): |  | ||||||
|     __slots__ = ["ball_identifier", "paths"] |  | ||||||
|     BALL_IDENTIFIER_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     PATHS_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     ball_identifier: int |  | ||||||
|     paths: _containers.RepeatedCompositeFieldContainer[Path] |  | ||||||
|     def __init__(self, ball_identifier: _Optional[int] = ..., paths: _Optional[_Iterable[_Union[Path, _Mapping]]] = ...) -> None: ... |  | ||||||
|  |  | ||||||
| class Shot(_message.Message): |  | ||||||
|     __slots__ = ["identifier_histories"] |  | ||||||
|     IDENTIFIER_HISTORIES_FIELD_NUMBER: _ClassVar[int] |  | ||||||
|     identifier_histories: _containers.RepeatedCompositeFieldContainer[IdentifierHistory] |  | ||||||
|     def __init__(self, identifier_histories: _Optional[_Iterable[_Union[IdentifierHistory, _Mapping]]] = ...) -> None: ... |  | ||||||
| @@ -1,54 +0,0 @@ | |||||||
| syntax = "proto3"; |  | ||||||
|  |  | ||||||
| package serialized_shot; |  | ||||||
|  |  | ||||||
| message Box { |  | ||||||
| 	float left = 1; |  | ||||||
| 	float top = 2; |  | ||||||
| 	float width = 3; |  | ||||||
| 	float height = 4; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message Point { |  | ||||||
|   float x = 1; |  | ||||||
|   float y = 2; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message BallDetection { |  | ||||||
| 	Point plane_position = 1; |  | ||||||
| 	Box annotation = 2; |  | ||||||
| 	bool interpolated = 3; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message RLEBallDetection { |  | ||||||
| 	BallDetection detection = 1; |  | ||||||
| 	uint32 count = 2; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message RLEDetectionHistory { |  | ||||||
|   repeated RLEBallDetection detections = 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message DetectionHistory { |  | ||||||
|   repeated BallDetection detections = 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message Path { |  | ||||||
|   uint32 start_frame = 1; |  | ||||||
|   uint32 end_frame = 2; |  | ||||||
|   oneof detection_history { |  | ||||||
| 	DetectionHistory detections = 3; |  | ||||||
| 	RLEDetectionHistory rle_detections = 4; |  | ||||||
| 	bool not_present = 5; |  | ||||||
|   } |  | ||||||
|   bool is_static = 6; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message IdentifierHistory { |  | ||||||
|   uint32 ball_identifier = 1; |  | ||||||
|   repeated Path paths = 2; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message Shot { |  | ||||||
|   repeated IdentifierHistory identifier_histories = 3; |  | ||||||
| } |  | ||||||
							
								
								
									
										1242
									
								
								rbproto/ts/shot.ts
									
									
									
									
									
								
							
							
						
						
									
										1242
									
								
								rbproto/ts/shot.ts
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										577
									
								
								src/generated/graphql.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										577
									
								
								src/generated/graphql.tsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,577 @@ | |||||||
|  | import { gql } from '@apollo/client'; | ||||||
|  | import * as Apollo from '@apollo/client'; | ||||||
|  | export type Maybe<T> = T | null; | ||||||
|  | export type InputMaybe<T> = Maybe<T>; | ||||||
|  | export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] }; | ||||||
|  | export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> }; | ||||||
|  | export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> }; | ||||||
|  | export type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never }; | ||||||
|  | export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; | ||||||
|  | const defaultOptions = {} as const; | ||||||
|  | /** All built-in and custom scalars, mapped to their actual values */ | ||||||
|  | export type Scalars = { | ||||||
|  |   ID: { input: string; output: string; } | ||||||
|  |   String: { input: string; output: string; } | ||||||
|  |   Boolean: { input: boolean; output: boolean; } | ||||||
|  |   Int: { input: number; output: number; } | ||||||
|  |   Float: { input: number; output: number; } | ||||||
|  |   /** Date with time (isoformat) */ | ||||||
|  |   DateTime: { input: any; output: any; } | ||||||
|  |   /** Decimal (fixed-point) */ | ||||||
|  |   Decimal: { input: any; output: any; } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type AggregateResultGql = { | ||||||
|  |   __typename?: 'AggregateResultGQL'; | ||||||
|  |   featureBuckets: Array<BucketGql>; | ||||||
|  |   targetMetrics: Array<TargetMetricGql>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type AndFilter = { | ||||||
|  |   filters: Array<FilterInput>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type BankFeaturesGql = { | ||||||
|  |   __typename?: 'BankFeaturesGQL'; | ||||||
|  |   bankAngle: Scalars['Float']['output']; | ||||||
|  |   distance: Scalars['Float']['output']; | ||||||
|  |   wallsHit: Array<WallTypeEnum>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type BucketGql = { | ||||||
|  |   __typename?: 'BucketGQL'; | ||||||
|  |   lowerBound: Scalars['Float']['output']; | ||||||
|  |   rangeKey: Scalars['String']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type BucketInputGql = { | ||||||
|  |   lowerBound: Scalars['Float']['input']; | ||||||
|  |   rangeKey: Scalars['String']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type BucketSetGql = { | ||||||
|  |   __typename?: 'BucketSetGQL'; | ||||||
|  |   buckets: Array<BucketGql>; | ||||||
|  |   feature: Scalars['String']['output']; | ||||||
|  |   keyName: Scalars['String']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type BucketSetInputGql = { | ||||||
|  |   buckets: Array<BucketInputGql>; | ||||||
|  |   feature: Scalars['String']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type CreateBucketSetInput = { | ||||||
|  |   buckets: Array<BucketInputGql>; | ||||||
|  |   feature: Scalars['String']['input']; | ||||||
|  |   keyName: Scalars['String']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type CreateUploadStreamReturn = { | ||||||
|  |   __typename?: 'CreateUploadStreamReturn'; | ||||||
|  |   videoId: Scalars['Int']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type CueBallSpeedInput = { | ||||||
|  |   value: RangeFilter; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type CueObjectAngleInput = { | ||||||
|  |   value: RangeFilter; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type CueObjectDistanceInput = { | ||||||
|  |   value: RangeFilter; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type CueObjectFeaturesGql = { | ||||||
|  |   __typename?: 'CueObjectFeaturesGQL'; | ||||||
|  |   cueBallSpeed?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   cueObjectAngle?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   cueObjectDistance?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   shotDirection?: Maybe<ShotDirectionEnum>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export enum DeviceTypeEnum { | ||||||
|  |   Android = 'ANDROID', | ||||||
|  |   Browser = 'BROWSER', | ||||||
|  |   Ios = 'IOS' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export type EnumFilter = { | ||||||
|  |   equals?: InputMaybe<Scalars['String']['input']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type FilterInput = { | ||||||
|  |   andFilters?: InputMaybe<AndFilter>; | ||||||
|  |   cueBallSpeed?: InputMaybe<CueBallSpeedInput>; | ||||||
|  |   cueObjectAngle?: InputMaybe<CueObjectAngleInput>; | ||||||
|  |   cueObjectDistance?: InputMaybe<CueObjectDistanceInput>; | ||||||
|  |   intendedPocketType?: InputMaybe<IntendedPocketTypeInput>; | ||||||
|  |   orFilters?: InputMaybe<OrFilter>; | ||||||
|  |   shotDirection?: InputMaybe<ShotDirectionInput>; | ||||||
|  |   targetPocketDistance?: InputMaybe<TargetPocketDistanceInput>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type GetUploadLinkReturn = { | ||||||
|  |   __typename?: 'GetUploadLinkReturn'; | ||||||
|  |   linksRequested: Scalars['Int']['output']; | ||||||
|  |   uploadUrl: Scalars['String']['output']; | ||||||
|  |   uploadsCompleted: Scalars['Int']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type IntendedPocketTypeInput = { | ||||||
|  |   value: EnumFilter; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type Mutation = { | ||||||
|  |   __typename?: 'Mutation'; | ||||||
|  |   createBucketSet: BucketSetGql; | ||||||
|  |   createUploadStream: CreateUploadStreamReturn; | ||||||
|  |   getUploadLink: GetUploadLinkReturn; | ||||||
|  |   processVideoSource: ProcessVideoSourceReturn; | ||||||
|  |   terminateUploadStream: Scalars['Boolean']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type MutationCreateBucketSetArgs = { | ||||||
|  |   params: CreateBucketSetInput; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type MutationCreateUploadStreamArgs = { | ||||||
|  |   uploadMetadata?: InputMaybe<UploadMetadataInput>; | ||||||
|  |   videoName?: InputMaybe<Scalars['String']['input']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type MutationGetUploadLinkArgs = { | ||||||
|  |   chunkIndex: Scalars['Int']['input']; | ||||||
|  |   videoId: Scalars['Int']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type MutationProcessVideoSourceArgs = { | ||||||
|  |   input: ProcessVideoSourceInput; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type MutationTerminateUploadStreamArgs = { | ||||||
|  |   videoId: Scalars['Int']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type OrFilter = { | ||||||
|  |   filters: Array<FilterInput>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export enum PocketEnum { | ||||||
|  |   Corner = 'CORNER', | ||||||
|  |   Side = 'SIDE' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export type PocketingIntentionFeaturesGql = { | ||||||
|  |   __typename?: 'PocketingIntentionFeaturesGQL'; | ||||||
|  |   intendedPocketType?: Maybe<PocketEnum>; | ||||||
|  |   make?: Maybe<Scalars['Boolean']['output']>; | ||||||
|  |   targetPocketDistance?: Maybe<Scalars['Float']['output']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type ProcessVideoSourceInput = { | ||||||
|  |   val: Scalars['Int']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type ProcessVideoSourceReturn = { | ||||||
|  |   __typename?: 'ProcessVideoSourceReturn'; | ||||||
|  |   val: Scalars['Int']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type Query = { | ||||||
|  |   __typename?: 'Query'; | ||||||
|  |   getAggregateShots: Array<AggregateResultGql>; | ||||||
|  |   getBucketSet?: Maybe<BucketSetGql>; | ||||||
|  |   getShots: Array<ShotGql>; | ||||||
|  |   getUser?: Maybe<UserGql>; | ||||||
|  |   getVideo: VideoGql; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type QueryGetAggregateShotsArgs = { | ||||||
|  |   bucketSets: Array<BucketSetInputGql>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type QueryGetBucketSetArgs = { | ||||||
|  |   keyName: Scalars['String']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type QueryGetShotsArgs = { | ||||||
|  |   filterInput?: InputMaybe<FilterInput>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type QueryGetUserArgs = { | ||||||
|  |   userId: Scalars['Int']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type QueryGetVideoArgs = { | ||||||
|  |   videoId: Scalars['Int']['input']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type RangeFilter = { | ||||||
|  |   greaterThanEqualTo?: InputMaybe<Scalars['Float']['input']>; | ||||||
|  |   lessThan?: InputMaybe<Scalars['Float']['input']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export enum ShotDirectionEnum { | ||||||
|  |   Left = 'LEFT', | ||||||
|  |   Right = 'RIGHT', | ||||||
|  |   Straight = 'STRAIGHT' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export type ShotDirectionInput = { | ||||||
|  |   value: EnumFilter; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type ShotFeaturesGql = { | ||||||
|  |   __typename?: 'ShotFeaturesGQL'; | ||||||
|  |   bank?: Maybe<BankFeaturesGql>; | ||||||
|  |   cueBallSpeed?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   cueObjectAngle?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   cueObjectDistance?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   intendedPocket?: Maybe<PocketEnum>; | ||||||
|  |   shotDirection?: Maybe<ShotDirectionEnum>; | ||||||
|  |   targetPocketDistance?: Maybe<Scalars['Float']['output']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type ShotGql = { | ||||||
|  |   __typename?: 'ShotGQL'; | ||||||
|  |   createdAt?: Maybe<Scalars['DateTime']['output']>; | ||||||
|  |   cueObjectFeatures?: Maybe<CueObjectFeaturesGql>; | ||||||
|  |   endFrame?: Maybe<Scalars['Int']['output']>; | ||||||
|  |   features?: Maybe<ShotFeaturesGql>; | ||||||
|  |   id?: Maybe<Scalars['Int']['output']>; | ||||||
|  |   pocketingIntentionFeatures?: Maybe<PocketingIntentionFeaturesGql>; | ||||||
|  |   startFrame?: Maybe<Scalars['Int']['output']>; | ||||||
|  |   updatedAt?: Maybe<Scalars['DateTime']['output']>; | ||||||
|  |   videoId?: Maybe<Scalars['Int']['output']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type TargetFloatFeatureGql = { | ||||||
|  |   __typename?: 'TargetFloatFeatureGQL'; | ||||||
|  |   average?: Maybe<Scalars['Float']['output']>; | ||||||
|  |   featureName: Scalars['String']['output']; | ||||||
|  |   median?: Maybe<Scalars['Float']['output']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type TargetMetricGql = { | ||||||
|  |   __typename?: 'TargetMetricGQL'; | ||||||
|  |   count?: Maybe<Scalars['Int']['output']>; | ||||||
|  |   floatFeature?: Maybe<TargetFloatFeatureGql>; | ||||||
|  |   makePercentage?: Maybe<Scalars['Float']['output']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type TargetPocketDistanceInput = { | ||||||
|  |   value: RangeFilter; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type UploadMetadataInput = { | ||||||
|  |   appVersion?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   browserName?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   browserVersion?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   deviceType?: InputMaybe<DeviceTypeEnum>; | ||||||
|  |   ipAddress?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   locale?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   networkType?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   osVersion?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   timezone?: InputMaybe<Scalars['String']['input']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type UploadStreamGql = { | ||||||
|  |   __typename?: 'UploadStreamGQL'; | ||||||
|  |   createdAt: Scalars['DateTime']['output']; | ||||||
|  |   id: Scalars['ID']['output']; | ||||||
|  |   isCompleted: Scalars['Boolean']['output']; | ||||||
|  |   linksRequested: Scalars['Int']['output']; | ||||||
|  |   updatedAt: Scalars['DateTime']['output']; | ||||||
|  |   uploadMetadata: UploadStreamMetadata; | ||||||
|  |   uploadsCompleted: Scalars['Int']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type UploadStreamMetadata = { | ||||||
|  |   __typename?: 'UploadStreamMetadata'; | ||||||
|  |   appVersion?: Maybe<Scalars['String']['output']>; | ||||||
|  |   browserName?: Maybe<Scalars['String']['output']>; | ||||||
|  |   browserVersion?: Maybe<Scalars['String']['output']>; | ||||||
|  |   deviceType?: Maybe<DeviceTypeEnum>; | ||||||
|  |   ipAddress?: Maybe<Scalars['String']['output']>; | ||||||
|  |   locale?: Maybe<Scalars['String']['output']>; | ||||||
|  |   networkType?: Maybe<Scalars['String']['output']>; | ||||||
|  |   osVersion?: Maybe<Scalars['String']['output']>; | ||||||
|  |   timezone?: Maybe<Scalars['String']['output']>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type UserGql = { | ||||||
|  |   __typename?: 'UserGQL'; | ||||||
|  |   createdAt?: Maybe<Scalars['DateTime']['output']>; | ||||||
|  |   id: Scalars['Int']['output']; | ||||||
|  |   statistics: UserStatisticsGql; | ||||||
|  |   updatedAt?: Maybe<Scalars['DateTime']['output']>; | ||||||
|  |   username: Scalars['String']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type UserStatisticsGql = { | ||||||
|  |   __typename?: 'UserStatisticsGQL'; | ||||||
|  |   averageTimeBetweenShots: Scalars['Decimal']['output']; | ||||||
|  |   makePercentage: Scalars['Decimal']['output']; | ||||||
|  |   medianRun?: Maybe<Scalars['Decimal']['output']>; | ||||||
|  |   timeSpentPlaying: Scalars['Decimal']['output']; | ||||||
|  |   totalShots: Scalars['Int']['output']; | ||||||
|  |   totalShotsMade: Scalars['Int']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export type VideoGql = { | ||||||
|  |   __typename?: 'VideoGQL'; | ||||||
|  |   averageTimeBetweenShots?: Maybe<Scalars['Decimal']['output']>; | ||||||
|  |   createdAt: Scalars['DateTime']['output']; | ||||||
|  |   elapsedTime: Scalars['Decimal']['output']; | ||||||
|  |   endTime: Scalars['DateTime']['output']; | ||||||
|  |   framesPerSecond: Scalars['Int']['output']; | ||||||
|  |   id: Scalars['Int']['output']; | ||||||
|  |   makePercentage: Scalars['Decimal']['output']; | ||||||
|  |   medianRun: Scalars['Decimal']['output']; | ||||||
|  |   shots: Array<ShotGql>; | ||||||
|  |   startTime: Scalars['DateTime']['output']; | ||||||
|  |   stream?: Maybe<UploadStreamGql>; | ||||||
|  |   totalFrames: Scalars['Int']['output']; | ||||||
|  |   totalShots: Scalars['Int']['output']; | ||||||
|  |   totalShotsMade: Scalars['Int']['output']; | ||||||
|  |   updatedAt: Scalars['DateTime']['output']; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export enum WallTypeEnum { | ||||||
|  |   Long = 'LONG', | ||||||
|  |   Short = 'SHORT' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export type GetShotsQueryVariables = Exact<{ | ||||||
|  |   filterInput?: InputMaybe<FilterInput>; | ||||||
|  |   includeCueObjectDistance?: Scalars['Boolean']['input']; | ||||||
|  |   includeCueObjectAngle?: Scalars['Boolean']['input']; | ||||||
|  |   includeCueBallSpeed?: Scalars['Boolean']['input']; | ||||||
|  |   includeShotDirection?: Scalars['Boolean']['input']; | ||||||
|  |   includeTargetPocketDistance?: Scalars['Boolean']['input']; | ||||||
|  |   includeMake?: Scalars['Boolean']['input']; | ||||||
|  |   includeIntendedPocketType?: Scalars['Boolean']['input']; | ||||||
|  | }>; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type GetShotsQuery = { __typename?: 'Query', getShots: Array<{ __typename?: 'ShotGQL', id?: number | null, videoId?: number | null, startFrame?: number | null, endFrame?: number | null, createdAt?: any | null, updatedAt?: any | null, cueObjectFeatures?: { __typename?: 'CueObjectFeaturesGQL', cueObjectDistance?: number | null, cueObjectAngle?: number | null, cueBallSpeed?: number | null, shotDirection?: ShotDirectionEnum | null } | null, pocketingIntentionFeatures?: { __typename?: 'PocketingIntentionFeaturesGQL', targetPocketDistance?: number | null, make?: boolean | null, intendedPocketType?: PocketEnum | null } | null }> }; | ||||||
|  |  | ||||||
|  | export type CreateUploadStreamMutationVariables = Exact<{ | ||||||
|  |   videoName: Scalars['String']['input']; | ||||||
|  |   deviceType?: InputMaybe<DeviceTypeEnum>; | ||||||
|  |   osVersion?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   appVersion?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   browserName?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   browserVersion?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   locale?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   timezone?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   networkType?: InputMaybe<Scalars['String']['input']>; | ||||||
|  |   ipAddress?: InputMaybe<Scalars['String']['input']>; | ||||||
|  | }>; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type CreateUploadStreamMutation = { __typename?: 'Mutation', createUploadStream: { __typename?: 'CreateUploadStreamReturn', videoId: number } }; | ||||||
|  |  | ||||||
|  | export type GetUploadLinkMutationVariables = Exact<{ | ||||||
|  |   videoId: Scalars['Int']['input']; | ||||||
|  |   chunkIndex: Scalars['Int']['input']; | ||||||
|  | }>; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type GetUploadLinkMutation = { __typename?: 'Mutation', getUploadLink: { __typename?: 'GetUploadLinkReturn', uploadUrl: string, linksRequested: number } }; | ||||||
|  |  | ||||||
|  | export type TerminateUploadStreamMutationVariables = Exact<{ | ||||||
|  |   videoId: Scalars['Int']['input']; | ||||||
|  | }>; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export type TerminateUploadStreamMutation = { __typename?: 'Mutation', terminateUploadStream: boolean }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export const GetShotsDocument = gql` | ||||||
|  |     query GetShots($filterInput: FilterInput, $includeCueObjectDistance: Boolean! = false, $includeCueObjectAngle: Boolean! = false, $includeCueBallSpeed: Boolean! = false, $includeShotDirection: Boolean! = false, $includeTargetPocketDistance: Boolean! = false, $includeMake: Boolean! = false, $includeIntendedPocketType: Boolean! = false) { | ||||||
|  |   getShots(filterInput: $filterInput) { | ||||||
|  |     id | ||||||
|  |     videoId | ||||||
|  |     startFrame | ||||||
|  |     endFrame | ||||||
|  |     createdAt | ||||||
|  |     updatedAt | ||||||
|  |     cueObjectFeatures { | ||||||
|  |       cueObjectDistance @include(if: $includeCueObjectDistance) | ||||||
|  |       cueObjectAngle @include(if: $includeCueObjectAngle) | ||||||
|  |       cueBallSpeed @include(if: $includeCueBallSpeed) | ||||||
|  |       shotDirection @include(if: $includeShotDirection) | ||||||
|  |     } | ||||||
|  |     pocketingIntentionFeatures { | ||||||
|  |       targetPocketDistance @include(if: $includeTargetPocketDistance) | ||||||
|  |       make @include(if: $includeMake) | ||||||
|  |       intendedPocketType @include(if: $includeIntendedPocketType) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |     `; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * __useGetShotsQuery__ | ||||||
|  |  * | ||||||
|  |  * To run a query within a React component, call `useGetShotsQuery` and pass it any options that fit your needs. | ||||||
|  |  * When your component renders, `useGetShotsQuery` 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 } = useGetShotsQuery({ | ||||||
|  |  *   variables: { | ||||||
|  |  *      filterInput: // value for 'filterInput' | ||||||
|  |  *      includeCueObjectDistance: // value for 'includeCueObjectDistance' | ||||||
|  |  *      includeCueObjectAngle: // value for 'includeCueObjectAngle' | ||||||
|  |  *      includeCueBallSpeed: // value for 'includeCueBallSpeed' | ||||||
|  |  *      includeShotDirection: // value for 'includeShotDirection' | ||||||
|  |  *      includeTargetPocketDistance: // value for 'includeTargetPocketDistance' | ||||||
|  |  *      includeMake: // value for 'includeMake' | ||||||
|  |  *      includeIntendedPocketType: // value for 'includeIntendedPocketType' | ||||||
|  |  *   }, | ||||||
|  |  * }); | ||||||
|  |  */ | ||||||
|  | export function useGetShotsQuery(baseOptions?: Apollo.QueryHookOptions<GetShotsQuery, GetShotsQueryVariables>) { | ||||||
|  |         const options = {...defaultOptions, ...baseOptions} | ||||||
|  |         return Apollo.useQuery<GetShotsQuery, GetShotsQueryVariables>(GetShotsDocument, options); | ||||||
|  |       } | ||||||
|  | export function useGetShotsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetShotsQuery, GetShotsQueryVariables>) { | ||||||
|  |           const options = {...defaultOptions, ...baseOptions} | ||||||
|  |           return Apollo.useLazyQuery<GetShotsQuery, GetShotsQueryVariables>(GetShotsDocument, options); | ||||||
|  |         } | ||||||
|  | export function useGetShotsSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions<GetShotsQuery, GetShotsQueryVariables>) { | ||||||
|  |           const options = {...defaultOptions, ...baseOptions} | ||||||
|  |           return Apollo.useSuspenseQuery<GetShotsQuery, GetShotsQueryVariables>(GetShotsDocument, options); | ||||||
|  |         } | ||||||
|  | export type GetShotsQueryHookResult = ReturnType<typeof useGetShotsQuery>; | ||||||
|  | export type GetShotsLazyQueryHookResult = ReturnType<typeof useGetShotsLazyQuery>; | ||||||
|  | export type GetShotsSuspenseQueryHookResult = ReturnType<typeof useGetShotsSuspenseQuery>; | ||||||
|  | export type GetShotsQueryResult = Apollo.QueryResult<GetShotsQuery, GetShotsQueryVariables>; | ||||||
|  | export const CreateUploadStreamDocument = gql` | ||||||
|  |     mutation CreateUploadStream($videoName: String!, $deviceType: DeviceTypeEnum, $osVersion: String, $appVersion: String, $browserName: String, $browserVersion: String, $locale: String, $timezone: String, $networkType: String, $ipAddress: String) { | ||||||
|  |   createUploadStream( | ||||||
|  |     videoName: $videoName | ||||||
|  |     uploadMetadata: {deviceType: $deviceType, osVersion: $osVersion, appVersion: $appVersion, browserName: $browserName, browserVersion: $browserVersion, locale: $locale, timezone: $timezone, networkType: $networkType, ipAddress: $ipAddress} | ||||||
|  |   ) { | ||||||
|  |     videoId | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |     `; | ||||||
|  | export type CreateUploadStreamMutationFn = Apollo.MutationFunction<CreateUploadStreamMutation, CreateUploadStreamMutationVariables>; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * __useCreateUploadStreamMutation__ | ||||||
|  |  * | ||||||
|  |  * To run a mutation, you first call `useCreateUploadStreamMutation` within a React component and pass it any options that fit your needs. | ||||||
|  |  * When your component renders, `useCreateUploadStreamMutation` returns a tuple that includes: | ||||||
|  |  * - A mutate function that you can call at any time to execute the mutation | ||||||
|  |  * - An object with fields that represent the current status of the mutation's execution | ||||||
|  |  * | ||||||
|  |  * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; | ||||||
|  |  * | ||||||
|  |  * @example | ||||||
|  |  * const [createUploadStreamMutation, { data, loading, error }] = useCreateUploadStreamMutation({ | ||||||
|  |  *   variables: { | ||||||
|  |  *      videoName: // value for 'videoName' | ||||||
|  |  *      deviceType: // value for 'deviceType' | ||||||
|  |  *      osVersion: // value for 'osVersion' | ||||||
|  |  *      appVersion: // value for 'appVersion' | ||||||
|  |  *      browserName: // value for 'browserName' | ||||||
|  |  *      browserVersion: // value for 'browserVersion' | ||||||
|  |  *      locale: // value for 'locale' | ||||||
|  |  *      timezone: // value for 'timezone' | ||||||
|  |  *      networkType: // value for 'networkType' | ||||||
|  |  *      ipAddress: // value for 'ipAddress' | ||||||
|  |  *   }, | ||||||
|  |  * }); | ||||||
|  |  */ | ||||||
|  | export function useCreateUploadStreamMutation(baseOptions?: Apollo.MutationHookOptions<CreateUploadStreamMutation, CreateUploadStreamMutationVariables>) { | ||||||
|  |         const options = {...defaultOptions, ...baseOptions} | ||||||
|  |         return Apollo.useMutation<CreateUploadStreamMutation, CreateUploadStreamMutationVariables>(CreateUploadStreamDocument, options); | ||||||
|  |       } | ||||||
|  | export type CreateUploadStreamMutationHookResult = ReturnType<typeof useCreateUploadStreamMutation>; | ||||||
|  | export type CreateUploadStreamMutationResult = Apollo.MutationResult<CreateUploadStreamMutation>; | ||||||
|  | export type CreateUploadStreamMutationOptions = Apollo.BaseMutationOptions<CreateUploadStreamMutation, CreateUploadStreamMutationVariables>; | ||||||
|  | export const GetUploadLinkDocument = gql` | ||||||
|  |     mutation GetUploadLink($videoId: Int!, $chunkIndex: Int!) { | ||||||
|  |   getUploadLink(videoId: $videoId, chunkIndex: $chunkIndex) { | ||||||
|  |     uploadUrl | ||||||
|  |     linksRequested | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |     `; | ||||||
|  | export type GetUploadLinkMutationFn = Apollo.MutationFunction<GetUploadLinkMutation, GetUploadLinkMutationVariables>; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * __useGetUploadLinkMutation__ | ||||||
|  |  * | ||||||
|  |  * To run a mutation, you first call `useGetUploadLinkMutation` within a React component and pass it any options that fit your needs. | ||||||
|  |  * When your component renders, `useGetUploadLinkMutation` returns a tuple that includes: | ||||||
|  |  * - A mutate function that you can call at any time to execute the mutation | ||||||
|  |  * - An object with fields that represent the current status of the mutation's execution | ||||||
|  |  * | ||||||
|  |  * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; | ||||||
|  |  * | ||||||
|  |  * @example | ||||||
|  |  * const [getUploadLinkMutation, { data, loading, error }] = useGetUploadLinkMutation({ | ||||||
|  |  *   variables: { | ||||||
|  |  *      videoId: // value for 'videoId' | ||||||
|  |  *      chunkIndex: // value for 'chunkIndex' | ||||||
|  |  *   }, | ||||||
|  |  * }); | ||||||
|  |  */ | ||||||
|  | export function useGetUploadLinkMutation(baseOptions?: Apollo.MutationHookOptions<GetUploadLinkMutation, GetUploadLinkMutationVariables>) { | ||||||
|  |         const options = {...defaultOptions, ...baseOptions} | ||||||
|  |         return Apollo.useMutation<GetUploadLinkMutation, GetUploadLinkMutationVariables>(GetUploadLinkDocument, options); | ||||||
|  |       } | ||||||
|  | export type GetUploadLinkMutationHookResult = ReturnType<typeof useGetUploadLinkMutation>; | ||||||
|  | export type GetUploadLinkMutationResult = Apollo.MutationResult<GetUploadLinkMutation>; | ||||||
|  | export type GetUploadLinkMutationOptions = Apollo.BaseMutationOptions<GetUploadLinkMutation, GetUploadLinkMutationVariables>; | ||||||
|  | export const TerminateUploadStreamDocument = gql` | ||||||
|  |     mutation TerminateUploadStream($videoId: Int!) { | ||||||
|  |   terminateUploadStream(videoId: $videoId) | ||||||
|  | } | ||||||
|  |     `; | ||||||
|  | export type TerminateUploadStreamMutationFn = Apollo.MutationFunction<TerminateUploadStreamMutation, TerminateUploadStreamMutationVariables>; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * __useTerminateUploadStreamMutation__ | ||||||
|  |  * | ||||||
|  |  * To run a mutation, you first call `useTerminateUploadStreamMutation` within a React component and pass it any options that fit your needs. | ||||||
|  |  * When your component renders, `useTerminateUploadStreamMutation` returns a tuple that includes: | ||||||
|  |  * - A mutate function that you can call at any time to execute the mutation | ||||||
|  |  * - An object with fields that represent the current status of the mutation's execution | ||||||
|  |  * | ||||||
|  |  * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; | ||||||
|  |  * | ||||||
|  |  * @example | ||||||
|  |  * const [terminateUploadStreamMutation, { data, loading, error }] = useTerminateUploadStreamMutation({ | ||||||
|  |  *   variables: { | ||||||
|  |  *      videoId: // value for 'videoId' | ||||||
|  |  *   }, | ||||||
|  |  * }); | ||||||
|  |  */ | ||||||
|  | export function useTerminateUploadStreamMutation(baseOptions?: Apollo.MutationHookOptions<TerminateUploadStreamMutation, TerminateUploadStreamMutationVariables>) { | ||||||
|  |         const options = {...defaultOptions, ...baseOptions} | ||||||
|  |         return Apollo.useMutation<TerminateUploadStreamMutation, TerminateUploadStreamMutationVariables>(TerminateUploadStreamDocument, options); | ||||||
|  |       } | ||||||
|  | export type TerminateUploadStreamMutationHookResult = ReturnType<typeof useTerminateUploadStreamMutation>; | ||||||
|  | export type TerminateUploadStreamMutationResult = Apollo.MutationResult<TerminateUploadStreamMutation>; | ||||||
|  | export type TerminateUploadStreamMutationOptions = Apollo.BaseMutationOptions<TerminateUploadStreamMutation, TerminateUploadStreamMutationVariables>; | ||||||
							
								
								
									
										4973
									
								
								src/index.tsx
									
									
									
									
									
								
							
							
						
						
									
										4973
									
								
								src/index.tsx
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,12 +0,0 @@ | |||||||
| query GetAggregatedShotMetrics($aggregateInput: AggregateInputGQL!) { |  | ||||||
|   getAggregatedShotMetrics(aggregateInput: $aggregateInput) { |  | ||||||
|     aggregationIdentifiers { |  | ||||||
|       featureName |  | ||||||
|       groupName |  | ||||||
|     } |  | ||||||
|     targetMetrics { |  | ||||||
|       count |  | ||||||
|       makePercentage |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| query getDeployedConfig { |  | ||||||
|   getDeployedConfig { |  | ||||||
|     allowNewUsers |  | ||||||
|     devMode |  | ||||||
|     environment |  | ||||||
|     firebase |  | ||||||
|     minimumAllowedAppVersion |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,39 +0,0 @@ | |||||||
| query GetFeed( |  | ||||||
|   $limit: Int! = 5 |  | ||||||
|   $after: String = null |  | ||||||
|   $filters: VideoFilterInput = null |  | ||||||
| ) { |  | ||||||
|   getUserVideos(limit: $limit, after: $after, filters: $filters) { |  | ||||||
|     videos { |  | ||||||
|       id |  | ||||||
|       owner { |  | ||||||
|         username |  | ||||||
|       } |  | ||||||
|       name |  | ||||||
|       screenshotUri |  | ||||||
|       totalShotsMade |  | ||||||
|       totalShots |  | ||||||
|       makePercentage |  | ||||||
|       createdAt |  | ||||||
|       updatedAt |  | ||||||
|       startTime |  | ||||||
|       endTime |  | ||||||
|       elapsedTime |  | ||||||
|       screenshotUri |  | ||||||
|       stream { |  | ||||||
|         isCompleted |  | ||||||
|       } |  | ||||||
|       tableSize |  | ||||||
|       tags { |  | ||||||
|         tagClasses { |  | ||||||
|           name |  | ||||||
|         } |  | ||||||
|         name |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     pageInfo { |  | ||||||
|       hasNextPage |  | ||||||
|       endCursor |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| query GetVideoMakePercentageIntervals($videoId: ID!, $intervalDuration: Int!) { |  | ||||||
|   getVideoMakePercentageIntervals( |  | ||||||
|     videoId: $videoId |  | ||||||
|     intervalDuration: $intervalDuration |  | ||||||
|   ) { |  | ||||||
|     makePercentage |  | ||||||
|     elapsedTime |  | ||||||
|   } |  | ||||||
| } |  | ||||||
							
								
								
									
										30
									
								
								src/operations/shot_data.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/operations/shot_data.gql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | query GetShots( | ||||||
|  | 	$filterInput: FilterInput | ||||||
|  | 	$includeCueObjectDistance: Boolean! = false | ||||||
|  | 	$includeCueObjectAngle: Boolean! = false | ||||||
|  | 	$includeCueBallSpeed: Boolean! = false | ||||||
|  | 	$includeShotDirection: Boolean! = false | ||||||
|  | 	$includeTargetPocketDistance: Boolean! = false | ||||||
|  | 	$includeMake: Boolean! = false | ||||||
|  | 	$includeIntendedPocketType: Boolean! = false | ||||||
|  | ) { | ||||||
|  | 	getShots(filterInput: $filterInput) { | ||||||
|  | 		id | ||||||
|  | 		videoId | ||||||
|  | 		startFrame | ||||||
|  | 		endFrame | ||||||
|  | 		createdAt | ||||||
|  | 		updatedAt | ||||||
|  | 		cueObjectFeatures { | ||||||
|  | 			cueObjectDistance @include(if: $includeCueObjectDistance) | ||||||
|  | 			cueObjectAngle @include(if: $includeCueObjectAngle) | ||||||
|  | 			cueBallSpeed @include(if: $includeCueBallSpeed) | ||||||
|  | 			shotDirection @include(if: $includeShotDirection) | ||||||
|  | 		} | ||||||
|  | 		pocketingIntentionFeatures { | ||||||
|  | 			targetPocketDistance @include(if: $includeTargetPocketDistance) | ||||||
|  | 			make @include(if: $includeMake) | ||||||
|  | 			intendedPocketType @include(if: $includeIntendedPocketType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -1,133 +0,0 @@ | |||||||
| query GetShots( |  | ||||||
|   $filterInput: FilterInput! |  | ||||||
|   $shotsPagination: GetShotsPagination |  | ||||||
|   $limit: Int |  | ||||||
|   $includeCreatedAt: Boolean! = false |  | ||||||
|   $includeUpdatedAt: Boolean! = false |  | ||||||
|   $includeCueObjectFeatures: Boolean! = false |  | ||||||
|   $includePocketingIntentionFeatures: Boolean! = false |  | ||||||
|   $includeCueObjectDistance: Boolean! = false |  | ||||||
|   $includeCueObjectAngle: Boolean! = false |  | ||||||
|   $includeCueBallSpeed: Boolean! = false |  | ||||||
|   $includeSpinType: Boolean! = false |  | ||||||
|   $includeShotDirection: Boolean! = false |  | ||||||
|   $includeTargetPocketDistance: Boolean! = false |  | ||||||
|   $includeMake: Boolean! = false |  | ||||||
|   $includeIntendedPocketType: Boolean! = false |  | ||||||
| ) { |  | ||||||
|   getShots( |  | ||||||
|     filterInput: $filterInput |  | ||||||
|     shotsPagination: $shotsPagination |  | ||||||
|     limit: $limit |  | ||||||
|   ) { |  | ||||||
|     id |  | ||||||
|     videoId |  | ||||||
|     startFrame |  | ||||||
|     endFrame |  | ||||||
|     user { |  | ||||||
|       id |  | ||||||
|     } |  | ||||||
|     falsePositiveScore |  | ||||||
|     video { |  | ||||||
|       stream { |  | ||||||
|         resolution { |  | ||||||
|           width |  | ||||||
|           height |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     createdAt @include(if: $includeCreatedAt) |  | ||||||
|     updatedAt @include(if: $includeUpdatedAt) |  | ||||||
|     cueObjectFeatures @include(if: $includeCueObjectFeatures) { |  | ||||||
|       cueObjectDistance @include(if: $includeCueObjectDistance) |  | ||||||
|       cueObjectAngle @include(if: $includeCueObjectAngle) |  | ||||||
|       cueBallSpeed @include(if: $includeCueBallSpeed) |  | ||||||
|       shotDirection @include(if: $includeShotDirection) |  | ||||||
|       spinType @include(if: $includeSpinType) |  | ||||||
|     } |  | ||||||
|     pocketingIntentionFeatures |  | ||||||
|       @include(if: $includePocketingIntentionFeatures) { |  | ||||||
|       targetPocketDistance @include(if: $includeTargetPocketDistance) |  | ||||||
|       make @include(if: $includeMake) |  | ||||||
|       intendedPocketType @include(if: $includeIntendedPocketType) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetSerializedShotPaths($filterInput: FilterInput!) { |  | ||||||
|   getShots(filterInput: $filterInput) { |  | ||||||
|     id |  | ||||||
|     videoId |  | ||||||
|     startFrame |  | ||||||
|     endFrame |  | ||||||
|     serializedShotPaths { |  | ||||||
|       b64EncodedBuffer |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetShotAnnotationTypes { |  | ||||||
|   getShotAnnotationTypes { |  | ||||||
|     id |  | ||||||
|     name |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetShotsWithMetadata( |  | ||||||
|   $filterInput: FilterInput! |  | ||||||
|   $shotsPagination: GetShotsPagination |  | ||||||
|   $limit: Int |  | ||||||
|   $includeCreatedAt: Boolean! = false |  | ||||||
|   $includeUpdatedAt: Boolean! = false |  | ||||||
|   $includeCueObjectFeatures: Boolean! = false |  | ||||||
|   $includePocketingIntentionFeatures: Boolean! = false |  | ||||||
|   $includeCueObjectDistance: Boolean! = false |  | ||||||
|   $includeCueObjectAngle: Boolean! = false |  | ||||||
|   $includeCueBallSpeed: Boolean! = false |  | ||||||
|   $includeSpinType: Boolean! = false |  | ||||||
|   $includeShotDirection: Boolean! = false |  | ||||||
|   $includeTargetPocketDistance: Boolean! = false |  | ||||||
|   $includeMake: Boolean! = false |  | ||||||
|   $includeIntendedPocketType: Boolean! = false |  | ||||||
| ) { |  | ||||||
|   getShotsWithMetadata( |  | ||||||
|     filterInput: $filterInput |  | ||||||
|     shotsPagination: $shotsPagination |  | ||||||
|     limit: $limit |  | ||||||
|   ) { |  | ||||||
|     count |  | ||||||
|     shots { |  | ||||||
|       id |  | ||||||
|       videoId |  | ||||||
|       startFrame |  | ||||||
|       endFrame |  | ||||||
|       user { |  | ||||||
|         id |  | ||||||
|       } |  | ||||||
|       falsePositiveScore |  | ||||||
|       video { |  | ||||||
|         stream { |  | ||||||
|           resolution { |  | ||||||
|             width |  | ||||||
|             height |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       createdAt @include(if: $includeCreatedAt) |  | ||||||
|       updatedAt @include(if: $includeUpdatedAt) |  | ||||||
|       cueObjectFeatures @include(if: $includeCueObjectFeatures) { |  | ||||||
|         cueObjectDistance @include(if: $includeCueObjectDistance) |  | ||||||
|         cueObjectAngle @include(if: $includeCueObjectAngle) |  | ||||||
|         cueBallSpeed @include(if: $includeCueBallSpeed) |  | ||||||
|         shotDirection @include(if: $includeShotDirection) |  | ||||||
|         spinType @include(if: $includeSpinType) |  | ||||||
|       } |  | ||||||
|       pocketingIntentionFeatures |  | ||||||
|         @include(if: $includePocketingIntentionFeatures) { |  | ||||||
|         targetPocketDistance @include(if: $includeTargetPocketDistance) |  | ||||||
|         make @include(if: $includeMake) |  | ||||||
|         intendedPocketType @include(if: $includeIntendedPocketType) |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,58 +0,0 @@ | |||||||
| mutation getProfileImageUploadLink($fileExt: String = ".png") { |  | ||||||
|   getProfileImageUploadLink(fileExt: $fileExt) { |  | ||||||
|     value { |  | ||||||
|       ... on UploadLink { |  | ||||||
|         uploadUrl |  | ||||||
|         headers { |  | ||||||
|           key |  | ||||||
|           value |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       ... on GetProfileUploadLinkErrors { |  | ||||||
|         error { |  | ||||||
|           ... on TooManyProfileImageUploadsErr { |  | ||||||
|             linksRequested |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mutation editProfileImageUri($profileImageUri: String!) { |  | ||||||
|   editProfileImageUri(profileImageUri: $profileImageUri) { |  | ||||||
|     id |  | ||||||
|     firebaseUid |  | ||||||
|     username |  | ||||||
|     profileImageUri |  | ||||||
|     createdAt |  | ||||||
|     updatedAt |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query getLoggedInUser { |  | ||||||
|   getLoggedInUser { |  | ||||||
|     id |  | ||||||
|     firebaseUid |  | ||||||
|     username |  | ||||||
|     isAdmin |  | ||||||
|     profileImageUri |  | ||||||
|     activeVideoId |  | ||||||
|     createdAt |  | ||||||
|     updatedAt |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetUserPlayTime($userId: Int!) { |  | ||||||
|   getPlayTime(userId: $userId) { |  | ||||||
|     totalSeconds |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query getUsernames( |  | ||||||
|   $matchString: String! |  | ||||||
|   $limit: Int = null |  | ||||||
|   $after: String = null |  | ||||||
| ) { |  | ||||||
|   getUsernames(matchString: $matchString, limit: $limit, after: $after) |  | ||||||
| } |  | ||||||
| @@ -1,239 +0,0 @@ | |||||||
| query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) { |  | ||||||
|   getVideo(videoId: $videoId, debuggingJson: $debuggingJson) { |  | ||||||
|     id |  | ||||||
|     totalShots |  | ||||||
|     makePercentage |  | ||||||
|     elapsedTime |  | ||||||
|     homographyHistory { |  | ||||||
|       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 { |  | ||||||
|       linksRequested |  | ||||||
|       uploadsCompleted |  | ||||||
|       segmentProcessingCursor |  | ||||||
|       isCompleted |  | ||||||
|       uploadCompletionCursor |  | ||||||
|       lastIntendedSegmentBound |  | ||||||
|       initPlaylistUploadStatus |  | ||||||
|     } |  | ||||||
|     currentProcessing { |  | ||||||
|       errors { |  | ||||||
|         message |  | ||||||
|         startSegmentIndex |  | ||||||
|         endSegmentIndex |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetVideoUpdatePageDetails($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     name |  | ||||||
|     totalShots |  | ||||||
|     makePercentage |  | ||||||
|     elapsedTime |  | ||||||
|     tableSize |  | ||||||
|     tags { |  | ||||||
|       tagClasses { |  | ||||||
|         name |  | ||||||
|       } |  | ||||||
|       name |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mutation DeleteVideo($videoId: Int!) { |  | ||||||
|   deleteVideo(videoId: $videoId) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetVideoDetails($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     name |  | ||||||
|     screenshotUri |  | ||||||
|     averageTimeBetweenShots |  | ||||||
|     elapsedTime |  | ||||||
|     endTime |  | ||||||
|     makePercentage |  | ||||||
|     medianRun |  | ||||||
|     startTime |  | ||||||
|     totalShots |  | ||||||
|     totalShotsMade |  | ||||||
|     createdAt |  | ||||||
|     updatedAt |  | ||||||
|     tableSize |  | ||||||
|     owner { |  | ||||||
|       id |  | ||||||
|       firebaseUid |  | ||||||
|       username |  | ||||||
|       profileImageUri |  | ||||||
|     } |  | ||||||
|     tags { |  | ||||||
|       tagClasses { |  | ||||||
|         name |  | ||||||
|       } |  | ||||||
|       name |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetVideos($videoIds: [Int!]!) { |  | ||||||
|   getVideos(videoIds: $videoIds) { |  | ||||||
|     id |  | ||||||
|     framesPerSecond |  | ||||||
|     stream { |  | ||||||
|       id |  | ||||||
|       streamSegmentType |  | ||||||
|       segments { |  | ||||||
|         uploaded |  | ||||||
|         valid |  | ||||||
|         segmentIndex |  | ||||||
|         endFrameIndex |  | ||||||
|         framesPerSecond |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     playlist { |  | ||||||
|       segmentDurations |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetVideo($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     playlist { |  | ||||||
|       segmentDurations |  | ||||||
|     } |  | ||||||
|     homographyHistory { |  | ||||||
|       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 |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     stream { |  | ||||||
|       streamSegmentType |  | ||||||
|       segments { |  | ||||||
|         segmentIndex |  | ||||||
|         endFrameIndex |  | ||||||
|         framesPerSecond |  | ||||||
|       } |  | ||||||
|       resolution { |  | ||||||
|         width |  | ||||||
|         height |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetAverageTimePerShotForVideo($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     averageTimeBetweenShots |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| query GetElapsedTimeForVideo($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     elapsedTime |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| query GetMedianRunForVideo($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     medianRun |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetVideoForClipTimes($videoId: Int!) { |  | ||||||
|   getVideo(videoId: $videoId) { |  | ||||||
|     id |  | ||||||
|     framesPerSecond |  | ||||||
|     playlist { |  | ||||||
|       segmentDurations |  | ||||||
|     } |  | ||||||
|     stream { |  | ||||||
|       id |  | ||||||
|       streamSegmentType |  | ||||||
|       segments { |  | ||||||
|         uploaded |  | ||||||
|         valid |  | ||||||
|         segmentIndex |  | ||||||
|         endFrameIndex |  | ||||||
|         framesPerSecond |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,126 +1,40 @@ | |||||||
| mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) { | mutation CreateUploadStream( | ||||||
|   createUploadStream(videoMetadata: $videoMetadataInput) { |   $videoName: String!, | ||||||
|  |   $deviceType: DeviceTypeEnum, | ||||||
|  |   $osVersion: String, | ||||||
|  |   $appVersion: String, | ||||||
|  |   $browserName: String, | ||||||
|  |   $browserVersion: String, | ||||||
|  |   $locale: String, | ||||||
|  |   $timezone: String, | ||||||
|  |   $networkType: String, | ||||||
|  |   $ipAddress: String | ||||||
|  | ) { | ||||||
|  |   createUploadStream( | ||||||
|  |     videoName: $videoName | ||||||
|  |     uploadMetadata: { | ||||||
|  |       deviceType: $deviceType | ||||||
|  |       osVersion: $osVersion | ||||||
|  |       appVersion: $appVersion | ||||||
|  |       browserName: $browserName | ||||||
|  |       browserVersion: $browserVersion | ||||||
|  |       locale: $locale | ||||||
|  |       timezone: $timezone | ||||||
|  |       networkType: $networkType | ||||||
|  |       ipAddress: $ipAddress | ||||||
|  |     } | ||||||
|  |   ) { | ||||||
|     videoId |     videoId | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) { | mutation GetUploadLink($videoId: Int!, $chunkIndex: Int!) { | ||||||
|   getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) { |   getUploadLink(videoId: $videoId, chunkIndex: $chunkIndex) { | ||||||
|     value { |     uploadUrl | ||||||
|       ... on UploadLink { |     linksRequested | ||||||
|         uploadUrl |  | ||||||
|         headers { |  | ||||||
|           key |  | ||||||
|           value |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       ... on GetUploadLinkErrors { |  | ||||||
|         error { |  | ||||||
|           ... on MustHaveSetForUploadLinkErr { |  | ||||||
|             resolution |  | ||||||
|             framesPerSecond |  | ||||||
|           } |  | ||||||
|           ... on SegmentAlreadyUploadedErr { |  | ||||||
|             segmentId |  | ||||||
|           } |  | ||||||
|           ... on ProcessingFailedErr { |  | ||||||
|             processing { |  | ||||||
|               status |  | ||||||
|               errors { |  | ||||||
|                 message |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     stream { |  | ||||||
|       uploadCompletionCursor |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| mutation GetHlsInitUploadLink($videoId: Int!) { | mutation TerminateUploadStream($videoId: Int!) { | ||||||
|   getHlsInitUploadLink(videoId: $videoId) { |   terminateUploadStream(videoId: $videoId)  | ||||||
|     value { |  | ||||||
|       ... on UploadLink { |  | ||||||
|         uploadUrl |  | ||||||
|         headers { |  | ||||||
|           key |  | ||||||
|           value |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       ... on GetUploadLinkErrors { |  | ||||||
|         error { |  | ||||||
|           ... on NoInitForChunkedUploadErr { |  | ||||||
|             segmentType |  | ||||||
|           } |  | ||||||
|           ... on InitUploadAlreadyCompletedErr { |  | ||||||
|             segmentType |  | ||||||
|           } |  | ||||||
|           ... on TooManyInitUploadsErr { |  | ||||||
|             linksRequested |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mutation SetSegmentDuration( |  | ||||||
|   $videoId: Int! |  | ||||||
|   $segmentIndex: Int! |  | ||||||
|   $duration: Float! |  | ||||||
| ) { |  | ||||||
|   setSegmentDuration( |  | ||||||
|     videoId: $videoId |  | ||||||
|     segmentIndex: $segmentIndex |  | ||||||
|     duration: $duration |  | ||||||
|   ) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mutation EditUploadStream( |  | ||||||
|   $videoId: Int! |  | ||||||
|   $videoMetadataInput: VideoMetadataInput! |  | ||||||
| ) { |  | ||||||
|   editUploadStream(videoId: $videoId, videoMetadata: $videoMetadataInput) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| query GetUploadStreams( |  | ||||||
|   $limit: Int! = 5 |  | ||||||
|   $after: String = null |  | ||||||
|   $filters: VideoFilterInput = null |  | ||||||
| ) { |  | ||||||
|   getUserVideos(limit: $limit, after: $after, filters: $filters) { |  | ||||||
|     videos { |  | ||||||
|       id |  | ||||||
|     } |  | ||||||
|     pageInfo { |  | ||||||
|       hasNextPage |  | ||||||
|       endCursor |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| query GetUploadStreamsWithDetails( |  | ||||||
|   $limit: Int! = 5 |  | ||||||
|   $after: String = null |  | ||||||
|   $filters: VideoFilterInput = null |  | ||||||
| ) { |  | ||||||
|   getUserVideos(limit: $limit, after: $after, filters: $filters) { |  | ||||||
|     videos { |  | ||||||
|       id |  | ||||||
|       name |  | ||||||
|       startTime |  | ||||||
|       stream { |  | ||||||
|         isCompleted |  | ||||||
|         lastIntendedSegmentBound |  | ||||||
|         uploadCompletionCursor |  | ||||||
|         uploadsCompleted |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     pageInfo { |  | ||||||
|       hasNextPage |  | ||||||
|       endCursor |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										642
									
								
								src/schema.gql
									
									
									
									
									
								
							
							
						
						
									
										642
									
								
								src/schema.gql
									
									
									
									
									
								
							| @@ -1,68 +1,31 @@ | |||||||
| type Query { | type Query { | ||||||
|   getAggregatedShotMetrics( |   getAggregateShots(bucketSets: [BucketSetInputGQL!]!): [AggregateResultGQL!]! | ||||||
|     aggregateInput: AggregateInputGQL! |  | ||||||
|   ): [AggregateResultGQL!]! |  | ||||||
|   getBucketSet(keyName: String!): BucketSetGQL |  | ||||||
|   getDeployedConfig: DeployedConfigGQL! |  | ||||||
|   waitFor(duration: Float!): Float! |  | ||||||
|   getVideoMakePercentageIntervals( |  | ||||||
|     videoId: ID! |  | ||||||
|     intervalDuration: Int! = 300 |  | ||||||
|   ): [MakePercentageIntervalGQL!]! |  | ||||||
|   getShotsWithMetadata( |  | ||||||
|     filterInput: FilterInput! |  | ||||||
|     shotsPagination: GetShotsPagination = null |  | ||||||
|     limit: Int! = 500 |  | ||||||
|   ): GetShotsResult! |  | ||||||
|   getShots( |  | ||||||
|     filterInput: FilterInput! |  | ||||||
|     shotsPagination: GetShotsPagination = null |  | ||||||
|     limit: Int! = 500 |  | ||||||
|   ): [ShotGQL!]! |  | ||||||
|   getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]! |  | ||||||
|   getUser(userId: Int!): UserGQL |   getUser(userId: Int!): UserGQL | ||||||
|   getLoggedInUser: UserGQL |   getVideo(videoId: Int!): VideoGQL! | ||||||
|   getUsernames( |   getShots(filterInput: FilterInput = null): [ShotGQL!]! | ||||||
|     matchString: String = null |   getBucketSet(keyName: String!): BucketSetGQL | ||||||
|     limit: Int = null |  | ||||||
|     after: String = null |  | ||||||
|   ): [String!]! |  | ||||||
|   getPlayTime(userId: Int!): UserPlayTimeGQL! |  | ||||||
|   getUserVideos( |  | ||||||
|     userId: Int = null |  | ||||||
|     limit: Int! = 5 |  | ||||||
|     after: String = null |  | ||||||
|     filters: VideoFilterInput = null |  | ||||||
|   ): VideoHistoryGQL! |  | ||||||
|   getUserTags: [TagGQL!]! |  | ||||||
|   getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL! |  | ||||||
|   getVideos(videoIds: [Int!]!): [VideoGQL!]! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type AggregateResultGQL { | type AggregateResultGQL { | ||||||
|   aggregationIdentifiers: [AggregationIdentifierGQL!]! |   featureBuckets: [BucketGQL!]! | ||||||
|   targetMetrics: TargetMetricsGQL! |   targetMetrics: [TargetMetricGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| type AggregationIdentifierGQL { | type BucketGQL { | ||||||
|   featureName: String! |   rangeKey: String! | ||||||
|   groupName: String! |   lowerBound: Float! | ||||||
| } | } | ||||||
|  |  | ||||||
| type TargetMetricsGQL { | type TargetMetricGQL { | ||||||
|   count: Int! |   count: Int | ||||||
|   makePercentage: Float |   makePercentage: Float | ||||||
|   averageDifficulty: Float |   floatFeature: TargetFloatFeatureGQL | ||||||
| } | } | ||||||
|  |  | ||||||
| input AggregateInputGQL { | type TargetFloatFeatureGQL { | ||||||
|   aggregations: [AggregationInput!]! |   featureName: String! | ||||||
|   filterInput: FilterInput |   average: Float | ||||||
| } |   median: Float | ||||||
|  |  | ||||||
| input AggregationInput @oneOf { |  | ||||||
|   bucketSet: BucketSetInputGQL |  | ||||||
|   enum: EnumAggregation |  | ||||||
| } | } | ||||||
|  |  | ||||||
| input BucketSetInputGQL { | input BucketSetInputGQL { | ||||||
| @@ -75,50 +38,67 @@ input BucketInputGQL { | |||||||
|   lowerBound: Float! |   lowerBound: Float! | ||||||
| } | } | ||||||
|  |  | ||||||
| input EnumAggregation { | type UserGQL { | ||||||
|   feature: String! |   id: Int! | ||||||
|  |   username: String! | ||||||
|  |   createdAt: DateTime | ||||||
|  |   updatedAt: DateTime | ||||||
|  |   statistics: UserStatisticsGQL! | ||||||
| } | } | ||||||
|  |  | ||||||
| input FilterInput @oneOf { | """Date with time (isoformat)""" | ||||||
|   andFilters: [FilterInput!] | scalar DateTime | ||||||
|   orFilters: [FilterInput!] |  | ||||||
|   notFilter: FilterInput | type UserStatisticsGQL { | ||||||
|   cueObjectDistance: RangeFilter |   totalShots: Int! | ||||||
|   targetPocketDistance: RangeFilter |   totalShotsMade: Int! | ||||||
|   cueObjectAngle: RangeFilter |   makePercentage: Decimal! | ||||||
|   cueBallSpeed: RangeFilter |   averageTimeBetweenShots: Decimal! | ||||||
|   difficulty: RangeFilter |   timeSpentPlaying: Decimal! | ||||||
|   intendedPocketType: [PocketEnum!] |   medianRun: Decimal | ||||||
|   shotDirection: [ShotDirectionEnum!] |  | ||||||
|   videoId: [Int!] |  | ||||||
|   userId: [Int!] |  | ||||||
|   make: [Boolean!] |  | ||||||
|   tags: [VideoTagInput!] |  | ||||||
|   annotations: [ShotAnnotationInput!] |  | ||||||
|   isStraight: [Boolean!] |  | ||||||
|   isRight: [Boolean!] |  | ||||||
|   isLeft: [Boolean!] |  | ||||||
|   isLeftMiss: [Boolean!] |  | ||||||
|   isRightMiss: [Boolean!] |  | ||||||
|   isDirect: [Boolean!] |  | ||||||
|   tableSize: RangeFilter |  | ||||||
|   bankAngle: RangeFilter |  | ||||||
|   bankDistance: RangeFilter |  | ||||||
|   kickAngle: RangeFilter |  | ||||||
|   kickDistance: RangeFilter |  | ||||||
|   cueAngleAfterObject: RangeFilter |  | ||||||
|   spinType: [SpinTypeEnum!] |  | ||||||
|   cueSpeedAfterObject: RangeFilter |  | ||||||
|   falsePositiveScore: RangeFilter |  | ||||||
| } | } | ||||||
|  |  | ||||||
| input RangeFilter { | """Decimal (fixed-point)""" | ||||||
|   lessThan: Float = null | scalar Decimal | ||||||
|   greaterThanEqualTo: Float = null |  | ||||||
|   greaterThan: Float = null | type VideoGQL { | ||||||
|   includeOnNone: Boolean! = false |   id: Int! | ||||||
|   lessThanInclusive: Boolean! = false |   totalShotsMade: Int! | ||||||
|   greaterThanInclusive: Boolean! = true |   totalShots: Int! | ||||||
|  |   makePercentage: Decimal! | ||||||
|  |   medianRun: Decimal! | ||||||
|  |   averageTimeBetweenShots: Decimal | ||||||
|  |   createdAt: DateTime! | ||||||
|  |   updatedAt: DateTime! | ||||||
|  |   shots: [ShotGQL!]! | ||||||
|  |   startTime: DateTime! | ||||||
|  |   endTime: DateTime! | ||||||
|  |   elapsedTime: Decimal! | ||||||
|  |   framesPerSecond: Int! | ||||||
|  |   totalFrames: Int! | ||||||
|  |   stream: UploadStreamGQL | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ShotGQL { | ||||||
|  |   id: Int | ||||||
|  |   videoId: Int | ||||||
|  |   startFrame: Int | ||||||
|  |   endFrame: Int | ||||||
|  |   createdAt: DateTime | ||||||
|  |   updatedAt: DateTime | ||||||
|  |   features: ShotFeaturesGQL | ||||||
|  |   cueObjectFeatures: CueObjectFeaturesGQL | ||||||
|  |   pocketingIntentionFeatures: PocketingIntentionFeaturesGQL | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ShotFeaturesGQL { | ||||||
|  |   cueObjectAngle: Float | ||||||
|  |   cueObjectDistance: Float | ||||||
|  |   targetPocketDistance: Float | ||||||
|  |   intendedPocket: PocketEnum | ||||||
|  |   cueBallSpeed: Float | ||||||
|  |   shotDirection: ShotDirectionEnum | ||||||
|  |   bank: BankFeaturesGQL | ||||||
| } | } | ||||||
|  |  | ||||||
| enum PocketEnum { | enum PocketEnum { | ||||||
| @@ -132,92 +112,6 @@ enum ShotDirectionEnum { | |||||||
|   STRAIGHT |   STRAIGHT | ||||||
| } | } | ||||||
|  |  | ||||||
| input VideoTagInput { |  | ||||||
|   tagClasses: [VideoTagClassInput!]! = [] |  | ||||||
|   name: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input VideoTagClassInput { |  | ||||||
|   name: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input ShotAnnotationInput { |  | ||||||
|   name: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| enum SpinTypeEnum { |  | ||||||
|   DRAW |  | ||||||
|   FOLLOW |  | ||||||
|   CENTER |  | ||||||
|   UNKNOWN |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type BucketSetGQL { |  | ||||||
|   keyName: String! |  | ||||||
|   feature: String! |  | ||||||
|   buckets: [BucketGQL!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type BucketGQL { |  | ||||||
|   rangeKey: String! |  | ||||||
|   lowerBound: Float! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type DeployedConfigGQL { |  | ||||||
|   allowNewUsers: Boolean! |  | ||||||
|   firebase: Boolean! |  | ||||||
|   devMode: Boolean! |  | ||||||
|   environment: String! |  | ||||||
|   minimumAllowedAppVersion: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type MakePercentageIntervalGQL { |  | ||||||
|   makePercentage: Float! |  | ||||||
|   elapsedTime: Float! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type GetShotsResult { |  | ||||||
|   shots: [ShotGQL!]! |  | ||||||
|   count: Int |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type ShotGQL { |  | ||||||
|   id: Int! |  | ||||||
|   videoId: Int! |  | ||||||
|   startFrame: Int! |  | ||||||
|   endFrame: Int! |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
|   cueObjectFeatures: CueObjectFeaturesGQL |  | ||||||
|   pocketingIntentionFeatures: PocketingIntentionFeaturesGQL |  | ||||||
|   bankFeatures: BankFeaturesGQL |  | ||||||
|   serializedShotPaths: SerializedShotPathsGQL |  | ||||||
|   user: UserGQL |  | ||||||
|   annotations: [ShotAnnotationGQL!]! |  | ||||||
|   falsePositiveScore: Float |  | ||||||
|   video: VideoGQL |  | ||||||
| } |  | ||||||
|  |  | ||||||
| """ |  | ||||||
| Date with time (isoformat) |  | ||||||
| """ |  | ||||||
| scalar DateTime |  | ||||||
|  |  | ||||||
| type CueObjectFeaturesGQL { |  | ||||||
|   cueObjectDistance: Float |  | ||||||
|   cueObjectAngle: Float |  | ||||||
|   cueBallSpeed: Float |  | ||||||
|   shotDirection: ShotDirectionEnum |  | ||||||
|   spinType: SpinTypeEnum |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type PocketingIntentionFeaturesGQL { |  | ||||||
|   targetPocketDistance: Float |  | ||||||
|   make: Boolean |  | ||||||
|   intendedPocketType: PocketEnum |  | ||||||
|   difficulty: Float |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type BankFeaturesGQL { | type BankFeaturesGQL { | ||||||
|   wallsHit: [WallTypeEnum!]! |   wallsHit: [WallTypeEnum!]! | ||||||
|   bankAngle: Float! |   bankAngle: Float! | ||||||
| @@ -229,252 +123,111 @@ enum WallTypeEnum { | |||||||
|   SHORT |   SHORT | ||||||
| } | } | ||||||
|  |  | ||||||
| type SerializedShotPathsGQL { | type CueObjectFeaturesGQL { | ||||||
|   b64EncodedBuffer: String |   cueObjectDistance: Float | ||||||
|  |   cueObjectAngle: Float | ||||||
|  |   cueBallSpeed: Float | ||||||
|  |   shotDirection: ShotDirectionEnum | ||||||
| } | } | ||||||
|  |  | ||||||
| type UserGQL { | type PocketingIntentionFeaturesGQL { | ||||||
|   id: Int! |   targetPocketDistance: Float | ||||||
|   firebaseUid: String! |   make: Boolean | ||||||
|   username: String! |   intendedPocketType: PocketEnum | ||||||
|   isAdmin: Boolean! |  | ||||||
|   activeVideoId: Int |  | ||||||
|   profileImageUri: String |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type ShotAnnotationGQL { |  | ||||||
|   shotId: Int! |  | ||||||
|   type: ShotAnnotationTypeGQL! |  | ||||||
|   creator: UserGQL! |  | ||||||
|   notes: String! |  | ||||||
|   errorDefault: Boolean! |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type ShotAnnotationTypeGQL { |  | ||||||
|   id: Int! |  | ||||||
|   name: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type VideoGQL { |  | ||||||
|   id: Int! |  | ||||||
|   owner: UserGQL |  | ||||||
|   name: String |  | ||||||
|   screenshotUri: String |  | ||||||
|   totalShotsMade: Int! |  | ||||||
|   totalShots: Int! |  | ||||||
|   makePercentage: Float! |  | ||||||
|   medianRun: Float |  | ||||||
|   averageTimeBetweenShots: Float |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
|   shots: [ShotGQL!]! |  | ||||||
|   startTime: DateTime |  | ||||||
|   endTime: DateTime |  | ||||||
|   elapsedTime: Float |  | ||||||
|   framesPerSecond: Float! |  | ||||||
|   tableSize: Float! |  | ||||||
|   stream: UploadStreamGQL |  | ||||||
|   playlist: HLSPlaylistGQL |  | ||||||
|   tags: [VideoTag!]! |  | ||||||
|   currentHomography: HomographyInfoGQL |  | ||||||
|   homographyHistory: [HomographyInfoGQL!]! |  | ||||||
|   currentProcessing: VideoProcessingGQL |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type UploadStreamGQL { | type UploadStreamGQL { | ||||||
|   id: ID! |   id: ID! | ||||||
|   linksRequested: Int! |   linksRequested: Int! | ||||||
|   uploadsCompleted: Int! |   uploadsCompleted: Int! | ||||||
|   segmentProcessingCursor: Int! |  | ||||||
|   lastIntendedSegmentBound: Int |  | ||||||
|   isCompleted: Boolean! |   isCompleted: Boolean! | ||||||
|   initPlaylistUploadStatus: InitPlaylistUploadStatusEnum |   uploadMetadata: UploadStreamMetadata! | ||||||
|   lowestUnuploadedSegmentIndex: Int! |  | ||||||
|   uploadCompletionCursor: Int! |  | ||||||
|   errors: [StreamErrorGQL!]! |  | ||||||
|   createdAt: DateTime! |   createdAt: DateTime! | ||||||
|   updatedAt: DateTime! |   updatedAt: DateTime! | ||||||
|   segments: [UploadSegmentGQL!]! |  | ||||||
|   resolution: VideoResolutionGQL! |  | ||||||
|   streamSegmentType: StreamSegmentTypeEnum! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| enum InitPlaylistUploadStatusEnum { | type UploadStreamMetadata { | ||||||
|   NOT_APPLICABLE |   deviceType: DeviceTypeEnum | ||||||
|   NOT_UPLOADED |   osVersion: String | ||||||
|   UPLOADED |   appVersion: String | ||||||
|  |   browserName: String | ||||||
|  |   browserVersion: String | ||||||
|  |   locale: String | ||||||
|  |   timezone: String | ||||||
|  |   networkType: String | ||||||
|  |   ipAddress: String | ||||||
| } | } | ||||||
|  |  | ||||||
| type StreamErrorGQL { | enum DeviceTypeEnum { | ||||||
|   message: String! |   IOS | ||||||
|  |   ANDROID | ||||||
|  |   BROWSER | ||||||
| } | } | ||||||
|  |  | ||||||
| type UploadSegmentGQL { | input FilterInput { | ||||||
|   segmentIndex: Int! |   andFilters: AndFilter = null | ||||||
|   uploaded: Boolean! |   orFilters: OrFilter = null | ||||||
|   valid: Boolean! |   cueObjectDistance: CueObjectDistanceInput = null | ||||||
|   endFrameIndex: Int |   targetPocketDistance: TargetPocketDistanceInput = null | ||||||
|   framesPerSecond: Float |   cueObjectAngle: CueObjectAngleInput = null | ||||||
|   durationInSeconds: Float |   cueBallSpeed: CueBallSpeedInput = null | ||||||
|   linksRequested: Int! |   intendedPocketType: IntendedPocketTypeInput = null | ||||||
|  |   shotDirection: ShotDirectionInput = null | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoResolutionGQL { | input AndFilter { | ||||||
|   width: Int |   filters: [FilterInput!]! | ||||||
|   height: Int |  | ||||||
| } | } | ||||||
|  |  | ||||||
| enum StreamSegmentTypeEnum { | input OrFilter { | ||||||
|   FRAGMENTED_MP4 |   filters: [FilterInput!]! | ||||||
|   RB_CHUNKED_MP4 |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type HLSPlaylistGQL { | input CueObjectDistanceInput { | ||||||
|   videoId: Int! |   value: RangeFilter! | ||||||
|   m3u8Text: String! |  | ||||||
|   segmentDurations: [Float!]! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoTag { | input RangeFilter { | ||||||
|   tagClasses: [VideoTagClass!]! |   lessThan: Float = null | ||||||
|   name: String! |   greaterThanEqualTo: Float = null | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoTagClass { | input TargetPocketDistanceInput { | ||||||
|   name: String! |   value: RangeFilter! | ||||||
| } | } | ||||||
|  |  | ||||||
| type HomographyInfoGQL { | input CueObjectAngleInput { | ||||||
|   frameIndex: Int! |   value: RangeFilter! | ||||||
|   crop: BoundingBoxGQL! |  | ||||||
|   pockets: [BoundingBoxGQL!]! |  | ||||||
|   sourcePoints: PocketPointsGQL! |  | ||||||
|   destPoints: PocketPointsGQL! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type BoundingBoxGQL { | input CueBallSpeedInput { | ||||||
|   left: Float! |   value: RangeFilter! | ||||||
|   top: Float! |  | ||||||
|   width: Float! |  | ||||||
|   height: Float! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type PocketPointsGQL { | input IntendedPocketTypeInput { | ||||||
|   topLeft: IntPoint2D! |   value: EnumFilter! | ||||||
|   topSide: IntPoint2D! |  | ||||||
|   topRight: IntPoint2D! |  | ||||||
|   bottomLeft: IntPoint2D! |  | ||||||
|   bottomSide: IntPoint2D! |  | ||||||
|   bottomRight: IntPoint2D! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type IntPoint2D { | input EnumFilter { | ||||||
|   x: Int! |   equals: String = null | ||||||
|   y: Int! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoProcessingGQL { | input ShotDirectionInput { | ||||||
|   errors: [VideoProcessingErrorGQL!]! |   value: EnumFilter! | ||||||
|   status: ProcessingStatusEnum! |  | ||||||
|   statuses: [VideoProcessingStatusGQL!]! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoProcessingErrorGQL { | type BucketSetGQL { | ||||||
|   message: String! |   keyName: String! | ||||||
|   startSegmentIndex: Int |   feature: String! | ||||||
|   endSegmentIndex: Int |   buckets: [BucketGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| enum ProcessingStatusEnum { |  | ||||||
|   STARTED |  | ||||||
|   FAILED |  | ||||||
|   SUCCEEDED |  | ||||||
|   SUSPENDED |  | ||||||
|   CREATED |  | ||||||
|   QUEUED |  | ||||||
|   RUNNING |  | ||||||
|   REEXTRACTING_FEATURES |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type VideoProcessingStatusGQL { |  | ||||||
|   status: ProcessingStatusEnum! |  | ||||||
|   appVersion: String! |  | ||||||
|   sequenceId: Int! |  | ||||||
|   createdAt: DateTime |  | ||||||
|   updatedAt: DateTime |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input GetShotsPagination { |  | ||||||
|   createdAfter: CreatedAfter! |  | ||||||
|   startFrameAfter: Int! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input CreatedAfter @oneOf { |  | ||||||
|   videoId: Int |  | ||||||
|   createdAt: DateTime |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type UserPlayTimeGQL { |  | ||||||
|   totalSeconds: Float! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type VideoHistoryGQL { |  | ||||||
|   videos: [VideoGQL!]! |  | ||||||
|   pageInfo: PageInfoGQL! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type PageInfoGQL { |  | ||||||
|   hasNextPage: Boolean! |  | ||||||
|   endCursor: String |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input VideoFilterInput { |  | ||||||
|   isStreamCompleted: Boolean = null |  | ||||||
|   requireCursorCompletion: Boolean! = true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type TagGQL { |  | ||||||
|   name: String! |  | ||||||
|   id: Int! |  | ||||||
|   group: String |  | ||||||
| } |  | ||||||
|  |  | ||||||
| """ |  | ||||||
| The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf). |  | ||||||
| """ |  | ||||||
| scalar JSON |  | ||||||
|   @specifiedBy( |  | ||||||
|     url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf" |  | ||||||
|   ) |  | ||||||
|  |  | ||||||
| type Mutation { | type Mutation { | ||||||
|   createBucketSet(params: CreateBucketSetInput!): BucketSetGQL! |   createBucketSet(params: CreateBucketSetInput!): BucketSetGQL! | ||||||
|   setLoggerLevel(path: String!, level: String!): Boolean! |   processVideoSource(input: ProcessVideoSourceInput!): ProcessVideoSourceReturn! | ||||||
|   addAnnotationToShot( |   createUploadStream(uploadMetadata: UploadMetadataInput, videoName: String = null): CreateUploadStreamReturn! | ||||||
|     shotId: Int! |   getUploadLink(videoId: Int!, chunkIndex: Int!): GetUploadLinkReturn! | ||||||
|     annotationName: String! |   terminateUploadStream(videoId: Int!): Boolean! | ||||||
|     notes: String = null |  | ||||||
|   ): AddShotAnnotationReturn! |  | ||||||
|   getProfileImageUploadLink( |  | ||||||
|     fileExt: String = ".png" |  | ||||||
|   ): GetProfileUploadLinkReturn! |  | ||||||
|   editProfileImageUri(profileImageUri: String!): UserGQL! |  | ||||||
|   createUploadStream( |  | ||||||
|     videoMetadata: VideoMetadataInput! |  | ||||||
|   ): CreateUploadStreamReturn! |  | ||||||
|   getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn! |  | ||||||
|   getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn! |  | ||||||
|   setSegmentDuration( |  | ||||||
|     videoId: Int! |  | ||||||
|     segmentIndex: Int! |  | ||||||
|     duration: Float! |  | ||||||
|   ): Boolean! |  | ||||||
|   editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean! |  | ||||||
|   deleteVideo(videoId: Int!): Boolean! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| input CreateBucketSetInput { | input CreateBucketSetInput { | ||||||
| @@ -483,80 +236,19 @@ input CreateBucketSetInput { | |||||||
|   buckets: [BucketInputGQL!]! |   buckets: [BucketInputGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| type AddShotAnnotationReturn { | type ProcessVideoSourceReturn { | ||||||
|   value: SuccessfulAddAddShotAnnotationErrors! |   val: Int! | ||||||
| } | } | ||||||
|  |  | ||||||
| union SuccessfulAddAddShotAnnotationErrors = | input ProcessVideoSourceInput { | ||||||
|     SuccessfulAdd |   val: Int! | ||||||
|   | AddShotAnnotationErrors |  | ||||||
|  |  | ||||||
| type SuccessfulAdd { |  | ||||||
|   value: Boolean! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type AddShotAnnotationErrors { |  | ||||||
|   error: DoesNotOwnShotErrOtherErrorNeedsNote! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| union DoesNotOwnShotErrOtherErrorNeedsNote = |  | ||||||
|     DoesNotOwnShotErr |  | ||||||
|   | OtherErrorNeedsNote |  | ||||||
|  |  | ||||||
| type DoesNotOwnShotErr { |  | ||||||
|   shotId: Int! |  | ||||||
|   msg: String |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type OtherErrorNeedsNote { |  | ||||||
|   msg: String |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type GetProfileUploadLinkReturn { |  | ||||||
|   value: UploadLinkGetProfileUploadLinkErrors! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| union UploadLinkGetProfileUploadLinkErrors = |  | ||||||
|     UploadLink |  | ||||||
|   | GetProfileUploadLinkErrors |  | ||||||
|  |  | ||||||
| type UploadLink { |  | ||||||
|   uploadUrl: String! |  | ||||||
|   headers: [Header]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type Header { |  | ||||||
|   key: String! |  | ||||||
|   value: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type GetProfileUploadLinkErrors { |  | ||||||
|   error: TooManyProfileImageUploadsErr! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type TooManyProfileImageUploadsErr { |  | ||||||
|   linksRequested: Int! |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type CreateUploadStreamReturn { | type CreateUploadStreamReturn { | ||||||
|   videoId: Int! |   videoId: Int! | ||||||
| } | } | ||||||
|  |  | ||||||
| input VideoMetadataInput { | input UploadMetadataInput { | ||||||
|   videoName: String = null |  | ||||||
|   startTime: DateTime = null |  | ||||||
|   endTime: DateTime = null |  | ||||||
|   gameType: String = null |  | ||||||
|   tableSize: Float = null |  | ||||||
|   uploadStreamMetadataInput: UploadStreamMetadataInput = null |  | ||||||
|   lastIntendedSegmentBound: Int = null |  | ||||||
|   streamSegmentType: StreamSegmentTypeEnum = null |  | ||||||
|   endStream: Boolean! = false |  | ||||||
|   resolution: VideoResolution = null |  | ||||||
|   framesPerSecond: Float = null |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input UploadStreamMetadataInput { |  | ||||||
|   deviceType: DeviceTypeEnum = null |   deviceType: DeviceTypeEnum = null | ||||||
|   osVersion: String = null |   osVersion: String = null | ||||||
|   appVersion: String = null |   appVersion: String = null | ||||||
| @@ -568,58 +260,8 @@ input UploadStreamMetadataInput { | |||||||
|   ipAddress: String = null |   ipAddress: String = null | ||||||
| } | } | ||||||
|  |  | ||||||
| enum DeviceTypeEnum { |  | ||||||
|   IOS |  | ||||||
|   ANDROID |  | ||||||
|   BROWSER |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input VideoResolution { |  | ||||||
|   width: Int! |  | ||||||
|   height: Int! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type GetUploadLinkReturn { | type GetUploadLinkReturn { | ||||||
|   value: UploadLinkGetUploadLinkErrors! |   uploadUrl: String! | ||||||
|   stream: UploadStreamGQL |  | ||||||
| } |  | ||||||
|  |  | ||||||
| union UploadLinkGetUploadLinkErrors = UploadLink | GetUploadLinkErrors |  | ||||||
|  |  | ||||||
| type GetUploadLinkErrors { |  | ||||||
|   error: MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErrInitUploadAlreadyCompletedErrTooManyInitUploadsErr! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| union MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErrInitUploadAlreadyCompletedErrTooManyInitUploadsErr = |  | ||||||
|     MustHaveSetForUploadLinkErr |  | ||||||
|   | SegmentAlreadyUploadedErr |  | ||||||
|   | ProcessingFailedErr |  | ||||||
|   | NoInitForChunkedUploadErr |  | ||||||
|   | TooManyProfileImageUploadsErr |  | ||||||
|   | InitUploadAlreadyCompletedErr |  | ||||||
|   | TooManyInitUploadsErr |  | ||||||
|  |  | ||||||
| type MustHaveSetForUploadLinkErr { |  | ||||||
|   resolution: Boolean |  | ||||||
|   framesPerSecond: Boolean |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type SegmentAlreadyUploadedErr { |  | ||||||
|   segmentId: Int! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type ProcessingFailedErr { |  | ||||||
|   processing: VideoProcessingGQL! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type NoInitForChunkedUploadErr { |  | ||||||
|   segmentType: StreamSegmentTypeEnum! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type InitUploadAlreadyCompletedErr { |  | ||||||
|   segmentType: StreamSegmentTypeEnum! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type TooManyInitUploadsErr { |  | ||||||
|   linksRequested: Int! |   linksRequested: Int! | ||||||
|  |   uploadsCompleted: Int! | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,18 +0,0 @@ | |||||||
| { |  | ||||||
|   "compilerOptions": { |  | ||||||
|     "target": "es2018", |  | ||||||
|     "module": "commonjs", |  | ||||||
|     "outDir": "dist", |  | ||||||
|     "rootDir": "src", |  | ||||||
|     "strict": true, |  | ||||||
|     "esModuleInterop": true, |  | ||||||
|     "skipLibCheck": true, |  | ||||||
|     "forceConsistentCasingInFileNames": true, |  | ||||||
|     "moduleResolution": "node", |  | ||||||
|     "resolveJsonModule": true, |  | ||||||
|     "declaration": true, |  | ||||||
|     "sourceMap": true |  | ||||||
|   }, |  | ||||||
|   "include": ["src/**/*.ts", "src/**/*.tsx"], |  | ||||||
|   "exclude": ["node_modules", "dist"] |  | ||||||
| } |  | ||||||
							
								
								
									
										161
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										161
									
								
								yarn.lock
									
									
									
									
									
								
							| @@ -10,26 +10,6 @@ | |||||||
|     "@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": |  | ||||||
|   version "3.9.2" |  | ||||||
|   resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.9.2.tgz#96edf2c212f828bad1ef3d84234fa473c5a27ff8" |  | ||||||
|   integrity sha512-Zw9WvXjqhpbgkvAvnj52vstOWwM0iedKWtn1hSq1cODQyoe1CF2uFwMYFI7l56BrAY9CzLi6MQA0AhxpgJgvxw== |  | ||||||
|   dependencies: |  | ||||||
|     "@graphql-typed-document-node/core" "^3.1.1" |  | ||||||
|     "@wry/caches" "^1.0.0" |  | ||||||
|     "@wry/equality" "^0.5.6" |  | ||||||
|     "@wry/trie" "^0.5.0" |  | ||||||
|     graphql-tag "^2.12.6" |  | ||||||
|     hoist-non-react-statics "^3.3.2" |  | ||||||
|     optimism "^0.18.0" |  | ||||||
|     prop-types "^15.7.2" |  | ||||||
|     rehackt "0.0.3" |  | ||||||
|     response-iterator "^0.2.6" |  | ||||||
|     symbol-observable "^4.0.0" |  | ||||||
|     ts-invariant "^0.10.3" |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|     zen-observable-ts "^1.2.5" |  | ||||||
|  |  | ||||||
| "@ardatan/relay-compiler@12.0.0": | "@ardatan/relay-compiler@12.0.0": | ||||||
|   version "12.0.0" |   version "12.0.0" | ||||||
|   resolved "https://registry.yarnpkg.com/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz#2e4cca43088e807adc63450e8cab037020e91106" |   resolved "https://registry.yarnpkg.com/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz#2e4cca43088e807adc63450e8cab037020e91106" | ||||||
| @@ -1144,41 +1124,6 @@ | |||||||
|     fast-querystring "^1.1.1" |     fast-querystring "^1.1.1" | ||||||
|     tslib "^2.3.1" |     tslib "^2.3.1" | ||||||
|  |  | ||||||
| "@wry/caches@^1.0.0": |  | ||||||
|   version "1.0.1" |  | ||||||
|   resolved "https://registry.yarnpkg.com/@wry/caches/-/caches-1.0.1.tgz#8641fd3b6e09230b86ce8b93558d44cf1ece7e52" |  | ||||||
|   integrity sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA== |  | ||||||
|   dependencies: |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|  |  | ||||||
| "@wry/context@^0.7.0": |  | ||||||
|   version "0.7.4" |  | ||||||
|   resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" |  | ||||||
|   integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== |  | ||||||
|   dependencies: |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|  |  | ||||||
| "@wry/equality@^0.5.6": |  | ||||||
|   version "0.5.7" |  | ||||||
|   resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" |  | ||||||
|   integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== |  | ||||||
|   dependencies: |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|  |  | ||||||
| "@wry/trie@^0.4.3": |  | ||||||
|   version "0.4.3" |  | ||||||
|   resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.4.3.tgz#077d52c22365871bf3ffcbab8e95cb8bc5689af4" |  | ||||||
|   integrity sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== |  | ||||||
|   dependencies: |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|  |  | ||||||
| "@wry/trie@^0.5.0": |  | ||||||
|   version "0.5.0" |  | ||||||
|   resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.5.0.tgz#11e783f3a53f6e4cd1d42d2d1323f5bc3fa99c94" |  | ||||||
|   integrity sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA== |  | ||||||
|   dependencies: |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|  |  | ||||||
| agent-base@^7.0.2, agent-base@^7.1.0: | agent-base@^7.0.2, agent-base@^7.1.0: | ||||||
|   version "7.1.0" |   version "7.1.0" | ||||||
|   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" |   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" | ||||||
| @@ -1553,11 +1498,6 @@ colorette@^2.0.16: | |||||||
|   resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" |   resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" | ||||||
|   integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== |   integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== | ||||||
|  |  | ||||||
| commander@4.0.1: |  | ||||||
|   version "4.0.1" |  | ||||||
|   resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" |  | ||||||
|   integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== |  | ||||||
|  |  | ||||||
| common-tags@1.8.2: | common-tags@1.8.2: | ||||||
|   version "1.8.2" |   version "1.8.2" | ||||||
|   resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" |   resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" | ||||||
| @@ -1902,7 +1842,7 @@ graphql-request@^6.0.0: | |||||||
|     "@graphql-typed-document-node/core" "^3.2.0" |     "@graphql-typed-document-node/core" "^3.2.0" | ||||||
|     cross-fetch "^3.1.5" |     cross-fetch "^3.1.5" | ||||||
|  |  | ||||||
| graphql-tag@^2.11.0, graphql-tag@^2.12.6: | graphql-tag@^2.11.0: | ||||||
|   version "2.12.6" |   version "2.12.6" | ||||||
|   resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" |   resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" | ||||||
|   integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== |   integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== | ||||||
| @@ -1961,13 +1901,6 @@ header-case@^2.0.4: | |||||||
|     capital-case "^1.0.4" |     capital-case "^1.0.4" | ||||||
|     tslib "^2.0.3" |     tslib "^2.0.3" | ||||||
|  |  | ||||||
| hoist-non-react-statics@^3.3.2: |  | ||||||
|   version "3.3.2" |  | ||||||
|   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" |  | ||||||
|   integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== |  | ||||||
|   dependencies: |  | ||||||
|     react-is "^16.7.0" |  | ||||||
|  |  | ||||||
| http-proxy-agent@^7.0.0: | http-proxy-agent@^7.0.0: | ||||||
|   version "7.0.0" |   version "7.0.0" | ||||||
|   resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" |   resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" | ||||||
| @@ -2262,7 +2195,7 @@ log-update@^4.0.0: | |||||||
|     slice-ansi "^4.0.0" |     slice-ansi "^4.0.0" | ||||||
|     wrap-ansi "^6.2.0" |     wrap-ansi "^6.2.0" | ||||||
|  |  | ||||||
| loose-envify@^1.0.0, loose-envify@^1.4.0: | loose-envify@^1.0.0: | ||||||
|   version "1.4.0" |   version "1.4.0" | ||||||
|   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" |   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" | ||||||
|   integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== |   integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== | ||||||
| @@ -2379,7 +2312,7 @@ nullthrows@^1.1.1: | |||||||
|   resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" |   resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" | ||||||
|   integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== |   integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== | ||||||
|  |  | ||||||
| object-assign@^4.1.0, object-assign@^4.1.1: | object-assign@^4.1.0: | ||||||
|   version "4.1.1" |   version "4.1.1" | ||||||
|   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" |   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" | ||||||
|   integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== |   integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== | ||||||
| @@ -2403,16 +2336,6 @@ onetime@^5.1.0: | |||||||
|   dependencies: |   dependencies: | ||||||
|     mimic-fn "^2.1.0" |     mimic-fn "^2.1.0" | ||||||
|  |  | ||||||
| optimism@^0.18.0: |  | ||||||
|   version "0.18.0" |  | ||||||
|   resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.18.0.tgz#e7bb38b24715f3fdad8a9a7fc18e999144bbfa63" |  | ||||||
|   integrity sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ== |  | ||||||
|   dependencies: |  | ||||||
|     "@wry/caches" "^1.0.0" |  | ||||||
|     "@wry/context" "^0.7.0" |  | ||||||
|     "@wry/trie" "^0.4.3" |  | ||||||
|     tslib "^2.3.0" |  | ||||||
|  |  | ||||||
| ora@^5.4.1: | ora@^5.4.1: | ||||||
|   version "5.4.1" |   version "5.4.1" | ||||||
|   resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" |   resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" | ||||||
| @@ -2543,14 +2466,6 @@ path-type@^4.0.0: | |||||||
|   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" |   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" | ||||||
|   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== |   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== | ||||||
|  |  | ||||||
| pbjs@^0.0.14: |  | ||||||
|   version "0.0.14" |  | ||||||
|   resolved "https://registry.yarnpkg.com/pbjs/-/pbjs-0.0.14.tgz#5ab3d4a5f06a9ab78dd320c63f72877120d4c48d" |  | ||||||
|   integrity sha512-F4aA0ojrQ37kxFPOg4yRLP/vxb76rYQwMQigmVEljYlA7hZKmjaWjP6IkRn4nA0NdIj4Xxe4iqWrrIhJy+MwWQ== |  | ||||||
|   dependencies: |  | ||||||
|     commander "4.0.1" |  | ||||||
|     protocol-buffers-schema "3.1.0" |  | ||||||
|  |  | ||||||
| picocolors@^1.0.0: | picocolors@^1.0.0: | ||||||
|   version "1.0.0" |   version "1.0.0" | ||||||
|   resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" |   resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" | ||||||
| @@ -2561,16 +2476,6 @@ picomatch@^2.3.1: | |||||||
|   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" |   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" | ||||||
|   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== |   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== | ||||||
|  |  | ||||||
| prettier-plugin-organize-imports@^3.2.4: |  | ||||||
|   version "3.2.4" |  | ||||||
|   resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz#77967f69d335e9c8e6e5d224074609309c62845e" |  | ||||||
|   integrity sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog== |  | ||||||
|  |  | ||||||
| prettier@^3.2.5: |  | ||||||
|   version "3.2.5" |  | ||||||
|   resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" |  | ||||||
|   integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== |  | ||||||
|  |  | ||||||
| promise@^7.1.1: | promise@^7.1.1: | ||||||
|   version "7.3.1" |   version "7.3.1" | ||||||
|   resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" |   resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" | ||||||
| @@ -2578,20 +2483,6 @@ promise@^7.1.1: | |||||||
|   dependencies: |   dependencies: | ||||||
|     asap "~2.0.3" |     asap "~2.0.3" | ||||||
|  |  | ||||||
| prop-types@^15.7.2: |  | ||||||
|   version "15.8.1" |  | ||||||
|   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" |  | ||||||
|   integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== |  | ||||||
|   dependencies: |  | ||||||
|     loose-envify "^1.4.0" |  | ||||||
|     object-assign "^4.1.1" |  | ||||||
|     react-is "^16.13.1" |  | ||||||
|  |  | ||||||
| protocol-buffers-schema@3.1.0: |  | ||||||
|   version "3.1.0" |  | ||||||
|   resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.1.0.tgz#d8a819549ead3e6bd189ebe9e50e96636bbc5cc7" |  | ||||||
|   integrity sha512-1g9zFjLFhGN1Dc5UVO8D2loVslp6sVxk5sJqgD66CuWUITh2gOaTLRN/pIakGFfB6e0nNF6hImrYFDurEsA1UQ== |  | ||||||
|  |  | ||||||
| punycode@^1.3.2: | punycode@^1.3.2: | ||||||
|   version "1.4.1" |   version "1.4.1" | ||||||
|   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" |   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" | ||||||
| @@ -2614,11 +2505,6 @@ queue-microtask@^1.2.2: | |||||||
|   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" |   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" | ||||||
|   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== |   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== | ||||||
|  |  | ||||||
| react-is@^16.13.1, react-is@^16.7.0: |  | ||||||
|   version "16.13.1" |  | ||||||
|   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" |  | ||||||
|   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== |  | ||||||
|  |  | ||||||
| readable-stream@^3.4.0: | readable-stream@^3.4.0: | ||||||
|   version "3.6.2" |   version "3.6.2" | ||||||
|   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" |   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" | ||||||
| @@ -2633,11 +2519,6 @@ 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: |  | ||||||
|   version "0.0.3" |  | ||||||
|   resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.0.3.tgz#1ea454620d4641db8342e2db44595cf0e7ac6aa0" |  | ||||||
|   integrity sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g== |  | ||||||
|  |  | ||||||
| relay-runtime@12.0.0: | relay-runtime@12.0.0: | ||||||
|   version "12.0.0" |   version "12.0.0" | ||||||
|   resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-12.0.0.tgz#1e039282bdb5e0c1b9a7dc7f6b9a09d4f4ff8237" |   resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-12.0.0.tgz#1e039282bdb5e0c1b9a7dc7f6b9a09d4f4ff8237" | ||||||
| @@ -2682,11 +2563,6 @@ resolve-from@^4.0.0: | |||||||
|   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" |   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" | ||||||
|   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== |   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== | ||||||
|  |  | ||||||
| response-iterator@^0.2.6: |  | ||||||
|   version "0.2.6" |  | ||||||
|   resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" |  | ||||||
|   integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== |  | ||||||
|  |  | ||||||
| restore-cursor@^3.1.0: | restore-cursor@^3.1.0: | ||||||
|   version "3.1.0" |   version "3.1.0" | ||||||
|   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" |   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" | ||||||
| @@ -2881,11 +2757,6 @@ swap-case@^2.0.2: | |||||||
|   dependencies: |   dependencies: | ||||||
|     tslib "^2.0.3" |     tslib "^2.0.3" | ||||||
|  |  | ||||||
| symbol-observable@^4.0.0: |  | ||||||
|   version "4.0.0" |  | ||||||
|   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" |  | ||||||
|   integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== |  | ||||||
|  |  | ||||||
| through@^2.3.6, through@^2.3.8: | through@^2.3.6, through@^2.3.8: | ||||||
|   version "2.3.8" |   version "2.3.8" | ||||||
|   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" |   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" | ||||||
| @@ -2922,19 +2793,12 @@ tr46@~0.0.3: | |||||||
|   resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" |   resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" | ||||||
|   integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== |   integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== | ||||||
|  |  | ||||||
| ts-invariant@^0.10.3: |  | ||||||
|   version "0.10.3" |  | ||||||
|   resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" |  | ||||||
|   integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== |  | ||||||
|   dependencies: |  | ||||||
|     tslib "^2.1.0" |  | ||||||
|  |  | ||||||
| ts-log@^2.2.3: | ts-log@^2.2.3: | ||||||
|   version "2.2.5" |   version "2.2.5" | ||||||
|   resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.5.tgz#aef3252f1143d11047e2cb6f7cfaac7408d96623" |   resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.5.tgz#aef3252f1143d11047e2cb6f7cfaac7408d96623" | ||||||
|   integrity sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA== |   integrity sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA== | ||||||
|  |  | ||||||
| tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2, tslib@~2.6.0: | tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2, tslib@~2.6.0: | ||||||
|   version "2.6.2" |   version "2.6.2" | ||||||
|   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" |   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" | ||||||
|   integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== |   integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== | ||||||
| @@ -2954,11 +2818,6 @@ type-fest@^0.21.3: | |||||||
|   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" |   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" | ||||||
|   integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== |   integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== | ||||||
|  |  | ||||||
| typescript@^4.x: |  | ||||||
|   version "4.9.5" |  | ||||||
|   resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" |  | ||||||
|   integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== |  | ||||||
|  |  | ||||||
| ua-parser-js@^1.0.35: | ua-parser-js@^1.0.35: | ||||||
|   version "1.0.37" |   version "1.0.37" | ||||||
|   resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" |   resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" | ||||||
| @@ -3164,15 +3023,3 @@ yocto-queue@^0.1.0: | |||||||
|   version "0.1.0" |   version "0.1.0" | ||||||
|   resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" |   resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" | ||||||
|   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== |   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== | ||||||
|  |  | ||||||
| zen-observable-ts@^1.2.5: |  | ||||||
|   version "1.2.5" |  | ||||||
|   resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" |  | ||||||
|   integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== |  | ||||||
|   dependencies: |  | ||||||
|     zen-observable "0.8.15" |  | ||||||
|  |  | ||||||
| zen-observable@0.8.15: |  | ||||||
|   version "0.8.15" |  | ||||||
|   resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" |  | ||||||
|   integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user