@globalscoutme/api-client 1.1.12 → 1.1.17

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/README.md CHANGED
@@ -1,297 +1,297 @@
1
- # @globalscoutme/api-client
2
-
3
- Auto-generated TypeScript HTTP client for the GlobalScoutMe API, built with [`@hey-api/openapi-ts`](https://heyapi.dev/) and axios.
4
-
5
- ## Install
6
-
7
- ```bash
8
- npm install @globalscoutme/api-client
9
- ```
10
-
11
- ## Setup
12
-
13
- Configure the client once at app startup with your API base URL and auth token:
14
-
15
- ```ts
16
- import { client } from '@globalscoutme/api-client';
17
-
18
- client.setConfig({
19
- baseURL: 'https://your-api-url.com',
20
- headers: {
21
- Authorization: `Bearer ${yourSupabaseAccessToken}`,
22
- },
23
- });
24
- ```
25
-
26
- ## Usage
27
-
28
- All endpoints are grouped by controller and fully typed:
29
-
30
- ```ts
31
- import {
32
- Auth,
33
- Dashboard,
34
- Players,
35
- Profile,
36
- Documents,
37
- Videos,
38
- Achievements,
39
- Body,
40
- Index,
41
- Kyc,
42
- Offers,
43
- Organizations,
44
- Clubs,
45
- Challenges,
46
- Training,
47
- Invitations,
48
- Storage,
49
- Subscriptions,
50
- } from '@globalscoutme/api-client';
51
-
52
- // Auth
53
- const authMe = await Auth.getAuthMe();
54
- // Returns { id: string, userType: string | null }
55
-
56
- // Players
57
- const player = await Players.getMe();
58
- await Players.patchMe({ body: { fullName: 'John Doe' } });
59
- await Players.deleteMe();
60
- const dashboard = await Players.getMyDashboard();
61
- await Players.heartbeat({ body: { timezone: 'Europe/Bucharest' } });
62
- const results = await Players.searchPlayers({
63
- body: {
64
- search: 'John',
65
- page: 1,
66
- pageSize: 20,
67
- sortBy: 'age_asc',
68
- nationalities: ['EG', 'MA'],
69
- positions: ['CM', 'CB'],
70
- baseFoot: 'right',
71
- isFreeAgent: true,
72
- hasVideo: true,
73
- heightOperator: 'gte',
74
- heightCm: 180,
75
- },
76
- });
77
- const playerProfile = await Players.getPlayerById({
78
- path: { id: 'player-uuid' },
79
- });
80
- const playerMeasurements = await Players.getPlayerMeasurementProfile({
81
- path: { id: 'player-uuid' },
82
- });
83
- // Returns { status, body, cmj, session, updatedAt } — accessible to all roles (no player-only restriction)
84
- // status: 'missing' | 'partial' | 'ready' | 'needs_update'
85
- const playerVideoMetrics = await Players.getPlayerVideoMetrics({
86
- path: { id: 'player-uuid' },
87
- });
88
- // Returns { id, createdAt, videoDurationS, physicalMetrics, trackingQuality, trackedFrames, totalFrames }
89
- // physicalMetrics: { totalDistance, sprintDistance, maxSpeed, averageSpeed, highIntensityRuns, sprints }
90
- // Speed/distance values are strings with units already included (e.g. "31.0 km/h", "21.4 m")
91
- // trackingQuality: confidence label from the analysis service (e.g. "High Confidence") — null if unavailable
92
- // Returns 404 if the player has no completed video analysis yet
93
- const playerReport = await Players.getPlayerReport({
94
- path: { id: 'player-uuid' },
95
- });
96
- // Returns { reportReferenceId, generatedAt, scouterView: { technicalPillar, physicalPillar, tacticalPillar, mentalPillar } }
97
- // Returns 404 if the player has no completed AI report yet
98
-
99
- // Profile
100
- const profile = await Profile.getProfileMe();
101
- await Profile.updateProfileMe({ body: { dominantFoot: 'Right' } });
102
-
103
- // Documents
104
- const docs = await Documents.getMyDocuments();
105
- await Documents.createDocument({ body: { type: 'license' } });
106
-
107
- // Videos
108
- const videos = await Videos.getMyVideos();
109
- await Videos.createVideo({
110
- body: { type: 'cmj', storagePath: 'path/to/video' },
111
- });
112
- const playUrl = await Videos.getVideoPlayUrl({ path: { id: 'video-uuid' } });
113
- await Videos.deleteVideo({ path: { id: 'video-uuid' } });
114
-
115
- // Achievements
116
- const catalog = await Achievements.getAchievementsCatalog();
117
- const myAchievements = await Achievements.getMyAchievements();
118
-
119
- // Body measurements
120
- const measurement = await Body.getMyMeasurements();
121
- await Body.createMeasurement({ body: { heightCm: 180 } });
122
-
123
- // Index (lookup tables)
124
- const positions = await Index.getIndexItems({
125
- path: { tableName: 'positions' },
126
- });
127
- const countries = await Index.getCountries();
128
- // Returns [{ code: 'BR', name: 'Brazil', nationalityName: 'Brazilian', flagEmoji: '🇧🇷' }, ...]
129
-
130
- // Dashboard (scout/club portal — single aggregated call)
131
- const dashboard = await Dashboard.getScoutDashboard();
132
- // Returns: stats (watchlisted, offersSent, playersViewed, videosWatched),
133
- // lastPlayersViewed (last 6 distinct players),
134
- // lastVideosWatched (last 6 distinct videos with player info)
135
-
136
- const videoUrl = await Dashboard.getScoutVideoPlayUrl({
137
- path: { id: 'video-uuid' },
138
- });
139
- // Returns signed play URL + records the view in video_views
140
-
141
- // Offers (conversations between scouts and players)
142
- const conversations = await Offers.listConversations({
143
- query: { filter: 'all', page: 1, pageSize: 20 },
144
- });
145
- const conversation = await Offers.createConversation({
146
- body: { playerId: 'player-uuid', initialMessage: 'Hi!' },
147
- });
148
- const messages = await Offers.listMessages({
149
- path: { id: 'conversation-uuid' },
150
- query: { page: 1, pageSize: 20 },
151
- });
152
- await Offers.sendMessage({
153
- path: { id: 'conversation-uuid' },
154
- body: { body: 'Looking forward to it!' },
155
- });
156
- await Offers.markConversationRead({ path: { id: 'conversation-uuid' } });
157
-
158
- // Organizations
159
- const org = await Organizations.getMyOrganization();
160
- await Organizations.updateMyOrganization({ body: { name: 'FC Example' } });
161
- await Organizations.registerClub({
162
- body: { name: 'FC Example', email: 'admin@example.com' },
163
- });
164
-
165
- // Clubs (coach/admin club entries within an organization)
166
- const clubs = await Clubs.getMyClubs();
167
- const club = await Clubs.createMyClub({ body: { name: 'U19 Team' } });
168
- await Clubs.updateMyClub({
169
- path: { id: 'club-uuid' },
170
- body: { name: 'U21 Team' },
171
- });
172
- await Clubs.deleteMyClub({ path: { id: 'club-uuid' } });
173
-
174
- // Challenges
175
- const challengeCatalog = await Challenges.getChallengesCatalog();
176
- const myChallenges = await Challenges.getMyChallenges();
177
-
178
- // Training
179
- const grouped = await Training.getTrainingGrouped();
180
- const trainingList = await Training.getTrainingList({
181
- query: { categoryCode: 'fitness', page: 1, pageSize: 20 },
182
- });
183
- const trainingItem = await Training.getTrainingById({
184
- path: { id: 'training-uuid' },
185
- });
186
-
187
- // Invitations (org admin invites members)
188
- await Invitations.sendInvitation({
189
- body: { email: 'coach@example.com', role: 'coach' },
190
- });
191
- const invitations = await Invitations.listInvitations();
192
- await Invitations.resendInvitation({ path: { id: 'invitation-uuid' } });
193
- await Invitations.deleteInvitation({ path: { id: 'invitation-uuid' } });
194
- await Invitations.acceptInvitation(); // called after Supabase auth callback
195
-
196
- // KYC — SmileID Enhanced Document Verification
197
- //
198
- // Two integration options:
199
-
200
- // Option A — Smile Links (recommended for web)
201
- // Backend returns a hosted SmileID URL; redirect the user to it.
202
- // SmileID handles the full capture UI and fires the webhook when done.
203
- const linkResult = await Kyc.startSmileLink({
204
- body: {
205
- country: 'gh', // stored on the verification record; does NOT filter the SmileID dropdown
206
- channel: 'web',
207
- returnUrl: 'https://yourapp.com/onboarding/kyc/callback',
208
- },
209
- });
210
- // linkResult: { url, jobId, status, retriesRemaining }
211
- // url is null when no redirect is needed (approved / blocked / processing).
212
- if (linkResult.data.url) {
213
- window.location.href = linkResult.data.url; // redirect user to SmileID
214
- }
215
- // The SmileID hosted page shows all countries configured in index.kyc_supported_id_types.
216
- // The user selects their country and document type on that page.
217
- // After the user returns to returnUrl, poll getKycStatus to confirm the result.
218
- // markSubmittedKyc is NOT needed for Smile Links — SmileID fires the webhook directly.
219
-
220
- // Option B — SDK widget (embedded, for mobile / advanced web)
221
- const kycResult = await Kyc.startKyc({
222
- body: { country: 'gh', channel: 'web' },
223
- });
224
- // kycResult: { token, partnerId, jobId, status, retriesRemaining }
225
- // Pass token + partnerId to the SmileID web SDK widget to start document capture.
226
- // After the SDK reports successful submission, call markSubmittedKyc with jobId.
227
- await Kyc.markSubmittedKyc({ body: { jobId: kycResult.data.jobId! } });
228
- // SmileID also calls POST /kyc/webhook under the configured API base/prefix
229
- // (for staging: https://staging.globalscoutme.com/api/kyc/webhook).
230
-
231
- const kycStatus = await Kyc.getKycStatus({
232
- path: { userId: supabaseAuthUuid },
233
- });
234
- // kycStatus: { status, retryCount, retriesRemaining }
235
- // status: 'pending' | 'capture_started' | 'processing' | 'approved' | 'rejected' | 'blocked'
236
- // Older API clients may still see legacy 'in_progress', which maps to 'capture_started'.
237
-
238
- // Subscriptions (Stripe recurring billing)
239
- const plans = await Subscriptions.getSubscriptionPlans();
240
- // Returns: { plans: [{ id, code, name, price, currency, billingInterval, trialDays, features, displayOrder }] }
241
-
242
- const mySubscription = await Subscriptions.getMySubscription();
243
- // Returns: { status, isActive, planId, planName, billingInterval,
244
- // currentPeriodStart, currentPeriodEnd, cancelAtPeriodEnd, canceledAt, gracePeriodUntil }
245
- // status: 'inactive' when the user has never subscribed
246
-
247
- // Start a subscription — redirect the user to the returned URL
248
- const checkout = await Subscriptions.createCheckout({
249
- body: {
250
- providerProductId: 'billing-provider-products-uuid', // pick from billing_provider_products table
251
- successUrl: 'https://yourapp.com/subscription/success', // or a mobile deep-link
252
- cancelUrl: 'https://yourapp.com/subscription/cancel',
253
- },
254
- });
255
- // redirect user to checkout.url
256
-
257
- // Open the Stripe Billing Portal (manage / cancel subscription)
258
- const portal = await Subscriptions.createPortal({
259
- body: { returnUrl: 'https://yourapp.com/account' },
260
- });
261
- // redirect user to portal.url
262
-
263
- // Storage — get a signed upload URL, then PUT the file directly to Supabase Storage
264
- const { uploadUrl, token, path, bucket, expiresIn } = await Storage.createUploadUrl({
265
- body: { bucket: 'avatars', contentType: 'image/jpeg', sizeBytes: 204800 },
266
- });
267
- await fetch(uploadUrl, {
268
- method: 'PUT',
269
- body: fileBlob,
270
- headers: { 'Content-Type': 'image/jpeg' },
271
- });
272
- // persist `path` on the player record (e.g. patchMe with avatarPath: path)
273
- ```
274
-
275
- ## Updating auth token
276
-
277
- Update the Bearer token after sign-in or token refresh:
278
-
279
- ```ts
280
- client.setConfig({
281
- headers: {
282
- Authorization: `Bearer ${newAccessToken}`,
283
- },
284
- });
285
- ```
286
-
287
- ## Versioning
288
-
289
- This package is auto-generated from the backend OpenAPI spec. Version increments follow semver:
290
-
291
- - **patch** — no API shape changes
292
- - **minor** — new endpoints added
293
- - **major** — breaking changes (renamed/removed endpoints or fields)
294
-
295
- ## Package format
296
-
297
- The published package ships compiled JavaScript (`dist/`) alongside the raw TypeScript source. `main` points to `dist/index.js` so all bundlers work without extra configuration.
1
+ # @globalscoutme/api-client
2
+
3
+ Auto-generated TypeScript HTTP client for the GlobalScoutMe API, built with [`@hey-api/openapi-ts`](https://heyapi.dev/) and axios.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @globalscoutme/api-client
9
+ ```
10
+
11
+ ## Setup
12
+
13
+ Configure the client once at app startup with your API base URL and auth token:
14
+
15
+ ```ts
16
+ import { client } from '@globalscoutme/api-client';
17
+
18
+ client.setConfig({
19
+ baseURL: 'https://your-api-url.com',
20
+ headers: {
21
+ Authorization: `Bearer ${yourSupabaseAccessToken}`,
22
+ },
23
+ });
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ All endpoints are grouped by controller and fully typed:
29
+
30
+ ```ts
31
+ import {
32
+ Auth,
33
+ Dashboard,
34
+ Players,
35
+ Profile,
36
+ Documents,
37
+ Videos,
38
+ Achievements,
39
+ Body,
40
+ Index,
41
+ Kyc,
42
+ Offers,
43
+ Organizations,
44
+ Clubs,
45
+ Challenges,
46
+ Training,
47
+ Invitations,
48
+ Storage,
49
+ Subscriptions,
50
+ } from '@globalscoutme/api-client';
51
+
52
+ // Auth
53
+ const authMe = await Auth.getAuthMe();
54
+ // Returns { id: string, userType: string | null }
55
+
56
+ // Players
57
+ const player = await Players.getMe();
58
+ await Players.patchMe({ body: { fullName: 'John Doe' } });
59
+ await Players.deleteMe();
60
+ const dashboard = await Players.getMyDashboard();
61
+ await Players.heartbeat({ body: { timezone: 'Europe/Bucharest' } });
62
+ const results = await Players.searchPlayers({
63
+ body: {
64
+ search: 'John',
65
+ page: 1,
66
+ pageSize: 20,
67
+ sortBy: 'age_asc',
68
+ nationalities: ['EG', 'MA'],
69
+ positions: ['CM', 'CB'],
70
+ baseFoot: 'right',
71
+ isFreeAgent: true,
72
+ hasVideo: true,
73
+ heightOperator: 'gte',
74
+ heightCm: 180,
75
+ },
76
+ });
77
+ const playerProfile = await Players.getPlayerById({
78
+ path: { id: 'player-uuid' },
79
+ });
80
+ const playerMeasurements = await Players.getPlayerMeasurementProfile({
81
+ path: { id: 'player-uuid' },
82
+ });
83
+ // Returns { status, body, cmj, session, updatedAt } — accessible to all roles (no player-only restriction)
84
+ // status: 'missing' | 'partial' | 'ready' | 'needs_update'
85
+ const playerVideoMetrics = await Players.getPlayerVideoMetrics({
86
+ path: { id: 'player-uuid' },
87
+ });
88
+ // Returns { id, createdAt, videoDurationS, physicalMetrics, trackingQuality, trackedFrames, totalFrames }
89
+ // physicalMetrics: { totalDistance, sprintDistance, maxSpeed, averageSpeed, highIntensityRuns, sprints }
90
+ // Speed/distance values are strings with units already included (e.g. "31.0 km/h", "21.4 m")
91
+ // trackingQuality: confidence label from the analysis service (e.g. "High Confidence") — null if unavailable
92
+ // Returns 404 if the player has no completed video analysis yet
93
+ const playerReport = await Players.getPlayerReport({
94
+ path: { id: 'player-uuid' },
95
+ });
96
+ // Returns { reportReferenceId, generatedAt, scouterView: { technicalPillar, physicalPillar, tacticalPillar, mentalPillar } }
97
+ // Returns 404 if the player has no completed AI report yet
98
+
99
+ // Profile
100
+ const profile = await Profile.getProfileMe();
101
+ await Profile.updateProfileMe({ body: { dominantFoot: 'Right' } });
102
+
103
+ // Documents
104
+ const docs = await Documents.getMyDocuments();
105
+ await Documents.createDocument({ body: { type: 'license' } });
106
+
107
+ // Videos
108
+ const videos = await Videos.getMyVideos();
109
+ await Videos.createVideo({
110
+ body: { type: 'cmj', storagePath: 'path/to/video' },
111
+ });
112
+ const playUrl = await Videos.getVideoPlayUrl({ path: { id: 'video-uuid' } });
113
+ await Videos.deleteVideo({ path: { id: 'video-uuid' } });
114
+
115
+ // Achievements
116
+ const catalog = await Achievements.getAchievementsCatalog();
117
+ const myAchievements = await Achievements.getMyAchievements();
118
+
119
+ // Body measurements
120
+ const measurement = await Body.getMyMeasurements();
121
+ await Body.createMeasurement({ body: { heightCm: 180 } });
122
+
123
+ // Index (lookup tables)
124
+ const positions = await Index.getIndexItems({
125
+ path: { tableName: 'positions' },
126
+ });
127
+ const countries = await Index.getCountries();
128
+ // Returns [{ code: 'BR', name: 'Brazil', nationalityName: 'Brazilian', flagEmoji: '🇧🇷' }, ...]
129
+
130
+ // Dashboard (scout/club portal — single aggregated call)
131
+ const dashboard = await Dashboard.getScoutDashboard();
132
+ // Returns: stats (watchlisted, offersSent, playersViewed, videosWatched),
133
+ // lastPlayersViewed (last 6 distinct players),
134
+ // lastVideosWatched (last 6 distinct videos with player info)
135
+
136
+ const videoUrl = await Dashboard.getScoutVideoPlayUrl({
137
+ path: { id: 'video-uuid' },
138
+ });
139
+ // Returns signed play URL + records the view in video_views
140
+
141
+ // Offers (conversations between scouts and players)
142
+ const conversations = await Offers.listConversations({
143
+ query: { filter: 'all', page: 1, pageSize: 20 },
144
+ });
145
+ const conversation = await Offers.createConversation({
146
+ body: { playerId: 'player-uuid', initialMessage: 'Hi!' },
147
+ });
148
+ const messages = await Offers.listMessages({
149
+ path: { id: 'conversation-uuid' },
150
+ query: { page: 1, pageSize: 20 },
151
+ });
152
+ await Offers.sendMessage({
153
+ path: { id: 'conversation-uuid' },
154
+ body: { body: 'Looking forward to it!' },
155
+ });
156
+ await Offers.markConversationRead({ path: { id: 'conversation-uuid' } });
157
+
158
+ // Organizations
159
+ const org = await Organizations.getMyOrganization();
160
+ await Organizations.updateMyOrganization({ body: { name: 'FC Example' } });
161
+ await Organizations.registerClub({
162
+ body: { name: 'FC Example', email: 'admin@example.com' },
163
+ });
164
+
165
+ // Clubs (coach/admin club entries within an organization)
166
+ const clubs = await Clubs.getMyClubs();
167
+ const club = await Clubs.createMyClub({ body: { name: 'U19 Team' } });
168
+ await Clubs.updateMyClub({
169
+ path: { id: 'club-uuid' },
170
+ body: { name: 'U21 Team' },
171
+ });
172
+ await Clubs.deleteMyClub({ path: { id: 'club-uuid' } });
173
+
174
+ // Challenges
175
+ const challengeCatalog = await Challenges.getChallengesCatalog();
176
+ const myChallenges = await Challenges.getMyChallenges();
177
+
178
+ // Training
179
+ const grouped = await Training.getTrainingGrouped();
180
+ const trainingList = await Training.getTrainingList({
181
+ query: { categoryCode: 'fitness', page: 1, pageSize: 20 },
182
+ });
183
+ const trainingItem = await Training.getTrainingById({
184
+ path: { id: 'training-uuid' },
185
+ });
186
+
187
+ // Invitations (org admin invites members)
188
+ await Invitations.sendInvitation({
189
+ body: { email: 'coach@example.com', role: 'coach' },
190
+ });
191
+ const invitations = await Invitations.listInvitations();
192
+ await Invitations.resendInvitation({ path: { id: 'invitation-uuid' } });
193
+ await Invitations.deleteInvitation({ path: { id: 'invitation-uuid' } });
194
+ await Invitations.acceptInvitation(); // called after Supabase auth callback
195
+
196
+ // KYC — SmileID Enhanced Document Verification
197
+ //
198
+ // Two integration options:
199
+
200
+ // Option A — Smile Links (recommended for web)
201
+ // Backend returns a hosted SmileID URL; redirect the user to it.
202
+ // SmileID handles the full capture UI and fires the webhook when done.
203
+ const linkResult = await Kyc.startSmileLink({
204
+ body: {
205
+ country: 'gh', // stored on the verification record; does NOT filter the SmileID dropdown
206
+ channel: 'web',
207
+ returnUrl: 'https://yourapp.com/onboarding/kyc/callback',
208
+ },
209
+ });
210
+ // linkResult: { url, jobId, status, retriesRemaining }
211
+ // url is null when no redirect is needed (approved / blocked / processing).
212
+ if (linkResult.data.url) {
213
+ window.location.href = linkResult.data.url; // redirect user to SmileID
214
+ }
215
+ // The SmileID hosted page shows all countries configured in index.kyc_supported_id_types.
216
+ // The user selects their country and document type on that page.
217
+ // After the user returns to returnUrl, poll getKycStatus to confirm the result.
218
+ // markSubmittedKyc is NOT needed for Smile Links — SmileID fires the webhook directly.
219
+
220
+ // Option B — SDK widget (embedded, for mobile / advanced web)
221
+ const kycResult = await Kyc.startKyc({
222
+ body: { country: 'gh', channel: 'web' },
223
+ });
224
+ // kycResult: { token, partnerId, jobId, status, retriesRemaining }
225
+ // Pass token + partnerId to the SmileID web SDK widget to start document capture.
226
+ // After the SDK reports successful submission, call markSubmittedKyc with jobId.
227
+ await Kyc.markSubmittedKyc({ body: { jobId: kycResult.data.jobId! } });
228
+ // SmileID also calls POST /kyc/webhook under the configured API base/prefix
229
+ // (for staging: https://staging.globalscoutme.com/api/kyc/webhook).
230
+
231
+ const kycStatus = await Kyc.getKycStatus({
232
+ path: { userId: supabaseAuthUuid },
233
+ });
234
+ // kycStatus: { status, retryCount, retriesRemaining }
235
+ // status: 'pending' | 'capture_started' | 'processing' | 'approved' | 'rejected' | 'blocked'
236
+ // Older API clients may still see legacy 'in_progress', which maps to 'capture_started'.
237
+
238
+ // Subscriptions (Stripe recurring billing)
239
+ const plans = await Subscriptions.getSubscriptionPlans();
240
+ // Returns: { plans: [{ id, code, name, price, currency, billingInterval, trialDays, features, displayOrder }] }
241
+
242
+ const mySubscription = await Subscriptions.getMySubscription();
243
+ // Returns: { status, isActive, planId, planName, billingInterval,
244
+ // currentPeriodStart, currentPeriodEnd, cancelAtPeriodEnd, canceledAt, gracePeriodUntil }
245
+ // status: 'inactive' when the user has never subscribed
246
+
247
+ // Start a subscription — redirect the user to the returned URL
248
+ const checkout = await Subscriptions.createCheckout({
249
+ body: {
250
+ providerProductId: 'billing-provider-products-uuid', // pick from billing_provider_products table
251
+ successUrl: 'https://yourapp.com/subscription/success', // or a mobile deep-link
252
+ cancelUrl: 'https://yourapp.com/subscription/cancel',
253
+ },
254
+ });
255
+ // redirect user to checkout.url
256
+
257
+ // Open the Stripe Billing Portal (manage / cancel subscription)
258
+ const portal = await Subscriptions.createPortal({
259
+ body: { returnUrl: 'https://yourapp.com/account' },
260
+ });
261
+ // redirect user to portal.url
262
+
263
+ // Storage — get a signed upload URL, then PUT the file directly to Supabase Storage
264
+ const { uploadUrl, token, path, bucket, expiresIn } = await Storage.createUploadUrl({
265
+ body: { bucket: 'avatars', contentType: 'image/jpeg', sizeBytes: 204800 },
266
+ });
267
+ await fetch(uploadUrl, {
268
+ method: 'PUT',
269
+ body: fileBlob,
270
+ headers: { 'Content-Type': 'image/jpeg' },
271
+ });
272
+ // persist `path` on the player record (e.g. patchMe with avatarPath: path)
273
+ ```
274
+
275
+ ## Updating auth token
276
+
277
+ Update the Bearer token after sign-in or token refresh:
278
+
279
+ ```ts
280
+ client.setConfig({
281
+ headers: {
282
+ Authorization: `Bearer ${newAccessToken}`,
283
+ },
284
+ });
285
+ ```
286
+
287
+ ## Versioning
288
+
289
+ This package is auto-generated from the backend OpenAPI spec. Version increments follow semver:
290
+
291
+ - **patch** — no API shape changes
292
+ - **minor** — new endpoints added
293
+ - **major** — breaking changes (renamed/removed endpoints or fields)
294
+
295
+ ## Package format
296
+
297
+ The published package ships compiled JavaScript (`dist/`) alongside the raw TypeScript source. `main` points to `dist/index.js` so all bundlers work without extra configuration.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { Achievements, Auth, Billing, Body, Challenges, Clubs, Cmj, Dashboard, Documents, GlobalScoutMeClient, Index, Invitations, Kyc, Measurements, Notifications, Offers, type Options, Organizations, Players, Profile, Storage, Subscriptions, Training, Trainingadmin, VideoLinks, VideoMetrics, Videos, } from './sdk.gen.js';
2
- export type { AchievementCatalogDto, AiReportClipDto, AiReportClipTargetDto, AiReportGsiBodySourceInputDto, AiReportGsiComponentDto, AiReportGsiJumpSourceInputDto, AiReportGsiMeasurementsSourceInputsDto, AiReportGsiReasonDto, AiReportGsiRepairMetadataDto, AiReportGsiSnapshotDto, AiReportGsiSourceInputsDto, AiReportGsiSpeedSourceInputDto, AiReportGsiSubcomponentDto, AiReportGsiVideoSourceInputDto, AiReportImprovementAreaDto, AiReportMetaDto, AiReportPillarDetailDto, AiReportResultResponseDto, AiReportSubcategoryDto, AiReportVideoAttributeScoresDto, AiReportViewDto, AuthMeResponseDto, BillingEntitlementResponseDto, BillingManageActionDto, BillingPlanDto, BillingPlansResponseDto, BillingProductDto, BillingProductsResponseDto, BillingProviderProductDto, BodyMeasurementProfileDto, BodyMeasurementResponseDto, CancelKycRequestDto, CareerAchievementDto, ChallengeCatalogDto, CheckoutResultDto, ClientOptions, ClubResponseDto, CmjMeasurementProfileDto, CmjMeasurementResponseDto, ConversationDetailDto, ConversationItemDto, ConversationListResultDto, ConversationOrganizationDto, ConversationParticipantDto, CountryDto, CreateBodyMeasurementDto, CreateCheckoutDto, CreateClubDto, CreateConversationDto, CreateDocumentDto, CreateMeasurementPlayerSessionDto, CreatePortalDto, CreateUploadUrlDto, CreateVideoDto, CreateVideoLinkDto, DashboardResponseDto, DashboardStatsDto, DashboardVideoCardDto, DeactivatePushDeviceDto, DeleteApiClubsMeByIdData, DeleteApiClubsMeByIdErrors, DeleteApiClubsMeByIdResponse, DeleteApiClubsMeByIdResponses, DeleteApiDocumentsByIdData, DeleteApiDocumentsByIdErrors, DeleteApiDocumentsByIdResponse, DeleteApiDocumentsByIdResponses, DeleteApiInvitationsByIdData, DeleteApiInvitationsByIdErrors, DeleteApiInvitationsByIdResponse, DeleteApiInvitationsByIdResponses, DeleteApiNotificationsDevicesCurrentData, DeleteApiNotificationsDevicesCurrentResponse, DeleteApiNotificationsDevicesCurrentResponses, DeleteApiPlayersMeData, DeleteApiPlayersMeErrors, DeleteApiPlayersMeResponse, DeleteApiPlayersMeResponses, DeleteApiTrainingAdminContentByIdData, DeleteApiTrainingAdminContentByIdErrors, DeleteApiTrainingAdminContentByIdResponse, DeleteApiTrainingAdminContentByIdResponses, DeleteApiVideoLinksByIdData, DeleteApiVideoLinksByIdErrors, DeleteApiVideoLinksByIdResponse, DeleteApiVideoLinksByIdResponses, DeleteApiVideosByIdData, DeleteApiVideosByIdErrors, DeleteApiVideosByIdResponse, DeleteApiVideosByIdResponses, DivisionDto, DocumentResponseDto, GetApiAchievementsData, GetApiAchievementsMeData, GetApiAchievementsMeErrors, GetApiAchievementsMeResponse, GetApiAchievementsMeResponses, GetApiAchievementsResponse, GetApiAchievementsResponses, GetApiAuthMeData, GetApiAuthMeErrors, GetApiAuthMeResponse, GetApiAuthMeResponses, GetApiBillingMeData, GetApiBillingMeResponse, GetApiBillingMeResponses, GetApiBillingPlansData, GetApiBillingPlansResponse, GetApiBillingPlansResponses, GetApiBillingProductsData, GetApiBillingProductsResponse, GetApiBillingProductsResponses, GetApiBillingReportPurchasesByIdReportData, GetApiBillingReportPurchasesByIdReportResponse, GetApiBillingReportPurchasesByIdReportResponses, GetApiBillingReportPurchasesCurrentData, GetApiBillingReportPurchasesCurrentResponse, GetApiBillingReportPurchasesCurrentResponses, GetApiBillingReportPurchasesHistoryData, GetApiBillingReportPurchasesHistoryResponse, GetApiBillingReportPurchasesHistoryResponses, GetApiBodyMeasurementsMeData, GetApiBodyMeasurementsMeErrors, GetApiBodyMeasurementsMeResponse, GetApiBodyMeasurementsMeResponses, GetApiChallengesData, GetApiChallengesErrors, GetApiChallengesMeData, GetApiChallengesMeErrors, GetApiChallengesMeResponse, GetApiChallengesMeResponses, GetApiChallengesResponse, GetApiChallengesResponses, GetApiClubsMeData, GetApiClubsMeErrors, GetApiClubsMeResponse, GetApiClubsMeResponses, GetApiCmjMeasurementsMeData, GetApiCmjMeasurementsMeErrors, GetApiCmjMeasurementsMeResponse, GetApiCmjMeasurementsMeResponses, GetApiDashboardMeData, GetApiDashboardMeErrors, GetApiDashboardMeResponse, GetApiDashboardMeResponses, GetApiDashboardVideosByIdPlayUrlData, GetApiDashboardVideosByIdPlayUrlErrors, GetApiDashboardVideosByIdPlayUrlResponse, GetApiDashboardVideosByIdPlayUrlResponses, GetApiDocumentsMeData, GetApiDocumentsMeErrors, GetApiDocumentsMeResponse, GetApiDocumentsMeResponses, GetApiIndexByTableNameData, GetApiIndexByTableNameErrors, GetApiIndexByTableNameResponse, GetApiIndexByTableNameResponses, GetApiIndexCountriesData, GetApiIndexCountriesErrors, GetApiIndexCountriesResponse, GetApiIndexCountriesResponses, GetApiInvitationsData, GetApiInvitationsResponse, GetApiInvitationsResponses, GetApiKycStatusByUserIdData, GetApiKycStatusByUserIdErrors, GetApiKycStatusByUserIdResponse, GetApiKycStatusByUserIdResponses, GetApiMeasurementsProfileMeData, GetApiMeasurementsProfileMeErrors, GetApiMeasurementsProfileMeResponse, GetApiMeasurementsProfileMeResponses, GetApiNotificationsPreferencesData, GetApiNotificationsPreferencesResponse, GetApiNotificationsPreferencesResponses, GetApiOffersConversationsByIdMessagesData, GetApiOffersConversationsByIdMessagesErrors, GetApiOffersConversationsByIdMessagesResponse, GetApiOffersConversationsByIdMessagesResponses, GetApiOffersConversationsData, GetApiOffersConversationsErrors, GetApiOffersConversationsResponse, GetApiOffersConversationsResponses, GetApiOrganizationsMeData, GetApiOrganizationsMeErrors, GetApiOrganizationsMeResponse, GetApiOrganizationsMeResponses, GetApiPlayersByIdData, GetApiPlayersByIdErrors, GetApiPlayersByIdMeasurementsData, GetApiPlayersByIdMeasurementsErrors, GetApiPlayersByIdMeasurementsResponse, GetApiPlayersByIdMeasurementsResponses, GetApiPlayersByIdReportData, GetApiPlayersByIdReportErrors, GetApiPlayersByIdReportResponse, GetApiPlayersByIdReportResponses, GetApiPlayersByIdResponse, GetApiPlayersByIdResponses, GetApiPlayersByIdVideoMetricsData, GetApiPlayersByIdVideoMetricsErrors, GetApiPlayersByIdVideoMetricsResponse, GetApiPlayersByIdVideoMetricsResponses, GetApiPlayersMeDashboardData, GetApiPlayersMeDashboardErrors, GetApiPlayersMeDashboardResponse, GetApiPlayersMeDashboardResponses, GetApiPlayersMeData, GetApiPlayersMeErrors, GetApiPlayersMeResponse, GetApiPlayersMeResponses, GetApiProfileMeData, GetApiProfileMeErrors, GetApiProfileMeResponse, GetApiProfileMeResponses, GetApiSubscriptionsMeData, GetApiSubscriptionsMeResponse, GetApiSubscriptionsMeResponses, GetApiSubscriptionsPlansData, GetApiSubscriptionsPlansResponse, GetApiSubscriptionsPlansResponses, GetApiTrainingAdminContentByIdData, GetApiTrainingAdminContentByIdErrors, GetApiTrainingAdminContentByIdResponse, GetApiTrainingAdminContentByIdResponses, GetApiTrainingAdminContentData, GetApiTrainingAdminContentErrors, GetApiTrainingAdminContentResponse, GetApiTrainingAdminContentResponses, GetApiTrainingAdminLookupsData, GetApiTrainingAdminLookupsErrors, GetApiTrainingAdminLookupsResponse, GetApiTrainingAdminLookupsResponses, GetApiTrainingByIdData, GetApiTrainingByIdErrors, GetApiTrainingByIdResponse, GetApiTrainingByIdResponses, GetApiTrainingData, GetApiTrainingErrors, GetApiTrainingGroupedData, GetApiTrainingGroupedErrors, GetApiTrainingGroupedResponse, GetApiTrainingGroupedResponses, GetApiTrainingResponse, GetApiTrainingResponses, GetApiVideoLinksMeData, GetApiVideoLinksMeErrors, GetApiVideoLinksMeResponse, GetApiVideoLinksMeResponses, GetApiVideoMetricsMeData, GetApiVideoMetricsMeErrors, GetApiVideoMetricsMeResponse, GetApiVideoMetricsMeResponses, GetApiVideosByIdPlayUrlData, GetApiVideosByIdPlayUrlErrors, GetApiVideosByIdPlayUrlResponse, GetApiVideosByIdPlayUrlResponses, GetApiVideosMeData, GetApiVideosMeErrors, GetApiVideosMeResponse, GetApiVideosMeResponses, HeartbeatDto, HeartbeatResponseDto, IndexItemDto, InvitationResponseDto, KycStatusDto, KycWebhookDto, MarkSubmittedKycRequestDto, MeasurementProfileResponseDto, MeasurementSessionDto, MeasurementSessionMetricsDto, MeasurementTagEvaluationDto, MessageItemDto, MessageListResultDto, MessageSenderDto, MyChallengeDto, MySubscriptionDto, NotificationPreferencesDto, OkDto, OrganizationResponseDto, PaginatedTrainingContentDto, PatchApiClubsMeByIdData, PatchApiClubsMeByIdErrors, PatchApiClubsMeByIdResponse, PatchApiClubsMeByIdResponses, PatchApiNotificationsPreferencesData, PatchApiNotificationsPreferencesResponse, PatchApiNotificationsPreferencesResponses, PatchApiOffersConversationsByIdReadData, PatchApiOffersConversationsByIdReadErrors, PatchApiOffersConversationsByIdReadResponses, PatchApiPlayersMeData, PatchApiPlayersMeErrors, PatchApiPlayersMeResponse, PatchApiPlayersMeResponses, PatchApiTrainingAdminContentByIdData, PatchApiTrainingAdminContentByIdErrors, PatchApiTrainingAdminContentByIdResponse, PatchApiTrainingAdminContentByIdResponses, PlansListDto, PlayerAchievementDto, PlayerByIdDto, PlayerClubDto, PlayerReportResponseDto, PlayerReportViewDto, PlayerResponseDto, PlayerSearchItemDto, PlayerSearchRequestDto, PlayerSearchResultDto, PlayerVideoDto, PlayUrlResponseDto, PortalResultDto, PostApiBillingAccessCodesRedeemData, PostApiBillingAccessCodesRedeemResponse, PostApiBillingAccessCodesRedeemResponses, PostApiBillingAppleSyncPurchaseData, PostApiBillingAppleSyncPurchaseResponses, PostApiBillingGoogleSyncPurchaseData, PostApiBillingGoogleSyncPurchaseResponses, PostApiBillingReportPurchasesByIdStartGenerationData, PostApiBillingReportPurchasesByIdStartGenerationResponse, PostApiBillingReportPurchasesByIdStartGenerationResponses, PostApiBillingReportPurchasesPlayerCandidatesData, PostApiBillingReportPurchasesPlayerCandidatesResponse, PostApiBillingReportPurchasesPlayerCandidatesResponses, PostApiBillingStripeCheckoutSessionData, PostApiBillingStripeCheckoutSessionResponses, PostApiBillingStripePortalSessionData, PostApiBillingStripePortalSessionResponses, PostApiBodyMeasurementsData, PostApiBodyMeasurementsErrors, PostApiBodyMeasurementsResponse, PostApiBodyMeasurementsResponses, PostApiClubsMeData, PostApiClubsMeErrors, PostApiClubsMeResponse, PostApiClubsMeResponses, PostApiDocumentsData, PostApiDocumentsErrors, PostApiDocumentsResponse, PostApiDocumentsResponses, PostApiInvitationsAcceptData, PostApiInvitationsAcceptResponse, PostApiInvitationsAcceptResponses, PostApiInvitationsByIdResendData, PostApiInvitationsByIdResendErrors, PostApiInvitationsByIdResendResponse, PostApiInvitationsByIdResendResponses, PostApiInvitationsData, PostApiInvitationsErrors, PostApiInvitationsResponse, PostApiInvitationsResponses, PostApiKycCancelData, PostApiKycCancelErrors, PostApiKycCancelResponse, PostApiKycCancelResponses, PostApiKycMarkSubmittedData, PostApiKycMarkSubmittedErrors, PostApiKycMarkSubmittedResponse, PostApiKycMarkSubmittedResponses, PostApiKycSmileLinkData, PostApiKycSmileLinkErrors, PostApiKycSmileLinkResponse, PostApiKycSmileLinkResponses, PostApiKycStartData, PostApiKycStartErrors, PostApiKycStartResponse, PostApiKycStartResponses, PostApiKycWebhookData, PostApiKycWebhookErrors, PostApiKycWebhookResponses, PostApiMeasurementsPlayerSessionMeData, PostApiMeasurementsPlayerSessionMeErrors, PostApiMeasurementsPlayerSessionMeResponse, PostApiMeasurementsPlayerSessionMeResponses, PostApiNotificationsDevicesData, PostApiNotificationsDevicesResponse, PostApiNotificationsDevicesResponses, PostApiOffersConversationsByIdMessagesData, PostApiOffersConversationsByIdMessagesErrors, PostApiOffersConversationsByIdMessagesResponse, PostApiOffersConversationsByIdMessagesResponses, PostApiOffersConversationsData, PostApiOffersConversationsErrors, PostApiOffersConversationsResponse, PostApiOffersConversationsResponses, PostApiOrganizationsRegisterAgentData, PostApiOrganizationsRegisterAgentErrors, PostApiOrganizationsRegisterAgentResponse, PostApiOrganizationsRegisterAgentResponses, PostApiOrganizationsRegisterClubData, PostApiOrganizationsRegisterClubErrors, PostApiOrganizationsRegisterClubResponse, PostApiOrganizationsRegisterClubResponses, PostApiPlayersMeHeartbeatData, PostApiPlayersMeHeartbeatErrors, PostApiPlayersMeHeartbeatResponse, PostApiPlayersMeHeartbeatResponses, PostApiPlayersSearchData, PostApiPlayersSearchErrors, PostApiPlayersSearchResponse, PostApiPlayersSearchResponses, PostApiStorageUploadUrlData, PostApiStorageUploadUrlErrors, PostApiStorageUploadUrlResponse, PostApiStorageUploadUrlResponses, PostApiSubscriptionsCheckoutData, PostApiSubscriptionsCheckoutErrors, PostApiSubscriptionsCheckoutResponse, PostApiSubscriptionsCheckoutResponses, PostApiSubscriptionsPortalData, PostApiSubscriptionsPortalErrors, PostApiSubscriptionsPortalResponse, PostApiSubscriptionsPortalResponses, PostApiSubscriptionsWebhookData, PostApiSubscriptionsWebhookErrors, PostApiSubscriptionsWebhookResponses, PostApiTrainingAdminContentData, PostApiTrainingAdminContentErrors, PostApiTrainingAdminContentResponse, PostApiTrainingAdminContentResponses, PostApiVideoLinksData, PostApiVideoLinksErrors, PostApiVideoLinksResponse, PostApiVideoLinksResponses, PostApiVideosData, PostApiVideosErrors, PostApiVideosResponse, PostApiVideosResponses, PreviousClubDto, ProfileResponseDto, ProviderCheckoutRequestDto, PushDeviceRegistrationResultDto, PutApiOrganizationsMeData, PutApiOrganizationsMeErrors, PutApiOrganizationsMeResponse, PutApiOrganizationsMeResponses, PutApiProfileMeData, PutApiProfileMeErrors, PutApiProfileMeResponse, PutApiProfileMeResponses, RedeemAccessCodeDto, RegisterAgentDto, RegisterAgentResponseDto, RegisterClubDto, RegisterClubResponseDto, RegisterPushDeviceDto, ReportGenerationStartResponseDto, ReportPlayerCandidateBboxDto, ReportPlayerCandidateDto, ReportPlayerCandidatesRequestDto, ReportPlayerCandidatesResponseDto, ReportPlayerCandidateTargetDto, ReportPrerequisiteDto, ReportPurchaseDto, ReportPurchaseHistoryItemDto, ReportPurchaseHistoryResponseDto, ReportPurchaseStatusResponseDto, ReportVideoCandidatesDto, ScoutDashboardResponseDto, SendInvitationRequestDto, SendMessageDto, SmileLinkRequestDto, SmileLinkResponseDto, StartKycRequestDto, StartKycResponseDto, StartReportGenerationClipDto, StartReportGenerationRequestDto, StorePurchaseSyncRequestDto, SubscriptionPlanDto, TrainingAdminContentDto, TrainingAdminContentStatusDto, TrainingAdminCreateContentInputDto, TrainingAdminLookupItemDto, TrainingAdminLookupsDto, TrainingAdminUpdateContentInputDto, TrainingCategoryGroupDto, TrainingContentDetailDto, TrainingContentListItemDto, TrainingMediaTypeDto, UpdateClubDto, UpdateNotificationPreferencesDto, UpdateOrganizationDto, UpdatePlayerDto, UpdateProfileDto, UploadUrlResponseDto, UserAchievementResponseDto, VideoLinkResponseDto, VideoMetricsMeResponseDto, VideoMetricsPhysicalMetricsDto, VideoResponseDto, WatchingOrgDto, WebhookPartnerParamsDto, } from './types.gen.js';
2
+ export type { AchievementCatalogDto, AiReportClipDto, AiReportClipTargetDto, AiReportGsiBodySourceInputDto, AiReportGsiComponentDto, AiReportGsiJumpSourceInputDto, AiReportGsiMeasurementsSourceInputsDto, AiReportGsiReasonDto, AiReportGsiRepairMetadataDto, AiReportGsiSnapshotDto, AiReportGsiSourceInputsDto, AiReportGsiSpeedSourceInputDto, AiReportGsiSubcomponentDto, AiReportGsiVideoSourceInputDto, AiReportImprovementAreaDto, AiReportMetaDto, AiReportPillarDetailDto, AiReportResultResponseDto, AiReportSubcategoryDto, AiReportVideoAttributeScoresDto, AiReportViewDto, AuthMeResponseDto, BillingEntitlementResponseDto, BillingManageActionDto, BillingPlanDto, BillingPlansResponseDto, BillingProductDto, BillingProductsResponseDto, BillingProviderProductDto, BiomechanicalAlignmentDto, BiomechanicalPositionDto, BodyMeasurementProfileDto, BodyMeasurementResponseDto, CancelKycRequestDto, CareerAchievementDto, ChallengeCatalogDto, CheckoutResultDto, ClientOptions, ClubResponseDto, CmjMeasurementProfileDto, CmjMeasurementResponseDto, ConversationDetailDto, ConversationItemDto, ConversationListResultDto, ConversationOrganizationDto, ConversationParticipantDto, CountryDto, CreateBodyMeasurementDto, CreateCheckoutDto, CreateClubDto, CreateConversationDto, CreateDocumentDto, CreateMeasurementPlayerSessionDto, CreatePortalDto, CreateUploadUrlDto, CreateVideoDto, CreateVideoLinkDto, DashboardResponseDto, DashboardStatsDto, DashboardVideoCardDto, DeactivatePushDeviceDto, DeclaredPositionDto, DeleteApiClubsMeByIdData, DeleteApiClubsMeByIdErrors, DeleteApiClubsMeByIdResponse, DeleteApiClubsMeByIdResponses, DeleteApiDocumentsByIdData, DeleteApiDocumentsByIdErrors, DeleteApiDocumentsByIdResponse, DeleteApiDocumentsByIdResponses, DeleteApiInvitationsByIdData, DeleteApiInvitationsByIdErrors, DeleteApiInvitationsByIdResponse, DeleteApiInvitationsByIdResponses, DeleteApiNotificationsDevicesCurrentData, DeleteApiNotificationsDevicesCurrentResponse, DeleteApiNotificationsDevicesCurrentResponses, DeleteApiPlayersMeData, DeleteApiPlayersMeErrors, DeleteApiPlayersMeResponse, DeleteApiPlayersMeResponses, DeleteApiTrainingAdminContentByIdData, DeleteApiTrainingAdminContentByIdErrors, DeleteApiTrainingAdminContentByIdResponse, DeleteApiTrainingAdminContentByIdResponses, DeleteApiVideoLinksByIdData, DeleteApiVideoLinksByIdErrors, DeleteApiVideoLinksByIdResponse, DeleteApiVideoLinksByIdResponses, DeleteApiVideosByIdData, DeleteApiVideosByIdErrors, DeleteApiVideosByIdResponse, DeleteApiVideosByIdResponses, DivisionDto, DocumentResponseDto, GetApiAchievementsData, GetApiAchievementsMeData, GetApiAchievementsMeErrors, GetApiAchievementsMeResponse, GetApiAchievementsMeResponses, GetApiAchievementsResponse, GetApiAchievementsResponses, GetApiAuthMeData, GetApiAuthMeErrors, GetApiAuthMeResponse, GetApiAuthMeResponses, GetApiBillingMeData, GetApiBillingMeResponse, GetApiBillingMeResponses, GetApiBillingPlansData, GetApiBillingPlansResponse, GetApiBillingPlansResponses, GetApiBillingProductsData, GetApiBillingProductsResponse, GetApiBillingProductsResponses, GetApiBillingReportPurchasesByIdReportData, GetApiBillingReportPurchasesByIdReportResponse, GetApiBillingReportPurchasesByIdReportResponses, GetApiBillingReportPurchasesCurrentData, GetApiBillingReportPurchasesCurrentResponse, GetApiBillingReportPurchasesCurrentResponses, GetApiBillingReportPurchasesHistoryData, GetApiBillingReportPurchasesHistoryResponse, GetApiBillingReportPurchasesHistoryResponses, GetApiBodyMeasurementsMeData, GetApiBodyMeasurementsMeErrors, GetApiBodyMeasurementsMeResponse, GetApiBodyMeasurementsMeResponses, GetApiChallengesData, GetApiChallengesErrors, GetApiChallengesMeData, GetApiChallengesMeErrors, GetApiChallengesMeResponse, GetApiChallengesMeResponses, GetApiChallengesResponse, GetApiChallengesResponses, GetApiClubsMeData, GetApiClubsMeErrors, GetApiClubsMeResponse, GetApiClubsMeResponses, GetApiCmjMeasurementsMeData, GetApiCmjMeasurementsMeErrors, GetApiCmjMeasurementsMeResponse, GetApiCmjMeasurementsMeResponses, GetApiDashboardMeData, GetApiDashboardMeErrors, GetApiDashboardMeResponse, GetApiDashboardMeResponses, GetApiDashboardVideosByIdPlayUrlData, GetApiDashboardVideosByIdPlayUrlErrors, GetApiDashboardVideosByIdPlayUrlResponse, GetApiDashboardVideosByIdPlayUrlResponses, GetApiDocumentsMeData, GetApiDocumentsMeErrors, GetApiDocumentsMeResponse, GetApiDocumentsMeResponses, GetApiIndexByTableNameData, GetApiIndexByTableNameErrors, GetApiIndexByTableNameResponse, GetApiIndexByTableNameResponses, GetApiIndexCountriesData, GetApiIndexCountriesErrors, GetApiIndexCountriesResponse, GetApiIndexCountriesResponses, GetApiInvitationsData, GetApiInvitationsResponse, GetApiInvitationsResponses, GetApiKycStatusByUserIdData, GetApiKycStatusByUserIdErrors, GetApiKycStatusByUserIdResponse, GetApiKycStatusByUserIdResponses, GetApiMeasurementsProfileMeData, GetApiMeasurementsProfileMeErrors, GetApiMeasurementsProfileMeResponse, GetApiMeasurementsProfileMeResponses, GetApiNotificationsPreferencesData, GetApiNotificationsPreferencesResponse, GetApiNotificationsPreferencesResponses, GetApiOffersConversationsByIdMessagesData, GetApiOffersConversationsByIdMessagesErrors, GetApiOffersConversationsByIdMessagesResponse, GetApiOffersConversationsByIdMessagesResponses, GetApiOffersConversationsData, GetApiOffersConversationsErrors, GetApiOffersConversationsResponse, GetApiOffersConversationsResponses, GetApiOrganizationsMeData, GetApiOrganizationsMeErrors, GetApiOrganizationsMeResponse, GetApiOrganizationsMeResponses, GetApiPlayersByIdData, GetApiPlayersByIdErrors, GetApiPlayersByIdMeasurementsData, GetApiPlayersByIdMeasurementsErrors, GetApiPlayersByIdMeasurementsResponse, GetApiPlayersByIdMeasurementsResponses, GetApiPlayersByIdReportData, GetApiPlayersByIdReportErrors, GetApiPlayersByIdReportResponse, GetApiPlayersByIdReportResponses, GetApiPlayersByIdResponse, GetApiPlayersByIdResponses, GetApiPlayersByIdVideoMetricsData, GetApiPlayersByIdVideoMetricsErrors, GetApiPlayersByIdVideoMetricsResponse, GetApiPlayersByIdVideoMetricsResponses, GetApiPlayersMeDashboardData, GetApiPlayersMeDashboardErrors, GetApiPlayersMeDashboardResponse, GetApiPlayersMeDashboardResponses, GetApiPlayersMeData, GetApiPlayersMeErrors, GetApiPlayersMeResponse, GetApiPlayersMeResponses, GetApiProfileMeData, GetApiProfileMeErrors, GetApiProfileMeResponse, GetApiProfileMeResponses, GetApiSubscriptionsMeData, GetApiSubscriptionsMeResponse, GetApiSubscriptionsMeResponses, GetApiSubscriptionsPlansData, GetApiSubscriptionsPlansResponse, GetApiSubscriptionsPlansResponses, GetApiTrainingAdminContentByIdData, GetApiTrainingAdminContentByIdErrors, GetApiTrainingAdminContentByIdResponse, GetApiTrainingAdminContentByIdResponses, GetApiTrainingAdminContentData, GetApiTrainingAdminContentErrors, GetApiTrainingAdminContentResponse, GetApiTrainingAdminContentResponses, GetApiTrainingAdminLookupsData, GetApiTrainingAdminLookupsErrors, GetApiTrainingAdminLookupsResponse, GetApiTrainingAdminLookupsResponses, GetApiTrainingByIdData, GetApiTrainingByIdErrors, GetApiTrainingByIdResponse, GetApiTrainingByIdResponses, GetApiTrainingData, GetApiTrainingErrors, GetApiTrainingGroupedData, GetApiTrainingGroupedErrors, GetApiTrainingGroupedResponse, GetApiTrainingGroupedResponses, GetApiTrainingResponse, GetApiTrainingResponses, GetApiVideoLinksMeData, GetApiVideoLinksMeErrors, GetApiVideoLinksMeResponse, GetApiVideoLinksMeResponses, GetApiVideoMetricsMeData, GetApiVideoMetricsMeErrors, GetApiVideoMetricsMeResponse, GetApiVideoMetricsMeResponses, GetApiVideosByIdPlayUrlData, GetApiVideosByIdPlayUrlErrors, GetApiVideosByIdPlayUrlResponse, GetApiVideosByIdPlayUrlResponses, GetApiVideosMeData, GetApiVideosMeErrors, GetApiVideosMeResponse, GetApiVideosMeResponses, HeartbeatDto, HeartbeatResponseDto, ImprovementAreaDto, IndexItemDto, InvitationResponseDto, KycStatusDto, KycWebhookDto, MarkSubmittedKycRequestDto, MeasurementProfileResponseDto, MeasurementSessionDto, MeasurementSessionMetricsDto, MeasurementTagEvaluationDto, MessageItemDto, MessageListResultDto, MessageSenderDto, MyChallengeDto, MySubscriptionDto, NotificationPreferencesDto, OkDto, OrganizationResponseDto, PaginatedTrainingContentDto, PatchApiClubsMeByIdData, PatchApiClubsMeByIdErrors, PatchApiClubsMeByIdResponse, PatchApiClubsMeByIdResponses, PatchApiNotificationsPreferencesData, PatchApiNotificationsPreferencesResponse, PatchApiNotificationsPreferencesResponses, PatchApiOffersConversationsByIdReadData, PatchApiOffersConversationsByIdReadErrors, PatchApiOffersConversationsByIdReadResponses, PatchApiPlayersMeData, PatchApiPlayersMeErrors, PatchApiPlayersMeResponse, PatchApiPlayersMeResponses, PatchApiTrainingAdminContentByIdData, PatchApiTrainingAdminContentByIdErrors, PatchApiTrainingAdminContentByIdResponse, PatchApiTrainingAdminContentByIdResponses, PlansListDto, PlayerAchievementDto, PlayerByIdDto, PlayerClubDto, PlayerDisplayBiomechanicalAlignmentDto, PlayerDisplayDto, PlayerDisplayPositionDto, PlayerDisplayTagDto, PlayerReportResponseDto, PlayerReportViewDto, PlayerResponseDto, PlayerSearchItemDto, PlayerSearchRequestDto, PlayerSearchResultDto, PlayerVideoDto, PlayUrlResponseDto, PortalResultDto, PostApiBillingAccessCodesRedeemData, PostApiBillingAccessCodesRedeemResponse, PostApiBillingAccessCodesRedeemResponses, PostApiBillingAppleSyncPurchaseData, PostApiBillingAppleSyncPurchaseResponses, PostApiBillingGoogleSyncPurchaseData, PostApiBillingGoogleSyncPurchaseResponses, PostApiBillingReportPurchasesByIdStartGenerationData, PostApiBillingReportPurchasesByIdStartGenerationResponse, PostApiBillingReportPurchasesByIdStartGenerationResponses, PostApiBillingReportPurchasesPlayerCandidatesData, PostApiBillingReportPurchasesPlayerCandidatesResponse, PostApiBillingReportPurchasesPlayerCandidatesResponses, PostApiBillingStripeCheckoutSessionData, PostApiBillingStripeCheckoutSessionResponses, PostApiBillingStripePortalSessionData, PostApiBillingStripePortalSessionResponses, PostApiBodyMeasurementsData, PostApiBodyMeasurementsErrors, PostApiBodyMeasurementsResponse, PostApiBodyMeasurementsResponses, PostApiClubsMeData, PostApiClubsMeErrors, PostApiClubsMeResponse, PostApiClubsMeResponses, PostApiDocumentsData, PostApiDocumentsErrors, PostApiDocumentsResponse, PostApiDocumentsResponses, PostApiInvitationsAcceptData, PostApiInvitationsAcceptResponse, PostApiInvitationsAcceptResponses, PostApiInvitationsByIdResendData, PostApiInvitationsByIdResendErrors, PostApiInvitationsByIdResendResponse, PostApiInvitationsByIdResendResponses, PostApiInvitationsData, PostApiInvitationsErrors, PostApiInvitationsResponse, PostApiInvitationsResponses, PostApiKycCancelData, PostApiKycCancelErrors, PostApiKycCancelResponse, PostApiKycCancelResponses, PostApiKycMarkSubmittedData, PostApiKycMarkSubmittedErrors, PostApiKycMarkSubmittedResponse, PostApiKycMarkSubmittedResponses, PostApiKycSmileLinkData, PostApiKycSmileLinkErrors, PostApiKycSmileLinkResponse, PostApiKycSmileLinkResponses, PostApiKycStartData, PostApiKycStartErrors, PostApiKycStartResponse, PostApiKycStartResponses, PostApiKycWebhookData, PostApiKycWebhookErrors, PostApiKycWebhookResponses, PostApiMeasurementsPlayerSessionMeData, PostApiMeasurementsPlayerSessionMeErrors, PostApiMeasurementsPlayerSessionMeResponse, PostApiMeasurementsPlayerSessionMeResponses, PostApiNotificationsDevicesData, PostApiNotificationsDevicesResponse, PostApiNotificationsDevicesResponses, PostApiOffersConversationsByIdMessagesData, PostApiOffersConversationsByIdMessagesErrors, PostApiOffersConversationsByIdMessagesResponse, PostApiOffersConversationsByIdMessagesResponses, PostApiOffersConversationsData, PostApiOffersConversationsErrors, PostApiOffersConversationsResponse, PostApiOffersConversationsResponses, PostApiOrganizationsRegisterAgentData, PostApiOrganizationsRegisterAgentErrors, PostApiOrganizationsRegisterAgentResponse, PostApiOrganizationsRegisterAgentResponses, PostApiOrganizationsRegisterClubData, PostApiOrganizationsRegisterClubErrors, PostApiOrganizationsRegisterClubResponse, PostApiOrganizationsRegisterClubResponses, PostApiPlayersMeHeartbeatData, PostApiPlayersMeHeartbeatErrors, PostApiPlayersMeHeartbeatResponse, PostApiPlayersMeHeartbeatResponses, PostApiPlayersSearchData, PostApiPlayersSearchErrors, PostApiPlayersSearchResponse, PostApiPlayersSearchResponses, PostApiStorageUploadUrlData, PostApiStorageUploadUrlErrors, PostApiStorageUploadUrlResponse, PostApiStorageUploadUrlResponses, PostApiSubscriptionsCheckoutData, PostApiSubscriptionsCheckoutErrors, PostApiSubscriptionsCheckoutResponse, PostApiSubscriptionsCheckoutResponses, PostApiSubscriptionsPortalData, PostApiSubscriptionsPortalErrors, PostApiSubscriptionsPortalResponse, PostApiSubscriptionsPortalResponses, PostApiSubscriptionsWebhookData, PostApiSubscriptionsWebhookErrors, PostApiSubscriptionsWebhookResponses, PostApiTrainingAdminContentData, PostApiTrainingAdminContentErrors, PostApiTrainingAdminContentResponse, PostApiTrainingAdminContentResponses, PostApiVideoLinksData, PostApiVideoLinksErrors, PostApiVideoLinksResponse, PostApiVideoLinksResponses, PostApiVideosData, PostApiVideosErrors, PostApiVideosResponse, PostApiVideosResponses, PreviousClubDto, ProfileResponseDto, ProviderCheckoutRequestDto, PushDeviceRegistrationResultDto, PutApiOrganizationsMeData, PutApiOrganizationsMeErrors, PutApiOrganizationsMeResponse, PutApiOrganizationsMeResponses, PutApiProfileMeData, PutApiProfileMeErrors, PutApiProfileMeResponse, PutApiProfileMeResponses, QualitySummaryDto, RedeemAccessCodeDto, RegisterAgentDto, RegisterAgentResponseDto, RegisterClubDto, RegisterClubResponseDto, RegisterPushDeviceDto, ReportGenerationStartResponseDto, ReportPlayerCandidateBboxDto, ReportPlayerCandidateDto, ReportPlayerCandidatesRequestDto, ReportPlayerCandidatesResponseDto, ReportPlayerCandidateTargetDto, ReportPrerequisiteDto, ReportPurchaseDto, ReportPurchaseHistoryItemDto, ReportPurchaseHistoryResponseDto, ReportPurchaseStatusResponseDto, ReportVideoCandidatesDto, ScoutDashboardResponseDto, SendInvitationRequestDto, SendMessageDto, SmileLinkRequestDto, SmileLinkResponseDto, StartKycRequestDto, StartKycResponseDto, StartReportGenerationClipDto, StartReportGenerationRequestDto, StorePurchaseSyncRequestDto, SubscriptionPlanDto, TacticalReasonDto, TrainingAdminContentDto, TrainingAdminContentStatusDto, TrainingAdminCreateContentInputDto, TrainingAdminLookupItemDto, TrainingAdminLookupsDto, TrainingAdminUpdateContentInputDto, TrainingCategoryGroupDto, TrainingContentDetailDto, TrainingContentListItemDto, TrainingMediaTypeDto, UpdateClubDto, UpdateNotificationPreferencesDto, UpdateOrganizationDto, UpdatePlayerDto, UpdateProfileDto, UploadUrlResponseDto, UserAchievementResponseDto, VideoAttributeScoresDto, VideoLinkResponseDto, VideoMetricsMeResponseDto, VideoMetricsPhysicalMetricsDto, VideoResponseDto, WatchingOrgDto, WebhookPartnerParamsDto, } from './types.gen.js';
3
3
  export { client, type CreateClientConfig } from './client.gen.js';
4
4
  export type { GetApiOffersConversationsData as GetOffersConversationsData } from './types.gen.js';
@@ -388,11 +388,125 @@ export type MeasurementSessionMetricsDto = {
388
388
  femurToTibiaRatio?: number | null;
389
389
  shoulderToHipRatio?: number | null;
390
390
  };
391
+ export type DeclaredPositionDto = {
392
+ code: string;
393
+ name: string;
394
+ category?: string | null;
395
+ positionTypeCode?: string | null;
396
+ };
397
+ export type BiomechanicalPositionDto = {
398
+ code: string;
399
+ name: string;
400
+ category?: string | null;
401
+ voteWeight?: number | null;
402
+ triggeredTagKeys?: Array<string>;
403
+ };
404
+ export type TacticalReasonDto = {
405
+ tagKey: string;
406
+ positionCode: string;
407
+ tacticalReasoning: string;
408
+ };
409
+ export type BiomechanicalAlignmentDto = {
410
+ /**
411
+ * Scenario key: match | wildcard | partial_match
412
+ */
413
+ scenario?: string | null;
414
+ tone?: string | null;
415
+ /**
416
+ * Display label, e.g. "Unorthodox Matchup"
417
+ */
418
+ statusLabel?: string | null;
419
+ declaredPrimary?: DeclaredPositionDto | null;
420
+ declaredSecondary?: Array<DeclaredPositionDto>;
421
+ /**
422
+ * Tag keys that fired for this player
423
+ */
424
+ triggeredTagKeys?: Array<string>;
425
+ /**
426
+ * Positions that match the declared primary position
427
+ */
428
+ matchedPositions?: Array<BiomechanicalPositionDto>;
429
+ /**
430
+ * Alternative positions when declared position has no match
431
+ */
432
+ alternativePositions?: Array<BiomechanicalPositionDto>;
433
+ /**
434
+ * Full ranked list of recommended positions
435
+ */
436
+ recommendedPositions?: Array<BiomechanicalPositionDto>;
437
+ tacticalReasons?: Array<TacticalReasonDto>;
438
+ };
391
439
  export type MeasurementTagEvaluationDto = {
392
440
  key?: string;
393
441
  status?: string;
394
442
  label?: string;
395
443
  };
444
+ export type QualitySummaryDto = {
445
+ /**
446
+ * Body quality: usable | limited | unusable
447
+ */
448
+ bodyOverallStatus?: string | null;
449
+ missingMetrics?: Array<string>;
450
+ /**
451
+ * CMJ quality tier: good | acceptable | poor
452
+ */
453
+ jumpQualityTier?: string | null;
454
+ };
455
+ export type PlayerDisplayTagDto = {
456
+ /**
457
+ * Unique tag key, e.g. low_center_of_gravity_agile_core
458
+ */
459
+ tagKey: string;
460
+ /**
461
+ * Human-readable label
462
+ */
463
+ label: string;
464
+ /**
465
+ * Full descriptive copy for the trait
466
+ */
467
+ copy: string;
468
+ /**
469
+ * Trait category group
470
+ */
471
+ category?: string | null;
472
+ /**
473
+ * Whether this tag was triggered for the player
474
+ */
475
+ checked: boolean;
476
+ };
477
+ export type PlayerDisplayPositionDto = {
478
+ code: string;
479
+ name: string;
480
+ category?: string | null;
481
+ positionTypeCode?: string | null;
482
+ voteWeight?: number | null;
483
+ triggeredTagKeys?: Array<string>;
484
+ };
485
+ export type PlayerDisplayBiomechanicalAlignmentDto = {
486
+ /**
487
+ * Narrative description paragraph
488
+ */
489
+ body?: string | null;
490
+ tone?: string | null;
491
+ /**
492
+ * Short headline, e.g. "Unique edge for your role"
493
+ */
494
+ headline?: string | null;
495
+ /**
496
+ * Status label, e.g. "Unorthodox Matchup"
497
+ */
498
+ statusLabel?: string | null;
499
+ /**
500
+ * Label for the supporting positions list
501
+ */
502
+ supportingLabel?: string | null;
503
+ primaryPosition?: PlayerDisplayPositionDto | null;
504
+ supportingPositions?: Array<PlayerDisplayPositionDto>;
505
+ };
506
+ export type PlayerDisplayDto = {
507
+ tags?: Array<PlayerDisplayTagDto>;
508
+ biomechanicalAlignment?: PlayerDisplayBiomechanicalAlignmentDto | null;
509
+ };
396
510
  export type MeasurementSessionDto = {
397
511
  id: string;
398
512
  bodyMeasurementId: string;
@@ -405,18 +519,12 @@ export type MeasurementSessionDto = {
405
519
  declaredPositions?: {
406
520
  [key: string]: unknown;
407
521
  };
408
- biomechanicalAlignment?: {
409
- [key: string]: unknown;
410
- };
522
+ biomechanicalAlignment?: BiomechanicalAlignmentDto | null;
411
523
  biomechanicalAlignmentCopyKeys?: Array<string>;
412
524
  checkedTagKeys?: Array<string>;
413
525
  tagEvaluations?: Array<MeasurementTagEvaluationDto>;
414
- qualitySummary?: {
415
- [key: string]: unknown;
416
- };
417
- playerDisplay?: {
418
- [key: string]: unknown;
419
- };
526
+ qualitySummary?: QualitySummaryDto | null;
527
+ playerDisplay?: PlayerDisplayDto | null;
420
528
  scoutDisplay?: {
421
529
  [key: string]: unknown;
422
530
  };
@@ -462,10 +570,48 @@ export type PlayerReportViewDto = {
462
570
  tacticalPillar: string;
463
571
  mentalPillar: string;
464
572
  };
573
+ export type VideoAttributeScoresDto = {
574
+ /**
575
+ * Technical score 0–10
576
+ */
577
+ technical: number;
578
+ /**
579
+ * Tactical score 0–10
580
+ */
581
+ tactical: number;
582
+ /**
583
+ * Physical score 0–10
584
+ */
585
+ physical: number;
586
+ /**
587
+ * Mental score 0–10
588
+ */
589
+ mental: number;
590
+ /**
591
+ * Creative score 0–10
592
+ */
593
+ creative: number;
594
+ };
595
+ export type ImprovementAreaDto = {
596
+ /**
597
+ * Short label for the focus area
598
+ */
599
+ label: string;
600
+ /**
601
+ * Detailed observation and recommendation
602
+ */
603
+ observation: string;
604
+ };
465
605
  export type PlayerReportResponseDto = {
466
606
  reportReferenceId: string;
467
607
  generatedAt?: string | null;
468
608
  scouterView: PlayerReportViewDto;
609
+ attributeScores?: VideoAttributeScoresDto | null;
610
+ /**
611
+ * Overall video score 0–10
612
+ */
613
+ gsiScore?: number | null;
614
+ improvementAreas?: Array<ImprovementAreaDto>;
469
615
  };
470
616
  export type PlayerClubDto = {
471
617
  clubName: string;
package/index.ts CHANGED
@@ -59,6 +59,8 @@ export type {
59
59
  BillingProductDto,
60
60
  BillingProductsResponseDto,
61
61
  BillingProviderProductDto,
62
+ BiomechanicalAlignmentDto,
63
+ BiomechanicalPositionDto,
62
64
  BodyMeasurementProfileDto,
63
65
  BodyMeasurementResponseDto,
64
66
  CancelKycRequestDto,
@@ -89,6 +91,7 @@ export type {
89
91
  DashboardStatsDto,
90
92
  DashboardVideoCardDto,
91
93
  DeactivatePushDeviceDto,
94
+ DeclaredPositionDto,
92
95
  DeleteApiClubsMeByIdData,
93
96
  DeleteApiClubsMeByIdErrors,
94
97
  DeleteApiClubsMeByIdResponse,
@@ -293,6 +296,7 @@ export type {
293
296
  GetApiVideosMeResponses,
294
297
  HeartbeatDto,
295
298
  HeartbeatResponseDto,
299
+ ImprovementAreaDto,
296
300
  IndexItemDto,
297
301
  InvitationResponseDto,
298
302
  KycStatusDto,
@@ -333,6 +337,10 @@ export type {
333
337
  PlayerAchievementDto,
334
338
  PlayerByIdDto,
335
339
  PlayerClubDto,
340
+ PlayerDisplayBiomechanicalAlignmentDto,
341
+ PlayerDisplayDto,
342
+ PlayerDisplayPositionDto,
343
+ PlayerDisplayTagDto,
336
344
  PlayerReportResponseDto,
337
345
  PlayerReportViewDto,
338
346
  PlayerResponseDto,
@@ -471,6 +479,7 @@ export type {
471
479
  PutApiProfileMeErrors,
472
480
  PutApiProfileMeResponse,
473
481
  PutApiProfileMeResponses,
482
+ QualitySummaryDto,
474
483
  RedeemAccessCodeDto,
475
484
  RegisterAgentDto,
476
485
  RegisterAgentResponseDto,
@@ -500,6 +509,7 @@ export type {
500
509
  StartReportGenerationRequestDto,
501
510
  StorePurchaseSyncRequestDto,
502
511
  SubscriptionPlanDto,
512
+ TacticalReasonDto,
503
513
  TrainingAdminContentDto,
504
514
  TrainingAdminContentStatusDto,
505
515
  TrainingAdminCreateContentInputDto,
@@ -517,6 +527,7 @@ export type {
517
527
  UpdateProfileDto,
518
528
  UploadUrlResponseDto,
519
529
  UserAchievementResponseDto,
530
+ VideoAttributeScoresDto,
520
531
  VideoLinkResponseDto,
521
532
  VideoMetricsMeResponseDto,
522
533
  VideoMetricsPhysicalMetricsDto,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@globalscoutme/api-client",
3
- "version": "1.1.12",
3
+ "version": "1.1.17",
4
4
  "description": "GlobalScoutMe API client (generated)",
5
5
  "author": "GlobalScoutMe",
6
6
  "license": "UNLICENSED",
package/types.gen.ts CHANGED
@@ -417,12 +417,135 @@ export type MeasurementSessionMetricsDto = {
417
417
  shoulderToHipRatio?: number | null;
418
418
  };
419
419
 
420
+ export type DeclaredPositionDto = {
421
+ code: string;
422
+ name: string;
423
+ category?: string | null;
424
+ positionTypeCode?: string | null;
425
+ };
426
+
427
+ export type BiomechanicalPositionDto = {
428
+ code: string;
429
+ name: string;
430
+ category?: string | null;
431
+ voteWeight?: number | null;
432
+ triggeredTagKeys?: Array<string>;
433
+ };
434
+
435
+ export type TacticalReasonDto = {
436
+ tagKey: string;
437
+ positionCode: string;
438
+ tacticalReasoning: string;
439
+ };
440
+
441
+ export type BiomechanicalAlignmentDto = {
442
+ /**
443
+ * Scenario key: match | wildcard | partial_match
444
+ */
445
+ scenario?: string | null;
446
+ tone?: string | null;
447
+ /**
448
+ * Display label, e.g. "Unorthodox Matchup"
449
+ */
450
+ statusLabel?: string | null;
451
+ declaredPrimary?: DeclaredPositionDto | null;
452
+ declaredSecondary?: Array<DeclaredPositionDto>;
453
+ /**
454
+ * Tag keys that fired for this player
455
+ */
456
+ triggeredTagKeys?: Array<string>;
457
+ /**
458
+ * Positions that match the declared primary position
459
+ */
460
+ matchedPositions?: Array<BiomechanicalPositionDto>;
461
+ /**
462
+ * Alternative positions when declared position has no match
463
+ */
464
+ alternativePositions?: Array<BiomechanicalPositionDto>;
465
+ /**
466
+ * Full ranked list of recommended positions
467
+ */
468
+ recommendedPositions?: Array<BiomechanicalPositionDto>;
469
+ tacticalReasons?: Array<TacticalReasonDto>;
470
+ };
471
+
420
472
  export type MeasurementTagEvaluationDto = {
421
473
  key?: string;
422
474
  status?: string;
423
475
  label?: string;
424
476
  };
425
477
 
478
+ export type QualitySummaryDto = {
479
+ /**
480
+ * Body quality: usable | limited | unusable
481
+ */
482
+ bodyOverallStatus?: string | null;
483
+ missingMetrics?: Array<string>;
484
+ /**
485
+ * CMJ quality tier: good | acceptable | poor
486
+ */
487
+ jumpQualityTier?: string | null;
488
+ };
489
+
490
+ export type PlayerDisplayTagDto = {
491
+ /**
492
+ * Unique tag key, e.g. low_center_of_gravity_agile_core
493
+ */
494
+ tagKey: string;
495
+ /**
496
+ * Human-readable label
497
+ */
498
+ label: string;
499
+ /**
500
+ * Full descriptive copy for the trait
501
+ */
502
+ copy: string;
503
+ /**
504
+ * Trait category group
505
+ */
506
+ category?: string | null;
507
+ /**
508
+ * Whether this tag was triggered for the player
509
+ */
510
+ checked: boolean;
511
+ };
512
+
513
+ export type PlayerDisplayPositionDto = {
514
+ code: string;
515
+ name: string;
516
+ category?: string | null;
517
+ positionTypeCode?: string | null;
518
+ voteWeight?: number | null;
519
+ triggeredTagKeys?: Array<string>;
520
+ };
521
+
522
+ export type PlayerDisplayBiomechanicalAlignmentDto = {
523
+ /**
524
+ * Narrative description paragraph
525
+ */
526
+ body?: string | null;
527
+ tone?: string | null;
528
+ /**
529
+ * Short headline, e.g. "Unique edge for your role"
530
+ */
531
+ headline?: string | null;
532
+ /**
533
+ * Status label, e.g. "Unorthodox Matchup"
534
+ */
535
+ statusLabel?: string | null;
536
+ /**
537
+ * Label for the supporting positions list
538
+ */
539
+ supportingLabel?: string | null;
540
+ primaryPosition?: PlayerDisplayPositionDto | null;
541
+ supportingPositions?: Array<PlayerDisplayPositionDto>;
542
+ };
543
+
544
+ export type PlayerDisplayDto = {
545
+ tags?: Array<PlayerDisplayTagDto>;
546
+ biomechanicalAlignment?: PlayerDisplayBiomechanicalAlignmentDto | null;
547
+ };
548
+
426
549
  export type MeasurementSessionDto = {
427
550
  id: string;
428
551
  bodyMeasurementId: string;
@@ -435,18 +558,12 @@ export type MeasurementSessionDto = {
435
558
  declaredPositions?: {
436
559
  [key: string]: unknown;
437
560
  };
438
- biomechanicalAlignment?: {
439
- [key: string]: unknown;
440
- };
561
+ biomechanicalAlignment?: BiomechanicalAlignmentDto | null;
441
562
  biomechanicalAlignmentCopyKeys?: Array<string>;
442
563
  checkedTagKeys?: Array<string>;
443
564
  tagEvaluations?: Array<MeasurementTagEvaluationDto>;
444
- qualitySummary?: {
445
- [key: string]: unknown;
446
- };
447
- playerDisplay?: {
448
- [key: string]: unknown;
449
- };
565
+ qualitySummary?: QualitySummaryDto | null;
566
+ playerDisplay?: PlayerDisplayDto | null;
450
567
  scoutDisplay?: {
451
568
  [key: string]: unknown;
452
569
  };
@@ -497,10 +614,50 @@ export type PlayerReportViewDto = {
497
614
  mentalPillar: string;
498
615
  };
499
616
 
617
+ export type VideoAttributeScoresDto = {
618
+ /**
619
+ * Technical score 0–10
620
+ */
621
+ technical: number;
622
+ /**
623
+ * Tactical score 0–10
624
+ */
625
+ tactical: number;
626
+ /**
627
+ * Physical score 0–10
628
+ */
629
+ physical: number;
630
+ /**
631
+ * Mental score 0–10
632
+ */
633
+ mental: number;
634
+ /**
635
+ * Creative score 0–10
636
+ */
637
+ creative: number;
638
+ };
639
+
640
+ export type ImprovementAreaDto = {
641
+ /**
642
+ * Short label for the focus area
643
+ */
644
+ label: string;
645
+ /**
646
+ * Detailed observation and recommendation
647
+ */
648
+ observation: string;
649
+ };
650
+
500
651
  export type PlayerReportResponseDto = {
501
652
  reportReferenceId: string;
502
653
  generatedAt?: string | null;
503
654
  scouterView: PlayerReportViewDto;
655
+ attributeScores?: VideoAttributeScoresDto | null;
656
+ /**
657
+ * Overall video score 0–10
658
+ */
659
+ gsiScore?: number | null;
660
+ improvementAreas?: Array<ImprovementAreaDto>;
504
661
  };
505
662
 
506
663
  export type PlayerClubDto = {