@globalscoutme/api-client 1.0.7 → 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/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { Achievements, Auth, Body, Documents, GlobalScoutMeClient, Index, type Options, Organizations, Players, Profile, Videos, } from './sdk.gen.js';
2
- export type { AchievementCatalogDto, AuthMeResponseDto, BodyMeasurementResponseDto, CareerAchievementDto, ClientOptions, CreateBodyMeasurementDto, CreateDocumentDto, CreateVideoDto, DashboardResponseDto, DeletePlayersMeData, DeletePlayersMeErrors, DeletePlayersMeResponse, DeletePlayersMeResponses, DeleteVideosByIdData, DeleteVideosByIdErrors, DeleteVideosByIdResponse, DeleteVideosByIdResponses, DocumentResponseDto, GetAchievementsData, GetAchievementsMeData, GetAchievementsMeErrors, GetAchievementsMeResponse, GetAchievementsMeResponses, GetAchievementsResponse, GetAchievementsResponses, GetAuthMeData, GetAuthMeErrors, GetAuthMeResponse, GetAuthMeResponses, GetBodyMeasurementsMeData, GetBodyMeasurementsMeErrors, GetBodyMeasurementsMeResponse, GetBodyMeasurementsMeResponses, GetDocumentsMeData, GetDocumentsMeErrors, GetDocumentsMeResponse, GetDocumentsMeResponses, GetIndexByTableNameData, GetIndexByTableNameErrors, GetIndexByTableNameResponse, GetIndexByTableNameResponses, GetOrganizationsMeData, GetOrganizationsMeErrors, GetOrganizationsMeResponse, GetOrganizationsMeResponses, GetPlayersMeDashboardData, GetPlayersMeDashboardErrors, GetPlayersMeDashboardResponse, GetPlayersMeDashboardResponses, GetPlayersMeData, GetPlayersMeErrors, GetPlayersMeResponse, GetPlayersMeResponses, GetProfileMeData, GetProfileMeErrors, GetProfileMeResponse, GetProfileMeResponses, GetVideosMeData, GetVideosMeErrors, GetVideosMeResponse, GetVideosMeResponses, IndexItemDto, OrganizationResponseDto, PatchPlayersMeData, PatchPlayersMeErrors, PatchPlayersMeResponse, PatchPlayersMeResponses, PlayerResponseDto, PostBodyMeasurementsData, PostBodyMeasurementsErrors, PostBodyMeasurementsResponse, PostBodyMeasurementsResponses, PostDocumentsData, PostDocumentsErrors, PostDocumentsResponse, PostDocumentsResponses, PostOrganizationsRegisterClubData, PostOrganizationsRegisterClubErrors, PostOrganizationsRegisterClubResponse, PostOrganizationsRegisterClubResponses, PostVideosData, PostVideosErrors, PostVideosResponse, PostVideosResponses, PreviousClubDto, ProfileResponseDto, PutOrganizationsMeData, PutOrganizationsMeErrors, PutOrganizationsMeResponse, PutOrganizationsMeResponses, PutProfileMeData, PutProfileMeErrors, PutProfileMeResponse, PutProfileMeResponses, RegisterClubDto, RegisterClubResponseDto, UpdateOrganizationDto, UpdatePlayerDto, UpdateProfileDto, UserAchievementResponseDto, VideoResponseDto, } from './types.gen.js';
1
+ export { Achievements, Auth, Body, Documents, GlobalScoutMeClient, Index, type Options, Organizations, Players, Profile, Storage, Videos, } from './sdk.gen.js';
2
+ export type { AchievementCatalogDto, AuthMeResponseDto, BodyMeasurementResponseDto, CareerAchievementDto, ClientOptions, CreateBodyMeasurementDto, CreateDocumentDto, CreateUploadUrlDto, CreateVideoDto, DashboardResponseDto, DeletePlayersMeData, DeletePlayersMeErrors, DeletePlayersMeResponse, DeletePlayersMeResponses, DeleteVideosByIdData, DeleteVideosByIdErrors, DeleteVideosByIdResponse, DeleteVideosByIdResponses, DocumentResponseDto, GetAchievementsData, GetAchievementsMeData, GetAchievementsMeErrors, GetAchievementsMeResponse, GetAchievementsMeResponses, GetAchievementsResponse, GetAchievementsResponses, GetAuthMeData, GetAuthMeErrors, GetAuthMeResponse, GetAuthMeResponses, GetBodyMeasurementsMeData, GetBodyMeasurementsMeErrors, GetBodyMeasurementsMeResponse, GetBodyMeasurementsMeResponses, GetDocumentsMeData, GetDocumentsMeErrors, GetDocumentsMeResponse, GetDocumentsMeResponses, GetIndexByTableNameData, GetIndexByTableNameErrors, GetIndexByTableNameResponse, GetIndexByTableNameResponses, GetOrganizationsMeData, GetOrganizationsMeErrors, GetOrganizationsMeResponse, GetOrganizationsMeResponses, GetPlayersMeDashboardData, GetPlayersMeDashboardErrors, GetPlayersMeDashboardResponse, GetPlayersMeDashboardResponses, GetPlayersMeData, GetPlayersMeErrors, GetPlayersMeResponse, GetPlayersMeResponses, GetProfileMeData, GetProfileMeErrors, GetProfileMeResponse, GetProfileMeResponses, GetVideosByIdPlayUrlData, GetVideosByIdPlayUrlErrors, GetVideosByIdPlayUrlResponse, GetVideosByIdPlayUrlResponses, GetVideosMeData, GetVideosMeErrors, GetVideosMeResponse, GetVideosMeResponses, IndexItemDto, OrganizationResponseDto, PatchPlayersMeData, PatchPlayersMeErrors, PatchPlayersMeResponse, PatchPlayersMeResponses, PlayerResponseDto, PlayUrlResponseDto, PostBodyMeasurementsData, PostBodyMeasurementsErrors, PostBodyMeasurementsResponse, PostBodyMeasurementsResponses, PostDocumentsData, PostDocumentsErrors, PostDocumentsResponse, PostDocumentsResponses, PostOrganizationsRegisterClubData, PostOrganizationsRegisterClubErrors, PostOrganizationsRegisterClubResponse, PostOrganizationsRegisterClubResponses, PostStorageUploadUrlData, PostStorageUploadUrlErrors, PostStorageUploadUrlResponse, PostStorageUploadUrlResponses, PostVideosData, PostVideosErrors, PostVideosResponse, PostVideosResponses, PreviousClubDto, ProfileResponseDto, PutOrganizationsMeData, PutOrganizationsMeErrors, PutOrganizationsMeResponse, PutOrganizationsMeResponses, PutProfileMeData, PutProfileMeErrors, PutProfileMeResponse, PutProfileMeResponses, RegisterClubDto, RegisterClubResponseDto, UpdateOrganizationDto, UpdatePlayerDto, UpdateProfileDto, UploadUrlResponseDto, UserAchievementResponseDto, VideoResponseDto, } from './types.gen.js';
3
3
  export { client, type CreateClientConfig } from './client.gen.js';
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // This file is auto-generated by @hey-api/openapi-ts
2
- export { Achievements, Auth, Body, Documents, GlobalScoutMeClient, Index, Organizations, Players, Profile, Videos, } from './sdk.gen.js';
2
+ export { Achievements, Auth, Body, Documents, GlobalScoutMeClient, Index, Organizations, Players, Profile, Storage, Videos, } from './sdk.gen.js';
3
3
  export { client } from './client.gen.js';
package/dist/sdk.gen.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Client, Options as Options2, TDataShape } from './client/index.js';
2
- import type { DeletePlayersMeData, DeletePlayersMeErrors, DeletePlayersMeResponses, DeleteVideosByIdData, DeleteVideosByIdErrors, DeleteVideosByIdResponses, GetAchievementsData, GetAchievementsMeData, GetAchievementsMeErrors, GetAchievementsMeResponses, GetAchievementsResponses, GetAuthMeData, GetAuthMeErrors, GetAuthMeResponses, GetBodyMeasurementsMeData, GetBodyMeasurementsMeErrors, GetBodyMeasurementsMeResponses, GetDocumentsMeData, GetDocumentsMeErrors, GetDocumentsMeResponses, GetIndexByTableNameData, GetIndexByTableNameErrors, GetIndexByTableNameResponses, GetOrganizationsMeData, GetOrganizationsMeErrors, GetOrganizationsMeResponses, GetPlayersMeDashboardData, GetPlayersMeDashboardErrors, GetPlayersMeDashboardResponses, GetPlayersMeData, GetPlayersMeErrors, GetPlayersMeResponses, GetProfileMeData, GetProfileMeErrors, GetProfileMeResponses, GetVideosMeData, GetVideosMeErrors, GetVideosMeResponses, PatchPlayersMeData, PatchPlayersMeErrors, PatchPlayersMeResponses, PostBodyMeasurementsData, PostBodyMeasurementsErrors, PostBodyMeasurementsResponses, PostDocumentsData, PostDocumentsErrors, PostDocumentsResponses, PostOrganizationsRegisterClubData, PostOrganizationsRegisterClubErrors, PostOrganizationsRegisterClubResponses, PostVideosData, PostVideosErrors, PostVideosResponses, PutOrganizationsMeData, PutOrganizationsMeErrors, PutOrganizationsMeResponses, PutProfileMeData, PutProfileMeErrors, PutProfileMeResponses } from './types.gen.js';
2
+ import type { DeletePlayersMeData, DeletePlayersMeErrors, DeletePlayersMeResponses, DeleteVideosByIdData, DeleteVideosByIdErrors, DeleteVideosByIdResponses, GetAchievementsData, GetAchievementsMeData, GetAchievementsMeErrors, GetAchievementsMeResponses, GetAchievementsResponses, GetAuthMeData, GetAuthMeErrors, GetAuthMeResponses, GetBodyMeasurementsMeData, GetBodyMeasurementsMeErrors, GetBodyMeasurementsMeResponses, GetDocumentsMeData, GetDocumentsMeErrors, GetDocumentsMeResponses, GetIndexByTableNameData, GetIndexByTableNameErrors, GetIndexByTableNameResponses, GetOrganizationsMeData, GetOrganizationsMeErrors, GetOrganizationsMeResponses, GetPlayersMeDashboardData, GetPlayersMeDashboardErrors, GetPlayersMeDashboardResponses, GetPlayersMeData, GetPlayersMeErrors, GetPlayersMeResponses, GetProfileMeData, GetProfileMeErrors, GetProfileMeResponses, GetVideosByIdPlayUrlData, GetVideosByIdPlayUrlErrors, GetVideosByIdPlayUrlResponses, GetVideosMeData, GetVideosMeErrors, GetVideosMeResponses, PatchPlayersMeData, PatchPlayersMeErrors, PatchPlayersMeResponses, PostBodyMeasurementsData, PostBodyMeasurementsErrors, PostBodyMeasurementsResponses, PostDocumentsData, PostDocumentsErrors, PostDocumentsResponses, PostOrganizationsRegisterClubData, PostOrganizationsRegisterClubErrors, PostOrganizationsRegisterClubResponses, PostStorageUploadUrlData, PostStorageUploadUrlErrors, PostStorageUploadUrlResponses, PostVideosData, PostVideosErrors, PostVideosResponses, PutOrganizationsMeData, PutOrganizationsMeErrors, PutOrganizationsMeResponses, PutProfileMeData, PutProfileMeErrors, PutProfileMeResponses } from './types.gen.js';
3
3
  export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {
4
4
  /**
5
5
  * You can provide a client instance returned by `createClient()` instead of
@@ -58,9 +58,13 @@ export declare class Organizations extends HeyApiClient {
58
58
  getMyOrganization<ThrowOnError extends boolean = false>(options?: Options<GetOrganizationsMeData, ThrowOnError>): import("./client/types.gen.js").RequestResult<GetOrganizationsMeResponses, GetOrganizationsMeErrors, ThrowOnError, "fields">;
59
59
  updateMyOrganization<ThrowOnError extends boolean = false>(options: Options<PutOrganizationsMeData, ThrowOnError>): import("./client/types.gen.js").RequestResult<PutOrganizationsMeResponses, PutOrganizationsMeErrors, ThrowOnError, "fields">;
60
60
  }
61
+ export declare class Storage extends HeyApiClient {
62
+ createUploadUrl<ThrowOnError extends boolean = false>(options: Options<PostStorageUploadUrlData, ThrowOnError>): import("./client/types.gen.js").RequestResult<PostStorageUploadUrlResponses, PostStorageUploadUrlErrors, ThrowOnError, "fields">;
63
+ }
61
64
  export declare class Videos extends HeyApiClient {
62
65
  getMyVideos<ThrowOnError extends boolean = false>(options: Options<GetVideosMeData, ThrowOnError>): import("./client/types.gen.js").RequestResult<GetVideosMeResponses, GetVideosMeErrors, ThrowOnError, "fields">;
63
66
  createVideo<ThrowOnError extends boolean = false>(options: Options<PostVideosData, ThrowOnError>): import("./client/types.gen.js").RequestResult<PostVideosResponses, PostVideosErrors, ThrowOnError, "fields">;
67
+ getVideoPlayUrl<ThrowOnError extends boolean = false>(options: Options<GetVideosByIdPlayUrlData, ThrowOnError>): import("./client/types.gen.js").RequestResult<GetVideosByIdPlayUrlResponses, GetVideosByIdPlayUrlErrors, ThrowOnError, "fields">;
64
68
  deleteVideo<ThrowOnError extends boolean = false>(options: Options<DeleteVideosByIdData, ThrowOnError>): import("./client/types.gen.js").RequestResult<DeleteVideosByIdResponses, DeleteVideosByIdErrors, ThrowOnError, "fields">;
65
69
  }
66
70
  export declare class GlobalScoutMeClient extends HeyApiClient {
@@ -85,6 +89,8 @@ export declare class GlobalScoutMeClient extends HeyApiClient {
85
89
  get index(): Index;
86
90
  private _organizations?;
87
91
  get organizations(): Organizations;
92
+ private _storage?;
93
+ get storage(): Storage;
88
94
  private _videos?;
89
95
  get videos(): Videos;
90
96
  }
package/dist/sdk.gen.js CHANGED
@@ -130,6 +130,18 @@ export class Organizations extends HeyApiClient {
130
130
  });
131
131
  }
132
132
  }
133
+ export class Storage extends HeyApiClient {
134
+ createUploadUrl(options) {
135
+ return (options.client ?? this.client).post({
136
+ url: '/storage/upload-url',
137
+ ...options,
138
+ headers: {
139
+ 'Content-Type': 'application/json',
140
+ ...options.headers,
141
+ },
142
+ });
143
+ }
144
+ }
133
145
  export class Videos extends HeyApiClient {
134
146
  getMyVideos(options) {
135
147
  return (options.client ?? this.client).get({ url: '/videos/me', ...options });
@@ -144,6 +156,9 @@ export class Videos extends HeyApiClient {
144
156
  },
145
157
  });
146
158
  }
159
+ getVideoPlayUrl(options) {
160
+ return (options.client ?? this.client).get({ url: '/videos/{id}/play-url', ...options });
161
+ }
147
162
  deleteVideo(options) {
148
163
  return (options.client ?? this.client).delete({ url: '/videos/{id}', ...options });
149
164
  }
@@ -177,6 +192,9 @@ export class GlobalScoutMeClient extends HeyApiClient {
177
192
  get organizations() {
178
193
  return (this._organizations ?? (this._organizations = new Organizations({ client: this.client })));
179
194
  }
195
+ get storage() {
196
+ return (this._storage ?? (this._storage = new Storage({ client: this.client })));
197
+ }
180
198
  get videos() {
181
199
  return (this._videos ?? (this._videos = new Videos({ client: this.client })));
182
200
  }
@@ -238,6 +238,10 @@ export type ProfileResponseDto = {
238
238
  * Preferred foot code
239
239
  */
240
240
  preferredFoot?: string | null;
241
+ /**
242
+ * Preferred formation code (e.g. "4-3-3")
243
+ */
244
+ preferredFormation?: string | null;
241
245
  /**
242
246
  * Height in cm
243
247
  */
@@ -329,13 +333,13 @@ export type UpdateProfileDto = {
329
333
  */
330
334
  bio?: string;
331
335
  /**
332
- * Avatar URL
336
+ * Avatar URL, null to clear
333
337
  */
334
- avatarUrl?: string;
338
+ avatarUrl?: string | null;
335
339
  /**
336
- * Cover image URL
340
+ * Cover image URL, null to clear
337
341
  */
338
- coverImageUrl?: string;
342
+ coverImageUrl?: string | null;
339
343
  /**
340
344
  * Is free agent
341
345
  */
@@ -360,6 +364,10 @@ export type UpdateProfileDto = {
360
364
  * Preferred foot code
361
365
  */
362
366
  preferredFoot?: string;
367
+ /**
368
+ * Preferred formation code (e.g. "4-3-3"), null to clear
369
+ */
370
+ preferredFormation?: string | null;
363
371
  /**
364
372
  * Height in cm
365
373
  */
@@ -620,11 +628,54 @@ export type UpdateOrganizationDto = {
620
628
  */
621
629
  phone?: string;
622
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
+ };
623
671
  export type VideoResponseDto = {
624
672
  id: string;
625
673
  userId: string;
626
674
  title: string;
627
- videoUrl: string;
675
+ /**
676
+ * Signed URL for the thumbnail image, valid for ~1 hour. Null if no thumbnail was uploaded.
677
+ */
678
+ thumbnailUrl?: string | null;
628
679
  videoType?: string | null;
629
680
  durationSeconds?: number | null;
630
681
  uploadStatus?: string | null;
@@ -634,19 +685,23 @@ export type VideoResponseDto = {
634
685
  };
635
686
  export type CreateVideoDto = {
636
687
  /**
637
- * Video URL (from upload)
688
+ * Storage path of the uploaded video file
638
689
  */
639
- videoUrl: string;
690
+ videoPath: string;
640
691
  /**
641
- * 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.
642
693
  */
643
- videoPath: string;
694
+ videoUrl?: string;
695
+ /**
696
+ * Storage path of the thumbnail image (uploaded alongside the video)
697
+ */
698
+ thumbnailPath?: string;
644
699
  /**
645
700
  * Title
646
701
  */
647
702
  title: string;
648
703
  /**
649
- * Video type code (e.g. best_moment, cmj)
704
+ * Video type code (e.g. best_moment, cmj, highlight)
650
705
  */
651
706
  videoType?: string;
652
707
  /**
@@ -658,6 +713,16 @@ export type CreateVideoDto = {
658
713
  */
659
714
  isPublic?: boolean;
660
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
+ };
661
726
  export type GetAuthMeData = {
662
727
  body?: never;
663
728
  path?: never;
@@ -971,6 +1036,33 @@ export type PutOrganizationsMeResponses = {
971
1036
  200: OrganizationResponseDto;
972
1037
  };
973
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];
974
1066
  export type GetVideosMeData = {
975
1067
  body?: never;
976
1068
  path?: never;
@@ -1015,6 +1107,31 @@ export type PostVideosResponses = {
1015
1107
  201: VideoResponseDto;
1016
1108
  };
1017
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];
1018
1135
  export type DeleteVideosByIdData = {
1019
1136
  body?: never;
1020
1137
  path: {
package/index.ts CHANGED
@@ -11,6 +11,7 @@ export {
11
11
  Organizations,
12
12
  Players,
13
13
  Profile,
14
+ Storage,
14
15
  Videos,
15
16
  } from './sdk.gen.js';
16
17
  export type {
@@ -21,6 +22,7 @@ export type {
21
22
  ClientOptions,
22
23
  CreateBodyMeasurementDto,
23
24
  CreateDocumentDto,
25
+ CreateUploadUrlDto,
24
26
  CreateVideoDto,
25
27
  DashboardResponseDto,
26
28
  DeletePlayersMeData,
@@ -71,6 +73,10 @@ export type {
71
73
  GetProfileMeErrors,
72
74
  GetProfileMeResponse,
73
75
  GetProfileMeResponses,
76
+ GetVideosByIdPlayUrlData,
77
+ GetVideosByIdPlayUrlErrors,
78
+ GetVideosByIdPlayUrlResponse,
79
+ GetVideosByIdPlayUrlResponses,
74
80
  GetVideosMeData,
75
81
  GetVideosMeErrors,
76
82
  GetVideosMeResponse,
@@ -82,6 +88,7 @@ export type {
82
88
  PatchPlayersMeResponse,
83
89
  PatchPlayersMeResponses,
84
90
  PlayerResponseDto,
91
+ PlayUrlResponseDto,
85
92
  PostBodyMeasurementsData,
86
93
  PostBodyMeasurementsErrors,
87
94
  PostBodyMeasurementsResponse,
@@ -94,6 +101,10 @@ export type {
94
101
  PostOrganizationsRegisterClubErrors,
95
102
  PostOrganizationsRegisterClubResponse,
96
103
  PostOrganizationsRegisterClubResponses,
104
+ PostStorageUploadUrlData,
105
+ PostStorageUploadUrlErrors,
106
+ PostStorageUploadUrlResponse,
107
+ PostStorageUploadUrlResponses,
97
108
  PostVideosData,
98
109
  PostVideosErrors,
99
110
  PostVideosResponse,
@@ -113,6 +124,7 @@ export type {
113
124
  UpdateOrganizationDto,
114
125
  UpdatePlayerDto,
115
126
  UpdateProfileDto,
127
+ UploadUrlResponseDto,
116
128
  UserAchievementResponseDto,
117
129
  VideoResponseDto,
118
130
  } from './types.gen.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@globalscoutme/api-client",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "GlobalScoutMe API client (generated)",
5
5
  "author": "GlobalScoutMe",
6
6
  "license": "UNLICENSED",
package/sdk.gen.ts CHANGED
@@ -42,6 +42,9 @@ import type {
42
42
  GetProfileMeData,
43
43
  GetProfileMeErrors,
44
44
  GetProfileMeResponses,
45
+ GetVideosByIdPlayUrlData,
46
+ GetVideosByIdPlayUrlErrors,
47
+ GetVideosByIdPlayUrlResponses,
45
48
  GetVideosMeData,
46
49
  GetVideosMeErrors,
47
50
  GetVideosMeResponses,
@@ -57,6 +60,9 @@ import type {
57
60
  PostOrganizationsRegisterClubData,
58
61
  PostOrganizationsRegisterClubErrors,
59
62
  PostOrganizationsRegisterClubResponses,
63
+ PostStorageUploadUrlData,
64
+ PostStorageUploadUrlErrors,
65
+ PostStorageUploadUrlResponses,
60
66
  PostVideosData,
61
67
  PostVideosErrors,
62
68
  PostVideosResponses,
@@ -341,6 +347,25 @@ export class Organizations extends HeyApiClient {
341
347
  }
342
348
  }
343
349
 
350
+ export class Storage extends HeyApiClient {
351
+ public createUploadUrl<ThrowOnError extends boolean = false>(
352
+ options: Options<PostStorageUploadUrlData, ThrowOnError>,
353
+ ) {
354
+ return (options.client ?? this.client).post<
355
+ PostStorageUploadUrlResponses,
356
+ PostStorageUploadUrlErrors,
357
+ ThrowOnError
358
+ >({
359
+ url: '/storage/upload-url',
360
+ ...options,
361
+ headers: {
362
+ 'Content-Type': 'application/json',
363
+ ...options.headers,
364
+ },
365
+ });
366
+ }
367
+ }
368
+
344
369
  export class Videos extends HeyApiClient {
345
370
  public getMyVideos<ThrowOnError extends boolean = false>(
346
371
  options: Options<GetVideosMeData, ThrowOnError>,
@@ -369,6 +394,16 @@ export class Videos extends HeyApiClient {
369
394
  });
370
395
  }
371
396
 
397
+ public getVideoPlayUrl<ThrowOnError extends boolean = false>(
398
+ options: Options<GetVideosByIdPlayUrlData, ThrowOnError>,
399
+ ) {
400
+ return (options.client ?? this.client).get<
401
+ GetVideosByIdPlayUrlResponses,
402
+ GetVideosByIdPlayUrlErrors,
403
+ ThrowOnError
404
+ >({ url: '/videos/{id}/play-url', ...options });
405
+ }
406
+
372
407
  public deleteVideo<ThrowOnError extends boolean = false>(
373
408
  options: Options<DeleteVideosByIdData, ThrowOnError>,
374
409
  ) {
@@ -428,6 +463,11 @@ export class GlobalScoutMeClient extends HeyApiClient {
428
463
  return (this._organizations ??= new Organizations({ client: this.client }));
429
464
  }
430
465
 
466
+ private _storage?: Storage;
467
+ get storage(): Storage {
468
+ return (this._storage ??= new Storage({ client: this.client }));
469
+ }
470
+
431
471
  private _videos?: Videos;
432
472
  get videos(): Videos {
433
473
  return (this._videos ??= new Videos({ client: this.client }));
package/types.gen.ts CHANGED
@@ -253,6 +253,10 @@ export type ProfileResponseDto = {
253
253
  * Preferred foot code
254
254
  */
255
255
  preferredFoot?: string | null;
256
+ /**
257
+ * Preferred formation code (e.g. "4-3-3")
258
+ */
259
+ preferredFormation?: string | null;
256
260
  /**
257
261
  * Height in cm
258
262
  */
@@ -345,13 +349,13 @@ export type UpdateProfileDto = {
345
349
  */
346
350
  bio?: string;
347
351
  /**
348
- * Avatar URL
352
+ * Avatar URL, null to clear
349
353
  */
350
- avatarUrl?: string;
354
+ avatarUrl?: string | null;
351
355
  /**
352
- * Cover image URL
356
+ * Cover image URL, null to clear
353
357
  */
354
- coverImageUrl?: string;
358
+ coverImageUrl?: string | null;
355
359
  /**
356
360
  * Is free agent
357
361
  */
@@ -376,6 +380,10 @@ export type UpdateProfileDto = {
376
380
  * Preferred foot code
377
381
  */
378
382
  preferredFoot?: string;
383
+ /**
384
+ * Preferred formation code (e.g. "4-3-3"), null to clear
385
+ */
386
+ preferredFormation?: string | null;
379
387
  /**
380
388
  * Height in cm
381
389
  */
@@ -648,11 +656,56 @@ export type UpdateOrganizationDto = {
648
656
  phone?: string;
649
657
  };
650
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
+
651
701
  export type VideoResponseDto = {
652
702
  id: string;
653
703
  userId: string;
654
704
  title: string;
655
- videoUrl: string;
705
+ /**
706
+ * Signed URL for the thumbnail image, valid for ~1 hour. Null if no thumbnail was uploaded.
707
+ */
708
+ thumbnailUrl?: string | null;
656
709
  videoType?: string | null;
657
710
  durationSeconds?: number | null;
658
711
  uploadStatus?: string | null;
@@ -663,19 +716,23 @@ export type VideoResponseDto = {
663
716
 
664
717
  export type CreateVideoDto = {
665
718
  /**
666
- * Video URL (from upload)
719
+ * Storage path of the uploaded video file
667
720
  */
668
- videoUrl: string;
721
+ videoPath: string;
669
722
  /**
670
- * 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.
671
724
  */
672
- videoPath: string;
725
+ videoUrl?: string;
726
+ /**
727
+ * Storage path of the thumbnail image (uploaded alongside the video)
728
+ */
729
+ thumbnailPath?: string;
673
730
  /**
674
731
  * Title
675
732
  */
676
733
  title: string;
677
734
  /**
678
- * Video type code (e.g. best_moment, cmj)
735
+ * Video type code (e.g. best_moment, cmj, highlight)
679
736
  */
680
737
  videoType?: string;
681
738
  /**
@@ -688,6 +745,17 @@ export type CreateVideoDto = {
688
745
  isPublic?: boolean;
689
746
  };
690
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
+
691
759
  export type GetAuthMeData = {
692
760
  body?: never;
693
761
  path?: never;
@@ -1084,6 +1152,38 @@ export type PutOrganizationsMeResponses = {
1084
1152
  export type PutOrganizationsMeResponse =
1085
1153
  PutOrganizationsMeResponses[keyof PutOrganizationsMeResponses];
1086
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
+
1087
1187
  export type GetVideosMeData = {
1088
1188
  body?: never;
1089
1189
  path?: never;
@@ -1137,6 +1237,36 @@ export type PostVideosResponses = {
1137
1237
 
1138
1238
  export type PostVideosResponse = PostVideosResponses[keyof PostVideosResponses];
1139
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
+
1140
1270
  export type DeleteVideosByIdData = {
1141
1271
  body?: never;
1142
1272
  path: {