@globalscoutme/api-client 1.0.6 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/types.gen.ts CHANGED
@@ -4,6 +4,17 @@ export type ClientOptions = {
4
4
  baseUrl: string;
5
5
  };
6
6
 
7
+ export type AuthMeResponseDto = {
8
+ /**
9
+ * Supabase auth user id (JWT sub)
10
+ */
11
+ id: string;
12
+ /**
13
+ * user_types.code the user is registered as (e.g. "player", "coach", "club_admin", "scouter"). Null when not yet set.
14
+ */
15
+ userType?: string | null;
16
+ };
17
+
7
18
  export type PlayerResponseDto = {
8
19
  /**
9
20
  * Internal user_data id (UUID)
@@ -16,33 +27,23 @@ export type PlayerResponseDto = {
16
27
  /**
17
28
  * First name
18
29
  */
19
- firstName?: {
20
- [key: string]: unknown;
21
- };
30
+ firstName?: string | null;
22
31
  /**
23
32
  * Last name
24
33
  */
25
- lastName?: {
26
- [key: string]: unknown;
27
- };
34
+ lastName?: string | null;
28
35
  /**
29
36
  * Date of birth
30
37
  */
31
- dateOfBirth?: {
32
- [key: string]: unknown;
33
- };
38
+ dateOfBirth?: string | null;
34
39
  /**
35
40
  * Registration step code
36
41
  */
37
- registrationStep?: {
38
- [key: string]: unknown;
39
- };
42
+ registrationStep?: string | null;
40
43
  /**
41
44
  * User type code (player / scout / coach)
42
45
  */
43
- userType?: {
44
- [key: string]: unknown;
45
- };
46
+ userType?: string | null;
46
47
  /**
47
48
  * KYC verified flag
48
49
  */
@@ -50,42 +51,30 @@ export type PlayerResponseDto = {
50
51
  /**
51
52
  * Avatar URL
52
53
  */
53
- avatarUrl?: {
54
- [key: string]: unknown;
55
- };
54
+ avatarUrl?: string | null;
56
55
  /**
57
56
  * Created at
58
57
  */
59
- createdAt?: {
60
- [key: string]: unknown;
61
- };
58
+ createdAt?: string | null;
62
59
  /**
63
60
  * Updated at
64
61
  */
65
- updatedAt?: {
66
- [key: string]: unknown;
67
- };
62
+ updatedAt?: string | null;
68
63
  };
69
64
 
70
65
  export type DashboardResponseDto = {
71
66
  /**
72
67
  * First name
73
68
  */
74
- firstName?: {
75
- [key: string]: unknown;
76
- };
69
+ firstName?: string | null;
77
70
  /**
78
71
  * Last name
79
72
  */
80
- lastName?: {
81
- [key: string]: unknown;
82
- };
73
+ lastName?: string | null;
83
74
  /**
84
75
  * Avatar URL
85
76
  */
86
- avatarUrl?: {
87
- [key: string]: unknown;
88
- };
77
+ avatarUrl?: string | null;
89
78
  /**
90
79
  * Profile completion 0–100
91
80
  */
@@ -122,9 +111,15 @@ export type DashboardResponseDto = {
122
111
 
123
112
  export type UpdatePlayerDto = {
124
113
  /**
125
- * Registration step code
114
+ * Registration step code (Part C onboarding).
126
115
  */
127
- registrationStep?: string;
116
+ registrationStep?:
117
+ | 'signup'
118
+ | 'kyc_pending'
119
+ | 'kyc_submitted'
120
+ | 'profile_filling'
121
+ | 'ai_measurements'
122
+ | 'complete';
128
123
  /**
129
124
  * First name
130
125
  */
@@ -136,9 +131,7 @@ export type UpdatePlayerDto = {
136
131
  /**
137
132
  * Date of birth (ISO 8601 date)
138
133
  */
139
- dateOfBirth?: {
140
- [key: string]: unknown;
141
- };
134
+ dateOfBirth?: string | null;
142
135
  /**
143
136
  * User type code
144
137
  */
@@ -195,93 +188,63 @@ export type ProfileResponseDto = {
195
188
  /**
196
189
  * First name
197
190
  */
198
- firstName?: {
199
- [key: string]: unknown;
200
- };
191
+ firstName?: string | null;
201
192
  /**
202
193
  * Last name
203
194
  */
204
- lastName?: {
205
- [key: string]: unknown;
206
- };
195
+ lastName?: string | null;
207
196
  /**
208
197
  * Date of birth
209
198
  */
210
- dateOfBirth?: {
211
- [key: string]: unknown;
212
- };
199
+ dateOfBirth?: string | null;
213
200
  /**
214
201
  * Phone number
215
202
  */
216
- phone?: {
217
- [key: string]: unknown;
218
- };
203
+ phone?: string | null;
219
204
  /**
220
205
  * Country of residence (2-letter code)
221
206
  */
222
- country?: {
223
- [key: string]: unknown;
224
- };
207
+ country?: string | null;
225
208
  /**
226
209
  * Nationality (2-letter code)
227
210
  */
228
- nationality?: {
229
- [key: string]: unknown;
230
- };
211
+ nationality?: string | null;
231
212
  /**
232
213
  * Gender code
233
214
  */
234
- gender?: {
235
- [key: string]: unknown;
236
- };
215
+ gender?: string | null;
237
216
  /**
238
217
  * City
239
218
  */
240
- city?: {
241
- [key: string]: unknown;
242
- };
219
+ city?: string | null;
243
220
  /**
244
221
  * Bio
245
222
  */
246
- bio?: {
247
- [key: string]: unknown;
248
- };
223
+ bio?: string | null;
249
224
  /**
250
225
  * Avatar URL
251
226
  */
252
- avatarUrl?: {
253
- [key: string]: unknown;
254
- };
227
+ avatarUrl?: string | null;
255
228
  /**
256
229
  * Cover image URL
257
230
  */
258
- coverImageUrl?: {
259
- [key: string]: unknown;
260
- };
231
+ coverImageUrl?: string | null;
261
232
  /**
262
233
  * Is free agent
263
234
  */
264
- isFreeAgent?: {
265
- [key: string]: unknown;
266
- };
235
+ isFreeAgent?: boolean | null;
267
236
  /**
268
237
  * Is EU visa holder
269
238
  */
270
- isEuVisaHolder?: {
271
- [key: string]: unknown;
272
- };
239
+ isEuVisaHolder?: boolean | null;
273
240
  /**
274
241
  * Visa expiration date
275
242
  */
276
- visaExpirationDate?: {
277
- [key: string]: unknown;
278
- };
243
+ visaExpirationDate?: string | null;
279
244
  /**
280
245
  * Marital status code
281
246
  */
282
- maritalStatusCode?: {
283
- [key: string]: unknown;
284
- };
247
+ maritalStatusCode?: string | null;
285
248
  /**
286
249
  * Languages spoken (codes)
287
250
  */
@@ -289,27 +252,23 @@ export type ProfileResponseDto = {
289
252
  /**
290
253
  * Preferred foot code
291
254
  */
292
- preferredFoot?: {
293
- [key: string]: unknown;
294
- };
255
+ preferredFoot?: string | null;
256
+ /**
257
+ * Preferred formation code (e.g. "4-3-3")
258
+ */
259
+ preferredFormation?: string | null;
295
260
  /**
296
261
  * Height in cm
297
262
  */
298
- heightCm?: {
299
- [key: string]: unknown;
300
- };
263
+ heightCm?: number | null;
301
264
  /**
302
265
  * Weight in kg
303
266
  */
304
- weightKg?: {
305
- [key: string]: unknown;
306
- };
267
+ weightKg?: number | null;
307
268
  /**
308
269
  * Current club name
309
270
  */
310
- currentClub?: {
311
- [key: string]: unknown;
312
- };
271
+ currentClub?: string | null;
313
272
  /**
314
273
  * Previous clubs
315
274
  */
@@ -317,9 +276,7 @@ export type ProfileResponseDto = {
317
276
  /**
318
277
  * Main position code (e.g. "ST")
319
278
  */
320
- mainPosition?: {
321
- [key: string]: unknown;
322
- };
279
+ mainPosition?: string | null;
323
280
  /**
324
281
  * Additional position codes (e.g. ["RW","LW"])
325
282
  */
@@ -331,39 +288,27 @@ export type ProfileResponseDto = {
331
288
  /**
332
289
  * Agency name
333
290
  */
334
- agencyName?: {
335
- [key: string]: unknown;
336
- };
291
+ agencyName?: string | null;
337
292
  /**
338
293
  * Agency website URL
339
294
  */
340
- agencyWebsite?: {
341
- [key: string]: unknown;
342
- };
295
+ agencyWebsite?: string | null;
343
296
  /**
344
297
  * Primary market region code
345
298
  */
346
- primaryMarket?: {
347
- [key: string]: unknown;
348
- };
299
+ primaryMarket?: string | null;
349
300
  /**
350
301
  * Players represented (e.g. "1-5", "6-10", "more_than_10")
351
302
  */
352
- playersRepresented?: {
353
- [key: string]: unknown;
354
- };
303
+ playersRepresented?: string | null;
355
304
  /**
356
305
  * About the agency
357
306
  */
358
- aboutAgency?: {
359
- [key: string]: unknown;
360
- };
307
+ aboutAgency?: string | null;
361
308
  /**
362
309
  * Updated at
363
310
  */
364
- updatedAt?: {
365
- [key: string]: unknown;
366
- };
311
+ updatedAt?: string | null;
367
312
  };
368
313
 
369
314
  export type UpdateProfileDto = {
@@ -404,13 +349,13 @@ export type UpdateProfileDto = {
404
349
  */
405
350
  bio?: string;
406
351
  /**
407
- * Avatar URL
352
+ * Avatar URL, null to clear
408
353
  */
409
- avatarUrl?: string;
354
+ avatarUrl?: string | null;
410
355
  /**
411
- * Cover image URL
356
+ * Cover image URL, null to clear
412
357
  */
413
- coverImageUrl?: string;
358
+ coverImageUrl?: string | null;
414
359
  /**
415
360
  * Is free agent
416
361
  */
@@ -435,6 +380,10 @@ export type UpdateProfileDto = {
435
380
  * Preferred foot code
436
381
  */
437
382
  preferredFoot?: string;
383
+ /**
384
+ * Preferred formation code (e.g. "4-3-3"), null to clear
385
+ */
386
+ preferredFormation?: string | null;
438
387
  /**
439
388
  * Height in cm
440
389
  */
@@ -454,9 +403,7 @@ export type UpdateProfileDto = {
454
403
  /**
455
404
  * Main position code (e.g. "ST"), null to clear
456
405
  */
457
- mainPosition?: {
458
- [key: string]: unknown;
459
- };
406
+ mainPosition?: string | null;
460
407
  /**
461
408
  * Additional position codes (e.g. ["RW","LW"]), empty array to clear
462
409
  */
@@ -491,69 +438,35 @@ export type AchievementCatalogDto = {
491
438
  id: string;
492
439
  code: string;
493
440
  name: string;
494
- description?: {
495
- [key: string]: unknown;
496
- };
497
- iconUrl?: {
498
- [key: string]: unknown;
499
- };
500
- pointsAwarded?: {
501
- [key: string]: unknown;
502
- };
503
- category?: {
504
- [key: string]: unknown;
505
- };
506
- rarity?: {
507
- [key: string]: unknown;
508
- };
509
- isActive?: {
510
- [key: string]: unknown;
511
- };
441
+ description?: string | null;
442
+ iconUrl?: string | null;
443
+ pointsAwarded?: number | null;
444
+ category?: string | null;
445
+ rarity?: string | null;
446
+ isActive?: boolean | null;
512
447
  };
513
448
 
514
449
  export type UserAchievementResponseDto = {
515
450
  id: string;
516
451
  userId: string;
517
452
  achievementId: string;
518
- earnedAt?: {
519
- [key: string]: unknown;
520
- };
521
- progress?: {
522
- [key: string]: unknown;
523
- };
524
- isCompleted?: {
525
- [key: string]: unknown;
526
- };
453
+ earnedAt?: string | null;
454
+ progress?: number | null;
455
+ isCompleted?: boolean | null;
527
456
  achievement?: AchievementCatalogDto;
528
457
  };
529
458
 
530
459
  export type BodyMeasurementResponseDto = {
531
460
  id: string;
532
461
  userId: string;
533
- measurementDate?: {
534
- [key: string]: unknown;
535
- };
536
- imageUrl?: {
537
- [key: string]: unknown;
538
- };
539
- shoulderWidthCm?: {
540
- [key: string]: unknown;
541
- };
542
- chestCircumferenceCm?: {
543
- [key: string]: unknown;
544
- };
545
- waistCircumferenceCm?: {
546
- [key: string]: unknown;
547
- };
548
- hipCircumferenceCm?: {
549
- [key: string]: unknown;
550
- };
551
- processingStatus?: {
552
- [key: string]: unknown;
553
- };
554
- createdAt?: {
555
- [key: string]: unknown;
556
- };
462
+ measurementDate?: string | null;
463
+ imageUrl?: string | null;
464
+ shoulderWidthCm?: number | null;
465
+ chestCircumferenceCm?: number | null;
466
+ waistCircumferenceCm?: number | null;
467
+ hipCircumferenceCm?: number | null;
468
+ processingStatus?: string | null;
469
+ createdAt?: string | null;
557
470
  };
558
471
 
559
472
  export type CreateBodyMeasurementDto = {
@@ -566,21 +479,11 @@ export type CreateBodyMeasurementDto = {
566
479
  export type DocumentResponseDto = {
567
480
  id: string;
568
481
  userId: string;
569
- documentType?: {
570
- [key: string]: unknown;
571
- };
572
- fileUrl?: {
573
- [key: string]: unknown;
574
- };
575
- filePath?: {
576
- [key: string]: unknown;
577
- };
578
- status?: {
579
- [key: string]: unknown;
580
- };
581
- uploadedAt?: {
582
- [key: string]: unknown;
583
- };
482
+ documentType?: string | null;
483
+ fileUrl?: string | null;
484
+ filePath?: string | null;
485
+ status?: string | null;
486
+ uploadedAt?: string | null;
584
487
  };
585
488
 
586
489
  export type CreateDocumentDto = {
@@ -599,7 +502,7 @@ export type CreateDocumentDto = {
599
502
  /**
600
503
  * KYC verification id this document belongs to
601
504
  */
602
- kycVerificationId: string;
505
+ kycVerificationId?: string;
603
506
  };
604
507
 
605
508
  export type IndexItemDto = {
@@ -679,57 +582,39 @@ export type OrganizationResponseDto = {
679
582
  /**
680
583
  * Country code
681
584
  */
682
- country?: {
683
- [key: string]: unknown;
684
- };
585
+ country?: string | null;
685
586
  /**
686
587
  * League tier code
687
588
  */
688
- leagueTier?: {
689
- [key: string]: unknown;
690
- };
589
+ leagueTier?: string | null;
691
590
  /**
692
591
  * FIFA club category code
693
592
  */
694
- fifaCategory?: {
695
- [key: string]: unknown;
696
- };
593
+ fifaCategory?: string | null;
697
594
  /**
698
595
  * Stadium name
699
596
  */
700
- stadiumName?: {
701
- [key: string]: unknown;
702
- };
597
+ stadiumName?: string | null;
703
598
  /**
704
599
  * Official club email
705
600
  */
706
- email?: {
707
- [key: string]: unknown;
708
- };
601
+ email?: string | null;
709
602
  /**
710
603
  * Official website
711
604
  */
712
- website?: {
713
- [key: string]: unknown;
714
- };
605
+ website?: string | null;
715
606
  /**
716
607
  * Club description
717
608
  */
718
- description?: {
719
- [key: string]: unknown;
720
- };
609
+ description?: string | null;
721
610
  /**
722
611
  * Phone
723
612
  */
724
- phone?: {
725
- [key: string]: unknown;
726
- };
613
+ phone?: string | null;
727
614
  /**
728
615
  * Updated at
729
616
  */
730
- updatedAt?: {
731
- [key: string]: unknown;
732
- };
617
+ updatedAt?: string | null;
733
618
  };
734
619
 
735
620
  export type UpdateOrganizationDto = {
@@ -771,46 +656,83 @@ export type UpdateOrganizationDto = {
771
656
  phone?: string;
772
657
  };
773
658
 
659
+ export type CreateUploadUrlDto = {
660
+ /**
661
+ * Target storage bucket
662
+ */
663
+ bucket: 'videos' | 'avatars' | 'documents';
664
+ /**
665
+ * MIME type of the file being uploaded
666
+ */
667
+ contentType: string;
668
+ /**
669
+ * Size of the file in bytes
670
+ */
671
+ sizeBytes: number;
672
+ /**
673
+ * Optional filename hint (not used for path)
674
+ */
675
+ filenameHint?: string;
676
+ };
677
+
678
+ export type UploadUrlResponseDto = {
679
+ /**
680
+ * Signed URL the client PUTs raw bytes to
681
+ */
682
+ uploadUrl: string;
683
+ /**
684
+ * Signed-upload token (opaque)
685
+ */
686
+ token: string;
687
+ /**
688
+ * Storage path (persist this as video_path / file_path)
689
+ */
690
+ path: string;
691
+ /**
692
+ * Bucket the upload targets
693
+ */
694
+ bucket: string;
695
+ /**
696
+ * URL validity window in seconds
697
+ */
698
+ expiresIn: number;
699
+ };
700
+
774
701
  export type VideoResponseDto = {
775
702
  id: string;
776
703
  userId: string;
777
704
  title: string;
778
- videoUrl: string;
779
- videoType?: {
780
- [key: string]: unknown;
781
- };
782
- durationSeconds?: {
783
- [key: string]: unknown;
784
- };
785
- uploadStatus?: {
786
- [key: string]: unknown;
787
- };
788
- processingStatus?: {
789
- [key: string]: unknown;
790
- };
791
- isPublic?: {
792
- [key: string]: unknown;
793
- };
794
- uploadDate?: {
795
- [key: string]: unknown;
796
- };
705
+ /**
706
+ * Signed URL for the thumbnail image, valid for ~1 hour. Null if no thumbnail was uploaded.
707
+ */
708
+ thumbnailUrl?: string | null;
709
+ videoType?: string | null;
710
+ durationSeconds?: number | null;
711
+ uploadStatus?: string | null;
712
+ processingStatus?: string | null;
713
+ isPublic?: boolean | null;
714
+ uploadDate?: string | null;
797
715
  };
798
716
 
799
717
  export type CreateVideoDto = {
800
718
  /**
801
- * Video URL (from upload)
719
+ * Storage path of the uploaded video file
802
720
  */
803
- videoUrl: string;
721
+ videoPath: string;
804
722
  /**
805
- * Video path in storage
723
+ * Legacy video URL. Ignored for new uploads — BE issues a signed play URL on demand via GET /videos/:id/play-url.
806
724
  */
807
- videoPath: string;
725
+ videoUrl?: string;
726
+ /**
727
+ * Storage path of the thumbnail image (uploaded alongside the video)
728
+ */
729
+ thumbnailPath?: string;
808
730
  /**
809
731
  * Title
810
732
  */
811
733
  title: string;
812
734
  /**
813
- * Video type code (e.g. best_moment, cmj)
735
+ * Video type code (e.g. best_moment, cmj, highlight)
814
736
  */
815
737
  videoType?: string;
816
738
  /**
@@ -823,6 +745,17 @@ export type CreateVideoDto = {
823
745
  isPublic?: boolean;
824
746
  };
825
747
 
748
+ export type PlayUrlResponseDto = {
749
+ /**
750
+ * Short-lived signed URL for the video file
751
+ */
752
+ url: string;
753
+ /**
754
+ * TTL of the signed URL in seconds
755
+ */
756
+ expiresIn: number;
757
+ };
758
+
826
759
  export type GetAuthMeData = {
827
760
  body?: never;
828
761
  path?: never;
@@ -830,10 +763,19 @@ export type GetAuthMeData = {
830
763
  url: '/auth/me';
831
764
  };
832
765
 
766
+ export type GetAuthMeErrors = {
767
+ /**
768
+ * Unauthorized
769
+ */
770
+ 401: unknown;
771
+ };
772
+
833
773
  export type GetAuthMeResponses = {
834
- 200: unknown;
774
+ 200: AuthMeResponseDto;
835
775
  };
836
776
 
777
+ export type GetAuthMeResponse = GetAuthMeResponses[keyof GetAuthMeResponses];
778
+
837
779
  export type DeletePlayersMeData = {
838
780
  body?: never;
839
781
  path?: never;
@@ -1210,6 +1152,38 @@ export type PutOrganizationsMeResponses = {
1210
1152
  export type PutOrganizationsMeResponse =
1211
1153
  PutOrganizationsMeResponses[keyof PutOrganizationsMeResponses];
1212
1154
 
1155
+ export type PostStorageUploadUrlData = {
1156
+ body: CreateUploadUrlDto;
1157
+ path?: never;
1158
+ query?: never;
1159
+ url: '/storage/upload-url';
1160
+ };
1161
+
1162
+ export type PostStorageUploadUrlErrors = {
1163
+ /**
1164
+ * Unknown bucket or disallowed MIME
1165
+ */
1166
+ 400: unknown;
1167
+ /**
1168
+ * Unauthorized
1169
+ */
1170
+ 401: unknown;
1171
+ /**
1172
+ * File too large for bucket
1173
+ */
1174
+ 413: unknown;
1175
+ };
1176
+
1177
+ export type PostStorageUploadUrlResponses = {
1178
+ /**
1179
+ * Signed upload URL issued
1180
+ */
1181
+ 201: UploadUrlResponseDto;
1182
+ };
1183
+
1184
+ export type PostStorageUploadUrlResponse =
1185
+ PostStorageUploadUrlResponses[keyof PostStorageUploadUrlResponses];
1186
+
1213
1187
  export type GetVideosMeData = {
1214
1188
  body?: never;
1215
1189
  path?: never;
@@ -1263,6 +1237,36 @@ export type PostVideosResponses = {
1263
1237
 
1264
1238
  export type PostVideosResponse = PostVideosResponses[keyof PostVideosResponses];
1265
1239
 
1240
+ export type GetVideosByIdPlayUrlData = {
1241
+ body?: never;
1242
+ path: {
1243
+ id: string;
1244
+ };
1245
+ query?: never;
1246
+ url: '/videos/{id}/play-url';
1247
+ };
1248
+
1249
+ export type GetVideosByIdPlayUrlErrors = {
1250
+ /**
1251
+ * Unauthorized
1252
+ */
1253
+ 401: unknown;
1254
+ /**
1255
+ * Video not found
1256
+ */
1257
+ 404: unknown;
1258
+ };
1259
+
1260
+ export type GetVideosByIdPlayUrlResponses = {
1261
+ /**
1262
+ * Short-lived signed URL for video playback
1263
+ */
1264
+ 200: PlayUrlResponseDto;
1265
+ };
1266
+
1267
+ export type GetVideosByIdPlayUrlResponse =
1268
+ GetVideosByIdPlayUrlResponses[keyof GetVideosByIdPlayUrlResponses];
1269
+
1266
1270
  export type DeleteVideosByIdData = {
1267
1271
  body?: never;
1268
1272
  path: {