@groovenet/contracts 0.1.0 → 1.1.0

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.
@@ -0,0 +1,476 @@
1
+ import { z } from "zod";
2
+ /** A taxonomy genre as linked to a track, with its parent for display (#371). */
3
+ export declare const trackGenreSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ name: z.ZodString;
6
+ slug: z.ZodString;
7
+ parent_id: z.ZodNullable<z.ZodString>;
8
+ parent_name: z.ZodNullable<z.ZodString>;
9
+ }, z.core.$strip>;
10
+ /** A genre a widened search filter added (#485): the removable "+ Chicha, Porro" chip. */
11
+ export declare const genreFilterRefSchema: z.ZodObject<{
12
+ id: z.ZodString;
13
+ name: z.ZodString;
14
+ slug: z.ZodString;
15
+ }, z.core.$strip>;
16
+ export declare const trackSearchModeSchema: z.ZodEnum<{
17
+ hybrid: "hybrid";
18
+ lexical: "lexical";
19
+ semantic: "semantic";
20
+ }>;
21
+ /**
22
+ * The full track entity. Only the identifying fields are required on the wire;
23
+ * the database may return more columns, so unknown keys pass through.
24
+ */
25
+ declare const trackShape: z.ZodObject<{
26
+ id: z.ZodOptional<z.ZodNumber>;
27
+ track_id: z.ZodString;
28
+ friend_id: z.ZodNumber;
29
+ isrc: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ title: z.ZodString;
31
+ artist: z.ZodString;
32
+ album: z.ZodString;
33
+ year: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
34
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
35
+ genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
+ album_genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
37
+ album_styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
38
+ duration: z.ZodOptional<z.ZodString>;
39
+ duration_seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
40
+ position: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
41
+ discogs_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
42
+ apple_music_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ youtube_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
44
+ spotify_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
45
+ soundcloud_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
46
+ album_thumbnail: z.ZodOptional<z.ZodNullable<z.ZodString>>;
47
+ local_tags: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ track_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
49
+ id: z.ZodString;
50
+ name: z.ZodString;
51
+ slug: z.ZodString;
52
+ parent_id: z.ZodNullable<z.ZodString>;
53
+ parent_name: z.ZodNullable<z.ZodString>;
54
+ }, z.core.$strip>>>;
55
+ descriptors: z.ZodOptional<z.ZodArray<z.ZodString>>;
56
+ composer: z.ZodOptional<z.ZodNullable<z.ZodString>>;
57
+ bpm: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
58
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
59
+ key_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
60
+ bpm_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
61
+ danceability: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
62
+ mood_happy: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
63
+ mood_sad: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
64
+ mood_relaxed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
65
+ mood_aggressive: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
66
+ notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
67
+ local_audio_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
68
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
69
+ star_rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
70
+ username: z.ZodOptional<z.ZodString>;
71
+ release_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
72
+ library_identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
73
+ hasVectors: z.ZodOptional<z.ZodBoolean>;
74
+ deleted_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
75
+ }, z.core.$strip>;
76
+ export declare const trackSchema: z.ZodObject<{
77
+ id: z.ZodOptional<z.ZodNumber>;
78
+ track_id: z.ZodString;
79
+ friend_id: z.ZodNumber;
80
+ isrc: z.ZodOptional<z.ZodNullable<z.ZodString>>;
81
+ title: z.ZodString;
82
+ artist: z.ZodString;
83
+ album: z.ZodString;
84
+ year: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
85
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
86
+ genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
87
+ album_genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
+ album_styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ duration: z.ZodOptional<z.ZodString>;
90
+ duration_seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
91
+ position: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
92
+ discogs_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
93
+ apple_music_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
94
+ youtube_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
95
+ spotify_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
96
+ soundcloud_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
97
+ album_thumbnail: z.ZodOptional<z.ZodNullable<z.ZodString>>;
98
+ local_tags: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
+ track_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
100
+ id: z.ZodString;
101
+ name: z.ZodString;
102
+ slug: z.ZodString;
103
+ parent_id: z.ZodNullable<z.ZodString>;
104
+ parent_name: z.ZodNullable<z.ZodString>;
105
+ }, z.core.$strip>>>;
106
+ descriptors: z.ZodOptional<z.ZodArray<z.ZodString>>;
107
+ composer: z.ZodOptional<z.ZodNullable<z.ZodString>>;
108
+ bpm: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
109
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
110
+ key_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
111
+ bpm_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
112
+ danceability: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
113
+ mood_happy: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
114
+ mood_sad: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
115
+ mood_relaxed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
116
+ mood_aggressive: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
117
+ notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
118
+ local_audio_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
119
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
120
+ star_rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
121
+ username: z.ZodOptional<z.ZodString>;
122
+ release_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
123
+ library_identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
124
+ hasVectors: z.ZodOptional<z.ZodBoolean>;
125
+ deleted_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
126
+ }, z.core.$loose>;
127
+ /** Wire shape of `GET /api/tracks/search` query params once coerced from strings. */
128
+ export declare const trackSearchQuerySchema: z.ZodObject<{
129
+ q: z.ZodOptional<z.ZodString>;
130
+ limit: z.ZodOptional<z.ZodNumber>;
131
+ offset: z.ZodOptional<z.ZodNumber>;
132
+ friend_id: z.ZodOptional<z.ZodNumber>;
133
+ filter: z.ZodOptional<z.ZodString>;
134
+ mode: z.ZodOptional<z.ZodEnum<{
135
+ hybrid: "hybrid";
136
+ lexical: "lexical";
137
+ semantic: "semantic";
138
+ }>>;
139
+ bpm_min: z.ZodOptional<z.ZodNumber>;
140
+ bpm_max: z.ZodOptional<z.ZodNumber>;
141
+ key: z.ZodOptional<z.ZodString>;
142
+ star_rating: z.ZodOptional<z.ZodNumber>;
143
+ genre: z.ZodOptional<z.ZodArray<z.ZodString>>;
144
+ include_similar: z.ZodOptional<z.ZodBoolean>;
145
+ similar_limit: z.ZodOptional<z.ZodNumber>;
146
+ similar_exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
147
+ }, z.core.$strip>;
148
+ export declare const trackSearchResponseSchema: z.ZodObject<{
149
+ estimatedTotalHits: z.ZodNumber;
150
+ offset: z.ZodNumber;
151
+ limit: z.ZodNumber;
152
+ processingTimeMs: z.ZodNumber;
153
+ hits: z.ZodArray<z.ZodObject<{
154
+ id: z.ZodOptional<z.ZodNumber>;
155
+ track_id: z.ZodString;
156
+ friend_id: z.ZodNumber;
157
+ isrc: z.ZodOptional<z.ZodNullable<z.ZodString>>;
158
+ title: z.ZodString;
159
+ artist: z.ZodString;
160
+ album: z.ZodString;
161
+ year: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
162
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
163
+ genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
164
+ album_genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
165
+ album_styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
166
+ duration: z.ZodOptional<z.ZodString>;
167
+ duration_seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
168
+ position: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
169
+ discogs_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
170
+ apple_music_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
+ youtube_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
172
+ spotify_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
173
+ soundcloud_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
174
+ album_thumbnail: z.ZodOptional<z.ZodNullable<z.ZodString>>;
175
+ local_tags: z.ZodOptional<z.ZodNullable<z.ZodString>>;
176
+ track_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
177
+ id: z.ZodString;
178
+ name: z.ZodString;
179
+ slug: z.ZodString;
180
+ parent_id: z.ZodNullable<z.ZodString>;
181
+ parent_name: z.ZodNullable<z.ZodString>;
182
+ }, z.core.$strip>>>;
183
+ descriptors: z.ZodOptional<z.ZodArray<z.ZodString>>;
184
+ composer: z.ZodOptional<z.ZodNullable<z.ZodString>>;
185
+ bpm: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
186
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
187
+ key_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
188
+ bpm_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
189
+ danceability: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
190
+ mood_happy: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
191
+ mood_sad: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
192
+ mood_relaxed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
193
+ mood_aggressive: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
194
+ notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
195
+ local_audio_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
196
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
197
+ star_rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
198
+ username: z.ZodOptional<z.ZodString>;
199
+ release_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
200
+ library_identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
201
+ hasVectors: z.ZodOptional<z.ZodBoolean>;
202
+ deleted_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
203
+ }, z.core.$loose>>;
204
+ added_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
205
+ id: z.ZodString;
206
+ name: z.ZodString;
207
+ slug: z.ZodString;
208
+ }, z.core.$strip>>>;
209
+ mode: z.ZodOptional<z.ZodEnum<{
210
+ hybrid: "hybrid";
211
+ lexical: "lexical";
212
+ semantic: "semantic";
213
+ }>>;
214
+ degraded: z.ZodOptional<z.ZodBoolean>;
215
+ }, z.core.$strip>;
216
+ export declare const trackPlaylistCountRefSchema: z.ZodObject<{
217
+ track_id: z.ZodString;
218
+ friend_id: z.ZodNumber;
219
+ }, z.core.$strip>;
220
+ export declare const trackPlaylistCountsRequestSchema: z.ZodObject<{
221
+ track_refs: z.ZodArray<z.ZodObject<{
222
+ track_id: z.ZodString;
223
+ friend_id: z.ZodNumber;
224
+ }, z.core.$strip>>;
225
+ }, z.core.$strip>;
226
+ export declare const trackPlaylistCountsResponseSchema: z.ZodRecord<z.ZodString, z.ZodNumber>;
227
+ export declare const trackPlaylistMembershipSchema: z.ZodObject<{
228
+ id: z.ZodNumber;
229
+ name: z.ZodString;
230
+ position: z.ZodNumber;
231
+ }, z.core.$strip>;
232
+ export declare const trackPlaylistsResponseSchema: z.ZodObject<{
233
+ playlists: z.ZodOptional<z.ZodArray<z.ZodObject<{
234
+ id: z.ZodNumber;
235
+ name: z.ZodString;
236
+ position: z.ZodNumber;
237
+ }, z.core.$strip>>>;
238
+ }, z.core.$strip>;
239
+ export declare const trackAudioMetadataEmbeddedCoverSchema: z.ZodObject<{
240
+ index: z.ZodNumber;
241
+ codec_name: z.ZodOptional<z.ZodString>;
242
+ width: z.ZodOptional<z.ZodNumber>;
243
+ height: z.ZodOptional<z.ZodNumber>;
244
+ pix_fmt: z.ZodOptional<z.ZodString>;
245
+ }, z.core.$loose>;
246
+ export declare const trackAudioMetadataSchema: z.ZodObject<{
247
+ track_id: z.ZodString;
248
+ friend_id: z.ZodNumber;
249
+ local_audio_url: z.ZodString;
250
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
251
+ has_embedded_cover: z.ZodBoolean;
252
+ embedded_cover: z.ZodOptional<z.ZodNullable<z.ZodObject<{
253
+ index: z.ZodNumber;
254
+ codec_name: z.ZodOptional<z.ZodString>;
255
+ width: z.ZodOptional<z.ZodNumber>;
256
+ height: z.ZodOptional<z.ZodNumber>;
257
+ pix_fmt: z.ZodOptional<z.ZodString>;
258
+ }, z.core.$loose>>>;
259
+ probe: z.ZodUnknown;
260
+ }, z.core.$strip>;
261
+ export declare const trackExtractEmbeddedCoverResponseSchema: z.ZodObject<{
262
+ success: z.ZodBoolean;
263
+ audio_file_album_art_url: z.ZodString;
264
+ message: z.ZodString;
265
+ }, z.core.$loose>;
266
+ export declare const trackEssentiaSchema: z.ZodObject<{
267
+ track_id: z.ZodString;
268
+ friend_id: z.ZodNumber;
269
+ file_path: z.ZodString;
270
+ data: z.ZodUnknown;
271
+ }, z.core.$strip>;
272
+ export declare const trackDeleteResponseSchema: z.ZodObject<{
273
+ success: z.ZodBoolean;
274
+ track_id: z.ZodString;
275
+ friend_id: z.ZodNumber;
276
+ }, z.core.$strip>;
277
+ export type TrackGenre = z.infer<typeof trackGenreSchema>;
278
+ export type GenreFilterRef = z.infer<typeof genreFilterRefSchema>;
279
+ export type TrackSearchMode = z.infer<typeof trackSearchModeSchema>;
280
+ /** Declared fields only; the schema itself passes unknown columns through. */
281
+ export type TrackEntity = z.infer<typeof trackShape>;
282
+ export type TrackSearchQuery = z.infer<typeof trackSearchQuerySchema>;
283
+ export type TrackSearchResponse = z.infer<typeof trackSearchResponseSchema>;
284
+ export type TrackPlaylistCountsRequest = z.infer<typeof trackPlaylistCountsRequestSchema>;
285
+ export type TrackPlaylistCountsResponse = z.infer<typeof trackPlaylistCountsResponseSchema>;
286
+ export type TrackPlaylistMembership = z.infer<typeof trackPlaylistMembershipSchema>;
287
+ export type TrackPlaylistsResponse = z.infer<typeof trackPlaylistsResponseSchema>;
288
+ export type TrackAudioMetadata = z.infer<typeof trackAudioMetadataSchema>;
289
+ export type TrackExtractEmbeddedCoverResponse = z.infer<typeof trackExtractEmbeddedCoverResponseSchema>;
290
+ export type TrackEssentia = z.infer<typeof trackEssentiaSchema>;
291
+ export type TrackDeleteResponse = z.infer<typeof trackDeleteResponseSchema>;
292
+ export declare const trackJsonSchemas: {
293
+ TrackGenre: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
294
+ id: z.ZodString;
295
+ name: z.ZodString;
296
+ slug: z.ZodString;
297
+ parent_id: z.ZodNullable<z.ZodString>;
298
+ parent_name: z.ZodNullable<z.ZodString>;
299
+ }, z.core.$strip>>;
300
+ GenreFilterRef: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
301
+ id: z.ZodString;
302
+ name: z.ZodString;
303
+ slug: z.ZodString;
304
+ }, z.core.$strip>>;
305
+ TrackSearchMode: z.core.ZodStandardJSONSchemaPayload<z.ZodEnum<{
306
+ hybrid: "hybrid";
307
+ lexical: "lexical";
308
+ semantic: "semantic";
309
+ }>>;
310
+ Track: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
311
+ id: z.ZodOptional<z.ZodNumber>;
312
+ track_id: z.ZodString;
313
+ friend_id: z.ZodNumber;
314
+ isrc: z.ZodOptional<z.ZodNullable<z.ZodString>>;
315
+ title: z.ZodString;
316
+ artist: z.ZodString;
317
+ album: z.ZodString;
318
+ year: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
319
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
320
+ genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
321
+ album_genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
322
+ album_styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
323
+ duration: z.ZodOptional<z.ZodString>;
324
+ duration_seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
325
+ position: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
326
+ discogs_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
327
+ apple_music_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
328
+ youtube_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
329
+ spotify_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
330
+ soundcloud_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
331
+ album_thumbnail: z.ZodOptional<z.ZodNullable<z.ZodString>>;
332
+ local_tags: z.ZodOptional<z.ZodNullable<z.ZodString>>;
333
+ track_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
334
+ id: z.ZodString;
335
+ name: z.ZodString;
336
+ slug: z.ZodString;
337
+ parent_id: z.ZodNullable<z.ZodString>;
338
+ parent_name: z.ZodNullable<z.ZodString>;
339
+ }, z.core.$strip>>>;
340
+ descriptors: z.ZodOptional<z.ZodArray<z.ZodString>>;
341
+ composer: z.ZodOptional<z.ZodNullable<z.ZodString>>;
342
+ bpm: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
343
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
344
+ key_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
345
+ bpm_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
346
+ danceability: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
347
+ mood_happy: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
348
+ mood_sad: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
349
+ mood_relaxed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
350
+ mood_aggressive: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
351
+ notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
352
+ local_audio_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
353
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
354
+ star_rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
355
+ username: z.ZodOptional<z.ZodString>;
356
+ release_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
357
+ library_identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
358
+ hasVectors: z.ZodOptional<z.ZodBoolean>;
359
+ deleted_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
360
+ }, z.core.$loose>>;
361
+ TrackSearchResponse: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
362
+ estimatedTotalHits: z.ZodNumber;
363
+ offset: z.ZodNumber;
364
+ limit: z.ZodNumber;
365
+ processingTimeMs: z.ZodNumber;
366
+ hits: z.ZodArray<z.ZodObject<{
367
+ id: z.ZodOptional<z.ZodNumber>;
368
+ track_id: z.ZodString;
369
+ friend_id: z.ZodNumber;
370
+ isrc: z.ZodOptional<z.ZodNullable<z.ZodString>>;
371
+ title: z.ZodString;
372
+ artist: z.ZodString;
373
+ album: z.ZodString;
374
+ year: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
375
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
376
+ genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
377
+ album_genres: z.ZodOptional<z.ZodArray<z.ZodString>>;
378
+ album_styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
379
+ duration: z.ZodOptional<z.ZodString>;
380
+ duration_seconds: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
381
+ position: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
382
+ discogs_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
383
+ apple_music_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
384
+ youtube_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
385
+ spotify_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
386
+ soundcloud_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
387
+ album_thumbnail: z.ZodOptional<z.ZodNullable<z.ZodString>>;
388
+ local_tags: z.ZodOptional<z.ZodNullable<z.ZodString>>;
389
+ track_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
390
+ id: z.ZodString;
391
+ name: z.ZodString;
392
+ slug: z.ZodString;
393
+ parent_id: z.ZodNullable<z.ZodString>;
394
+ parent_name: z.ZodNullable<z.ZodString>;
395
+ }, z.core.$strip>>>;
396
+ descriptors: z.ZodOptional<z.ZodArray<z.ZodString>>;
397
+ composer: z.ZodOptional<z.ZodNullable<z.ZodString>>;
398
+ bpm: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
399
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
400
+ key_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
401
+ bpm_confidence: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
402
+ danceability: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
403
+ mood_happy: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
404
+ mood_sad: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
405
+ mood_relaxed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
406
+ mood_aggressive: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
407
+ notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
408
+ local_audio_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
409
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
410
+ star_rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
411
+ username: z.ZodOptional<z.ZodString>;
412
+ release_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
413
+ library_identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
414
+ hasVectors: z.ZodOptional<z.ZodBoolean>;
415
+ deleted_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
416
+ }, z.core.$loose>>;
417
+ added_genres: z.ZodOptional<z.ZodArray<z.ZodObject<{
418
+ id: z.ZodString;
419
+ name: z.ZodString;
420
+ slug: z.ZodString;
421
+ }, z.core.$strip>>>;
422
+ mode: z.ZodOptional<z.ZodEnum<{
423
+ hybrid: "hybrid";
424
+ lexical: "lexical";
425
+ semantic: "semantic";
426
+ }>>;
427
+ degraded: z.ZodOptional<z.ZodBoolean>;
428
+ }, z.core.$strip>>;
429
+ TrackPlaylistCountsRequest: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
430
+ track_refs: z.ZodArray<z.ZodObject<{
431
+ track_id: z.ZodString;
432
+ friend_id: z.ZodNumber;
433
+ }, z.core.$strip>>;
434
+ }, z.core.$strip>>;
435
+ TrackPlaylistCountsResponse: z.core.ZodStandardJSONSchemaPayload<z.ZodRecord<z.ZodString, z.ZodNumber>>;
436
+ TrackPlaylistsResponse: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
437
+ playlists: z.ZodOptional<z.ZodArray<z.ZodObject<{
438
+ id: z.ZodNumber;
439
+ name: z.ZodString;
440
+ position: z.ZodNumber;
441
+ }, z.core.$strip>>>;
442
+ }, z.core.$strip>>;
443
+ TrackAudioMetadata: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
444
+ track_id: z.ZodString;
445
+ friend_id: z.ZodNumber;
446
+ local_audio_url: z.ZodString;
447
+ audio_file_album_art_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
448
+ has_embedded_cover: z.ZodBoolean;
449
+ embedded_cover: z.ZodOptional<z.ZodNullable<z.ZodObject<{
450
+ index: z.ZodNumber;
451
+ codec_name: z.ZodOptional<z.ZodString>;
452
+ width: z.ZodOptional<z.ZodNumber>;
453
+ height: z.ZodOptional<z.ZodNumber>;
454
+ pix_fmt: z.ZodOptional<z.ZodString>;
455
+ }, z.core.$loose>>>;
456
+ probe: z.ZodUnknown;
457
+ }, z.core.$strip>>;
458
+ TrackExtractEmbeddedCoverResponse: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
459
+ success: z.ZodBoolean;
460
+ audio_file_album_art_url: z.ZodString;
461
+ message: z.ZodString;
462
+ }, z.core.$loose>>;
463
+ TrackEssentia: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
464
+ track_id: z.ZodString;
465
+ friend_id: z.ZodNumber;
466
+ file_path: z.ZodString;
467
+ data: z.ZodUnknown;
468
+ }, z.core.$strip>>;
469
+ TrackDeleteResponse: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
470
+ success: z.ZodBoolean;
471
+ track_id: z.ZodString;
472
+ friend_id: z.ZodNumber;
473
+ }, z.core.$strip>>;
474
+ };
475
+ export {};
476
+ //# sourceMappingURL=tracks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracks.d.ts","sourceRoot":"","sources":["../src/tracks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { z } from "zod";
2
+ /** A taxonomy genre as linked to a track, with its parent for display (#371). */
3
+ export const trackGenreSchema = z.object({
4
+ id: z.string().uuid(),
5
+ name: z.string(),
6
+ slug: z.string(),
7
+ parent_id: z.string().uuid().nullable(),
8
+ parent_name: z.string().nullable(),
9
+ });
10
+ /** A genre a widened search filter added (#485): the removable "+ Chicha, Porro" chip. */
11
+ export const genreFilterRefSchema = z.object({
12
+ id: z.string().uuid(),
13
+ name: z.string(),
14
+ slug: z.string(),
15
+ });
16
+ export const trackSearchModeSchema = z.enum(["lexical", "semantic", "hybrid"]);
17
+ /**
18
+ * The full track entity. Only the identifying fields are required on the wire;
19
+ * the database may return more columns, so unknown keys pass through.
20
+ */
21
+ const trackShape = z.object({
22
+ id: z.number().int().optional(),
23
+ track_id: z.string(),
24
+ friend_id: z.number().int(),
25
+ isrc: z.string().nullable().optional(),
26
+ title: z.string(),
27
+ artist: z.string(),
28
+ album: z.string(),
29
+ year: z.union([z.string(), z.number()]).nullable().optional(),
30
+ styles: z.array(z.string()).optional(),
31
+ genres: z.array(z.string()).optional(),
32
+ album_genres: z.array(z.string()).optional(),
33
+ album_styles: z.array(z.string()).optional(),
34
+ duration: z.string().optional(),
35
+ duration_seconds: z.number().nullable().optional(),
36
+ position: z.union([z.string(), z.number()]).optional(),
37
+ discogs_url: z.string().nullable().optional(),
38
+ apple_music_url: z.string().nullable().optional(),
39
+ youtube_url: z.string().nullable().optional(),
40
+ spotify_url: z.string().nullable().optional(),
41
+ soundcloud_url: z.string().nullable().optional(),
42
+ album_thumbnail: z.string().nullable().optional(),
43
+ /** Raw free-text genres; superseded by track_genres once reconciled (#371). */
44
+ local_tags: z.string().nullable().optional(),
45
+ /** Track-level DJ genres: links to the canonical taxonomy (#371). */
46
+ track_genres: z.array(trackGenreSchema).optional(),
47
+ /** Normalised mood and description words, kept out of genres (#371). */
48
+ descriptors: z.array(z.string()).optional(),
49
+ composer: z.string().nullable().optional(),
50
+ bpm: z.union([z.string(), z.number()]).nullable().optional(),
51
+ key: z.string().nullable().optional(),
52
+ /** Confidence (0-1) of the EDMA key estimate stored in `key` (#524). */
53
+ key_confidence: z.number().nullable().optional(),
54
+ /** Margin (0-1) between the first and second beat-histogram peaks behind `bpm` (#531). */
55
+ bpm_confidence: z.number().nullable().optional(),
56
+ danceability: z.union([z.number(), z.string()]).nullable().optional(),
57
+ mood_happy: z.number().nullable().optional(),
58
+ mood_sad: z.number().nullable().optional(),
59
+ mood_relaxed: z.number().nullable().optional(),
60
+ mood_aggressive: z.number().nullable().optional(),
61
+ notes: z.string().nullable().optional(),
62
+ local_audio_url: z.string().nullable().optional(),
63
+ audio_file_album_art_url: z.string().nullable().optional(),
64
+ star_rating: z.number().nullable().optional(),
65
+ username: z.string().optional(),
66
+ release_id: z.string().nullable().optional(),
67
+ library_identifier: z.string().nullable().optional(),
68
+ hasVectors: z.boolean().optional(),
69
+ deleted_at: z.string().nullable().optional(),
70
+ });
71
+ export const trackSchema = trackShape.passthrough();
72
+ const searchMetaShape = {
73
+ estimatedTotalHits: z.number().int(),
74
+ offset: z.number().int(),
75
+ limit: z.number().int(),
76
+ processingTimeMs: z.number().int(),
77
+ };
78
+ /** Wire shape of `GET /api/tracks/search` query params once coerced from strings. */
79
+ export const trackSearchQuerySchema = z.object({
80
+ q: z.string().optional(),
81
+ limit: z.number().int().min(0).optional(),
82
+ offset: z.number().int().min(0).optional(),
83
+ friend_id: z.number().int().optional(),
84
+ filter: z.string().optional(),
85
+ mode: trackSearchModeSchema.optional(),
86
+ bpm_min: z.number().optional(),
87
+ bpm_max: z.number().optional(),
88
+ key: z.string().optional(),
89
+ star_rating: z.number().int().min(0).max(5).optional(),
90
+ genre: z.array(z.string()).max(20).optional(),
91
+ include_similar: z.boolean().optional(),
92
+ similar_limit: z.number().int().min(0).optional(),
93
+ similar_exclude: z.array(z.string()).max(20).optional(),
94
+ });
95
+ export const trackSearchResponseSchema = z.object({
96
+ ...searchMetaShape,
97
+ hits: z.array(trackSchema),
98
+ /** Genres `include_similar` added beyond the plain `genre` filter (#485). */
99
+ added_genres: z.array(genreFilterRefSchema).optional(),
100
+ /** The mode that ranked these hits; omitted for a plain lexical request. */
101
+ mode: trackSearchModeSchema.optional(),
102
+ /** Hybrid fell back to lexical alone because the semantic leg failed. */
103
+ degraded: z.boolean().optional(),
104
+ });
105
+ export const trackPlaylistCountRefSchema = z.object({
106
+ track_id: z.string().min(1),
107
+ friend_id: z.number().int(),
108
+ });
109
+ export const trackPlaylistCountsRequestSchema = z.object({
110
+ track_refs: z.array(trackPlaylistCountRefSchema),
111
+ });
112
+ export const trackPlaylistCountsResponseSchema = z.record(z.string(), z.number().int());
113
+ export const trackPlaylistMembershipSchema = z.object({
114
+ id: z.number().int(),
115
+ name: z.string(),
116
+ position: z.number().int(),
117
+ });
118
+ export const trackPlaylistsResponseSchema = z.object({
119
+ playlists: z.array(trackPlaylistMembershipSchema).optional(),
120
+ });
121
+ export const trackAudioMetadataEmbeddedCoverSchema = z
122
+ .object({
123
+ index: z.number().int(),
124
+ codec_name: z.string().optional(),
125
+ width: z.number().int().optional(),
126
+ height: z.number().int().optional(),
127
+ pix_fmt: z.string().optional(),
128
+ })
129
+ .passthrough();
130
+ export const trackAudioMetadataSchema = z.object({
131
+ track_id: z.string(),
132
+ friend_id: z.number().int(),
133
+ local_audio_url: z.string(),
134
+ audio_file_album_art_url: z.string().nullable().optional(),
135
+ has_embedded_cover: z.boolean(),
136
+ embedded_cover: trackAudioMetadataEmbeddedCoverSchema.nullable().optional(),
137
+ probe: z.unknown(),
138
+ });
139
+ export const trackExtractEmbeddedCoverResponseSchema = z
140
+ .object({
141
+ success: z.boolean(),
142
+ audio_file_album_art_url: z.string(),
143
+ message: z.string(),
144
+ })
145
+ .passthrough();
146
+ export const trackEssentiaSchema = z.object({
147
+ track_id: z.string(),
148
+ friend_id: z.number().int(),
149
+ file_path: z.string(),
150
+ data: z.unknown(),
151
+ });
152
+ export const trackDeleteResponseSchema = z.object({
153
+ success: z.boolean(),
154
+ track_id: z.string(),
155
+ friend_id: z.number().int(),
156
+ });
157
+ export const trackJsonSchemas = {
158
+ TrackGenre: z.toJSONSchema(trackGenreSchema),
159
+ GenreFilterRef: z.toJSONSchema(genreFilterRefSchema),
160
+ TrackSearchMode: z.toJSONSchema(trackSearchModeSchema),
161
+ Track: z.toJSONSchema(trackSchema),
162
+ TrackSearchResponse: z.toJSONSchema(trackSearchResponseSchema),
163
+ TrackPlaylistCountsRequest: z.toJSONSchema(trackPlaylistCountsRequestSchema),
164
+ TrackPlaylistCountsResponse: z.toJSONSchema(trackPlaylistCountsResponseSchema),
165
+ TrackPlaylistsResponse: z.toJSONSchema(trackPlaylistsResponseSchema),
166
+ TrackAudioMetadata: z.toJSONSchema(trackAudioMetadataSchema),
167
+ TrackExtractEmbeddedCoverResponse: z.toJSONSchema(trackExtractEmbeddedCoverResponseSchema),
168
+ TrackEssentia: z.toJSONSchema(trackEssentiaSchema),
169
+ TrackDeleteResponse: z.toJSONSchema(trackDeleteResponseSchema),
170
+ };
171
+ //# sourceMappingURL=tracks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracks.js","sourceRoot":"","sources":["../src/tracks.ts"],"names":[],"mappings":"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"}