@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.
@@ -1,6 +1,16 @@
1
1
  export type ClientOptions = {
2
2
  baseUrl: string;
3
3
  };
4
+ export type AuthMeResponseDto = {
5
+ /**
6
+ * Supabase auth user id (JWT sub)
7
+ */
8
+ id: string;
9
+ /**
10
+ * user_types.code the user is registered as (e.g. "player", "coach", "club_admin", "scouter"). Null when not yet set.
11
+ */
12
+ userType?: string | null;
13
+ };
4
14
  export type PlayerResponseDto = {
5
15
  /**
6
16
  * Internal user_data id (UUID)
@@ -13,33 +23,23 @@ export type PlayerResponseDto = {
13
23
  /**
14
24
  * First name
15
25
  */
16
- firstName?: {
17
- [key: string]: unknown;
18
- };
26
+ firstName?: string | null;
19
27
  /**
20
28
  * Last name
21
29
  */
22
- lastName?: {
23
- [key: string]: unknown;
24
- };
30
+ lastName?: string | null;
25
31
  /**
26
32
  * Date of birth
27
33
  */
28
- dateOfBirth?: {
29
- [key: string]: unknown;
30
- };
34
+ dateOfBirth?: string | null;
31
35
  /**
32
36
  * Registration step code
33
37
  */
34
- registrationStep?: {
35
- [key: string]: unknown;
36
- };
38
+ registrationStep?: string | null;
37
39
  /**
38
40
  * User type code (player / scout / coach)
39
41
  */
40
- userType?: {
41
- [key: string]: unknown;
42
- };
42
+ userType?: string | null;
43
43
  /**
44
44
  * KYC verified flag
45
45
  */
@@ -47,41 +47,29 @@ export type PlayerResponseDto = {
47
47
  /**
48
48
  * Avatar URL
49
49
  */
50
- avatarUrl?: {
51
- [key: string]: unknown;
52
- };
50
+ avatarUrl?: string | null;
53
51
  /**
54
52
  * Created at
55
53
  */
56
- createdAt?: {
57
- [key: string]: unknown;
58
- };
54
+ createdAt?: string | null;
59
55
  /**
60
56
  * Updated at
61
57
  */
62
- updatedAt?: {
63
- [key: string]: unknown;
64
- };
58
+ updatedAt?: string | null;
65
59
  };
66
60
  export type DashboardResponseDto = {
67
61
  /**
68
62
  * First name
69
63
  */
70
- firstName?: {
71
- [key: string]: unknown;
72
- };
64
+ firstName?: string | null;
73
65
  /**
74
66
  * Last name
75
67
  */
76
- lastName?: {
77
- [key: string]: unknown;
78
- };
68
+ lastName?: string | null;
79
69
  /**
80
70
  * Avatar URL
81
71
  */
82
- avatarUrl?: {
83
- [key: string]: unknown;
84
- };
72
+ avatarUrl?: string | null;
85
73
  /**
86
74
  * Profile completion 0–100
87
75
  */
@@ -117,9 +105,9 @@ export type DashboardResponseDto = {
117
105
  };
118
106
  export type UpdatePlayerDto = {
119
107
  /**
120
- * Registration step code
108
+ * Registration step code (Part C onboarding).
121
109
  */
122
- registrationStep?: string;
110
+ registrationStep?: 'signup' | 'kyc_pending' | 'kyc_submitted' | 'profile_filling' | 'ai_measurements' | 'complete';
123
111
  /**
124
112
  * First name
125
113
  */
@@ -131,9 +119,7 @@ export type UpdatePlayerDto = {
131
119
  /**
132
120
  * Date of birth (ISO 8601 date)
133
121
  */
134
- dateOfBirth?: {
135
- [key: string]: unknown;
136
- };
122
+ dateOfBirth?: string | null;
137
123
  /**
138
124
  * User type code
139
125
  */
@@ -187,93 +173,63 @@ export type ProfileResponseDto = {
187
173
  /**
188
174
  * First name
189
175
  */
190
- firstName?: {
191
- [key: string]: unknown;
192
- };
176
+ firstName?: string | null;
193
177
  /**
194
178
  * Last name
195
179
  */
196
- lastName?: {
197
- [key: string]: unknown;
198
- };
180
+ lastName?: string | null;
199
181
  /**
200
182
  * Date of birth
201
183
  */
202
- dateOfBirth?: {
203
- [key: string]: unknown;
204
- };
184
+ dateOfBirth?: string | null;
205
185
  /**
206
186
  * Phone number
207
187
  */
208
- phone?: {
209
- [key: string]: unknown;
210
- };
188
+ phone?: string | null;
211
189
  /**
212
190
  * Country of residence (2-letter code)
213
191
  */
214
- country?: {
215
- [key: string]: unknown;
216
- };
192
+ country?: string | null;
217
193
  /**
218
194
  * Nationality (2-letter code)
219
195
  */
220
- nationality?: {
221
- [key: string]: unknown;
222
- };
196
+ nationality?: string | null;
223
197
  /**
224
198
  * Gender code
225
199
  */
226
- gender?: {
227
- [key: string]: unknown;
228
- };
200
+ gender?: string | null;
229
201
  /**
230
202
  * City
231
203
  */
232
- city?: {
233
- [key: string]: unknown;
234
- };
204
+ city?: string | null;
235
205
  /**
236
206
  * Bio
237
207
  */
238
- bio?: {
239
- [key: string]: unknown;
240
- };
208
+ bio?: string | null;
241
209
  /**
242
210
  * Avatar URL
243
211
  */
244
- avatarUrl?: {
245
- [key: string]: unknown;
246
- };
212
+ avatarUrl?: string | null;
247
213
  /**
248
214
  * Cover image URL
249
215
  */
250
- coverImageUrl?: {
251
- [key: string]: unknown;
252
- };
216
+ coverImageUrl?: string | null;
253
217
  /**
254
218
  * Is free agent
255
219
  */
256
- isFreeAgent?: {
257
- [key: string]: unknown;
258
- };
220
+ isFreeAgent?: boolean | null;
259
221
  /**
260
222
  * Is EU visa holder
261
223
  */
262
- isEuVisaHolder?: {
263
- [key: string]: unknown;
264
- };
224
+ isEuVisaHolder?: boolean | null;
265
225
  /**
266
226
  * Visa expiration date
267
227
  */
268
- visaExpirationDate?: {
269
- [key: string]: unknown;
270
- };
228
+ visaExpirationDate?: string | null;
271
229
  /**
272
230
  * Marital status code
273
231
  */
274
- maritalStatusCode?: {
275
- [key: string]: unknown;
276
- };
232
+ maritalStatusCode?: string | null;
277
233
  /**
278
234
  * Languages spoken (codes)
279
235
  */
@@ -281,27 +237,23 @@ export type ProfileResponseDto = {
281
237
  /**
282
238
  * Preferred foot code
283
239
  */
284
- preferredFoot?: {
285
- [key: string]: unknown;
286
- };
240
+ preferredFoot?: string | null;
241
+ /**
242
+ * Preferred formation code (e.g. "4-3-3")
243
+ */
244
+ preferredFormation?: string | null;
287
245
  /**
288
246
  * Height in cm
289
247
  */
290
- heightCm?: {
291
- [key: string]: unknown;
292
- };
248
+ heightCm?: number | null;
293
249
  /**
294
250
  * Weight in kg
295
251
  */
296
- weightKg?: {
297
- [key: string]: unknown;
298
- };
252
+ weightKg?: number | null;
299
253
  /**
300
254
  * Current club name
301
255
  */
302
- currentClub?: {
303
- [key: string]: unknown;
304
- };
256
+ currentClub?: string | null;
305
257
  /**
306
258
  * Previous clubs
307
259
  */
@@ -309,9 +261,7 @@ export type ProfileResponseDto = {
309
261
  /**
310
262
  * Main position code (e.g. "ST")
311
263
  */
312
- mainPosition?: {
313
- [key: string]: unknown;
314
- };
264
+ mainPosition?: string | null;
315
265
  /**
316
266
  * Additional position codes (e.g. ["RW","LW"])
317
267
  */
@@ -323,39 +273,27 @@ export type ProfileResponseDto = {
323
273
  /**
324
274
  * Agency name
325
275
  */
326
- agencyName?: {
327
- [key: string]: unknown;
328
- };
276
+ agencyName?: string | null;
329
277
  /**
330
278
  * Agency website URL
331
279
  */
332
- agencyWebsite?: {
333
- [key: string]: unknown;
334
- };
280
+ agencyWebsite?: string | null;
335
281
  /**
336
282
  * Primary market region code
337
283
  */
338
- primaryMarket?: {
339
- [key: string]: unknown;
340
- };
284
+ primaryMarket?: string | null;
341
285
  /**
342
286
  * Players represented (e.g. "1-5", "6-10", "more_than_10")
343
287
  */
344
- playersRepresented?: {
345
- [key: string]: unknown;
346
- };
288
+ playersRepresented?: string | null;
347
289
  /**
348
290
  * About the agency
349
291
  */
350
- aboutAgency?: {
351
- [key: string]: unknown;
352
- };
292
+ aboutAgency?: string | null;
353
293
  /**
354
294
  * Updated at
355
295
  */
356
- updatedAt?: {
357
- [key: string]: unknown;
358
- };
296
+ updatedAt?: string | null;
359
297
  };
360
298
  export type UpdateProfileDto = {
361
299
  /**
@@ -395,13 +333,13 @@ export type UpdateProfileDto = {
395
333
  */
396
334
  bio?: string;
397
335
  /**
398
- * Avatar URL
336
+ * Avatar URL, null to clear
399
337
  */
400
- avatarUrl?: string;
338
+ avatarUrl?: string | null;
401
339
  /**
402
- * Cover image URL
340
+ * Cover image URL, null to clear
403
341
  */
404
- coverImageUrl?: string;
342
+ coverImageUrl?: string | null;
405
343
  /**
406
344
  * Is free agent
407
345
  */
@@ -426,6 +364,10 @@ export type UpdateProfileDto = {
426
364
  * Preferred foot code
427
365
  */
428
366
  preferredFoot?: string;
367
+ /**
368
+ * Preferred formation code (e.g. "4-3-3"), null to clear
369
+ */
370
+ preferredFormation?: string | null;
429
371
  /**
430
372
  * Height in cm
431
373
  */
@@ -445,9 +387,7 @@ export type UpdateProfileDto = {
445
387
  /**
446
388
  * Main position code (e.g. "ST"), null to clear
447
389
  */
448
- mainPosition?: {
449
- [key: string]: unknown;
450
- };
390
+ mainPosition?: string | null;
451
391
  /**
452
392
  * Additional position codes (e.g. ["RW","LW"]), empty array to clear
453
393
  */
@@ -481,67 +421,33 @@ export type AchievementCatalogDto = {
481
421
  id: string;
482
422
  code: string;
483
423
  name: string;
484
- description?: {
485
- [key: string]: unknown;
486
- };
487
- iconUrl?: {
488
- [key: string]: unknown;
489
- };
490
- pointsAwarded?: {
491
- [key: string]: unknown;
492
- };
493
- category?: {
494
- [key: string]: unknown;
495
- };
496
- rarity?: {
497
- [key: string]: unknown;
498
- };
499
- isActive?: {
500
- [key: string]: unknown;
501
- };
424
+ description?: string | null;
425
+ iconUrl?: string | null;
426
+ pointsAwarded?: number | null;
427
+ category?: string | null;
428
+ rarity?: string | null;
429
+ isActive?: boolean | null;
502
430
  };
503
431
  export type UserAchievementResponseDto = {
504
432
  id: string;
505
433
  userId: string;
506
434
  achievementId: string;
507
- earnedAt?: {
508
- [key: string]: unknown;
509
- };
510
- progress?: {
511
- [key: string]: unknown;
512
- };
513
- isCompleted?: {
514
- [key: string]: unknown;
515
- };
435
+ earnedAt?: string | null;
436
+ progress?: number | null;
437
+ isCompleted?: boolean | null;
516
438
  achievement?: AchievementCatalogDto;
517
439
  };
518
440
  export type BodyMeasurementResponseDto = {
519
441
  id: string;
520
442
  userId: string;
521
- measurementDate?: {
522
- [key: string]: unknown;
523
- };
524
- imageUrl?: {
525
- [key: string]: unknown;
526
- };
527
- shoulderWidthCm?: {
528
- [key: string]: unknown;
529
- };
530
- chestCircumferenceCm?: {
531
- [key: string]: unknown;
532
- };
533
- waistCircumferenceCm?: {
534
- [key: string]: unknown;
535
- };
536
- hipCircumferenceCm?: {
537
- [key: string]: unknown;
538
- };
539
- processingStatus?: {
540
- [key: string]: unknown;
541
- };
542
- createdAt?: {
543
- [key: string]: unknown;
544
- };
443
+ measurementDate?: string | null;
444
+ imageUrl?: string | null;
445
+ shoulderWidthCm?: number | null;
446
+ chestCircumferenceCm?: number | null;
447
+ waistCircumferenceCm?: number | null;
448
+ hipCircumferenceCm?: number | null;
449
+ processingStatus?: string | null;
450
+ createdAt?: string | null;
545
451
  };
546
452
  export type CreateBodyMeasurementDto = {
547
453
  /**
@@ -552,21 +458,11 @@ export type CreateBodyMeasurementDto = {
552
458
  export type DocumentResponseDto = {
553
459
  id: string;
554
460
  userId: string;
555
- documentType?: {
556
- [key: string]: unknown;
557
- };
558
- fileUrl?: {
559
- [key: string]: unknown;
560
- };
561
- filePath?: {
562
- [key: string]: unknown;
563
- };
564
- status?: {
565
- [key: string]: unknown;
566
- };
567
- uploadedAt?: {
568
- [key: string]: unknown;
569
- };
461
+ documentType?: string | null;
462
+ fileUrl?: string | null;
463
+ filePath?: string | null;
464
+ status?: string | null;
465
+ uploadedAt?: string | null;
570
466
  };
571
467
  export type CreateDocumentDto = {
572
468
  /**
@@ -584,7 +480,7 @@ export type CreateDocumentDto = {
584
480
  /**
585
481
  * KYC verification id this document belongs to
586
482
  */
587
- kycVerificationId: string;
483
+ kycVerificationId?: string;
588
484
  };
589
485
  export type IndexItemDto = {
590
486
  /**
@@ -660,57 +556,39 @@ export type OrganizationResponseDto = {
660
556
  /**
661
557
  * Country code
662
558
  */
663
- country?: {
664
- [key: string]: unknown;
665
- };
559
+ country?: string | null;
666
560
  /**
667
561
  * League tier code
668
562
  */
669
- leagueTier?: {
670
- [key: string]: unknown;
671
- };
563
+ leagueTier?: string | null;
672
564
  /**
673
565
  * FIFA club category code
674
566
  */
675
- fifaCategory?: {
676
- [key: string]: unknown;
677
- };
567
+ fifaCategory?: string | null;
678
568
  /**
679
569
  * Stadium name
680
570
  */
681
- stadiumName?: {
682
- [key: string]: unknown;
683
- };
571
+ stadiumName?: string | null;
684
572
  /**
685
573
  * Official club email
686
574
  */
687
- email?: {
688
- [key: string]: unknown;
689
- };
575
+ email?: string | null;
690
576
  /**
691
577
  * Official website
692
578
  */
693
- website?: {
694
- [key: string]: unknown;
695
- };
579
+ website?: string | null;
696
580
  /**
697
581
  * Club description
698
582
  */
699
- description?: {
700
- [key: string]: unknown;
701
- };
583
+ description?: string | null;
702
584
  /**
703
585
  * Phone
704
586
  */
705
- phone?: {
706
- [key: string]: unknown;
707
- };
587
+ phone?: string | null;
708
588
  /**
709
589
  * Updated at
710
590
  */
711
- updatedAt?: {
712
- [key: string]: unknown;
713
- };
591
+ updatedAt?: string | null;
714
592
  };
715
593
  export type UpdateOrganizationDto = {
716
594
  /**
@@ -750,45 +628,80 @@ export type UpdateOrganizationDto = {
750
628
  */
751
629
  phone?: string;
752
630
  };
631
+ export type CreateUploadUrlDto = {
632
+ /**
633
+ * Target storage bucket
634
+ */
635
+ bucket: 'videos' | 'avatars' | 'documents';
636
+ /**
637
+ * MIME type of the file being uploaded
638
+ */
639
+ contentType: string;
640
+ /**
641
+ * Size of the file in bytes
642
+ */
643
+ sizeBytes: number;
644
+ /**
645
+ * Optional filename hint (not used for path)
646
+ */
647
+ filenameHint?: string;
648
+ };
649
+ export type UploadUrlResponseDto = {
650
+ /**
651
+ * Signed URL the client PUTs raw bytes to
652
+ */
653
+ uploadUrl: string;
654
+ /**
655
+ * Signed-upload token (opaque)
656
+ */
657
+ token: string;
658
+ /**
659
+ * Storage path (persist this as video_path / file_path)
660
+ */
661
+ path: string;
662
+ /**
663
+ * Bucket the upload targets
664
+ */
665
+ bucket: string;
666
+ /**
667
+ * URL validity window in seconds
668
+ */
669
+ expiresIn: number;
670
+ };
753
671
  export type VideoResponseDto = {
754
672
  id: string;
755
673
  userId: string;
756
674
  title: string;
757
- videoUrl: string;
758
- videoType?: {
759
- [key: string]: unknown;
760
- };
761
- durationSeconds?: {
762
- [key: string]: unknown;
763
- };
764
- uploadStatus?: {
765
- [key: string]: unknown;
766
- };
767
- processingStatus?: {
768
- [key: string]: unknown;
769
- };
770
- isPublic?: {
771
- [key: string]: unknown;
772
- };
773
- uploadDate?: {
774
- [key: string]: unknown;
775
- };
675
+ /**
676
+ * Signed URL for the thumbnail image, valid for ~1 hour. Null if no thumbnail was uploaded.
677
+ */
678
+ thumbnailUrl?: string | null;
679
+ videoType?: string | null;
680
+ durationSeconds?: number | null;
681
+ uploadStatus?: string | null;
682
+ processingStatus?: string | null;
683
+ isPublic?: boolean | null;
684
+ uploadDate?: string | null;
776
685
  };
777
686
  export type CreateVideoDto = {
778
687
  /**
779
- * Video URL (from upload)
688
+ * Storage path of the uploaded video file
780
689
  */
781
- videoUrl: string;
690
+ videoPath: string;
782
691
  /**
783
- * Video path in storage
692
+ * Legacy video URL. Ignored for new uploads — BE issues a signed play URL on demand via GET /videos/:id/play-url.
784
693
  */
785
- videoPath: string;
694
+ videoUrl?: string;
695
+ /**
696
+ * Storage path of the thumbnail image (uploaded alongside the video)
697
+ */
698
+ thumbnailPath?: string;
786
699
  /**
787
700
  * Title
788
701
  */
789
702
  title: string;
790
703
  /**
791
- * Video type code (e.g. best_moment, cmj)
704
+ * Video type code (e.g. best_moment, cmj, highlight)
792
705
  */
793
706
  videoType?: string;
794
707
  /**
@@ -800,15 +713,32 @@ export type CreateVideoDto = {
800
713
  */
801
714
  isPublic?: boolean;
802
715
  };
716
+ export type PlayUrlResponseDto = {
717
+ /**
718
+ * Short-lived signed URL for the video file
719
+ */
720
+ url: string;
721
+ /**
722
+ * TTL of the signed URL in seconds
723
+ */
724
+ expiresIn: number;
725
+ };
803
726
  export type GetAuthMeData = {
804
727
  body?: never;
805
728
  path?: never;
806
729
  query?: never;
807
730
  url: '/auth/me';
808
731
  };
732
+ export type GetAuthMeErrors = {
733
+ /**
734
+ * Unauthorized
735
+ */
736
+ 401: unknown;
737
+ };
809
738
  export type GetAuthMeResponses = {
810
- 200: unknown;
739
+ 200: AuthMeResponseDto;
811
740
  };
741
+ export type GetAuthMeResponse = GetAuthMeResponses[keyof GetAuthMeResponses];
812
742
  export type DeletePlayersMeData = {
813
743
  body?: never;
814
744
  path?: never;
@@ -1106,6 +1036,33 @@ export type PutOrganizationsMeResponses = {
1106
1036
  200: OrganizationResponseDto;
1107
1037
  };
1108
1038
  export type PutOrganizationsMeResponse = PutOrganizationsMeResponses[keyof PutOrganizationsMeResponses];
1039
+ export type PostStorageUploadUrlData = {
1040
+ body: CreateUploadUrlDto;
1041
+ path?: never;
1042
+ query?: never;
1043
+ url: '/storage/upload-url';
1044
+ };
1045
+ export type PostStorageUploadUrlErrors = {
1046
+ /**
1047
+ * Unknown bucket or disallowed MIME
1048
+ */
1049
+ 400: unknown;
1050
+ /**
1051
+ * Unauthorized
1052
+ */
1053
+ 401: unknown;
1054
+ /**
1055
+ * File too large for bucket
1056
+ */
1057
+ 413: unknown;
1058
+ };
1059
+ export type PostStorageUploadUrlResponses = {
1060
+ /**
1061
+ * Signed upload URL issued
1062
+ */
1063
+ 201: UploadUrlResponseDto;
1064
+ };
1065
+ export type PostStorageUploadUrlResponse = PostStorageUploadUrlResponses[keyof PostStorageUploadUrlResponses];
1109
1066
  export type GetVideosMeData = {
1110
1067
  body?: never;
1111
1068
  path?: never;
@@ -1150,6 +1107,31 @@ export type PostVideosResponses = {
1150
1107
  201: VideoResponseDto;
1151
1108
  };
1152
1109
  export type PostVideosResponse = PostVideosResponses[keyof PostVideosResponses];
1110
+ export type GetVideosByIdPlayUrlData = {
1111
+ body?: never;
1112
+ path: {
1113
+ id: string;
1114
+ };
1115
+ query?: never;
1116
+ url: '/videos/{id}/play-url';
1117
+ };
1118
+ export type GetVideosByIdPlayUrlErrors = {
1119
+ /**
1120
+ * Unauthorized
1121
+ */
1122
+ 401: unknown;
1123
+ /**
1124
+ * Video not found
1125
+ */
1126
+ 404: unknown;
1127
+ };
1128
+ export type GetVideosByIdPlayUrlResponses = {
1129
+ /**
1130
+ * Short-lived signed URL for video playback
1131
+ */
1132
+ 200: PlayUrlResponseDto;
1133
+ };
1134
+ export type GetVideosByIdPlayUrlResponse = GetVideosByIdPlayUrlResponses[keyof GetVideosByIdPlayUrlResponses];
1153
1135
  export type DeleteVideosByIdData = {
1154
1136
  body?: never;
1155
1137
  path: {